Driver motore passo passo (Lezione 5)
Introduzione
Il motore passo passo, è ampiamente utilizzato in molte applicazioni, la sua diffusione è dovuta alla semplicità d’uso, al costo relativamente basso, alla precisone e accuratezza dei movimenti. Nei seguenti articoli: motore passo passo e ponte ad H , ho descritto il principio di funzionamento del motore passo passo e del ponte H (se non l’aveste fatto ancora vi consiglio di leggerli prima di questo articolo).
Il ponte ad H consente la rotazione del motore in entrambi sensi, esso è collegato ad ogni fase del motore, in questo modo, possiamo cambiare il senso di percorrenza della corrente e di conseguenza le polarità del campo magnetico prodotto dalle fasi.
Per aumentare la risoluzione di rotazione del motore è possibile pilotarlo facendogli eseguire dei micro passi (frazione del passo intero).
La micro rotazione del motore è ottenuta proporzionando in modo opportuno le correnti nelle fasi, i campi magnetici prodotti dalle fasi, generano delle forze risultanti in modo da orientare il motore nella posizione desiderata.
La modulazione delle correnti può essere ottenuta con un segnale PWM che può essere generato da un microcontrollore o un driver hardware dedicato per i motori passo passo.
Dalla descrizione fatta nella prima parte dell’introduzione, il neofita potrebbe scoraggiarsi per la difficoltà con il quale bisogna gestire un motore passo passo, ma non bisogna abbattersi, poiché in commercio sono disponibili dei driver hardware, che svolgono tutte le funzioni sopra descritte e il nostro compito è limitato alla sola attivazione dei comandi.
Vi voglio proporre il circuito integrato A4988, è un dispositivo che ha tutte le funzioni integrate per gestire appieno il motore, l’implementazione software del suo driver è molto semplice, ed è molto diffuso, soprattutto, nell’ambito makers, esistono in commercio già delle boards pronte all’uso ed in ultimo è anche economico.
Informazioni sul driver A4988
Le caratteristiche principali del circuito integrato A4988, sono le seguenti:
Operating Voltage | 8 V |
Maximum operating voltage | 35 V |
Continuous current per phase | 2 A |
Minimum logic voltage | 3 V |
Maximum logic voltage | 5.5 V |
Microstep resolution | full, 1/2, 1/4, 1/8 and 1/16 |
Reverse voltage protection | No |
Il range di tensione di lavoro del circuito integrato A4988 è 8 – 35V, con una corrente massima di 2A, è chiaro che nella selezione del motore, dobbiamo tenere conto di questi valori, onde evitare di provocare dei danni irreversibili al motore e/o al circuito integrato.
Il dispositivo, come accennato nell’introduzione, integra due ponte ad H, pertanto questo circuito integrato può gestire solo motori a due fasi, inoltre, i MOSFET sui due rami del ponte ad H , hanno un basso valore di resistenza quando sono nello stato di conduzione, questa caratterista ha un duplice vantaggio, ridurre al minimo la dissipazione sui dispositivi attivi e quindi una minore produzione di calore e una minore perdita d’energia.

Selezione dei micro passi
Il circuito integrato A4988 integra un generatore PWM, il quale è gestito da una logica interna configurabile tramite gli ingressi MS1, MS2 e MS3 (Vedi Figura 1). Nella Tabella 2, è indicata la tabella di verità sulla risoluzione che il driver attua in funzione degli ingressi MSx.

Limitazione di corrente
Inoltre, il circuito ha un sistema retroazionato per impostare la corrente massima che deve circolare nelle due fasi del motore, ed è configurabile tramite i resistori Rs1 e Rs2.
Reset
Per mantenere in posizione un motore passo passo, le fasi devono essere sempre alimentate, in caso contrario, non ci sarà più forza di attrazione tra rotore e fasi perché non c’è il campo magnetico prodotto dalle correnti, pertanto, anche quando il motore è fermo, il circuito integrato alimenta le fasi. In alcuni casi, potrebbe essere inutile mantenere in posizione il motore, per questo motivo, il circuito integrato A4988 ha l’ingresso di RESET che disabilita la conduzione dei MOSFET del ponte ad H con lo scopo di annullare la circolazione di corrente nelle fasi per ridurre: la dissipazione di corrente , di calore e d’energia. Una funzione simile può essere attivata anche dall’ingresso SLEEP, in questo caso, oltre a disattivare le uscite, l’intero circuito è configurato nello stato di standby.
Ingresso attivazione passo (STEP)
Ad ogni transizione dell’ingresso, da basso ad alto, si genera il timing per far ruotare il motore di un passo o micro passo, in funzione degli ingressi MSx.

