/* Este código permite o passo de 2 motores
*/
//motor direito
int motorPin1 = 5;
int motorPin2 = 6;
int motorPin3 = 7;
int motorPin4 = 8;
//motor esquerdo
int motorPin5 = 9;
int motorPin6 = 10;
int motorPin7 = 11;
int motorPin8 = 12;
int delayTime = 500;
void setup() {
//configura os pinos digitais do motor direito
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
//configura os pinos digitais do motor esquerdo
pinMode(motorPin5, OUTPUT);
pinMode(motorPin6, OUTPUT);
pinMode(motorPin7, OUTPUT);
pinMode(motorPin8, OUTPUT);
}
void loop() {
//motor direito
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);
//motor esquerdo
digitalWrite(motorPin5, HIGH);
digitalWrite(motorPin6, LOW);
digitalWrite(motorPin7, LOW);
digitalWrite(motorPin8, LOW);
delay(delayTime);
digitalWrite(motorPin5, LOW);
digitalWrite(motorPin6, HIGH);
digitalWrite(motorPin7, LOW);
digitalWrite(motorPin8, LOW);
delay(delayTime);
digitalWrite(motorPin5, LOW);
digitalWrite(motorPin6, LOW);
digitalWrite(motorPin7, HIGH);
digitalWrite(motorPin8, LOW);
delay(delayTime);
digitalWrite(motorPin5, LOW);
digitalWrite(motorPin6, LOW);
digitalWrite(motorPin7, LOW);
digitalWrite(motorPin8, HIGH);
delay(delayTime);
}
Você vai notar no vídeo abaixo que os leds piscam fora de sincronia, ou seja, os motores girariam primeiro o direito e depois o esquerdo.
Uma das soluções foi ligar os dois motores nos pinos digitais de 8 a 12 e ligar o comando "Enable A/B" dos l297 em outros dois pinos digitais.
O grande problema reside no fato que somente um motor giraria e o outro ficaria parado. Não é possível por exemplo, girar o motor direito num sentido e o motor esquerdo em outro sentido. Isso causa no robô o comportamento de girar aberto. Com um motor num sentido e outro no sentido inverso, além de girar aberto, você pode girar fechado, o que aumenta as possibilidades de manobras evasivas.
O código abaixo foi testado com leds mas ilustra o giro em sentidos opostos dos motores, bastando pequenas correções no código acima, além de ocupar menos bytes.
/*Testes de Passo - Código utilizado para 2 motores de passo*/
//motor direito
int motorPin1 = 5;
int motorPin2 = 6;
int motorPin3 = 7;
int motorPin4 = 8;
//motor esquerdo
int motorPin5 = 9;
int motorPin6 = 10;
int motorPin7 = 11;
int motorPin8 = 12;
//tempo de passo
int passo = 50;
void setup() {
//define os pinos digitais do motor direito
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
//define os pinos digitais do motor esquerdo
pinMode(motorPin5, OUTPUT);
pinMode(motorPin6, OUTPUT);
pinMode(motorPin7, OUTPUT);
pinMode(motorPin8, OUTPUT);
}
void loop() {
//motor de passo direito e esquerdo, sincronizado
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin5, HIGH);
delay(passo);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin5, LOW);
digitalWrite(motorPin6, HIGH);
delay(passo);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin6, LOW);
digitalWrite(motorPin7, HIGH);
delay(passo);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin7, LOW);
digitalWrite(motorPin8, HIGH);
delay(passo);
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin8, LOW);
}
O vídeo do resultado no Simulino.
Este código ainda não utiliza funções até pelos testes mas, como base de estudo, ajuda muito.
Nenhum comentário:
Postar um comentário