Pilotare un motore passo passo con Arduino e il driver A4988

Scammenting in corso… Come pilotare un motore passo passo con Arduino e il driver A4988.
Nel mio caso utilizzerò un modulo Pololu A4988. Si tratta di un driver completo e molto semplice da utilizzare. Questo integrato è progettato per poter comandare i nostri motori in modalità full-, half-, quarter-, eighth-, e sixteenth-step. Ovvero possiamo far ruotare il nostro asse di uno step completo oppure di 1/2, 1/4, 1/8 e 1/16. Grazie a questa funzionalità possiamo affinare di parecchio i movimenti del motore.
La semplicità di utilizzo sta nel fatto che al nostro driver in una configurazione base, basteranno solo due PIN (non considerando l’alimentazione logica) ai quali far arrivare due segnali per deciderne la velocità ed il senso di marcia del motore.
La velocità, tramite il pin STEP richiede un alternanza (pulse) di stati logici alto/basso per poter far muovere il motore, mentre tramite il pin DIR, decideremo il senso di marcia.
Per maggiori dettagli e caratteristiche ti invito a leggere qui il datasheet. Ti anticipo solo che la capacità di carico arriva fino a 35 Volt con una corrente di uscita di ±2 Ampere.
Ecco come si presenta una configurazione base:
Nell’immagine che hai appena visto i PIN come MS1, MS2, MS3, ed ENABLE non sono connessi. Molto velocemente ti spiego a cosa servono.
I primi 3, ovvero MS1, MS2, MS3, decretano la risoluzione di rotazione del motore passo passo in base alla configurazione riportata in tabella:
MS1 | MS2 | MS3 | Risoluzione Motore |
---|---|---|---|
Low | Low | Low | 1 – Full step |
High | Low | Low | 1/2 – Half step |
Low | High | Low | 1/4 – Quarter step |
High | High | Low | 1/8 – Eighth step |
High | High | High | 1/16 – Sixteenth step |
Il pin ENABLE serve ad abilitare o disabilitare le uscite dei FET che pilotano il motore. Se impostato ad un valore alto, le uscite saranno disabilitate, ovvero il motore verrà rilasciato. Se impostato ad un valore logico basso, le uscite saranno attivate. Questo pin gestisce soltanto le uscite relative al motore. Indipendentemente dal suo stato, il resto dell’elettronica rimarrà attivo. Se vogliamo invece mettere a nanna il nostro driver e con esso tutta la sua elettronica, possiamo utilizzare il pin SLEEP. Impostandolo ad un valore logico basso, l’intera circuiteria (compresa quella dei FET) verrà messa a riposo, con conseguente risparmio energetico.
Un altro aspetto molto importante del modulo Pololu A4988 è la possibilità di regolare la corrente in uscita verso il motore. Abbiamo infatti visto in altri esempi (L298N Pilotare un motore passo passo con Arduino) che pilotando un motore passo passo, senza l’utilizzo di un limitatore di corrente o non dando la giusta corrente, il risultato sfocia in un surriscaldamento del motore e del driver stesso.
Per regolare la corrente di uscita, il modulo presenta un piccolo trimmer onboard.
Guarda il video del produttore per capire come fare.
Ed adesso passiamo ad un esempio pratico!
Come al solito ho messo i commenti nel codice, ma se hai dei dubbi usa pure la sezione commenti.
Il codice
//Definizione dei PIN const int pinDir = 2; const int pinStep = 3; const int numStepMotore = 200; //E' il numero di step per rotazione del motore (potrebbe differire in base al modello) const long velocita = 1000; //Si tratta di microsecondi tra un impulso e l'altro sul pin STEP void setup() { //inizializzo i PIN come OUTPUT pinMode(pinStep, OUTPUT); pinMode(pinDir, OUTPUT); } void loop() { //definiamo la direzione del motore digitalWrite(pinDir, HIGH); //esegue un giro completo in un senso for (int x = 0; x < numStepMotore; x++) { digitalWrite(pinStep, HIGH); delayMicroseconds(velocita); digitalWrite(pinStep, LOW); delayMicroseconds(velocita); } //aspetto 2 secondi delay(2000); //cambio la direzione di marcia digitalWrite(pinDir, LOW); //rieseguo un altro giro completo nel senso opposto for (int x = 0; x < numStepMotore; x++) { digitalWrite(pinStep, HIGH); delayMicroseconds(velocita); digitalWrite(pinStep, LOW); delayMicroseconds(velocita); } //aspetto altri 2 secondi delay(2000); }
Lo schema dei collegamenti
Per dovere di cronaca riporto due avvertimenti importanti presenti sul sito del produttore del modulo A4988.
Warning: This carrier board uses low-ESR ceramic capacitors, which makes it susceptible to destructive LC voltage spikes, especially when using power leads longer than a few inches. Under the right conditions, these spikes can exceed the 35 V maximum voltage rating for the A4988 and permanently damage the board, even when the motor supply voltage is as low as 12 V. One way to protect the driver from such spikes is to put a large (at least 47 µF) electrolytic capacitor across motor power (VMOT) and ground somewhere close to the board.
Warning: Connecting or disconnecting a stepper motor while the driver is powered can destroy the driver. (More generally, rewiring anything while it is powered is asking for trouble.)
In sostanza… usate il condensatore come riportato negli esempi, e non collegate o scollegate il modulo se l’alimentazione è presente.
Spero che questo articolo ti sia stato utile!
Per qualsiasi domanda o chiarimento, fai riferimento alla sezione commenti. Al più presto vorrei realizzare un video tutorial 😉
Come sempre:
- Assicurati che tutti i collegamenti siano corretti;
- Ricordati di impostare la porta COM del tuo Arduino;
- Utilizza le tensioni corrette;
- E ricorda che io non mi assumo nessuna responsabilità per eventuali danni o disastri che causi 😀
Trovi su Amazon
Wandefol Condensatori Elettrolitici da 500 Pezzi24 Values Kit di assemblaggio Condensatori Elettrolitici 0.1UF - 1000UF
ARCELI 125PCS 25 Valori 16V 25V 50V 1uF a 2200uF Condensatori elettrolitici Assortment Kit assortito Set nero con resistenza marcata Lable
9,99 €BOJACK 18X35 mm 4700 uF 50 V 4700 MFD ± 20% Condensatori elettrolitici in alluminio (confezione da 5 pezzi)
9,99 €SunTop 500pcs 24 Values Kit di assemblaggio condensatori elettrolitici 0.1UF - 1000UF 50V 25V 16V 10V, 0.1 0.22 0.47 1 2.2 3.3 4.7 10 22 33 47 100 220 330 470 680 1000 uF
14,98 €BOJACK 24 valori 630 pezzi alluminio condensatori elettrolitici assortimento scatola kit gamma 0.1uF-1000uF
HiLetgo 5pcs A4988 Stepstick Stepper Motor Driver Module with Heat Sink for 3D Printer Reprap Suitable for Arduino Mendel Huxley
9,99 €ARCELI A4988 Stepper StepStick con motore compatibile con dissipatore di calore per 3D Printer Controller Ramps 1.4 (confezione da 5 pezzi) - verde
7,99 €Akozon 3D Printer Engraving Kit Scheda di Espansione Scudo CNC + 4pz Driver Motore Passo-passo A4988 + Dissipatore di Calore per kit Arduino
15,49 €ANGEEK, 5 pezzi Stepper Driver A4988 Stepper Motor Driver Module con dissipatore di calore per stampante 3D Reprap
9,99 €AZDelivery Modulo Driver Motore Passo-Passo A4988 Scheda Breakout con dissipatore di calore incluso un Ebook!
Elegoo 5 Set 28BYJ-48 ULN2003 5V Motore Passo-Passo Stepper + ULN2003 Scheda Controllo Motore
12,99 €Longruner TB6600 Nema 17 Stepper Motor motore passo-passo Bipolar 1.7 a/V 42 x 40 mm corpo 4-lead & 32 segmenti 4 a 40 V 57/86 motore passo-passo driver per stampante 3D/CNC LD09
23,99 €MVPOWER Motore Passo-Passo 1.5A 1.8°18mN.m Motore Passo-Passo 2 Fasi 4 Filo per 3D Stampante 5 PCs
31,99 €Rtelligent 42A02C - Motore passo 2 fasi Nema 17 Arduino Mini Stepping 42 Ncm 1,5 A Corrente 38 mm Lunghezza Bipolar 4,5 mm Onda con 30 cm cavo per stampa 3D CNC, 42A02C-XH2.54, 1
13,01 €TopDirect Nema 17 Motore passo-passo 1.7A 40Ncm(56.2oz.in) 2-fasi 4-fili 1.8 gradi Stepper Motor con Cavi Motore Bipolari per Stampante 3D / CNC
18,00 €Arduino Uno REV3 [A000066]
Elegoo UNO R3 Board Scheda ATmega328P ATMEGA16U2 con Cavo USB Compatibile con i progetti IDE di Arduino Conforme alla direttiva RoHS
10,99 €Arduino UNO SMD REV3 [A000073]
22,99 €AZDelivery Scheda Microcontrollore con Cavo USB e con eBook
9,49 €ARCELI USB Host Shield per Arduino UNO MEGA 2560 Supporto Google Android ADK USB HUB
10,99 €Approfondimenti
- a4988 arduino (59)
- arduino a4988 (41)
- a4988 (28)
- arduino e motore passo passo (20)
- arduino motore passo passo esempi (19)
- come comandare il motore stepper (12)
- accelstepper a4988 (11)
- motore passo passo arduino programma (11)
- https://www lombardoandrea com/pilotare-un-motore-passo-passo-con-arduino-e-il-driver-a4988/ (10)
- pilotare motore passo passo con controllo velocita (10)