Ingresso direzione rotazione (DIR)
Con questo ingresso, come è facile intuire, si può cambiare il senso di rotazione del motore.
Per terminare il discorso legato alle micro rotazione, ho riportato di seguito, in Figura 3, in cui è rappresentato il grafico delle correnti nelle due fasi, quando pilotiamo il motore facendogli eseguire dei micro passi. Possiamo osservare che, ogni fase ha una corrente in modulo diversa, in questo modo, la forza risultante che incide sul rotore determinano l’angolo di rotazione del motore, funzione delle singole componenti forza, prodotte dai campi magnetici delle due fasi.

Schema elettrico
Per questo progetto ho selezionato il motore passo passo Nema 17, e’ un modello di fascia bassa, anch’esso molto utilizzato nell’ambiente makers, ed e’ di facile reperibilità. Come accennato nell’introduzione, useremo una scheda gia’ pronta all’uso dove sono montati: il circuito integrato A4988, i condensatori di filtro dell’alimentazione, un trimmer, sulla linea di retroazione, per la regolazione della corrente massima d’uscita, oltre ad avere dei comodi reofori per connettere i cablaggi o sulla mille fori.

In Figura 4, ho riportato lo schema di collegamento del motore con la board A4988, possiamo osservare, che ho inserito un ulteriore condensatore di filtro sull’alimentazione, del valore di almeno 47uF, non è stato integrato sulla scheda perché le dimensioni, per quel valore di capacità, non sono trascurabili, rispetto alla superfice utile della board.
Il codice
Nel listato riportato di seguito, facciamo ruotare il motore, a ciclo continuo, in entrambe le direzioni, con velocità diversa.
// codice per il controllo di un motore passo passo con il driver A4988, senza usare una libreria // definiamo gli pin di connessione tra arduino e driver #define DIR 2 #define PASSO 3 #define rivoluzione 200 void setup() { // dichiariamo i pin come uscite pinMode(DIR, OUTPUT); pinMode(PASSO, OUTPUT); } void loop() { // settiamo la direzione di rotazione in senso orario digitalWrite(DIR, HIGH); // facciamo ruotare il motore lentamente: for (int i = 0; i < rivoluzione; i++) { // un passo: digitalWrite(PASSO, HIGH); delayMicroseconds(300); digitalWrite(PASSO, LOW); delayMicroseconds(300); } delay(1000); // settiamo la direzione di rotazione in senso antiorario: digitalWrite(DIR, LOW); // facciamo ruotare il motore più velocemente: for (int i = 0; i < rivoluzione; i++) { // un passo: digitalWrite(DIR, HIGH); delayMicroseconds(100); digitalWrite(DIR, LOW); delayMicroseconds(100); } delay(1000); // settiamo la direzione di rotazione in senso orario digitalWrite(DIR, HIGH); for (int i = 0; i < 5 * rivoluzione; i++) { digitalWrite(PASSO, HIGH); delayMicroseconds(300); digitalWrite(PASSO, LOW); delayMicroseconds(300); } delay(1000); // settiamo la direzione di rotazione in senso antiorario: digitalWrite(DIR, LOW); // facciamo ruotare il motore più veloce for (int i = 0; i < 5 * rivoluzione; i++) { // These four lines result in 1 step: digitalWrite(PASSO, HIGH); delayMicroseconds(100); digitalWrite(PASSO, LOW); delayMicroseconds(100); } delay(1000); }
Nella prima parte, riga 2 e 3, definiamo con dei nomi mnemonici i pin d’uscita che di Arduino che devono pilotare il circuito integrato A4988. Per gestire il motore, con le funzioni di base che so talaltro quelle più utilizzate nella maggior parte dei progetti, sono necessari solo due segnali. Abbiamo tralasciato la configurazione dei micro step, perché basta solo configurare gli ingressi MSx indicati nella tabella di verità XXXX., pertanto, il motore eseguirà passi interi con un angolo di ampiezza 1.8°, perché il motore, NEMA17 , esegue 200 passi per angolo giro.
Analizziamo il codice dalla riga 24 alla 29, in cui c’è un ciclo “for” che si ripete per 200 volte ( per una rotazione di un angolo giro) ed ogni passo è intervallo di tempo di 300 + 300 ms, che determina la velocità di rotazione del motore e la frequenza di ripetizione degli impulsi.
Mentre nella parte di codice compresa tra le righe 39 e 44, c’è lo stesso codice descritto pocanzi, ma in questo caso l’intervallo la frequenza di ripetizione degli impulsi è maggiore, perché l’intervallo di tempo è 100 +100 ms.