单片机驱动步进电机编程教程(使用8051单片机控制步进电机)(1)

8051单片机控制步进电机

步进电机是无刷直流电动机,它能以固定的步距角旋转。步进电机一般采用200步完成360度旋转,即每步旋转1.8度。可以通过适当的指令将步进电机旋转到任何特定的角度,因此步进电机可以用于许多需要精确旋转运动的设备,如机器人,自动控制等。

步进电机基本上有两种类型:单极步进电机和双极步进电机。单极步进电机一般有五或六线,其中四根导线是四个定子线圈的一端(A,B,C,D),四个线圈的另一端连接在一起,代表第五根导线,这称为公共端。单极步进电机由于其使用方便而非常普及。

单片机驱动步进电机编程教程(使用8051单片机控制步进电机)(2)

StepsABCD11000201003001040001

整步驱动模式:在这个模式下,两个线圈同时通电产生高扭矩,功耗较高。

StepsABCD
11100
20110
30011
41001

半步驱动模式:在这种模式下,两个线圈通电,首先一个线圈通电,然后下一线圈通电,然后再下一个线圈通电,以此类推。

StepsABCD
11000
21100
30100
40110
50010
60011
70001
81001

8051无法提供足够的电流来驱动线圈,因此需要使用一个电流驱动IC。ULN2003A是NPN达林顿晶体管,也可以用L293D芯片代替ULN2003A作为电流放大芯片。

电路原理图:

单片机驱动步进电机编程教程(使用8051单片机控制步进电机)(3)

电路原理图

C语言代码:

// drive Mode 1

#include<reg51.h>

void msdelay(unsigned int time)

{

unsigned i,j ;

for(i=0;i<time;i )

for(j=0;j<1275;j );

}

void main()

{

while(1)

{

P2=0x01; // 0001 P2_0=1,P2_1=0,P2_2=0,P2_3=0

msdelay(1);

P2=0x02; //0010

msdelay(1);

P2=0x04; //0100

msdelay(1);

P2=0x08; //1000

msdelay(1);

}

}

// drive Mode 2

#include<reg51.h>

void msdelay(unsigned int time)

{

unsigned i,j ;

for(i=0;i<time;i )

for(j=0;j<1275;j );

}

void main()

{

while(1)

{

P2 = 0x03; //0011 P2_0=1,P2_1=1,P2_2=0,P2_3=0

msdelay(1);

P2 = 0x06; //0110

msdelay(1);

P2 = 0x0C; //1100

msdelay(1);

P2 = 0x09; //1001

msdelay(1);

}

}

,