Let's Make Robots!

Control your motors with L293D


***********************************************************************************************
update 26/4/09
***********************************************************************************************

My 1st instructable  :)

http://www.instructables.com/id/HiTec-Servo-Hack/

***********************************************************************************************
***********************************************************************************************

After long research and trial and error,  I´ve came up to a new walkthrough regarding this nice chip, the L293D.

Each project is one project and each one has its own unique power configurations, so you must be aware of the best battery choice and how to distribute voltage through your robot.

I strongly advice you to read the following articles:

Picking Batteries for your Robot
Once you’ve decided on batteries, how do you regulate the voltage

************************************************

L293D gives you the possibility to control two motors in both directions - datasheet

************************************************

The L293D Circuit:

Basic Implementation:

This is the most basic implementation of the chip.

As you can see, a 5V Voltage Regulator is between the battery and pins 1, 9, 16.

Pin 8 gets power before the VReg, if your motor needs for example 6V you should put 6V directly in this pin, all the other pins should not get more than 5V.

This will work with no problem at all, but if you want to do the right implementation take a look at the next example:

3235657956_b3be2b4f2f.jpg?v=0

3262168342_ae12307934.jpg?v=1240780647

This is the correct Implementation (with the capacitors), and note that pin 8 is feeded by unregulated voltage. This means that if your motors need more than 5V, you should power this pin with that amount of voltage, and the rest of the circuit with 5V.

3235658022_f78495fddd.jpg?v=0
The capacitors stabilize the current.

The same circuit on a breadboard:
3252941552_2f4919475f.jpg?v=1240780044

Soldered on a pcb and ready to go:
3234563157_780312a389.jpg?v=0
3451483356_2fdf26be19.jpg?v=0

3257970545_12de4f710e.jpg?v=0

This is the back of the circuit, click for high resolution photo.

***********************************************************************************************
CODE
***********************************************************************************************

// Use this code to test your motor with the Arduino board:

// if you need PWM, just use the PWM outputs on the Arduino
// and instead of digitalWrite, you should use the analogWrite command

// —————————————————————————  Motors
int motor_left[] = {2, 3};
int motor_right[] = {7, 8};

// ————————————————————————— Setup
void setup() {
Serial.begin(9600);

// Setup motors
int i;
for(i = 0; i < 2; i++){
pinMode(motor_left[i], OUTPUT);
pinMode(motor_right[i], OUTPUT);
}

}

// ————————————————————————— Loop
void loop() {

drive_forward();
delay(1000);
motor_stop();
Serial.println(”1″);

drive_backward();
delay(1000);
motor_stop();
Serial.println(”2″);

turn_left();
delay(1000);
motor_stop();
Serial.println(”3″);

turn_right();
delay(1000);
motor_stop();
Serial.println(”4″);

motor_stop();
delay(1000);
motor_stop();
Serial.println(”5″);
}

// ————————————————————————— Drive

void motor_stop(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], LOW);

digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], LOW);
delay(25);
}

void drive_forward(){
digitalWrite(motor_left[0], HIGH);
digitalWrite(motor_left[1], LOW);

digitalWrite(motor_right[0], HIGH);
digitalWrite(motor_right[1], LOW);
}

void drive_backward(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], HIGH);

digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], HIGH);
}

void turn_left(){
digitalWrite(motor_left[0], LOW);
digitalWrite(motor_left[1], HIGH);

digitalWrite(motor_right[0], HIGH);
digitalWrite(motor_right[1], LOW);
}

void turn_right(){
digitalWrite(motor_left[0], HIGH);
digitalWrite(motor_left[1], LOW);

digitalWrite(motor_right[0], LOW);
digitalWrite(motor_right[1], HIGH);
}

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
robologist's picture

Check the datasheet on page 2, for the "Typical of all outputs" diagram :

http://focus.ti.com/lit/ds/symlink/sn754410.pdf

 

guibot's picture

So this tell us they do exactly the same?

Because if they do, I must think in getting some SN754410, they are a lot cheaper than L293D.

jka's picture
Researched it a bit more. I found a reference to someone who has talked to TI Tech support about this and they confirm that the diodes are for ESD protection and not clamping. http://ladyada.net/make/mshield/use.html
According to the datasheet that Sparkfun links to on Page 1 it states High Impedence Diode-Clamped Inputs.  Am I missing something?  http://www.sparkfun.com/commerce/product_info.php?products_id=315 
robologist's picture
Yes, "input" would be the word missing. The flyback diodes are placed on the outputs, around the load to reduce inductive spikes. The 754410 has diodes on the output, but from what has been said these are only rated for ESD clamping, rather than for inductive kickback though they still might provide some protection.
robologist's picture
Since seeing the datasheet diagram, I've used the 754410 for years without any external diodes believing they were already part of the device, and never had any problems. I'm a little surprised they don't make it clearer that the diodes present aren't meant for clamping but primarily for ESD.  My only complaint about either the L293D or 754410 was that they take a bit of voltage off, since they are BJT drivers.
jka's picture
Thats ok. It loks like clamps and I thought that too, until I read that it's L293 equivalent. Then I started reading the spec sheet a couple of times. They might work as clamps, but they are probably not rated for it. So even though it might work for some time, some day a large spike will come along and kill the diodes.
guibot's picture

OK!!!

Thanks jka  ;)

jka's picture

No, it doesn't. Just because there are diodes in the specs doesn't mean that it's clamping diodes. If you read the spec, clamping diodes are not mentioned with one word. They are, if you read the spec for the L293D which has them.

Furthermore:

Page 1. "Improved Functional Replacement for the SGS L293" It says "L293". Not "L293D"

Page 6. If you look at their application example, they have external clamping diodes.

 

guibot's picture
I´ve updated pics and text  ;)