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.

Una portante A4988 vista dall'alto con otto pad placcati d'oro su ciascun lato. La colonna sinistra di pad riporta ENABLE, MS1, MS2, MS3, RESET, SLEEP, STEP e DIR, con STEP e DIR evidenziati. La colonna destra riporta VMOT, GND, 2B, 2A, 1A, 1B, VDD e GND, con VMOT evidenziato in rosso. In alto, un potenziometro di regolazione è indicato come VREF, da sondare con un multimetro, e un dissipatore a alette copre il chip del driver. In basso, due piccole resistenze di sensore sono chiamate R100, pari a 0.1 ohm, oppure R050, pari a 0.05 ohm, con l'avvertenza di leggere la tua prima di calcolare qualsiasi cosa.
Sedici pad, un potenziometro di regolazione e due minuscole resistenze che cambiano l'aritmetica. STEP e DIR sono gli unici due pin che lo sketch tocca durante il funzionamento; tutto il resto è configurazione. Scarica SVG

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 è:

  1. 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.
  2. Cerca la corrente di fase nominale del motore. Un NEMA 17 comune è da 1.5 A o 1.7 A.
  3. 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.
  4. Calcola Vref con la formula e la resistenza di sensore che possiedi davvero.
  5. 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

Fonti