ciao a tutti, sono nuovo ho una leggera esperienza di arduino, derivante una libreria piena di libri a tema.
sto svolgendo un progetto con arduino, controllo di velocità di un motorino elettrico, ma la difficoltà maggiore è leggere il segnale del mio encoder in quadratura per poter definire la velocità.
Ogni volta che leggo ricevo valori improbabili e penso che sia un errore di campionamento.
*encoder a quadratura un gradino ogni rivoluzione
*un motorino elettrico 6900rpm
quindi a ogni giro dobrei avere un qualcosa che mi sembri una serie di 1 e 0 ripetuti che dovrebbero indicarmi la rotazione ma questo non avviene consigli?
allora analogWrite=0 mi è servito per girare il rotore a mano e verificare cosa stesse ricevendo il pin mentre per verificare se la frequenza è troppo alta cosa dovrei vedere?
dubito fortemente che riuscirai a leggere la sequenza in quadratura con il solo arduino alla max velocità.
la famiglia HEDS5xxx sono encoder con risoluzione molto elevata e in base alla sigla si può arrivare fino a 1024 CPR.
anche gestendo bene i segnali A e B utilizzando gli interrupt potrai stare dietro alla lettura solo se farai andare il motore molto ma molto lentamente.
per migliorare un pò la funzione di intercettazione e conteggio degli impulsi dovresti scrivere la routine in assembly (codice macchina).
@legacy,
concordo, quello sarebbe l'ideale usando il QUE...
oppure aggiungere un chippetto dedicato o una piccola CPLD-ad hoc implementando un QUE e con uscita I2C o SPI in modo da far respirare l'atmega che poverino in queste applicazioni ha bisogno dell' ossigeno.
max00:
e una tesi devo usare arduino ma potrei cambiare il motore... ps nom so come gli dovrei usare gli interrupt
non vorrei scoraggiarti,
scusa ma allora come vorresti leggere un encoder in quadratura? non capisco.
devi prima studiare a cosa servono gli int e la loro gestione .... se nò te la scordi la tesi.
sono inesperto dovrei leggere il segnale dell'encoder ma ho capito che la frequenza dell'onda wuadra e troppo alta quindi o cambio encoder o uso gli interrupt... ora nonho capito come dovrei usare gli interrupt
allora, tutto dipende da come vuoi leggere gli encoder ad 1X, 2X, o 4X(quadratura)
ma se non vuoi complicarti la vita.. e non sei vincolato al tipo di encoder, e devi al più presto consegnale la tesi,
utilizza qualche encoder con minore risoluzione,,,, anche un 25/50 impulsi giro potrebbe andare. (devi ridurre almeno di un fattore 10)
chiarmente se abbassi la risoluzione hai qualche difficoltà in più nel controllare la velocità..
domanda : devi usare PID, PI o solo P? o devi realizzarla in logica fuzzy?
guarda se devi dimostrare solo la funzione dell'ottimo simmetrico di tipo 2 con un polo reale e 2 poli complessi coniugati
ti consiglio di non complicarti la vita con l'hardware. Usa un encoder con più bassa risoluzione, studia come usare gli int, e
di sicuro con la PI e con filtro di smoothing farai un buon lavoro riuscendo nel tuo intento.
mi sono ricordato proprio adesso che con la famiglia AVR XMega (es: ATxmega128a1) avresti potuto farlo poichè possiede una parte hw dedicata chiamata Quadrature Decoder (QDEC)....
Io l'ho provato qualche mese fa e funziona alla grande anche con encoder molto risoluti.