Ciao,
trovo un po' di confusione su questo argomento... Utilizzo un encoder a 360 impulsi/giro, vorrei collegarlo a interrupt per avere sicurezza di non perdere impulsi, ma non trovo programmi di esempio...
L'encoder è montato sul mandrino di un tornio, vorrei sapere in che posizione è, avendo un impulso per grado, quindi deve andare sia avanti che indietro, poi pensavo che forse è meglio mettere anche un sensore di hall sul mandrino, per avere un punto ben specifico, da usare come punto zero? Ma per contare avanti e indietro, l'encoder va utilizzato in quadratura?
Altra domanda, perchè rilevo più impulsi giro su un canale dell'encoder?
Grazie a tutti
Per contare sia avanti che indietro si, lo devi usare in quadratura, e di solito gli encoder incrementali hanno anche una terza uscita che da un solo impulso per giro da usare come "punto zero" ... (ma servirebbe il modello, per controllare)
thedrifter:
...
Altra domanda, perchè rilevo più impulsi giro su un canale dell'encoder?
Grazie a tutti
In che senso ?
Ok, allora vada per la quadratura, dividerò gli impulsi per 4, oppure avrò definizione di 1/4 di grado... Questo non ha la 3° uscita, è questo giocattolo cinese:
http://www.ebay.it/itm/122198521028?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
non so nemmeno quanto durerà... Per il punto zero non ho problemi a creare un'altro punto con sensore di hall.
Rilevo più impulsi per giro, non mi torna quello, oppure c'è qualcosa nel programma di test che sto usando; in teoria quindi con questo encoder in quadratura, dovrei leggere 1440 impulsi per giro?
Qualcuno ha un link con un programmino? Io sto usando quello rel reference...
Trovato questo sketch che funziona bene, ma non usa interrupt, pensate si può convertire su pin di interrupt?
#include <RotaryEncoder.h>
// Setup a RoraryEncoder for pins A2 and A3:
RotaryEncoder encoder(A2, A3);
void setup()
{
Serial.begin(57600);
Serial.println("SimplePollRotator example for the RotaryEncoder library.");
} // setup()
// Read the current position of the encoder and print out when changed.
void loop()
{
static int pos = 0;
encoder.tick();
int newPos = encoder.getPosition();
if (pos != newPos) {
Serial.print(newPos);
Serial.println();
pos = newPos;
} // if
} // loop ()
Basta fare una ricerchina con San Google e .... QUESTA libreria, fatta per la lettura degli encoder in quadratura, usa gli interrupt
Sulla UNO usa i pin 2 e 3.
Guglielmo
Wow, grazie Guglielmo, si vede San Google risponde solo a te, sono 2 giorni che cerco ahahhahahah.
Funziona egregiamente, grazie
thedrifter:
Rilevo più impulsi per giro, ...
Nel senso che rilevi piu di 360 impulsi per ogni giro ? ... parliamo di impulsi come di commutazioni basso/alto OPPURE alto/basso, ovviamente, se leggi entrambe le transizioni di stato ovviamente ne conti 720 per fase (oppure 1440 per entrambe le fasi in quadratura)
Si, puoi usare un sensore di Hall per il punto zero, ma non sono eccezionalmente ripetitivi, se ti serve piu precisione sarebbe meglio una forcellina ottica ... tutto pero' dipende dalla tua meccanica ...
EDIT: idea folle ... hai per caso gia aperto il tuo encoder ? ...
Ciao,
si, rilevavo + di 360 impulsi per giro, ma era con qualche programma, evidentemente contava entrambe le commutazioni... Con l'ultimo programmino segna tutto perfetto, naturalmente in quadratura e quindi 1440 impulsi per giro.
Perchè dici che i sensori di hall non sono ripetitivi? Cosa vuoi dire? Si usano nel controllo di motori per auto, dove indicano in centralina la posizione dell'albero motore, io li trovo molto affidabili... In cosa non ti convincono?
Non ho aperto l'encoder, perchè?
Dipende, dico che non sono molto ripetitivi perche' dipendonoda un campo magnetico, e se qualcosa influenza il campo magnetico possono variare leggermente la loro lettura ... inoltre lo useresti su un tornio, e dato che necessitano di un magnete, o lo metti in una posizione sigillata e non esposta alla polvere metallica causata dalla lavorazione, o con il tempo il magnete cattura la polvere di metallo e si riempie, modificando il proprio campo e creando magari problemi di tipo anche meccanico ...
Inoltre dovendo ruotare in entrambi i sensi, la rilevazione in un senso sarebbe diversa dalla rilevazione nell'altro (e' praticamente impossibile con un sensore Hall fargli leggere un solo grado o meno, anche a causa della sua isteresi, senza costruirgli un circuito magnetico con dei traferri)
Quanto all'encoder, pensavo se c'era abbastanza spazio libero all'interno per aggiungerci il segnale di zero in qualche modo ... una delle mie solite idee folli
Ciao, dissento un po' su quello che dici dei sensori di hall, anche se in teoria è vero, io però parlo di sensori uso automobilistico, quindi incapsulati, non hanno bisogno di magneti, sarà già all'interno, basta un dente metallico, dalle centraline che uso, non noto mai errori, anche nel tempo, e si parla di tanti Km sulle auto...
Diverso il discorso della posizione, ma per il posizionamento, il tornio si può far girare sempre da una sola parte, in quel caso il punto di transizione è sempre lo stesso... che poi non serve un punto assoluto, serve solo come punto di partenza, il resto fa l'encoder per le divisioni etc...
Per l'encoder, posso provare ad aprirlo, ma come faresti per avere un punto? che tipo di sensore useresti?
Grazie per i consigli
thedrifter:
...
Per l'encoder, posso provare ad aprirlo, ma come faresti per avere un punto? che tipo di sensore useresti?
Grazie per i consigli
Dipenderebbe ovviamente dalla meccanica interna ... comunque, buona parte degli encoder rotativi hanno una struttura simile a quella di questa immagine (il disco e' di vetro se ad alta risoluzione, di acciaio a bassa, ma poco cambia)
supponendo che la struttura fosse simile, si potrebbe incollare sull'asse un terminale di componente o filo in acciaio sottile o roba simile, con un po di epoxy, ed incollare sopra al blocco lettore originale (senza danneggiarlo) una forcella ottica, piu o meno come in questo secondo disegno (fatto male, lo so :P)
in modo che il terminale passi in mezzo alla forcella ad ogni giro ... se abbastanza sottile e ben allineato, dovrebbe garantire un'impulso abbastanza stretto ... ma solo come idea di principio, ovviamente sarebbe da testare ...
L'idea è buona, ma non mi piace meccanicamente: equilibratura e forze centrifughe... Comunque ciò lo posso fare lo stesso in modo esterno sull'albero del tornio (lato posteriore naturalmente) dove verrà anche un disco freno per bloccare il mandrino... se il diametro del singolo punto è molto esterno al centro, si aumenta la precisione.....
Si, si puo fare anche esternamente ... l'unico vero vantaggio del farlo all'interno del corpo dell'encoder sarebbe il tenerlo sigillato ed al riparo da polveri ed olio ...
Ciao, comunque per intendersi io dico questo tipo di sensori, per utilizzo automotive, sono isolati, stagni, lavorano in olio e alte temperature, per mia esperienza sono molto precisi...
ci sono in diverse forme, con cavo etc
hai un idea errata su quei sensori e il loro funzionamento >:(
quei sensori lavorano su una "ruota fonica" o una ruota dentata a cui manca un dente,
l unica informazione che ti puo dare e quanti denti (impulsi) sono passati davanti al sensore
nel sensore giri auto la ruota dentata e composta da 60 denti-1,
quindi ci sara una tolleranza di 6 gradi :o
sono stati inventati per misurare la velocità angolare istantanea dell' albero motore
scordati di usare quei sensori per hobby probabilmente funzionano solo se la ruota gira davanti a loro,
l unica e usare encoder con posizione assoluta se vuoi sapere dove "sono"
se no a ogni problema /mancanza alimentazione /perdita passo devi fare il reset
e le cose "serie" costano
Ciao Elrospo,
quello che dici tu si riferisce ai sensori magnetici, usati per misurare i giri come hai detto tu, di ruote foniche classiche da 60-2 denti, (o altri schemi a seconda della marca del motore), quei sensori non sono alimentati. Quelli che dico io sono proprio sensori di hall, sono alimentati a 5V, solitamente si trovano a misurare la posizione degli alberi a camme, per fare iniezione sequenziale del motore, e per gestire la fasatura dei motori che hanno camme variabili, essi leggono se davanti al sensore c'è un metallo, non hanno necessità di velocità per leggere. Io preparo auto da corsa, e utilizzo sensoristica di ogni genere, e dall'elettronica riesco a capire precisione e resistenza di certi sensori...
Per la necessità che ho io, quindi di sapere un punto di partenza, mi vanno più che bene, il resto della precisione lo fa l'encoder... Hai ragione sul fatto che se va via corrente perdo il punto, ma potrei anche mettere una batteria per alimentare arduino in caso di momentanea mancanza di corrente, così la sensoristica rimarrebbe alimentata... Considera anche che il mio tornio è a uso personale e obbistico, non è il mio lavoro principale...
Be', considera anche che un tornio, senza corrente di solito non va ... anche se andasse via mentre stai lavorando, tutto quello che potresti fare e' smettere finche' torna e poi ricominciare da capo ... quindi il perdere la posizione e' l'ultimo dei problemi, in quel caso
In effetti si... L'unico problema è se stai facendo dei fori su una flangia, e si usa come divisore, in quel caso è una rottura, ma si può sempre riazzerare su un foro già fatto....