Come pilotare un motore passo passo usando l’integrato L298N

Quando osservo i robot industriali assemblare, saldare, fresare o posizionare oggetti con una precisione sconcertante rimango affascinato dalla capacità umana di poter costruire queste macchine.
Anche nelle nostre abitazioni sono presenti oggetti dotati di parti meccaniche, che compiono movimenti molto precisi, come ad esempio le stampanti, i plotter e gli scanner.
Questi dispositivi hanno in comune tra loro un particolare dispositivo chiamato motore passo passo (stepper motor).
E’ un trasduttore elettromeccanico che converte degli impulsi elettrici in un movimento fisico. Ad ogni impulso elettrico corrisponde un movimento del rotore; questo spostamento viene chiamato step.
A differenza del motore in corrente continua i motori passo passo possono mantenere la propria velocità di rotazione costante, anche con carico applicato, senza usare sistemi di controreazione (tachimetriche o encoder).
Il motore eroga una coppia elevata, anche con bassi numeri di giri, possiede accelerazioni e frenate repentine ed è capace di mantenere il carico applicato fermo in posizione, senza vibrazioni.

Naturalmente esistono anche degli svantaggi, tra cui la necessità di utilizzare un circuito elettrico di pilotaggio, un rendimento energetico basso, una velocità di rotazione ridotta ed un costo di acquisto elevato.

La figura seguente mostra, in maniera semplificata, il principio di costruzione di un motore passo passo.

Motore Passo Passo

Il movimento del rotore avviene alimentando le bobine in modo consecutivo. Eccitando solo la bobina A1 il rotore si posiziona verso NORD, eccitando solo la bobina B1 il rotore si posiziona in direzione EST, eccitando solo la bobina A2 il rotore si posiziona in direzione SUD ed infine eccitando solo la bobina B2 il rotore si posiziona in direzione OVEST.
La tabella seguente riassumere la sequenza.

Fasi di Alimentazione
A1 A2 B1 B2
Fase 1 +
Fase 2 +
Fase 3 +
Fase 4 +

Seguendo le fasi di alimentazioni A1-B1-A2-B2 il rotore si sposterà in senso orario, invertendo la sequenza B2-A2-B1-A1 il rotore si sposterà in senso antiorario. E’ importante alimentare le bobine in modo sequenziale perché il rotore deve seguire in maniera lineare il campo elettromagnetico generato dalle bobine.

Naturalmente nei motori passo passo reali la sequenza delle 4 fasi fa girare l’albero di un solo passo (step). Il numero dei passi è una caratteristica costruttiva del motore, solitamente ha un valore di 200 step/giro, ma ne esistono anche da 20, 24, 48 e 400 step/giro. Il numero di step può essere espresso in gradi sessagesimali, ad esempio un motore da 7.5° equivale ad uno con 48 step/giro (360°/7.5°=48).
Le 4 fasi di alimentazione delle bobine (considerando un ipotetico motore da 1 step/giro), viene rappresentata dalla figura seguente:

Fasi di alimentazione motore passo passo

La sequenza di alimentazione è solitamente gestita da un integrato a logica programmabile mentre il compito di fornire l’energia è demandato ad un ponte ad H. Abbiamo affrontato l’utilizzo del ponte H in questo precedente articolo. Per essere più precisi, avendo 4 fili, dobbiamo usare due ponti H uno che alimenta le bobine A1 e A2 e l’altro che alimenta le bobine B1 e B2.

In questo tutorial ho usato come microcontrollore la Arduino Leonardo e come doppio ponte H il driver L298N prodotto da ST Microelectronics. Il motore è un 48 passi/giro operante a 12Vdc, smontato da una vecchia stampante non più funzionante.

Collegamento dei componenti

Il circuito elettrico che permette di pilotare il motore è rappresentato nella figura seguente:

Motore passo passo l298

riassumo i collegamenti tramite la tabella seguente

Motore Passo Passo Integrato L298N Arduino Leonardo
  1-8-15 GND
  6-9-11 VCC 5Vdc
  5 5
  7 4
  10 3
  12 2
 A1 14  
 A2 13  
 B1 3  
 B2 2  
Alimentazione Motore 12Vdc 4  

i diodi in contro fase servono per proteggere le uscite dell’integrato L298N da eventuali sovratensioni generate durante l’alimentazione delle bobine.

Il codice necessario per pilotare il motore rispecchia quanto detto precedentemente. In pratica è necessario alimentare in modo consecutivo le bobine rispettando le quatto fasi.

void setup()
{
  //i pin 2-3-4-5 sono
  //configurati come uscite
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);

  //forzo le uscite a livello logico basso
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
}

void loop()
{
  //FASE 1
  //Alimento solo la prima bobina
  digitalWrite(2, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  delay(10);

  //FASE 2
  //Alimento solo la seconda bobina
  digitalWrite(2, LOW);
  digitalWrite(3, HIGH);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  delay(10);

  //FASE 3
  //Alimento solo la terza bobina
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, HIGH);
  digitalWrite(5, LOW);
  delay(10);

  //fase 4
  //Alimento solo la quarta bobina
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, HIGH);
  delay(10);

}

Una volta caricato lo sketch, l’albero del motore inizierà a girare in senso orario. Per invertire la rotazione è sufficiente alimentare le bobine dalla fase 4 alla fase 1.

Cambiando il valore del delay() otterremmo una variazione di velocità nella rotazione del rotore.

Se avete delle stampanti vecchie potete subito passare alla pratica realizzando piccoli meccanismi e semplici robot. Volendo si possono collegare alla Leonardo 2 driver L298N per pilotare altrettanti motori passo passo, questo vi permette di poter controllare i due motori simultaneamente creando sistemi meccanici più complessi.