Tutorial · Principiante · 30 min
A4988: Vref e limite di corrente del motore passo-passo
Collega un A4988 ad Arduino e a un NEMA 17, poi imposta il limite di corrente con un multimetro. Calcola Vref ed evita la trappola delle resistenze di sensore.
A cosa serve davvero il driver
Un A4988 non è un interruttore. È un regolatore di corrente che per l’occasione commuta.
La distinzione è importante perché l’avvolgimento di un motore passo-passo è un induttore a bassa resistenza—da 2 a 4 ohm è tipico. Collega un avvolgimento da 2.8 Ω direttamente a 24 V e la legge di Ohm dice 8.6 A, che distruggerebbero il motore in pochi secondi. Il compito del driver è commutare l’alimentazione migliaia di volte al secondo, così che la corrente media si stabilisca su un valore che scegli, e poi faccia scorrere quella corrente tra le due bobine secondo lo schema che fa ruotare il campo.
Quindi al driver devi comunicare un solo numero: quanta corrente per fase. Questo è il limite di corrente, e impostarlo è l’unica regolazione sulla scheda. Tutto il resto—microstepping, direzione, enable—è un pin che imposti una volta sola.
Cablaggio
| Pin A4988 | Va collegato a | Nota |
|---|---|---|
| VMOT | Alimentazione del motore 8–35 V | Non il 5 V dell’Arduino. Mai. |
| GND (accanto a VMOT) | Terra dell’alimentazione del motore | Ritorno ad alta corrente |
| VDD | 5 V dell’Arduino | Alimentazione logica, pochi milliampere |
| GND (accanto a VDD) | GND dell’Arduino | Deve condividere la terra con l’alimentazione del motore |
| 1A, 1B | Una bobina del motore | In entrambi i ordini — cambia soltanto il verso |
| 2A, 2B | L’altra bobina del motore | L’abbinamento sbagliato è l’errore fatale |
| STEP | Qualsiasi uscita dell’Arduino | Un impulso, un passo di microstep |
| DIR | Qualsiasi uscita dell’Arduino | High o low sceglie la direzione |
| ENABLE | GND oppure un pin dell’Arduino | Attivo basso: collegalo a terra per energizzare |
| RESET, SLEEP | Collegati tra loro | Entrambi devono essere high; il jumper li collega |
| MS1, MS2, MS3 | Vedi la tabella sotto | Lasciato galleggiante significa passo intero |
Due regole di cablaggio contengono quasi tutto il rischio:
- Un condensatore elettrolitico da 100 µF tra VMOT e GND, vicino alla scheda. Non è opzionale. La scheda tecnica e la documentazione di ogni portante lo dicono, e il motivo è che il chopper assorbe corrente in raffiche improvvisi; senza una capacità di massa vicina, l’induttanza dei fili di alimentazione trasforma quelle raffiche in spike di tensione che superano la tensione nominale di 35 V del chip. Le schede muoiono all’accensione, non durante il funzionamento, ed è quasi sempre per questo.
- Non scollegare mai il motore mentre il driver è alimentato. Interrompere una bobina energizzata produce un grande kick induttivo senza destinazione. Spegni sempre l’alimentazione prima.
Se i quattro fili del motore non sono etichettati, trova le coppie con un multimetro: all’interno di una bobina leggi qualche ohm, tra bobine diverse leggi circuito aperto. Abbinale in base alla continuità, poi collega una coppia a 1A/1B e l’altra a 2A/2B.
Impostare il limite di corrente
C’è un potenziometro sulla scheda e ruotarlo modifica una tensione di riferimento che il chip confronta con la tensione ai capi delle sue resistenze di sensore. Misuri questo riferimento—Vref—tra il cursore del potenziometro e terra.
La formula dell’A4988 è:
Vref = I_phase × R_sense × 8
Ecco la trappola che fa perdere motori. R_sense non è uguale su tutte le schede. Le portanti vengono fornite con resistenze di sensore da 0.1 Ω oppure da 0.05 Ω e il risultato della formula differisce di un fattore due:
| Resistenza di sensore | Marcatura sulla scheda | Vref per 1.0 A | Vref per 1.2 A | Vref per 1.5 A |
|---|---|---|---|---|
| 0.1 Ω | R100 |
0.80 V | 0.96 V | 1.20 V |
| 0.05 Ω | R050 |
0.40 V | 0.48 V | 0.60 V |
| 0.068 Ω | R068 |
0.54 V | 0.65 V | 0.82 V |
Leggi la marcatura sulle due resistenze SMD nere vicino al fondo della scheda prima di calcolare qualsiasi cosa. Imposta 1.2 V su una scheda con resistenze da 0.05 Ω e hai appena chiesto 3 A a un motore da 1.7 A.
La procedura è:
- Alimenta la scheda con VMOT collegato e motore scollegato. Il chip ha bisogno della tensione del motore per regolare, ma non devi far girare il motore.
- Cerca la corrente di fase nominale del motore. Un NEMA 17 comune è da 1.5 A o 1.7 A.
- Prendine il 70–85% come obiettivo. La corrente nominale presuppone il raffreddamento della scheda tecnica che tu non hai e gli ultimi 20% di corrente comprano pochissima coppia producendo molto calore.
- Calcola Vref con la formula e la resistenza di sensore che possiedi davvero.
- Appoggia la sonda nera del multimetro su un pin di terra e quella rossa sulla vite metallica del potenziometro. Ruotalo lentamente—un quarto di giro è già una variazione grande—finché il multimetro non legge il tuo valore.
Conviene usare un cacciavite ceramico piccolo. Un cacciavite metallico che cortocircuita il potenziometro con qualcos’altro mentre la scheda è alimentata è un modo comune di distruggere un driver.
Vale la pena dirlo chiaramente: il limite di corrente è il T_peak nell’equazione della coppia che governa tutto ciò che fa un motore passo-passo. Impostalo basso e il motore resta più indietro per lo stesso carico e perde i passi prima; impostalo alto e il motore scalda per una coppia che potrebbe non servire. È l’unico numero su cui devi riflettere con attenzione.
Pin di microstepping
MS1, MS2 e MS3 hanno dei pull-down interni, quindi qualsiasi cosa lasci galleggiare viene letta come low:
| MS1 | MS2 | MS3 | Risoluzione | Passi per giro |
|---|---|---|---|---|
| low | low | low | Passo intero | 200 |
| high | low | low | Mezzo passo | 400 |
| low | high | low | Quarto di passo | 800 |
| high | high | low | Ottavo di passo | 1600 |
| high | high | high | Sedicesimo di passo | 3200 |
La maggior parte delle costruzioni mette un jumper su tutti e tre e li lascia lì. Il motivo non è la precisione—il microstepping non offre precisione sotto carico—ma il fatto che il passo sedicesimo evita che il motore oscilli a ogni passo, rendendo la macchina silenziosa e impedendo all’ondulazione di comparire nel lavoro. Il costo è che il microcontrollore deve ora emettere sedici volte tanti impulsi per millimetro, un vincolo reale su un Arduino Uno oltre circa 10 000 passi al secondo.
Pilotarlo
Lo sketch minimo utile. Nota che qui non c’è nessuna libreria: un passo è un impulso e questo è davvero tutto.
const int STEP_PIN = 3;
const int DIR_PIN = 4;
const int EN_PIN = 5; // active LOW
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW); // energise the coils
digitalWrite(DIR_PIN, HIGH);
}
void loop() {
// One revolution at 1/16 stepping = 3200 pulses.
for (int i = 0; i < 3200; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(2); // datasheet minimum is 1 us
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(300); // this delay IS the speed
}
delay(1000);
}
Questo codice funziona ed è anche esattamente ciò che non dovresti distribuire, per due motivi.
Il primo è che la frequenza dei passi salta immediatamente da zero alla massima. Richiedi una frequenza superiore al limite di pull-in del motore e lui ronzia senza avanzare—con i valori predefiniti nel simulatore di motori passo-passo, comandare la velocità massima da fermo perde 280 passi interi su uno spostamento di 60 mm e lascia l’asse a 4 mm. Lo stesso spostamento con una rampa arriva esattamente al bersaglio. Questa è la differenza che fa un profilo di accelerazione e non è un affinamento.
Il secondo è che delayMicroseconds blocca. Mentre il ciclo esegue i passi, sul microcontrollore non gira nient’altro—nessun controllo del finecorsa, nessuna seriale, nessun secondo asse. Per qualsiasi progetto reale usa il pattern di temporizzazione non bloccante oppure affidalo a AccelStepper, che implementa la rampa e la pianificazione per te:
#include <AccelStepper.h>
AccelStepper axis(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
void setup() {
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW);
axis.setMaxSpeed(8000); // steps/s -> 100 mm/s at 80 steps/mm
axis.setAcceleration(16000); // steps/s2 -> 200 mm/s2
axis.moveTo(80 * 50); // 50 mm
}
void loop() {
axis.run(); // returns immediately; call it constantly
}
setMaxSpeed e setAcceleration ti danno un profilo trapezoidale e nient’altro—non esiste un’opzione con curva a S. Se vuoi un profilo limitato in jerk, genera tu il valore di riferimento.
A4988 o una delle alternative?
| Driver | Corrente | Microstepping | Rumore | Sceglilo quando |
|---|---|---|---|---|
| A4988 | 1 A senza dissipatore, ~1.5 A con dissipatore | fino a 1/16 | Udibile | Costa poco, è disponibile ovunque ed è ben documentato |
| DRV8825 | 1.5 A senza dissipatore, ~2.2 A con dissipatore | fino a 1/32 | Udibile | Ti serve più corrente o passi più fini |
| TMC2208 | ~1.2 A | fino a 1/256 | Quasi silenzioso | Il rumore conta; è il motivo per cui le stampanti sono passate a questi driver |
| TMC2209 | ~1.7 A | fino a 1/256 | Quasi silenzioso | Come sopra, più il ritorno a zero senza sensore |
| ULN2003 + 28BYJ-48 | ~0.3 A | Mezzo passo | Ronzioso | Una demo su scala giocattolo, non una macchina |
Il DRV8825 è compatibile pin per pin ma la sua formula per Vref è diversa—Vref = I × 0.5—e il suo potenziometro ruota nel verso opposto. Sostituirlo senza rileggere la formula è un modo classico di distruggere un motore.
I driver TMC valgono la pena non appena una macchina vive in un luogo in cui puoi sentirla. Svolgono lo stesso lavoro con una forma d’onda di corrente più regolare, ed è per questo che una stampante con questi driver produce rumore di ventola invece che di motore.
Quando qualcosa va storto
| Sintomo | Causa | Soluzione |
|---|---|---|
| Il motore vibra ma non ruota | Coppie di bobine cablate male | Trova le coppie con la continuità e ricablaggiale |
| Non succede assolutamente nulla | ENABLE galleggiante o alto, oppure RESET/SLEEP basso | Collega ENABLE a terra; metti un jumper tra RESET e SLEEP |
| Il driver diventa troppo caldo da toccare, poi si ferma | Limite di corrente troppo alto | Rimisura Vref; aggiungi un dissipatore e il flusso d’aria |
| Il motore è caldo ma il driver è a posto | Normale | 60–80 °C sul case sono previsti |
| I passi si perdono solo nelle mosse veloci | Tensione di alimentazione troppo bassa per quella velocità | Alza VMOT—più corrente non aiuterà |
| I passi si perdono nelle accelerazioni brusche | Rampa troppo aggressiva oppure corrente troppo bassa | Riduci l’accelerazione oppure alza Vref verso il valore nominale |
| La scheda è morta appena alimentata | Condensatore di massa mancante su VMOT | Condensatore elettrolitico da 100 µF, vicino ai pin |
| Il motore mantiene la posizione ma gira in modo brusco | Passo intero | Metti i jumper su MS1–MS3 per 1/16 |
| La resistenza risulta aperta su una “coppia” | Quei due fili vengono da bobine diverse | Riapplica l’abbinamento |
Prossimo passo
Con il driver impostato, la domanda restante è quanti impulsi vale un millimetro di corsa—cosa che dipende interamente da cosa sta girando l’albero. Si tratta dei passi per millimetro ed è il numero rispetto a cui viene calibrata ogni altra parte della macchina.
Esplora il grafo
Fa parte di queste costruzioni
Progetti e percorsi di apprendimento che includono questo tutorial.
Per approfondire