Shield per Arduino UNO o Mega, che permette di comandare tre motori passo-passo bipolari da 2A. Il controllo dei motori egrave; gestito da un driver (MD09B oppure 3DDRIVER- uno per motore) prodotto dalla Pololu. Ogni driver contiene un doppio ponte ad H a MOSFET e puograve; essere impostato per gestire sia la direzione, sia il numero di gradi che il rotore del motore deve compiere alla ricezione di ogni comando; in altre parole, possiamo decidere se quando lo comandiamo, il modulo deve far ruotare lrsquo;albero di uno step alla volta, oppure di 1/2, 1/4, 1/8 o 1/16, in base allrsquo;accuratezza che si desidera ottenere. Sulla shield sono presenti anche 4 ingressi analogici. Alimentazione: 12 Vdc, dimensioni: 86x56 mm. N.B. la confezione comprende la scheda da saldare e i 3 driver (giagrave; montati). |
Il controllo dei motori passo-passo egrave; operato da moduli Pololu (www. pololu.com) basati sullrsquo;integrato A4983 della Allegro e dotati ciascuno di un doppio driver a ponte ad H governato da una logica che controlla lrsquo;accensione e permette di far compiere al motore passi ridotti rispetto a quelli previsti dalla sua parte elettromeccanica; ad esempio, per ogni impulso di comando inviato a STEP (il contatto che riceve gli impulsi di azionamento del motore) lo stepper-motor puograve; compiere un passo intero oppure frazioni da 1/2 a 1/6, a seconda della combinazione logica presentata ai piedini MS1, MS2, MS3, secondo la tabella riportata in questo riquadro. La direzione del movimento conseguente ad ogni impulso ricevuto sul contatto STEP dipende dal livello logico applicato allrsquo;ingresso DIR (1logico forza il verso antiorario e 0 quello orario). Ogni ponte puograve; erogare una corrente di 2 A, mentre il modulo si alimenta in continua con tensioni fino a 35 V; un piccolo trimmer posto sulla basetta e connesso al pin REF (17) dellrsquo;A4983, permette di regolare la corrente erogabile dai ponti. |
Il comando del movimento puograve; essere ottenuto in due modi: nel primo, Arduino fornisce direttamente gli impulsi per impostare il verso di rotazione dellrsquo;albero dello stepper-motor e per far ruotare di uno step ad impulso; nel secondo, ossia quello da noi impiegato e previsto nel firmware, Arduino imposta il verso di rotazione e invia impulsi che determinano rotazioni di uno step o frazione di esso, a seconda dellrsquo;impostazione fatta allrsquo;inizializzazione e conservata da opportuni shift-register. La differenza tra le due modalitagrave; egrave; che la prima egrave; piugrave; impegnativa della seconda e costringe Arduino a lavorare piugrave; velocemente percheacute; deve aggiornare piugrave; in fretta lo stato dei motori passo passo. Infatti nel primo modo di comando, che si ottiene spostando i jumper DIR ed STP (quindi DIR1/STP1, DIR2/STP2, DIR3/ STP3) verso le linee di Arduino, egrave; proprio Arduino che imposta la posizione dellrsquo;albero del motore passo per passo; ipotizzando che il motore sia collegato allrsquo;uscita MOT1, ciograve; significa che se il motore egrave; un 360 passi ed il suo albero deve ruotare di 180deg; in due secondi, occorre inviare 90 impulsi al secondo al piedino D7 (se la velocitagrave; angolare deve aumentare, ad esempio per far rispondere il labirinto piugrave; velocemente, la frequenza degli impulsi di step deve crescere di conseguenza). Prima, perograve;, Arduino deve impostare la direzione con lrsquo;opportuno livello logico sul piedino D10, che decide la direzione mediante il jumper DIR. Nella seconda modalitagrave;, ci avvaliamo delle prerogative del controller Pololu per impostare preventivamente il numero di step o frazioni da compiere ogni volta che Arduino invia un impulso di rotazione e imposta il verso; questa modalitagrave; si ottiene spostando i jumper DIR e STP verso i pin Q5 e Q6 dei rispettivi shift register. In questo caso, ci basta definire il fattore di divisione una sola volta e poi per variare la velocitagrave; di risposta si gioca sulla frequenza degli impulsi giunti da Arduino. Analizziamo dunque questa modalitagrave;, per comprendere la quale dobbiamo spendere qualche altra parola sul modulo controller per stepper-motor prodotto dalla Pololu, ovvero sulla sua interfaccia di comando. Il modulo, siglato MD09B, consta di un doppio ponte ad H governato da unrsquo;elettronica che permette di impostare il verso di rotazione del campo elettromagnetico e quindi dellrsquo;albero dello stepper motor, oltre a frazionare gli step. Ogni volta che sul piedino STEP giunge un impulso (la durata minima ammissibile egrave; 1 mu;s) a livello alto, a meno di diversa impostazione le uscite 1A, 1B, 2A e 2B forniscono gli impulsi per comandare lo spostamento del rotore del motore di uno step. Ciograve; vale se gli ingressi MS1, MS2, MS3 sono tutti a livello basso; in caso contrario, si ottiene la rotazione di 1/2, 1/4 ecc. Sempre, percheacute; il controller funzioni bisogna che il contatto EN sia a livello basso; ponendolo a 1 il modulo va in standby e i motori non ricevono corrente. Il contatto DIR decide il verso di rotazione: posto a livello logico basso impone il verso orario, mentre nello stato alto imposta lrsquo;antiorario. SLEEP attiva la modalitagrave; di riposo (logica attiva e driver spenti) mentre RESET azzera il controllore che governa i driver e pone le uscite di comando dei motori (1A, 1B, 2A, 2B) a zero logico anche se STEP continua a ricevere impulsi. La logica egrave; TTL-compatibile, ma comunque il modulo accetta agli ingressi di controllo tensioni fino a 0,7 volte quella applicata tra il contatto 2 (Vcc) e massa (GND); il livello basso equivale a non piugrave; di 0,3xVcc. Detto ciograve;, vediamo che per impostare il fattore di divisione degli step, Arduino deve definire la combinazione delle linee MS1, MS2, MS3 di ogni modulo; per farlo distintamente e liberarsi del problema, nello shield sono previsti tre shift-register che caricano lrsquo;impostazione di ciascun controller individualmente e sequenzialmente. Una volta configurati i controller, le impostazioni possono rimanere quelle fin quando non serve modificarle e comunque non bisogna aggiornarle ad ogni impulso di comando di STEP; egrave; questo che sgrava Arduino da parte del lavoro. Lrsquo;aggiornamento delle impostazioni dei controller si effettua caricando sequenzialmente i dati tramite la linea D13 di Arduino, che finisce in parallelo sui pin 2 (DATA) dei registri a scorrimento; ogni volta che egrave; stata inviata la configurazione di tutti e tre i controller, Arduino attiva la linea di STROBE (piedini 1 di U1, U2, U3, ovvero I/O D2 della Arduino) e trasferisce sugli MD09B i rispettivi stati, quindi riporta D2 a zero logico. Insieme alla configurazione degli MS1, MS2, MS3 (che puograve; essere diversa da U1 a U3) i dati inviati da Arduino riguardano lo stato di SLEEP e RESET, che sono impostati uguali per tutti i moduli e valgono 1 logico fisso. Ogni controller alimenta direttamente il motore e viene a sua volta alimentato da una linea comune che, tramite il jumper siglato Vmot, puograve; prendere tensione da Arduino o da un alimentatore esterno mediante lrsquo;apposita morsettiera PWR. |