I Motori Passo-Passo

[iscritti estratto=500] I motori passo-passo o “stepper”, per le loro caratteristiche di compattezza, affidabilità e costi relativamente contenuti, rappresentano una scelta piuttosto diffusa in gran parte delle realizzazioni in campo di automazione. In questo articolo vediamo nei dettagli quelli che sono i principi del loro funzionamento.
 
Introduzione
I motori passo-passo, conosciuti anche come motori stepper, sono una tipologia di motori sincroni in corrente continua senza spazzole capaci di suddividere un giro del proprio rotore in un numero  n di passi, quest’ultima caratteristica li differenzia ed appunto li caratterizza in quanto rispetto alle altre tipologie di motori è possibile controllarli in catena aperta. Infatti, a differenza delle altre tipologie di motori dove per il controllo della posizione normalmente è necessario un encoder, nei motori passo-passo basta conoscere la posizione iniziale e il numero di passi che compongono la rotazione completa, contando quindi il numero dei passi fatti si conoscerà la posizione corrente del motore.
Questo motore rappresenta la soluzione ideale in quelle applicazioni che richiedono precisione nello spostamento angolare e nella velocità di rotazione, come ad esempio nelle applicazioni robotiche, in stampanti, scanner o nei servomeccanismi in generale.
In questo articolo partiremo da una veloce descrizione meccanica dei motori passo-passo, per poi scendere più nel dettaglio delle equazioni matematiche, parlare delle tecniche di controllo comunemente usate, infine vedremo un implementazione pratica di controllo di un motore passo-passo mediante Arduino.
Caratteristiche Meccaniche dei Motori Passo-Passo
Il principio di funzionamento del motore passo-passo si basa sul fatto che questo motore, a differenza degli altri, se alimentato riesce a mantenere fermo l’albero in un punto di equilibrio; quindi per farlo muovere ad un determinata velocità o per portare l’albero ad un posizione desiderata bisogna, mediante un sequenza opportuna di impulsi, spostare il punto d’equilibrio in modo tale che l’albero ruoti muovendosi verso la nuova posizione d’equilibrio.
Le possibili posizioni d’equilibrio per il motore sono fissate meccanicamente, quindi per portare il motore ad una posizione desiderata basterà contare il numero di impulsi inviati al motore, mentre per controllare la velocità di rotazione basterà controllare la frequenza con cui si inviano gli  impulsi al motore.
La figura 1 mostra il principio di funzionamento: nell’immagine a sinistra, l’elettromagnete 1 viene eccitato, il rotore quindi sotto l’azione attrattiva dell’elettromagnete ruoterà in modo tale da portare i propri denti in equilibrio rispetto all’elettromagnete.

1M

Figura 1: Esempio di Funzionamento

 
Nell’immagine a destra (sempre in Figura 1), l’elettromagnete 1 viene spento e viene acceso l’elettromagnete 2, anche in questo caso rotore sotto l’azione dell’elettromagnete ruoterà in modo da portare i propri denti in equilibrio, tra i due passaggi il rotore ha compiuto un “passo”.
Eccitando via via gli altri elettromagneti si fa ruotare il motore, il numero di passi necessari per effettuare un giro è un parametro costruttivo del motore e determina la risoluzione nel posizionamento dell’albero. Come vedremo in seguito, alimentando i due elettromagneti contemporaneamente, il rotore sotto l’azione di quest’ultimi tenterà di raggiungere la posizione d’equilibrio fermandosi però a metà strada, ottenendo in questo caso uno stato intermedio chiamato  “mezzo passo”.
I motori passo-passo si dividono tradizionalmente in 3 grandi gruppi: i motori a magnete permanente, quelli a riluttanza variabile e i motori ibridi, che sono quelli attualmente più usati. Come tutti i motori, sono composti da uno statore e da un rotore, come visibile in figura 2 il rotore è  composto da due ruote dentate permanentemente magnetizzate sfasate tra loro di mezzo passo.

 2M

Figura 2: Motore Passo-Passo

3S

Figura 3: Simbolo Elettrico

Sul rotore non sono presenti fili o contatti striscianti, questo è una delle caratteristiche che rende il motore più robusto e gli dona un vita più lunga rispetto ai motori con contatti striscianti. Lo statore invece è  composto dai classici elettromagneti, il motore in figura ne ha 8, su ogni elettromagnete sono presenti dei denti, che sono sfalsati tra loro in modo da costringere il rotore a ruotare al fine di trovare la posizione d’equilibrio.
Tecniche di Pilotaggio
Le tecniche di pilotaggio per i motori passo-passo dipendono dalla loro tipologia, quest’ultimi infatti, possono avere quattro fili o sei fili.

