Uso di driver DRV8825 con Arduino
Oggetto:Pilotare uno stepper direttamente con il driver DRV8825 Arduino
Contenuti: |
1 |
 |
DRV8825 + Motore Passo Passo + Codice di Esempio |
2 |

|
Stepper motor driver DRV8825 – Applicazione |
2 |

|
Pilotare un motore passo passo con Arduino e il driver A4988 |
3 |
 |
DRV8825: il driver per motori passo-passo |
4 |
 |
|
Il driver DRV8825 è più performante del A4988 e quindi prenderemo questo in considerazione.
Queste sono le connessioni di un driver DRV8825:
Lato sinistro:
ENABLE, M0, M1, M2, reset, sleep, step, dir
Lato destro:
VMOT, GND, B2,B1,A1,A2, FAULT, GND
Il driver DRV8825 è un driver per motori passo-passo che utilizza un'interfaccia di controllo per gestire i motori. Ecco una descrizione delle connessioni elencate:
- ENABLE : Questa connessione abilita o disabilita il driver. Se è alta (logica 1), il driver è abilitato e il motore funzionerà. Se è bassa (logica 0), il driver è disabilitato e il motore non riceverà corrente.
- M0, M1, M2 : Questi pin servono per selezionare la modalità di microstepping (frazionamento dei passi) del motore. Combinando diversi stati di questi pin, puoi ottenere diversi livelli di microstepping, come 1/1, 1/2, 1/4, 1/8, 1/16, ecc. Vedi tabella qui
- RESET : Il pin di reset serve per ripristinare il driver. Se viene messo a basso (logica 0), il driver si resetta e ritorna a uno stato di partenza.
- SLEEP : Il pin di sleep utilizzato viene per mettere il driver in modalità a basso consumo. Se messo a basso (logica 0), il driver entra in modalità sleep e smette di funzionare, riducendo il consumo energetico.
- STEP : Questo è il pin di input che controlla il movimento del motore. Ogni impulso di alta (logica 1) a bassa (logica 0) causa un passo del motore. La velocità del motore è determinata dalla frequenza degli impulsi su questo pin.
- DIR (Direzione) : Questo pin controlla la direzione del motore. Se è alto (logica 1), il motore ruoterà a destra, e se è basso (logica 0), ruoteràa sinistra.
- VMOT : Questo pin è dove si collega l'alimentazione principale del motore, tipicamente una tensione tra 8 e 45 V. Fornisce l'energia per il motore passo-passo.
- GND : Pin di terra comune per l'alimentazione del motore e la logica di controllo.
- B2, B1, A1, A2 : Questi sono i pin di uscita per i due avvolgimenti del motore passo-passo. A1 e A2 sono i pin per il primo avvolgimento (fasi A del motore), mentre B1 e B
- FAULT: (Guasto) Questo pin segnala se c'è un errore nel funzionamento del driver. Se il pin è basso (logica 0), significa che non ci sono errori. Se il pin è alto (logica 1), indica che c'è un malfunzionamento, come un surriscaldamento o un cortocircuito. Questo è utile per monitorare lo stato del conducente e adottare azioni correttive in caso di problemi.


