Im just starting a little project and Im currently trying to control two lego motors with a L293B H-bridge. It works just fine as long as I add a 100ms delay when I change the motors direction. If I don't I get a 'shoot through' and the Arduino restarts. Here's the code:
int dir1a = 3;
int dir1b = 4;
int pwm1 = 5;
int dir2a = 8;
int dir2b = 9;
int pwm2 = 6;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(dir1a, OUTPUT);
pinMode(dir1b, OUTPUT);
pinMode(dir2a, OUTPUT);
pinMode(dir2b, OUTPUT);
pinMode(pwm1, OUTPUT);
pinMode(pwm2, OUTPUT);
delay(5000);
}
// the loop routine runs over and over again forever:
void loop() {
startM1("forward", 255);
delay(1000);
startM1("reverse", 255);
delay(1000);
startM1("stop", 0);
delay(1000);
startM2("forward", 255);
delay(1000);
startM2("reverse", 255);
delay(1000);
startM2("stop", 0);
delay(1000);
}
void startM1(String dir, int speed)
{
if(dir == "forward")
{
digitalWrite(dir1a, LOW);
digitalWrite(dir1b, LOW);
delay(100);
digitalWrite(dir1a, LOW);
digitalWrite(dir1b, HIGH);
analogWrite(pwm1, speed);
}
else if(dir == "reverse")
{
digitalWrite(dir1a, LOW);
digitalWrite(dir1b, LOW);
delay(100);
digitalWrite(dir1a, HIGH);
digitalWrite(dir1b, LOW);
analogWrite(pwm1, speed);
}
else if(dir == "stop")
{
analogWrite(pwm1, speed);
digitalWrite(dir1a, LOW);
digitalWrite(dir1b, LOW);
}
}
void startM2(String dir, int speed)
{
if(dir == "forward")
{
digitalWrite(dir2a, LOW);
digitalWrite(dir2b, LOW);
delay(100);
digitalWrite(dir2a, LOW);
digitalWrite(dir2b, HIGH);
analogWrite(pwm2, speed);
}
else if(dir == "reverse")
{
digitalWrite(dir2a, LOW);
digitalWrite(dir2b, LOW);
delay(100);
digitalWrite(dir2a, HIGH);
digitalWrite(dir2b, LOW);
analogWrite(pwm2, speed);
}
else if(dir == "stop")
{
analogWrite(pwm2, speed);
digitalWrite(dir2a, LOW);
digitalWrite(dir2b, LOW);
}
}
Notice the delay(100) in the startM1 and startM2 functions. If I remove that or decrease it to 10 I get a 'shoot through'. Can anyone please explain why and how that is?