Encoder, fermare al valore giusto.

Buongiorno a tutti.

Sto cercando disperatamente di tarare un encoder per ogni tot di giri.

Ho trovato diversi esempi sulla rete, ma molti di quelli non mi piacevano o non funzionavano a dovere.
Quindi ho optato per classico HIG LOW.

Faccio in questo modo.

Quando entrambi i sensori sono HIGH, per il mio codice equivale ad un giro completo.
Altrimenti continuare a girare fino a quando non sono tutti e due HIGH.

Il problema è il sugente.
A me serve un determinato valore specifico perché si tratta proprio di stringere un carro a valori precisi.

Ma se mette una condizione del tipo

if(passo == 6530)
{

  //Valore raggiunto
  //Fermo il motore.
  

}

Ma può succede che non vada direttamente sui 6530
in alcuni test si è fermato tipo a 9340.

anche se pochi decimi di spessore non fanno una piega, vorrei capire il perché
non riesco a fermarlo precisamente.

Questo è il mio codice.

Setup

  attachInterrupt(0, updateEncoder, CHANGE);
  attachInterrupt(1, updateEncoder, CHANGE);

Update

if(digitalRead(encoderPin1) == LOW)
 {
  counter--;
 }else
 {
  counter++;
 }

Un'altro problema è che ogni volta, ottengo valori diversi da quelli raccolti in precedenza.
Conoscete un modo per avere un controllo completo sui giri e sul codice?

Il modello dell'encoder è il seguente.
E' un modello professionale ad uso industriale

https://www.distrelec.it/it/trasduttore-di-velocita-angolare-24-vdc-200-omron-industrial-automation-e6b2-cwz6c-200p-2m/p/30069264?channel=b2c&price_gs=249.978&source=googleps&ext_cid=shgooaqitit-na&pup_e=1&pup_cid=35917&pup_id=30069264&gclid=Cj0KCQiAv_HSBRCkARIsAGaSsrAaKDyGC-fGYPpKnJg1FkYkceYRURem_xF7YUXRWgz_VCLA5IrEUXwaAmjKEALw_wcB

non sono un esperto, però trovo strano che per l'interrupt hai usato CHANGE invece di RISING, visto che vuoi rilevare un cambio di stato da low ad high, con change invece ti rileva anche il passaggio da high a low... spero di non aver detto delle boiate pazzesche :o

non si capisce che stai cercando di fare :o carro .... decimi di spessore ,,,,,???

quello e un dispositivo che conta (fa) 200 impulsi a rotazione

di solito si adopera come feedback per vedere se quello che c'è saldamente collegato gira e quanto gira, :confused:

Il CHANGE per la lettura in quadratura va bene ma devi correggere le 2 risposte updateEncoder0 e updateEncoder1 facendo un polling sullo stato di entrambe i canali A e B

Inoltre aggiungo che in meccanica esiste una cosa chiamata "inerzia" ... non e' che se stacchi un motore quando arrivi ad un certo valore, quello si inchioda di colpo sul punto in cui lo stacchi :wink: ...

Per movimentazioni automatiche di una certa portata e che coinvolgono una certa massa, si usano sempre le rampe, sia di accelerazione che di decelerazione ... si conta e quando si arriva "quasi" in posizione, si rallenta con una rampa fino ad un decimo o meno (dipende dalle masse) della velocita', in modo che quando ci si deve fermare, l'inerzia sara' trascurabile a sufficenza da poter usare il motore stesso come freno (cortocircuitandolo attraverso una resistenza di potenza, in genere) senza che si danneggi ... :wink:

A proposito, "carro" inteso come gru o come portapezzo ?

Grazie per l'interessamento cmq e un carro si.
Che stringe le due metà fino ad arrivare ad un certo spessore.

Ovviamente se lo spessore e troppo stretto i carichi si distruggono.

Se troppo largo cadono.