Beruflich Dokumente
Kultur Dokumente
(http://diymakers.es/)
(28/12/13)
En este tutorial veremos que es un motor paso a paso, las diferentes maneras de
conectarlos y como controlarlos con Arduino.
Material
-Arduino Uno Rev 3
http://diymakers.es/movermotorespasopasoconarduino/ 1/39
6/5/2016 MovermotorespasoapasoconArduino|DIYMakers
-L293D
-ULN2803
-2 Transistores NPN
-Pulsadores
-Potencimetro
-Fuente alimentacin
Son motores con mucha precisin, que permiten quedar jos en una posicin (como un
servomotor) y tambin son capaces de girar libremente en un sentido u otro (como un motor
DC).
-Motor paso a paso de imn permanente (los que usaremos en este tutorial).
-El estator es la parte ja del motor donde sus cavidades van depositadas las bobinas.
-El rotor es la parte mvil del motor construido por un imn permanente.
http://diymakers.es/movermotorespasopasoconarduino/ 2/39
6/5/2016 MovermotorespasoapasoconArduino|DIYMakers
Funcionamiento
Cuando circula corriente por una o ms bobinas del estator se crea un campo magntico
creando los polos Norte-Sur. Luego el rotor se equilibrar magnticamente orientando sus polos
Norte-Sur hacia los polos Sur-Norte del estator. Cuando el estator vuelva a cambiar la orientacin
de sus polos a travs de un nuevo impulso recibido hacia sus bobinas, el rotor volver a moverse
para equilibrarse magnticamente. Si se mantiene esta situacin, obtendremos un movimiento
giratorio permanente del eje. El ngulo de paso depende de la relacin entre el nombre de polos
magnticos del estator y el nombre de polos magnticos del rotor.
http://diymakers.es/movermotorespasopasoconarduino/ 3/39
6/5/2016 MovermotorespasoapasoconArduino|DIYMakers
Hay dos tipos de motores paso a paso: los unipolares y los bipolares.
La diferencia entre los dos es que un motor paso a paso unipolar se activa una bobina a la vez
mientras que un motor bipolar se activa ms de una bobina a la vez. Esto hace que un motor
bipolar tenga ms torque que un motor unipolar. Por contra, un motor bipolar es ms complejo
de controlar que un unipolar.
Paso 1 1 0 1 0
Paso 2 1 0 0 1
Paso 3 0 1 0 1
Paso 4 0 1 1 0
http://diymakers.es/movermotorespasopasoconarduino/ 4/39
6/5/2016 MovermotorespasoapasoconArduino|DIYMakers
Hay tres secuencias para controlar los motores paso a paso unipolares
Simple o wave drive: Es una secuencia donde se activa una bobina a la vez. Esto hace que el
motor tenga un paso ms suave pero por el contrario tenga menos torque y menos retencin.
Paso 1 1 0 0 0
Paso 2 0 1 0 0
Paso 3 0 0 1 0
Paso 4 0 0 0 1
Normal: Es la secuencia ms usada y la que recomiendan los fabricantes. Con esta secuencia el
motor avanza un paso por vez y siempre hay dos bobinas activadas. Con esto se obtiene un
mayor torque y retencin.
Paso 1 1 1 0 0
Paso 2 0 1 1 0
Paso 3 0 0 1 1
Paso 4 1 0 0 1
Medio paso: Se activan primero dos bobinas y despus solo una y as sucesivamente. Esto
provoca que el motor avance la mitad del paso real. Esto se traduce en un giro ms suave y
preciso.
Paso 1 1 0 0 0
Paso 2 1 1 0 0
Paso 3 0 1 0 0
Paso 4 0 1 1 0
Paso 5 0 0 1 0
Paso 6 0 0 1 1
Paso 7 0 0 0 1
Paso 8 1 0 0 1
Para controlar motores paso a paso con Arduino, utilizaremos la librera <Stepper.h> que viene
con el software de este.
1 /*
2 www.diymakers.es
3 byA.Garca
4 MovermotorespasoapasoconArduino
5 Tutorialen:http://diymakers.es/movermotorespasopasoconarduino/(http://diymak
6 */
7
8 #include<Stepper.h>//Importamoslalibreraparacontrolarmotorespasoapaso
9
10 #defineSTEPS200//Ponemoselnmerodepasosquenecesitaparadarunavuelta.200e
11
12 //Ponemosnombrealmotor,elnmerodepasosylospinsdecontrol
13 Stepperstepper(STEPS,8,9,10,11);//Steppernombremotor(nmerodepasosporvuel
14
http://diymakers.es/movermotorespasopasoconarduino/ 6/39
6/5/2016 MovermotorespasoapasoconArduino|DIYMakers
14
15 voidsetup()
16 {
17 //VelocidaddelmotorenRPM
18 stepper.setSpeed(100);
19 }
20
21 voidloop()
22 {
23 //Girarunavueltaenteraenunsentido
24 stepper.step(200);
25 delay(500);//Pequeapausa
26
27 //Girarunavueltaenteraensentidocontrario
28 stepper.step(200);
29 delay(500);//Pequeapausa
30 }
Utilizando esta conexin tenemos un pequeo problema, y es que usamos cuatro pins del
Arduino para controlar el motor, y eso son muchos. Si queremos controlar ms de un motor
paso a paso y usar otros pins para otras conexiones, nos quedaremos cortos de pins. Esto se
puede solucionar con una conexin diferente que solo utiliza dos pins de control del Arduino.
De esta manera solo tenemos que usar dos pins de control e invertirlos. Para invertirlos
usaremos dos transistores NPN (BC547,BD139, etc) polarizados en emisor comn y que
trabajen en modo saturacin-corte. As el transistor trabaja como un inversor de seal.
http://diymakers.es/movermotorespasopasoconarduino/ 7/39
6/5/2016 MovermotorespasoapasoconArduino|DIYMakers
De este modo, usaremos solo dos pins del Arduino y con los dos NPN en modo de inversor
obtendremos los cuatro pins de control necesarios para atacar el L293.
El programa es el mismo que antes, con la diferencia que cambiaremos los pins de control:
http://diymakers.es/movermotorespasopasoconarduino/ 8/39
6/5/2016 MovermotorespasoapasoconArduino|DIYMakers
En vez de usar:
Cambiamos por:
1 /*
2 www.diymakers.es
3 byA.Garca
4 MovermotorespasoapasoconArduino
5 Tutorialen:http://diymakers.es/movermotorespasopasoconarduino/(http://diymak
6 */
7
8 #include<Stepper.h>//Importamoslalibreraparacontrolarmotorespasoapaso
9
10 #defineSTEPS200//Ponemoselnmerodepasosquenecesitaparadarunavuelta.200e
11
12 //Ponemosnombrealmotor,elnmerodepasosylospinsdecontrol
13 Stepperstepper(STEPS,8,9);//Steppernombremotor(nmerodepasosporvuelta,pins
14
15 voidsetup()
16 {
17 //VelocidaddelmotorenRPM
18 stepper.setSpeed(100);
19 }
20
21 voidloop()
22 {
23 //Girarunavueltaenteraenunsentido
24 stepper.step(200);
25 delay(500);//Pequeapausa
26
27 //Girarunavueltaenteraensentidocontrario
28 stepper.step(200);
29 delay(500);//Pequeapausa
30 }
http://diymakers.es/movermotorespasopasoconarduino/ 9/39
6/5/2016 MovermotorespasoapasoconArduino|DIYMakers
El programa es el mismo que hemos usado antes con el motor bipolar de 4 pins:
1 /*
2 www.diymakers.es
3 byA.Garca
4 MovermotorespasoapasoconArduino
5 Tutorialen:http://diymakers.es/movermotorespasopasoconarduino/(http://diymak
6 */
7
8 #include<Stepper.h>//Importamoslalibreraparacontrolarmotorespasoapaso
9
10 #defineSTEPS200//Ponemoselnmerodepasosquenecesitaparadarunavuelta.200e
11
12 //Ponemosnombrealmotor,elnmerodepasosylospinsdecontrol
13 Stepperstepper(STEPS,8,9,10,11);//Steppernombremotor(nmerodepasosporvuel
14
15 voidsetup()
16 {
17 //VelocidaddelmotorenRPM
18 stepper.setSpeed(100);
19 }
20
21 voidloop()
http://diymakers.es/movermotorespasopasoconarduino/ 10/39
6/5/2016 MovermotorespasoapasoconArduino|DIYMakers
21 voidloop()
22 {
23 //Girarunavueltaenteraenunsentido
24 stepper.step(200);
25 delay(500);//Pequeapausa
26
27 //Girarunavueltaenteraensentidocontrario
28 stepper.step(200);
29 delay(500);//Pequeapausa
30 }
http://diymakers.es/movermotorespasopasoconarduino/ 11/39
6/5/2016 MovermotorespasoapasoconArduino|DIYMakers
-Para detectar las bobinas, basta con conectar el tester en continuidad en dos terminales,
cuando marque continuidad o una baja carga ohmica quiere decir que entre esos dos terminales
hay una bobina.
-Un consejo: mejor no alimentar el Arduino solo con el cable USB, sino con la fuente de
alimentacin a travs del pin Vin o del conector jack. Esto es para que no haya errores, sobre
todo a la hora de controlar motores. El cable USB solo conectarlo cuando se use la comunicacin
serie con el PC. Si no es as, desconectarlo.
Programa
1 /*
2 www.diymakers.es
3 byA.Garca
4 MovermotorespasoapasoconArduino
5 Tutorialen:http://diymakers.es/movermotorespasopasoconarduino/(http://diymak
6 */
http://diymakers.es/movermotorespasopasoconarduino/ 12/39
6/5/2016 MovermotorespasoapasoconArduino|DIYMakers
5 Tutorialen:http://diymakers.es/movermotorespasopasoconarduino/(http://diymak
6 */
7
8 #include<Stepper.h>//Importamoslalibreraparacontrolarmotorespasoapaso
9
10 #defineSTEPS200//Ponemoselnmerodepasosquenecesitaparadarunavuelta.200e
11
12 //Ponemosnombrealmotor,elnmerodepasosylospinsdecontrol
13 Stepperstepper(STEPS,8,9);//Steppernombremotor(nmerodepasosporvuelta,pins
14
15 intpot;//Variablelecturapotencimetro
16 intderecha=3;//Pulsadorderecha
17 intizquierda=2;//Pulsadorizquierda
18 intdireccion;//Variableparaindicarladireccn
19
20 voidsetup()
21 {
22 pinMode(derecha,INPUT);
23 pinMode(izquierda,INPUT);
24 }
25
26 voidloop()
27 {
28 pot=analogRead(A0);//Lecturapotencimetro
29 pot=map(pot,0,1023,30,150);//Establecemoslavelocidadentre30y150rpm
30
31 stepper.setSpeed(pot);//Indicamoslavelocidadalmotor
32
33 stepper.step(direccion);//Indicamosladireccinalmotor
34
35 if(digitalRead(izquierda)==HIGH)
36 {
37 direccion=200;//Sipulsamoselpulsadorizquierdo,elmotorgiraalaizquierda
38 }
39
40 if(digitalRead(derecha)==HIGH)
41 {
42 direccion=200;//Sipulsamoselpulsadorderecho,elmotorgiraaladerech
43 }
44 }
http://diymakers.es/movermotorespasopasoconarduino/ 13/39