I connettori reset e sleep sono portati entrabe a 5V che significa che sono entrabe disattivati. Reset resettta il driver se va a 0 e sleep lo mette in stanby se va a 0. Quindi mantenendoli a 5V si mantiene il driver attivo. Il connettore FAULT ha lo scopo di monitorare eventuali errori ed è un connettore di output se è a 5V è tutto ok se scende a 0V ci sono errori, ma noi in questo caso non vogliamo monitorare nulla e quindi lo lasciamo vuoto. L'alimentazione logica del driver a 5V viene ricavata dall'ingresso VMOT 8-45V mediante un regolatore interno che riduce la tensione di alimentazione del circuito logico con 5V. Aggiungere un condensatore tra VMOT e GNG stabilizza la corrente in ingresso, i 100 microfarad sono la dimensione giusta ma il voltaggio del condensatore deve essere superiore a quello necessario al motore, attenzione alla polarità.
Codice esempio:
Questo codice fa semplicemente fare un giro verso destra seguito da un giro a sinistra continuamente
/* Controllo con il drive DRV8825 */
// define pin used
const int stepPin = 9;
const int dirPin = 8;
const int spd1 = 250; // Velocità in microsecondi tra gli step
const int dly = 500; // Ritardo tra le rotazioni
void setup() {
// imposta i due pin come outputs
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
}
void loop() {
digitalWrite(dirPin,HIGH); //Abilita il motore a girare in senzo orario
// Per una rotazione completa richiede 400 passi con il 1/2 passo
for(int x = 0; x < 400; x++){
digitalWrite(stepPin,HIGH);
delayMicroseconds(spd1);
digitalWrite(stepPin,LOW);
delayMicroseconds(spd1);
}
delay(dly);
digitalWrite(dirPin,LOW); //Abilita il motore a girare in senzo antiorario
// Per una rotazione completa richiede 4000 passi con il 1/2 passo
for(int x = 0; x < 400; x++){
digitalWrite(stepPin,HIGH);
delayMicroseconds(spd1);
digitalWrite(stepPin,LOW);
delayMicroseconds(spd1);
}
delay(dly);
}
|
Versione con funzione:
/* Controllo con il drive DRV8825 */
// Definizione pin
const int stepPin = 9;
const int dirPin = 8;
const int stepsPerRev = 400; // Corretto per NEMA 17 con 1/2 step
const int spd1 = 250; // Velocità in microsecondi tra gli step
const int dly = 500; // Ritardo tra le rotazioni
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
void stepMotor(int steps, bool direction) {
digitalWrite(dirPin, direction ? HIGH : LOW); // Senso di rotazione
for (int x = 0; x < steps; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(spd1);
digitalWrite(stepPin, LOW);
delayMicroseconds(spd1);
}
}
void loop() {
stepMotor(stepsPerRev, true); // Rotazione in senso orario
delay(dly);
stepMotor(stepsPerRev, false); // Rotazione in senso antiorario
delay(dly);
}
|
Cos’è il VREF?
Il VREF (Voltage Reference) è la tensione di riferimento che si imposta sul driver DRV8825 per limitare la corrente massima che arriva al motore passo-passo.
Regolare correttamente il VREF è fondamentale per evitare:
✅ Surriscaldamento del motore
✅ Danni al driver
✅ Migliore efficienza e durata del motore
Come funziona il VREF?
Il DRV8825 utilizza il valore di VREF per calcolare la corrente massima per fase che invia al motore.
La formula è:
Corrente motore=VREF×2\text{Corrente motore} = VREF \times 2Corrente motore=VREF×2
Dove:
- VREF è la tensione misurata sul trimmer del driver.
- 2 è il fattore di conversione del DRV8825.
Ad esempio, per il tuo motore Nema 17 che supporta fino a 1.7 A per fase:
- Se VREF = 0.85V, la corrente sarà 0.85V × 2 = 1.7 A → OK per il tuo motore.
- Se VREF = 1.0V, la corrente sarà 1.0V × 2 = 2.0 A → Troppo alta! Potresti surriscaldare il motore e il driver.
- Se VREF = 0.7V, la corrente sarà 0.7V × 2 = 1.4 A → Più sicuro, ma con un po' meno coppia.
Come regolare il VREF sul DRV8825?
1️⃣ Collega il driver DRV8825 alla tua scheda di controllo (Arduino, CNC Shield, ecc.) senza collegare il motore.
2️⃣ Alimenta il driver con 24V.
3️⃣ Imposta il multimetro in modalità voltmetro (DCV) e collega il puntale nero al GND.
4️⃣ Collega il puntale rosso sul trimmer del driver (piccolo potenziometro).
5️⃣ Ruota il trimmer con un cacciavite piccolo fino a ottenere il valore corretto.
- Per 1.7 A, imposta 0.85V.
- Se vuoi ridurre un po’ la corrente (per evitare surriscaldamento), puoi impostarlo a 0.75V (circa 1.5 A).
6️⃣ Collega il motore e testa il movimento.
Conclusione
- Per il tuo motore Nema 17 (1.7 A max) e il DRV8825, imposta VREF = 0.85V per avere 1.7 A per fase.
- Se il motore scalda troppo, prova VREF = 0.75V per ridurre la corrente a 1.5 A.
- Non superare mai 1.7 A perché potresti danneggiare il motore o il driver.
|