Wednesday, February 8, 2012

How to control Stepper Motor using ULN2003 and 8051 Microcontroller (AT89C51)

Posted by Thirumalai Kumar at 9:20 PM 1 Comment
Stepper Motor Control with 8051 Microcontroller using ULN2003This project is an extension to two-phase Unipolar Stepper motor interfacing with AT89C51. In the previous project, transistor switches were used to interface the stepper motor with the microcontroller. Here the transistors have been replaced by using a ULN2003 IC to drive the stepper with 8051 microcontroller.

DESCRIBTION(click here)
  • As explained in earlier article, Stepper motor is operated by energizing the stator coils in an ordered sequence. When the input sequence of signal is applied to the motor leads, it starts rotating in steps.
    AT89C51 microcontroller has a current rating of 50mA. It can neither source nor sink huge current. ULN2003 is high voltage and high current Darlington array IC. Each input-output pair in ULN2003 acts as an interface between the end points of the stepper motor and port pins of the microcontroller.
    Port P2 of AT89C51 is configured as the output port to provide input sequence to four input pins of ULN2003. The output of ULN2003 accordingly helps in driving the motor.
    To work with the unipolar stepper motor, the common points are connected to either Ground or Vcc and the end points of both the phases are usually connected through the port pins of a microcontroller. In present case the common (Green) wires are connected to Vcc. The end points receive the control signals as per the controller's output in a particular sequence to drive the motor.
CODE(click here)
  • // Program to control Stepper Motor with AT89C51 using ULN2003 /**** Wave Drive Stepping ****/ #include<reg51.h> sfr stepper=0xA0; void delay(unsigned int count) { int i; for(i=0;i<count;i++); } void main() { while(1) { stepper=0x01; delay(350); stepper=0x02; delay(350); stepper=0x04; delay(350); stepper=0x08; delay(350); } } /*****************************/ /**** Half Drive Stepping ****/ #include<reg51.h> sfr stepper=0xA0; void delay(unsigned int count) { int i; for(i=0;i<count;i++); } void main() { while(1) { stepper=0x01; delay(300); stepper=0x03; delay(300); stepper=0x02; delay(300); stepper=0x06; delay(300); stepper=0x04; delay(300); stepper=0x0C; delay(300); stepper=0x08; delay(300); stepper=0x09; delay(300); } } /*****************************/
COMPONENTS(click here)
  • AT89C51 Microcontroller

Share This Post

Get Updates

Subscribe to our Mailing List. We'll never share your Email address.





This blogs is an effort to club the scattered information about engineering and project titles and ideas available in the web. While every effort is made to ensure the accuracy of the information on this site, no liability is accepted for any consequences of using it. Most of the material and information are taken from other blogs and site with the help of search engines. If any posts here are hitting the copyrights of any publishers, kindly mail the details to It will be removed immediately.


choose amount

Donate us, the cool way to thank us..
back to top