L’uso del driver pololu a4983 del tutto simile al modello a4988 che lo ha sostituito lo hai già letto nell’articolo dedicato a questo driver.
In un precedente articolo hai già visto come si possono dimezzare o ridurre a 1/4 ed 1/8 i passi di un motore bipolare con l’easy driver.
In questo articolo ti mostrerò come utilizzare anche il driver pololu a4983 per ottenere passi di ampiezza 1/2, 1/4 e 1/8 del passo completo da un motore bipolare.
Il pololu a4983 o il suo successore a4988 è utilizzato in molte stampanti 3D autocostruite come la rep rap grazie proprio alla sua capacità di ridurre il passo fino a 1/16 del passo base.
Se vuoi leggere tutta la teoria relativa a come puoi verificare che il singolo passo sia dimezzato o diviso in quattro, in otto o oltre puoi leggere l’articolo dedicato all’easy driver, la teoria non cambia cambiando il driver per pilotare il motore passo-passo.
Collegamento pololu a4983 arduino
I collegamenti tra arduino e il driver pololu a4983 puoi eseguirli secondo questo schema:
io ho utilizzato fili di colore blu per connettere i pin arduino ai pin MS1,MS2 ed MS3
ed i cavi di colore verde per connettere i pulsanti ad arduino, pulsanti che ti servono per inviare al driver pololu a4983 i segnali che riducono il passo del motore bipolare:
il cavo giallo è connesso al primo pulsante della breadboard ed al pin 8 di arduino con la funzione di far avanzare il motore un passo alla volta ad ogni pressione.
Come funziona il driver pololu a4983
La risoluzione del motore passo-passo, ossia l’ampiezza in gradi di ogni passo, è regolabile inviando segnali di tipo HIGH o LOW sui terminale MS1, MS2 ed MS3 secondo una matrice definita:
in pratica inviando un segnale HIGH sul pin MS1 e lasciando a LOW MS2 ed MS3 otterrai che ogni step sarà dimezzato nella sua ampiezza, se il passo del tuo motore è 1,8° in questo modo sarà 0,9° e se un giro completo ( 360° ) il motore lo compie in 200 passi dimezzandolo con 200 passi arriverai a compiere solo 180°.
Per dimostrare questa teoria ho realizzato un quadrante montato su di un motore passo passo con definiti alcuni punti specifici a 1/2 giro, 1/4 di giro e 1/8 di giro:
utilizzando lo sketch che ti propongo nelle righe successive potrai testare la risoluzione del tuo motore bipolare.
Important!
Probabilmente ti sei chiesto a cosa serva collegare i pulsanti ad arduino e poi i contatti MSx ad arduino quando a queti ultimi è sufficente inviare un segnale di tipo HIGH ( +5v ) o LOW ( 0v ) …
La motivazione è duplice:
- questo circuito è dimostrativo ed è più semplice provarlo premendo un pulsante per testare il funzionamento;
- in un progetto potrebbe esserti utile eliminare i pulsanti e variare l’ampiezza del passo e la risoluzione in corsa o rispetto al punto del progetto in cui stai operando.
Lo sketch del tutorial arduino
int DIR = 2; int STEP = 3; int MS1 = 4; int MS2 = 5; int MS3 = 6; int Rotate = 7; int pinGo = 8; int pinMS1 = 9; int pinMS2 = 10; int pinMS3 = 11; void setup() { pinMode(DIR, OUTPUT); pinMode(STEP, OUTPUT); pinMode(MS1, OUTPUT); pinMode(MS2, OUTPUT); pinMode(MS3, OUTPUT); pinMode( pinGo,INPUT ); pinMode( pinMS1,INPUT ); pinMode( pinMS2,INPUT ); pinMode( pinMS3,INPUT ); pinMode( Rotate,INPUT ); } void loop() { digitalWrite(MS1, digitalRead( pinMS1 ) ); digitalWrite(MS2, digitalRead( pinMS2 ) ); digitalWrite(MS3, digitalRead( pinMS3 ) ); digitalWrite(DIR,HIGH); delay(50); if ( digitalRead( Rotate ) == HIGH ) { for ( int i=0; i<200; i++) { stepGo(); delay(10); } } if ( digitalRead( pinGo ) == HIGH ) { delay( 300 ); stepGo(); } } void stepGo() { digitalWrite(STEP, HIGH); delayMicroseconds(100); digitalWrite(STEP, LOW); delayMicroseconds(100); }
Lo sketch proposto non è molto differente da quello che hai già incontrato in altri tutorial, la variante principale riguarda la presenza del 3° contatto e del 3° pulsante per aumentare la risoluzione del motore fino ad 1/16 di passo.
linea 05: definisci la variabile MS3 a cui è connesso il pin MS3 del driver pololu a4983;
linee 30-32: trasferisci il valore letto sul pin corrispondente ai 3 pulsanti pinMSx ai terminali MSx;
linea 38: definisci un ciclo for da 200 step in cui per ciascun passo esegui la funzione stepGo() definita alle linee 46-51 che hai già incontrato in altri articoli dedicati ai driver per motori passo-passo come l’easydriver ed il pololu a4983.
Ho realizzato un video demo del progetto:
Buon divertimento !!!
16 commenti
Vai al modulo dei commenti
Ciao Mauro, ho 2 domande interessanti da porti… Mi sono studiato per bene tutte le tue lezioni sui motori passo, all’inizio non riuscivo neanche a fargli fare uno scatto, le cause erano abbastanza elementari, uso 2 driver diversi, su uno non collegavo gli EN1 e EN2 ai 5V mentre con l’altro non chiudevo il circuito collegando GND della batteria esterna dello stepper al GND di arduino…. finalmente tutto risolto! Ora, riesco a programmare dei cicli orari e antiorari a mio piacimento sfruttando la precisione che contraddistingue appunto questi motori. Mi rimangono però 2 questioni ancora da capire e spero tu possa aiutarmi…
1a questione: per quanto riguarda la riduzione del passo, ho alcuni driver che non hanno le entrate MS1, MS2 e MS3, come mi comporto per ridurre il passo da 1,8° con questi driver? Ho notato che quando imposto -for(int x = 0; x < 50; x++) – posso impostare il valore relativo agli scatti (50) anche con i decimali. Non ho ancora provato, ma se impostassi ad esempio 0,25 ottengo 1/4 di 1,8°? Se mi confermi che è così ok, altrimenti ti chiedo cortesemente di spiegarmi come ridurre il passo con questi altri tipi di driver.
2a questione: come imposto delle posizioni predefinite allo stepper? mi spiego meglio con un esempio. Costruisco un braccio meccanico ad uso industriale che fa sempre i soliti movimenti, ad esempio 90° a destra e ritorno in posizione, tutto ok. Poniamo che nella fase di "andata", nel viaggio verso i 90° richiesti ci sia un black out e la macchina si arresta. Cosa succede all'accensione? Avremo tutti i movimenti sfalsati! Con i normali servomotori da 180° il problema non si pone, posso controllare perfettamente la posizione a mio piacimento, ovviamente con tutta l'imprecisione dei servomotori, ma posso farlo. Con gli stepper invece non ho idea di come si possano impostare delle posizioni predefinite, come appunto quella di partenza. Un esempio che esprime bene questo concetto è la stampante… quando stampa, se togli la corrente e poi la ripristini, noterai che il carrello, ovunque si trovi in quel momento, torna in posizione iniziale per poi riprendere la stampa. Risolto questo problema gli stepper non hanno più segreti 😉
Grazie per l'attenzione Mauro, ti saluto, a presto.
Autore
Ciao Francesco,
per la prima questione non conoscendo il tipo di driver non so aiutarti io conosco i driver che possiedo e che recensisco, se usi driver che non supportano le riduzioni di passo non penso sia possibile ottenerle, consulta la pagina del produttore o scrivigli per chiedere se supportano le riduzioni, quante e come usarle.
Per il secondo quesito devi optare per una gestione via software e dei sensori di posizione; per riprendere il tuo esempio della stampante il sistema sa che alla riaccensione deve eseguire un reset ossia tornare al punto 0, è una routine sw che glielo fa fare ed uno o più sensori che gli indicano di essere al punto 0, a quel punto il sw di gestione può riprendere da dove è arrivato avendo memorizzato l’ultima posizione e riprendendo dalla successiva.
Ciao Mauro, per la riduzione del passo, forse è come dici tu, molto probabilmente non supportano la riduzione del passo, sono dei normali driver per 2 motori dc o per uno stepper (Max 2A), non ricordo la sigla. Per quanto riguarda la seconda questione, ho capito cosa intendi, si può controllare una posizione attraverso dei sensori, siano essi baffi di contatto o altro, a questo punto però mi sorge un dubbio…. Secondo te si può controllare uno stop preciso al passo X attraverso dei sensori? Credo che un baffo o un sensore di rilevazione a infrarossi ad esempio difficilmente fermerà la corsa al medesimo passo, ho paura che vi sia una tolleranza di qualche passo + o – e per una macchina o un braccio meccanico ai quali sono richiesti movimenti di precisione, non può essere tollerato il passo in più! Perdonami ma credo che sia una cosa da dover approfondire, in fondo usare questo tipo di motori senza il controllo del singolo passo credo sia un controsenso. Un saluto
Autore
Ciao Francesco,
la precisione dipende dal tipo di sensore che scegli.
Ad esempio se scegli u encoder da 24 passi giro hai una precisione di 15° ( 360/24 ) e se usi un motore da 200 passi giro hai un motore da 1,8° passo.
Capisci da solo che la precisione è limitata, anche se non è proprio detto in quanto può dipendere dalla meccanica, ad esempio se collegassi una ingranaggio in grado di colmare il gap di errore del sensore elevandolo a 1,8° per passo avresti compensato la precisione necessaria.
E’ ovviamente solo un esempio e serve a farti riflettere sull’importanza della meccanica e dei sensori scelti.
Ciao Mauro, ho riflettuto parecchio sulla cosa perchè come ti ho detto la ritengo la precisione di controllo di importanza fondamentale specie nella produzione di macchinari per linee di produzione industriale, dove si richiede appunto precisione e ripetizione dei meccanismi.
Ho sfruttato il tuo suggerimento e ho sviluppato uno sketch non proprio semplicissimo di fine corsa di ANDATA e fine corsa di RITORNO, in modo che, in caso di black out, il braccio o carrello che sia, torna in posizione iniziale per iniziare di nuovo il suo processo produttivo.
Ho sfruttato in questo esempio la pressione di due pulsanti che rappresentano i contatti di fine corsa, uno a destra e uno a sinistra (nella realtà a mio avviso è meglio usare altri sensori di contatto, più sensibili di un pulsante).
Lo stepper all’inizio dello sketch è fermo e attende che si verifichino delle condizioni. Soddisfatte le condizioni (qui ho inserito un terzo pulsante che soddisfa condizioni che ognuno può cambiare a proprio piacimento, si può inserire un ping di rilevazione, un fotosensore o altro) lo stepper va verso il punto di fine corsa ANDATA.
Quì si ferma e attende il verificarsi di nuove condizioni. Simulando che si verifichino con la pressione del solito tasto nr3, lo stepper ruota nel senso contrario fino a premere il bottone di fine corsa RITORNO. Qui lo stepper si ferma di nuovo e lo sketch riparte.
RISOLTO IL PROBLEMA!
A mio avviso credo che tutto questo sia una cosa MOLTO importante, se vogliamo produrre delle linee di produzione continue o comunque movimenti ripetitivi di estrema precisione. Con questo sketch in teoria si possono collegare infiniti stepper in “contatto” tra loro i quali e riprodurre automazioni più o meno complesse.
Ci ho messo un bel pò a realizzarlo, sono impazzito a creare label nelle label! se vuoi te lo mando per mail, ti saluto, ti ringrazio per il suggerimento e ti auguro buone feste.
Alla prossima!
Autore
Ciao Francesco,
se ti va di condividere il tuo lavoro mandami pure lo sketch, un testo di presentazione e descrizione, delle foto in funzione, schemi ed il video se lo hai realizzato ed io scriverò un articolo sul gran lavoro che hai svolto.
Ciao Mauro volevo qualche informazione, questi giorni sto provando a pilotare il motore passo passo tramite il Pololu 4983 collegato il tutto come dice la descrizione il motore non parte, questo stesso motore prima l’ho usato con Easy Driver ed è andato tutto ok.
Appena data l’alimentazione il motore anche se collegato male dovrebbe comunque avere il rotore bloccato(cioè provando a girare il rotore con la mano deve rimanere difficile farlo girare) ma invece il motore è come non ricevesse tensione, ma misurando con il voltometro in ciascuna delle fasi trovo 5V ma il motore non gira neppure a nessun comando,
problemi riscontrati:
1) risulta tensione sulle 4 fasi ma non risponde a nessun comando
Autore
Ciao Marco,
la tensione la rilevi contemporaneamente su tutte le fasi?
Salve ho costruito una etichettatrice il motore e uno stepper 12v 0,4A comandato da un driver Pololu DRV8825 e una fotocellula da 5v. Non riesco pero a modificare uno sketch per fare in modo che il motore parta quando non legge e si fermi quando legge l’etichetta.
Qualcuno mi può aiutare.
Autore
Ciao Alberto,
puoi specificare meglio il progetto ?
Io svolgo progetti su commissione e potrei aiutarti, leggi come nella pagina “sostienimi”
Se vuoi realizzarlo da solo puoi leggere e comprendere gli articoli dedicati al driver che hai usato ed al tipo di sensore.
Salve non riesco a capire l’indirizzo mail per mandarle le foto!
Autore
Ciao Alberto,
è lo stesso da cui ti arrivano l notifiche come questa.
Ciao Mauro, ho un problema, ho realizzato un robot omnidirezionale con tre ruote montandole in asse con tre motori passo passo a 12V da 35 mm bipolari. I motori sono collegati ad una shield cnc v3 con driver a4988
Ma alla prova dei robot i motori fanno un sacco di rumore e il robot non si sposta. Può essere che i motori passo passo non abbiano coppia? Eppure sono motori che usati sulle stampanti la coppia la hanno eccome. E allora cosa sta succedendo? Il rumore che fanno i motori è strano dovrebbero essere silenziosi. È come se le bobine avessero un impulso non in fase. Mi sapresti aiutare con qualche consiglio.
Autore
Ciao Carmelo,
dalla tua descrizione potresti dover regolare i driver per la corretta erogazione di corrente, leggi un manuale qualsiasi su come si impostano gli A4988 sulle stampanti 3D.
In merito alla coppia, i motori passo-passo sono più usati per la loro precisione e metodologia di movimento che per la coppia sviluppata, tuttavia se il tuo robot non è molto pesante non dovresti avere grossi problemi.
Ultimo il sibilo che ascolti è dovuto ad un impulso di controllo eccessivamente veloce che non consente al motore di eseguire il movimento desiderato.
Ciao Mauro ho necessità di controllare due stepper unipolari, ma mi serve una risoluzione del passo molto piccola il così detto micropasso, con la possibilità di invertire la rotazione, controllo velocità e tipo di passo in modo analogico con pulsanti e potenziometri.
Per spiegarmi meglio ti dico semplicemente che devo controllare i due assi di un telescopio.
Puoi aiutarmi?
Ciao Carmine
Autore
Ciao Carmine,
si posso aiutarti consigliandoti due possibili soluzioni:
1. usare degli stepper bipolari con questi driver o con i drv8825 che trovi descritti nel blog e che gestiscono i microstep
2.se vuoi usare gli unipolari puoi adottare una soluzione meccanica con rinvii a cinghia o ingranaggio per ridurre i gradi di ogni step a quelli a te necessari.