Wednesday, February 8, 2012

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

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
    ULN2003

Post a Comment