4S

Figura 4: Driver Unipolare

I Motori con sei fili sono spesso erroneamente chiamati motori a quattro fasi, in realtà in tutti i motori passo-passo le fasi sono sempre e soltanto due. Un nome un po’ più appropriato per questo genere di motori è quello di motori unipolari, in quanto vengono pilotati con un driver unipolare, anche se è possibile pilotarli con un driver bipolare. Per quanto riguarda invece i motori con quattro fili, che d’ora in poi chiameremo bipolari, questi possono essere pilotati soltanto da un driver bipolare. La figura 4 mostra lo schema circuitale di un motore pilotato da un driver unipolare, le spine centrali delle due fasi del motore sono collegate alla tensione d’alimentazione, mentre ognuna della due fasi è controllata da due transistor.
Nei motori a quattro fili il pilotaggio del motore avviene tramite un driver bipolare, ovvero tramite un H-Bridge, come quello mostrato nella figura 5. Il pilotaggio avviene accendendo due transistor complementari per volta, purché non siano sullo stesso braccio del ponte in quanto si manderebbe in corto l’alimentazione.

 5S

Figura 5: Driver Bipolare

I motori passo-passo possono essere pilotati in modalità full-step, ovvero si fa ruotare il rotore di un passo alla volta o in modalità half-step, ovvero mediante rotazioni di mezzo passo.
Il pilotaggio full-step di un motore unipolare avviene accendendo coerentemente una coppia di transistor per volta, così ad esempio, riferendosi ai transistor del driver unipolare mostrato nella figura 4, accendendo contemporaneamente i transistor Q2 e Q4, la corrente scorrerà sul morsetto negativo della fase A e sul morsetto negativo della fase B, facendo ruotare il rotore di un passo i senso antiorario. Nella figura 6 viene riportata la tabella della commutazioni dei transistor nel caso di pilotaggio unipolare full step.

 Tab.6S

Figura 6: Transizioni Full-Step

Per quanto riguarda invece la modalità half-step, gli stati attivi possibili per il driver sono otto, quindi considerando la tabella delle transizioni, mostrata nella figura 7, questa contiene otto righe.

 Tab7M

Figura 7: Transizioni Half-Step

Rispetto al caso precedente sono presenti quattro possibili stati in più corrispondenti ai casi in cui viene acceso soltanto un transistor, ovvero ai casi in cui viene alimentata soltanto una delle due fasi che costituiscono il motore, si fa notare che alimentando soltanto una fase del motore, su quest’ultimo scorrerà una corrente minore e di conseguenza si svilupperà una coppia minore.  La logica per il controllo dei motori passo-passo bipolari è identica a quella dei motori unipolari, l’unica differenza sta nel numero di transistor accesi contemporaneamente, che rispetto al caso unipolare raddoppia, il numero delle transizioni quindi resta uguale, nella figura 8 viene, ad esempio, mostrata la tabella delle transizioni per il pilotaggio di un motore bipolare in half-step.

Tab8M

Figura 8: Transizioni Half-Step

 
Equazioni del Motore
Il controllo dei motori passo-passo avviene inviando al driver un treno d’impulsi che indicano a quest’ultimo quali transistor accendere, la frequenza con cui vengono inviati gli impulsi, ovvero il tempo tra l’invio di un treno e il successivo influisce sulla velocità e quindi sulla posizione dell’albero del motore.
Per ottenere determinate prestazioni in termini di accelerazione o velocità dell’albero del motore è necessario calcolare il tempo tra una transizione e la successiva nelle tabelle fin qui viste, all’atto pratico questo tempo non sarà altro che il tempo di interrupt con il quale il microcontrollore invia il segnale di pilotaggio al driver del motore.
Definendo il tempo di step come il tempo tra un passo di aggiornamento e il successivo,
formula1
dalle semplici equazioni fisiche che descrivono il moto dell’albero e ricordando che un motore passo-passo si comporta come un sistema discreto, si ricavano le espressioni della velocità
formula2
e della posizione dell’albero motore,
formula3
dove con n si è indicata proprio la posizione n-esima dell’albero, riscrivendo quest’ultima in funzione del tempo si ottiene,
formula4
che è l’espressione del tempo affinché il motore ruoti con un’accelerazione costante, a questo punto riconsiderando l’espressione del tempo di step si ottiene,
formula5
avendo definito
formula6
per ottenere quindi valori di accelerazione costante per il motore basterà fissare quest’ultima al valore desiderato e calcolare di conseguenzaT0 ,ovvero il tempo di aggiornamento delle transizioni sul driver.
Fin qui si è parlato di profili ad accelerazione costante; spesso quando si parla di motori si fa confusione tra profili ad accelerazione costante e profili ad accelerazione lineare. Nella figura 9 vengono, ad esempio riportati gli andamenti della velocità dell’accelerazione e della posizione per un motore passo-passo con un profilo di velocità lineare, ovvero ad accelerazione costante.

 9S

