Salve a tutti, ho dei seri problemi a ricavare una misurazione valida con un encoder incrementale a fune della sick ad alta risoluzione 765 impulsi per giro.
Ho uitilizzato delle librerie con esempi, oppure provato a scrivere da me un semplice sketch per incrementare il valore secondo la logica degli encoder incrementali, ma non riesco mai ad avere lo stesso risultato quando riporto la fune a zero. Ho pensato che potesse essere un problema di velocità dati in lettura ma anche alzando il baud rate non ne vengo a capo alle volte tirando addirittura ottengo dei dati contrari al verso. Sicuramente deve essere l'alta risoluzione dell'encoder il problema. Ora mi chiedo, è sufficiente un arduino uno per la lettura di 765 impulsi per giro?
Ho letto in altri post che potrebbe aiutare l'utilizzo di un decoder a quadratura hardware che è presente dentro l'arduino due, cosa ne pensate?
Grazie a tutti allego codice casalingo preso dal web
#define outputA 6
#define outputB 7
#define outputZ 8
int counter = 0;
int aState,bState,zState;
int aLastState;
void setup() {
pinMode (outputA,INPUT);
pinMode (outputB,INPUT);
pinMode (outputZ,INPUT);
Serial.begin (9600);
// Reads the initial state of the outputA
aLastState = digitalRead(outputA);
}
void loop() {
aState = digitalRead(outputA); // Reads the "current" state of the outputA
bState = digitalRead(outputB); // Reads the "current" state of the outputA
zState = digitalRead(outputZ);
// If the previous and the current state of the outputA are different, that means a Pulse has occured
if (aState != aLastState){
// If the outputB state is different to the outputA state, that means the encoder is rotating clockwise
if (digitalRead(outputB) != aState) {
counter++;
} else {
counter --;
}
//if(zState==HIGH)
//counter = 0;
Serial.print("Position: ");
Serial.println(counter);
}
aLastState = aState; // Updates the previous state of the outputA with the current state