You are on page 1of 5

Stepper Motor Interfacing with LPC2148

Introduction

Stepper motor is a brushless DC motor that divides the full rotation angle of 360°
into number of equal steps.

The motor is rotated by applying a certain sequence of control signals. The speed of
rotation can be changed by changing the rate at which the control signals are applied.

Various stepper motors with different step angles and torque ratings are available in the
market.

Microcontroller can be used to apply different control signals to the motor to make it rotate
according to the need of the application.

For more information about Stepper Motor and how to use it, refer the topic Stepper
Motor in the sensors and modules section.

Interfacing Diagram
Example

Rotating stepper motor in clockwise and counter clockwise directions alternately.

Here, we are using six wire unipolar stepper motor. Only four wires are required to control
this stepper motor. The two centre tap wires of the stepper motor are connected to 5V
supply.

ULN2003 driver is used to drive the stepper motor.

Note : To find winding coils and their centre tap leads, measure resistance in between the
leads. From centre leads we will get half the resistance value as compared to the resistance
between winding ends.

Program
/*
Stepper motor interfacing with LPC2148(ARM7)
http://www.electronicwings.com/arm7/stepper-motor-interfacing-with-lpc2148
*/

#include <lpc214x.h>

#include <stdint.h>

void delay_ms(uint16_t j)
{
uint16_t x,i;
for(i=0;i<j;i++)
{
for(x=0; x<6000; x++); /* loop to generate 1 milisecond delay with Cclk =
60MHz */
}
}

int main (void)


{
IO0DIR = (IO0DIR | 0x0000000F); /* Configure P0.0-P0.3 as output(used for
controlling stepper motor) */
while(1)
{
for( uint8_t i = 0; i<12; i++ ) /* Full step rotation in
one direction */
{
IO0PIN = ( (IO0PIN | 0x00000008) & 0xFFFFFFF8 );
delay_ms(100);

IO0PIN = ( (IO0PIN | 0x0000000C) & 0xFFFFFFFC );


delay_ms(100);

IO0PIN = ( (IO0PIN | 0x00000004) & 0xFFFFFFF4 );


delay_ms(100);

IO0PIN = ( (IO0PIN | 0x00000006) & 0xFFFFFFF6 );


delay_ms(100);

IO0PIN = ( (IO0PIN | 0x00000002) & 0xFFFFFFF2 );


delay_ms(100);

IO0PIN = ( (IO0PIN | 0x00000003) & 0xFFFFFFF3 );


delay_ms(100);

IO0PIN = ( (IO0PIN | 0x00000001) & 0xFFFFFFF1 );


delay_ms(100);

IO0PIN = ( (IO0PIN | 0x00000009) & 0xFFFFFFF9 );


delay_ms(100);
}
IO0PIN = ( (IO0PIN | 0x00000008) & 0xFFFFFFF8 );
delay_ms(100);
delay_ms(2000);

for( uint8_t j = 0; j<12; j++ ) /* Half-step rotation in


opposite direction */
{
IO0PIN = ( (IO0PIN | 0x00000001) & 0xFFFFFFF1 );
delay_ms(100);

IO0PIN = ( (IO0PIN | 0x00000002) & 0xFFFFFFF2 );


delay_ms(100);

IO0PIN = ( (IO0PIN | 0x00000004) & 0xFFFFFFF4 );


delay_ms(100);

IO0PIN = ( (IO0PIN | 0x00000008) & 0xFFFFFFF8 );


delay_ms(100);
}
IO0PIN = ( (IO0PIN | 0x00000001) & 0xFFFFFFF1 );
delay_ms(100);
delay_ms(2000);
}
}

You might also like