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:

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:

MS1MS2MS3Risoluzione Motore
LowLowLow1 – Full step
HighLowLow1/2 – Half step
LowHighLow1/4 – Quarter step
HighHighLow1/8 – Eighth step
HighHighHigh1/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.

Durante i miei test non ho fatto nessuna regolazione, sarà fortuna o sarà un caso, ma né il modulo né il motore sembrano risentirne.

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.

Connessione base di un Arduino con il driver A4988

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




Approfondimenti

Ricerche che hanno riportato a questa pagina:

Potrebbero interessarti anche...