Introducció a la robòtica en trenta-una classes/Sisè dia: vehicle amb motors pas a pas

Salta a la navegació Salta a la cerca
CotxeSteppers.gif

Avui hem après a fer anar motors pas a pas.

Aquests motors son emprats en tota mena d’aplicacions on es necessita precisió més

que velocitat, per exemple, en les impressores 3D.

Els motors pas a pas, tenen la particularitat que giren una fracció de volta determinada,

sempre la mateixa, i es queden fent força, sense moure’s en acabar, cada vegada que els

donem corrent. Caldrà canviar a quina bobina donem corrent per a un nou gir, que

tornarà a ser de la mateixa magnitut.

Per a la pràctica, hem agafat uns mini motors pas a pas, que ja ens venen amb reductor i

carta electrònica per al seu control. Per exemple:

https://www.electrohobby.es/pap/180-motor-pap-driver.html

Aquesta carta de control té quatre entrades, que hem connectat als pins 2, 3, 4 i 5 de

StepperConnectatArduino.png

l’arduino:

La seqüència que ens diu el fabricant necessita aquest motor és:

1. 1 0 0 0

2. 1 1 0 0

3. 0 1 0 0

4. 0 1 1 0

5. 0 0 1 0

6. 0 0 1 1

7. 0 0 0 1

8. 1 0 0 1

El programa que hem fet per a aconseguir la seqüència:

void setup() {
    pinMode(2,OUTPUT);
    pinMode(3,OUTPUT);
    pinMode(4,OUTPUT);
    pinMode(5,OUTPUT);
}

void loop() {
    digitalWrite(2,1);
    digitalWrite(3,0);
    digitalWrite(4,0);
    digitalWrite(5,0);
    delayMicroseconds(1000);
    digitalWrite(2,1);
    digitalWrite(3,1);
    digitalWrite(4,0);
    digitalWrite(5,0);
    delayMicroseconds(1000);
    digitalWrite(2,0);
    digitalWrite(3,1);
    digitalWrite(4,0);
    digitalWrite(5,0);
    delayMicroseconds(1000);
    digitalWrite(2,0);
    digitalWrite(3,1);
    digitalWrite(4,1);
    digitalWrite(5,0);
    delayMicroseconds(1000);
    digitalWrite(2,0);
    digitalWrite(3,0);
    digitalWrite(4,1);
    digitalWrite(5,0);
    delayMicroseconds(1000);
    digitalWrite(2,0);
    digitalWrite(3,0);
    digitalWrite(4,1);
    digitalWrite(5,1);
    delayMicroseconds(1000);
    digitalWrite(2,0);
    digitalWrite(3,0);
    digitalWrite(4,0);
    digitalWrite(5,1);
    delayMicroseconds(1000);
    digitalWrite(2,1);
    digitalWrite(3,0);
    digitalWrite(4,0);
    digitalWrite(5,1);
    delayMicroseconds(1000);
}

Amb això movem un motor. Ara en connectem l’altre als pins 6,7,8 i 9, i fem que vagin alhora:

void setup() {
    pinMode(2,OUTPUT);
    pinMode(3,OUTPUT);
    pinMode(4,OUTPUT);
    pinMode(5,OUTPUT);
    pinMode(6,OUTPUT);
    pinMode(7,OUTPUT);
    pinMode(8,OUTPUT);
    pinMode(9,OUTPUT);
}

void loop() {
    digitalWrite(2,1);
    digitalWrite(3,0);
    digitalWrite(4,0);
    digitalWrite(5,0);
    digitalWrite(6,1);
    digitalWrite(7,0);
    digitalWrite(8,0);
    digitalWrite(9,0);
    delayMicroseconds(1000);
    digitalWrite(2,1);
    digitalWrite(3,1);
    digitalWrite(4,0);
    digitalWrite(5,0);
    digitalWrite(6,1);
    digitalWrite(7,1);
    digitalWrite(8,0);
    digitalWrite(9,0);
    delayMicroseconds(1000);
    digitalWrite(2,0);
    digitalWrite(3,1);
    digitalWrite(4,0);
    digitalWrite(5,0);
    digitalWrite(6,0);
    digitalWrite(7,1);
    digitalWrite(8,0);
    digitalWrite(9,0);
    delayMicroseconds(1000);
    digitalWrite(2,0);
    digitalWrite(3,1);
    digitalWrite(4,1);
    digitalWrite(5,0);
    digitalWrite(6,0);
    digitalWrite(7,1);
    digitalWrite(8,1);
    digitalWrite(9,0);
    delayMicroseconds(1000);
    digitalWrite(2,0);
    digitalWrite(3,0);
    digitalWrite(4,1);
    digitalWrite(5,0);
    digitalWrite(6,0);
    digitalWrite(7,0);
    digitalWrite(8,1);
    digitalWrite(9,0);
    delayMicroseconds(1000);
    digitalWrite(2,0);
    digitalWrite(3,0);
    digitalWrite(4,1);
    digitalWrite(5,1);
    digitalWrite(6,0);
    digitalWrite(7,0);
    digitalWrite(8,1);
    digitalWrite(9,1);
    delayMicroseconds(1000);
    digitalWrite(2,0);
    digitalWrite(3,0);
    digitalWrite(4,0);
    digitalWrite(5,1);
    digitalWrite(6,0);
    digitalWrite(7,0);
    digitalWrite(8,0);
    digitalWrite(9,1);
    delayMicroseconds(1000);
    digitalWrite(2,1);
    digitalWrite(3,0);
    digitalWrite(4,0);
    digitalWrite(5,1);
    digitalWrite(6,1);
    digitalWrite(7,0);
    digitalWrite(8,0);
    digitalWrite(9,1);
    delayMicroseconds(1000);
}

Si fem anar aquest segon programa, i muntem els motors capiculats, veurem que, com

que els dos giren igual si els mirem del davant, resulta que es posa a girar com en el

vídeo. Per tant, si volem que el vehicle vagi endavant, haurem de fer que el segon motor

giri a l’inrevés... com? Doncs invertint la seqüència del segon motor, o sigui fent els

passos del 8 al 1.