Pages: [1]   Go Down
Author Topic: arduino e motori a encoder  (Read 2218 times)
0 Members and 1 Guest are viewing this topic.
torino, italy
Offline Offline
Sr. Member
****
Karma: 0
Posts: 339
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti, sto lavorando a un progetto per il quale mi farebbe comodo usare un paio di motori con riuduzione e encoder al posto degli stepper.
Ho trovato questo prodotto della pololu che potrebbe essere utile:

http://www.pololu.com/catalog/product/1107

E so che c'è una libreria apposita: PololuWheelEncoders.h, che può essere usata con arduino.
Avevo sempre pensato che gli arduino precedenti alla DUE non fossero adatti a lavorare con gli encoder, ma vorrei sapere se qualcuno con più esperienza in merito avesse qualche consiglio da darmi o qualche esperienza da condividere.
Grazie
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti, sto lavorando a un progetto per il quale mi farebbe comodo usare un paio di motori con riuduzione e encoder al posto degli stepper.
Ho trovato questo prodotto della pololu che potrebbe essere utile:

http://www.pololu.com/catalog/product/1107

E so che c'è una libreria apposita: PololuWheelEncoders.h, che può essere usata con arduino.
Avevo sempre pensato che gli arduino precedenti alla DUE non fossero adatti a lavorare con gli encoder, ma vorrei sapere se qualcuno con più esperienza in merito avesse qualche consiglio da darmi o qualche esperienza da condividere.
Grazie

io ho accaccato leonardo a encoder industriali: la limitazione è che il leonardo come l'uno ha solo due canali interrupt e quindi se vuoi la massima velocità puoi avere un solo encoder per arduino... su due canali di interrupt mi pare che il programmatore che ha realizzato la libreria sia andato oltre i 100khz. io avevo un encoder a 4000 impulsi giro in quadratura e non perdeva colpi.
non ho usato la libreria Pololu... ho usato le librerie del playgroung: ce n'era una con interrupt ottimizzata in assembler...
Logged

rovigo-ferrara
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Con questo codice riesci a leggere un encoder in modo 2x con un Arduino UNO se metti RISING al posto di CHANGE leggi a 1x
la velocità di lettura dell'encoder dipende da quanto è "impegnato" Arduino

Code:
volatile int encoder0Pos = 0; // posizione attuale

void setup(){
  Serial.begin(57600);
  pinMode(2, INPUT);
  pinMode(4, INPUT);
  attachInterrupt(0, doEncoderA, CHANGE); // encoder A channel on interrupt 0 (arduino's pin 2)                       

}
void loop(){
  Serial.println(encoder0Pos);
  }

void doEncoderA() { // pin no 2
  digitalRead(2) ^ digitalRead(4) ? encoder0Pos -- :   encoder0Pos  ++ ; // se i due segnali sono uguali  decremente, altrimenti incrementa
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


la velocità di lettura dell'encoder dipende da quanto è "impegnato" Arduino

nel tuo caso hai attaccato un interrupt quindi l'impegno di arduino non centra nulla perchè qualsiasi cosa faccia il codice viene interrotto a favore dell'encoder.
Logged

torino, italy
Offline Offline
Sr. Member
****
Karma: 0
Posts: 339
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusatemi,in che senso la velocità massima?
Io pensavo di usare due di questi motori con encoder integrati:
http://www.pololu.com/catalog/product/1447

oppure uno di questi:
http://www.pololu.com/catalog/product/1217
montato su uno di uno di questi:
http://www.pololu.com/catalog/product/2213

Da quanto ho capito qui l'encoder manda due segnali, e quando si spegne uno e si accende l'altro c'è un "passo".
Non mi è molto chiaro come capire la direzione, dall'ordine di accensioni e spegnimenti?
Anche se immagino che di questo si occupi la libreria.
Sarebbero comodi dei drivers come gli a4988 che fanno il lavoro sugli stepper al posto di arduino.
Logged

Offline Offline
Sr. Member
****
Karma: 8
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusatemi,in che senso la velocità massima?
Io pensavo di usare due di questi motori con encoder integrati:
http://www.pololu.com/catalog/product/1447

oppure uno di questi:
http://www.pololu.com/catalog/product/1217
montato su uno di uno di questi:
http://www.pololu.com/catalog/product/2213

Da quanto ho capito qui l'encoder manda due segnali, e quando si spegne uno e si accende l'altro c'è un "passo".
Non mi è molto chiaro come capire la direzione, dall'ordine di accensioni e spegnimenti?
Anche se immagino che di questo si occupi la libreria.
Sarebbero comodi dei drivers come gli a4988 che fanno il lavoro sugli stepper al posto di arduino.


i segnali degli encoder sono disposti in quadratura: non sono che uno si accende QUANDO l'altro si spegne ma sono solo sfasati.... e quindi l'arduino (ma anche il vecchio mouse meccanico) capisce la direzione in base a questi due segnali.
per la velocità di campionamento del segnale degli encoder devi calcolare quanti impulsi a giro ti danno gli encoder e a quanti giri li fai girare... se superi i 100 khz non ce la fai (ma di solito gli encoder devono girare "piano" anche per motivi meccanici).
Comuque questi della Pololu sono roba per modellismo penso: sono già messi in condizione di non darti problemi... il motore ridotto fa 80RPM a 8400 impulsi per giro... è poco... circa 11.000 impulsi al secondo...


« Last Edit: December 27, 2012, 11:20:50 am by qsecofr » Logged

Milan
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Un sito interessante per trovare motoriduttori con encoder ad effetto Hall: http://www.micromotors.eu/. Sono a Verderio Inferiore, vicino a Milano.
Futura Elettronica ha in catalogo alcuni di questi motori. Mi sembrano molto simili ai Polulu.
Se non sbaglio la risoluzione max è 6 impulsi a giro. In compenso c'è molta scelta di rapporti sui riduttori epicicloidali forniti con i motori.
Logged

Milan
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mi sono accorto solo smiley ora che la risoluzione degli encoder polulu è superiore...
Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 261
Posts: 21567
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dipendente dal riduttore e dal uso anche una bassa risoluzione del encoder puó essere funzionale o opportuno. Se hai una risoluzione alta del encoder e una riduzione alta ricevi una risoluzione troppo alta.
Ciao Uwe
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9419
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Comuque questi della Pololu sono roba per modellismo penso: sono già messi in condizione di non darti problemi... il motore ridotto fa 80RPM a 8400 impulsi per giro... è poco... circa 11.000 impulsi al secondo...

Non sono per modellismo, sono per applicazioni dove serve un feedback di velocità e/o posizione, il che coinvolge l'utilizzo di software specifico come un controller pid.
11 kHz in uscita dall'encoder non è poco, sopratutto da gestire con Arduino, se poi applichiamo la quadratura 4x gli impulsi da gestire diventano 44kHz che sono completamente fuori portate per Arduino.
Per capirci vuol dire gestire fino 44000 interrupt al secondo (uno ogni 22.73 us) con tutti i relativi conti per determinare il verso di rotazione (si usa l'XOR) e incrementare/decrementare di conseguenza il relativo contatore, poi se c'è pure il calcolo della velocità la cosa si complica ulteriormente, in pratica Arduino riesce a stento a fare solo questa cosa e per un solo motore.
Logged

Pages: [1]   Go Up
Jump to: