Let's Make Robots!

Control your motors with L293D

UPDATE

***********************************************************************************************
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.

Can I 'stack' these chips , put several on top of each, soldering pin1 to pin1 etc  to boost the current output?

 

Just a quick 'dirty thought' for Mr Basic

 

Pete

I think you can, but I never tried.. it is called "piggyback", ladyada talks about it here
tutorial mate, id been battling for ages trying to think of a decent way to integrate a power supply with the motor driver, but my electronic skills are a little lacking at the moment. Im gonna try and make one this evening for guilbot. Will post a pic and say thanks later :p 
Hello Edgee, sorry for the dealy answering to your comment, my email box has been chaotic since I've been on vacation.. Good to know you find this tip useful  :)    Did you manage to build your motor driver already?
I just found this tuto, it's really great thanks! I have a L293D that doesn't fit in my 18x project board, but now thanks to you it won't be useless :D

Nice board!

I thought the L293D chip is actually 4 independent sets of 4 pins where each V+ pin provides power for one of the motor outputs. You have regulated power to 3 of them and unregulated power to one.  Why is that?

This is the diagram as the chip is connected on the picaxe 28 board. As you can see, all V pins are connected to V2

L293D.jpg

Check the datasheet for the L293D. You'll see pin 16 is Vcc1 logic power, and pin 8 is Vcc2 motor power, with pin 1 being the enables to 2 outputs and pin 9 being the enable for the other 2 outputs. Pins 1 and 9 generally are spec'd as 5 volt logic inputs, not power, and the Vcc1 logic power should also be 5 volts. Vcc2 can be anything from the level of Vcc1 on up to 36 volts.

How about that. I build edward from the schematics in the picaxe manuals. I just figured the 5V indications where a typo. Edward runs 7.2V on all corners of the motor driver chip and it still works.

Well, I wont make another board without first checking all the real datasheets properly. 

 

 

I´ve made a major update on this. It is simpler, more accurate according the datasheet, and now I mention the use of a voltage regulator, capacitors and unregulated power supply.
Pretty cool additions, and better clarification, looks good!