Come usare uno stepper motor con Arduino

Come usare uno stepper motor con Arduino

Introduzione

In questo articolo tratteremo la realizzazione di un dispositivo Arduino in grado di comandare motore elettrico passo-passo (o stepper motor). Questo tipo di motori trova grande applicazione in campo hobbistico grazie alla loro versatilità e alla facilità con cui è possibile controllare posizione e velocità di rotazione. Non è dunque necessario essere grandi esperti di controllori automatici, sistemi ad anello chiuso ecc. per poter gestire questo tipo di motori.
Questo articolo quindi spiegherà come realizzare un circuito Arduino in cui, tramite un potenziometro, sarà possibile regolare la velocità angolare dello stepper motor.

Come Usare Uno Stepper Motor Con Arduino - stepper motor - ProjectEMS

L’utente può, partendo da questo esempio, sviluppare applicazioni più complesse utilizzando sensori, pulsanti o ad esempio collegare un utilizzatore al motore per fargli compiere un qualche lavoro.

Componentistica

Per utilizzare uno stepper motor con Arduino si richiede l’utilizzo dei seguenti componenti:

Cenni di elettrotecnica

Uno stepper motor è un motore elettrico senza spazzole o, brushless, in corrente continua pulsata in grado di suddividere la propria rotazione in un gran numero di passi (step, da qui il nome). È costituito da uno statore (parte fissa) e un rotore (parte in movimento). Lo statore è formato da due coppie di bobine (polo positivo e negativo) che altro non sono che delle spire metalliche al cui interno viene fatta passare la corrente al fine di generare un campo elettromagnetico, il vero responsabile della rotazione dell’albero del motore (rotore). La peculiarità di questo tipo di motori è che il vero obiettivo è quello di mantenere in equilibrio l’albero. Ciò significa che fornendo al motore corrente, esso tende a muovere di una ben precisa posizione angolare e bloccarsi. Si intuisce dunque che per ottenere una rotazione continua, bisogna inviare al motore una serie di impulsi di corrente in modo controllato. In questo modo, conoscendo l’opportuna sequenza dei segnali da inviare al motore, è possibile muoverlo di un angolo desiderato oppure ad una velocità angolare desiderata.

Come Usare Uno Stepper Motor Con Arduino - Struttura Motore Passo Passo - ProjectEMS

I motori passo-passo si suddividono in due tipologie:

  • motori unipolari, caratterizzati dal fatto che la corrente in una singola fase ha sempre lo stesso verso. Sono presenti al loro interno 4 avvolgimenti avvolti a coppie, in antiparallelo, sulle espansioni polari. All’esterno sono costituiti da almeno 5 cavi.
  • motori bipolari, caratterizzati dal fatto che la corrente deve percorrere le due fasi con verso discorde al fine di generare il campo magnetico. A differenza dei primi, sono qui presenti solo 2 avvolgimenti e per questo motivo all’esterno troviamo soltanto due coppie di cavi.

In questo articolo si farà uso di motori stepper bipolari.

Schema del circuito

In figura è mostrato lo schema elettrico del sistema per utilizzare uno stepper motor con Arduino.
ComeUsareUnoStepperMotor Con Arduino - stepper motor circuito - ProjectEMS

Procedimento

Alimentiamo innanzitutto il circuito con una tensione pari a quella specificata nel datasheet del motore (di solito tra 5 e 12 V) collegando i cavi rosso (+) e nero (-) dell’alimentatore alla breadbord.
Procediamo inserendo il potenziometro sulla breadboard, collegando il positivo e il negativo all’alimentatore, mentre il terminale centrale va collegato tramite un cavo al pin analogico 0 di Arduino.
A questo punto non resta che collegare il motore tramite i suoi 4 cavi. Ecco che qui entra in gioco il modulo Driver ULN2003A: esso funziona come un transistor, ovvero permette di gestire intensità di corrente maggiori di quelle consentite dai pin di Arduino. Il modulo utilizzato in questo articolo ha 8 uscite per lato come mostrato nella figura seguente ma ne verranno utilizzate solo alcune di esse.

Come Usare Uno Stepper Motor Con Arduino - Motor Driver E ULN2003A - ProjectEMS

Connettiamo quindi ai primi quattro pin del lato superiore del modulo (nel riferimento dell’immagine) i cavi uscenti dal motore (rosso, nero, rosso, nero) e l’ottavo pin nella riga della breadboard corrispondente al positivo.
Passando al lato inferiore del modulo, bisogna collegare i primi 4 pin rispettivamente alle porte digitali 11, 10, 9 e 8 di Arduino e l’ottavo al ramo negativo della breadboard.
Infine bisogna non dimenticare di collegare il pin GND di Arduino al ramo della massa sulla breadbord.

Codice

Colleghiamo Arduino al Pc tramite il cavo USB e avviamo il software.
Il primo passo consiste nel richiamare la libreria Stepper; per far ciò utilizziamo la seguente sintassi:

#include

Creiamo quindi una variabile che inizializzi il numero di steps del proprio motore:

#define STEP 100;

A questo punto, in riferimento alla libreria (o classe) utilizzata (nel nostro caso Stepper), bisogna creare una sua istanza stepper() specificando il numero di steps del motore ed i pin di output utilizzati. La sintassi è la seguente:

Stepper stepper(STEPS, 8, 9,10,11);

Per l’istanza appena creata possiamo definire un metodo, setSpeed() che va a definire la velocità del motore in RPM; scriviamo:

stepper.setSpeed(30);

Dopo aver definito tutto il contorno, possiamo entrare veramente nel cuore dell’azione definendo il loop. Si vuole che il motore legga il valore attuale del potenziometro, lo confronti con il precedente, e faccia ruotare il motore di una quantità pari alla differenza dei valori letti.
A tal proposito è bene definire la variabile che vada a memorizzare il valore del potenziometro “precedente”, ovvero quello con cui confrontare il valore attuale. All’inizio sarà:

int old_val = 0;

All’interno del loop invece ci sarà innanzitutto una variabile per leggere il valore associato al pin 0 (ovvero quello a cui è collegato il potenziometro):

int val = analogRead(0);

ed il metodo step() che indica la rotazione da applicare al motore.

stepper.step(val – old_val);

Prima di uscire dal loop ci si deve ricordare di aggiornare il valore di riferimento del potenziometro, che ora sarà:

old_val = val;

Il riassunto del codice è quindi mostrato nella figura seguente.

[crayon-5c9364a3c55cd268855379/]

 

Banner Videocorso Gratuito Lavoro con i Droni