Figura 9: Profilo a Velocità Costante

Sono presenti tre fasi, la velocità ha un profilo lineare trapezoidale, l’accelerazione è un insieme di gradini mentre la posizione, che è l’integrale della velocità, ha un profilo quadratico.
Come visto dalle precedenti equazioni, un profilo ad accelerazione costante, quindi con velocità lineare, richiede un semplice calcolo del tempo di aggiornamento degli impulsi da mandare al driver, variando l’accelerazione varierà quest’ultimo ma non la tabella delle transizioni che resterà sempre valida. Un profilo ad accelerazione lineare invece richiede un sforzo computazionale maggiore in quanto, oltre al tempo, al variare dell’accelerazione bisogna ricalcolare la tabella delle transizioni. Questa maggiore complessità di calcolo tuttavia non viene ripagata dalle prestazioni dinamiche he solo in rari casi, ad esempio nel caso in cui siano presenti elementi elastici sulla trasmissione del moto, si dimostrano migliori rispetto ad un profilo ad accelerazione costante.
Quindi a fronte delle migliori prestazioni e della semplicità d’implementazione il controllo con una profilo ad accelerazione costante (velocità lineare) è maggiormente usato. Tuttavia nel dimensionamento della logica di funzionamento spesso si incorre in errori più o meno grossolani.
Uno di questi consiste nel ridurre il tempo di step linearmente, ovvero il tempo tra un invio d’impulsi al driver e il successivo, all’aumentare del numero di step: una logica di questo tipo crea una curva per la velocità che cresce iperbolicamente al diminuire del tempo di step.
Un altro errore comune è quello di ridurre il tempo di step dividendolo per il l’inverso dello stesso numero di passi: una logica di questo tipo porta ad una curva di velocità lineare rispetto al numero di step ma cambia di volta in volta lo “step time” creando così una curva di velocità che non è lineare ma risulta invece del secondo ordine, dove la velocità aumenta in funzione dal quadrato del tempo.
Esempio di Controllo con Arduino
In questo semplice esempio verrà utilizzato un Arduino Uno per gestire un motore passo-passo unipolare mediante il driver L293D, in figura 10 viene mostrato lo schema circuitale.

 10M

Figura 10: Schema Circuitale

Chiunque abbia un po’ di dimestichezza con Arduino sa che il modo più semplice per scrivere un programma (sketch) per questa scheda  controllore è utilizzando l’apposito programma (scaricabile dal sito www.arduino.cc). Nel nostro caso si è scritto un semplice sketch che si occupa di impostare i parametri del motore (il numero di passi), del circuito (di definire i pin del driver collegati ad Arduino) e di fissare la velocità di rotazione del motore in fase di inizializzazione. Durante l’esecuzione invece lo sketch non fa altro che far ruotare il motore tra due posizioni.
In Listato 1 viene riportato lo sketch completo usato, come si vede dal codice Arduino è già provvisto di una apposita libreria per la gestione dei motori passo-passo (stepper.h) e nel nostro caso è stato usato l’oggetto Stepper, per la definizione del motore, dichiarando il numero di passi del motore e i pin di Arduino a cui è connesso il driver di pilotaggio.

Listato 1
// Programma di Gestione di un Motore Passo-Passo
#include <Stepper.h>

// Definizione del numero di step del motore
#define STEPS 200
// Definizione del motore (Numero di passi e pin collegati al Driver)
Stepper Motore(STEPS 4,5,6,7);
// Setup
void setup(){
// Fisso la velocità del motore (Numero di giri al minuto)
Motore.setSpeed(10);
}
// Loop
void loop(){
Motore.step(80);
delay(200);
Motore.step(-80);
delay(200);
}

 
Per quanto riguarda invece il pilotaggio del motore sono state usate le funzioni:
– setSpeed(int speed), dove la variabile speed rappresenta il valore di velocità desiderato come numero di giri al minuto
– step(int step), dove la variabile step rappresenta il numero di passi da fare
Come si vede Arduino riesce a rendere semplicissimo il controllo di un oggetto mediamente complesso come un motore passo-passo. Chiaramente le funzioni viste controllano soltanto la velocità e la posizione del motore, nel caso in cui si volesse implementare un controllore per i vari  profili di accelerazione probabilmente sarà necessario creare delle funzioni ad-hoc. [/iscritti]

Redazione