Motori passo-passo, pilotarli con Arduino – quarta parte

Ed eccoci giunti al primo anello di congiunzione tra mie due passioni, elettronica ed informatica, scriviamo il codice per pilotare i motori passo-passo unipolari.

Non mi dilungherò sull’uso di Arduino e del suo software di programmazione, per queste conoscenze puoi fare riferimento al sito ufficiale ed ai numerosi  tutorial, guide ed esempi su come iniziare con questo favoloso strumento.

Iniziamo subito con il primo esempio di codice preso direttamente dal sito arduino nella sezione tutorial:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/* Stepper Copal
 * -------------
 *
 * Program to drive a stepper motor coming from a 5'25 disk drive
 * according to the documentation I found, this stepper: "[...] motor
 * made by Copal Electronics, with 1.8 degrees per step and 96 ohms
 * per winding, with center taps brought out to separate leads [...]"
 * [http://www.cs.uiowa.edu/~jones/step/example.html]
 *
 * It is a unipolar stepper motor with 5 wires:
 *
 * - red: power connector, I have it at 5V and works fine
 * - orange and black: coil 1
 * - brown and yellow: coil 2
 *
 * (cleft) 2005 DojoDave for K3
 * http://www.0j0.org | http://arduino.berlios.de
 *
 * @author: David Cuartielles
 * @date: 20 Oct. 2005
 */
 
int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 500;
 
void setup() {
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
}
 
void loop() {
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);
}

Grazie a questo esempio possiamo far compiere al nostro motore i primi passi, anzi in questo caso i primi giri. Il codice è molto semplice, se hai già dimestichezza con la sintassi Arduino:

le linee 23-26 impostano la corrispondenza tra la fase del motore e il pin a cui è collegata su Arduino;
la linea 27 imposta il ritardo di rotazione, in millisecondi, tra un passo e quello successivo;
le linee 29-34 settano i parametri iniziali del programma, nel caso specifico imposta i pin di arduino in modalità OUTPUT per l’invio dei segnali;
la linea 36 definisce il loop che il programma eseguirà continuamente una volta avviato;
le linee 37-40 indicherano ad arduino di inviare un segnale alto ( HIGH ) sul pin 8, quest’ultimo collegato all’ULN2003A, collegherà la fase corrispondente facendo avanzare l’asse del motore, le stesse impostano come segnale basso ( LOW ) i pin dal 9 al 11, mantre la linea 40 indica di attendere il tempo di ritardo impostato ( 5oo millisecondi ) prima di procedere ad eseguire le istruzioni successive.
le linee che seguono 42-46, 47-51 e 52-56 impostano a livello alto in successione i pin 9,10 e 11 creando l’effetto rotazione ed attendendo per ogni passo del motore un tempo di 500 millisecondi prima di procedere oltre.

Essendo le linee dalla 36 alla 57 inserite in una speciale funzione detta “loop” di arduino il risultato è un ciclo continuo dell’alberino del motore.

Nel prossimo articolo avalizzeremo un codice più complesso con cui pilotare 2 motori, nell’attesa ti invito a sperimentare cosa accade se modifichi il “delayTime” da 500 ad un valore inferiore o superiore, buona sperimentazione.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/informatica/motori-passo-passo-pilotarli-con-arduino-quarta-parte.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.