步进电机是一种将电脉冲信号转换成角位移或线位移的机电元件。步进电动机的输入量是脉冲序列,输出量则为相应的增量位移或步进运动。正常运动情况下,它每转一周具有固定的步数;做连续步进运动时,其旋转转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。由于步进电动机能直接接受数字量的控制,所以特别适宜采用微机进行控制。
该步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图1是该四相反应式步进电机工作原理示意图。
开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。
而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图2.a、b、c所示:
uln2003驱动步进电机程序
#include《reg52.h》
//unsignedcharIRCOM[]={0x00,0x00,0x00,0x00,0x10,0x10};
unsignedcharzhuangtai=0;
unsignedcharcodeF_Rotaion[4]={0x03,0x05,0x0d,0x09};
voiddelay(uchardelay){
uchari;
for(delay;delay》0;delay--){
for(i=123;i》0;i--)
}
}
voidmoto(){
unsignedchari;
for(i=0;i《4;i++){
P0=F_Rotaion[i];
delay(500);
}
}
voidnmoto(){
unsignedchari;
for(i=3;i》=0;i--){
P0=F_Rotaion[i];
delay(500);
}
}
voidstopmoto(){
P0=0x00;
}
voidyunxing(){
if(zhuangtai==0){
stopmoto();
}
elseif(zhuangtai==1){
moto();
}
elseif(zhuangtai==2){
nmoto();
}
}
voidjude(){
if(P3==0xef){
zhuangtai=0;
}
elseif(P3==0xdf){
zhuangtai=1;
}
elseif(P3==0xbf){
zhuangtai=2;
}
}
main(){
P1=0x00;
P3=0xff;
jude();
yunxing();
}
/*voidIR_IN()interrupt0
{
ucharj,k,N=0;
EX0=0;
delay(15);
if(IRIN==1)
{
EX0=1;
return;
}
while(!IRIN)
delay(1);
for(j=0;j《4;j++)
{
for(k=0;k《8;k++)
{
while(IRIN)
delay(1);
while(!IRIN)
delay(1);
while(IRIN)
{
delay(1);
N++;
if(N》=30)
{
EX0=1;
return;
}
}
IRCOM[j]=IRCOM[j]》》1;
if(N》=8)
IRCOM[j]=IRCOM[j]|0x80;}
N=0;
}
if(IRCOM[2]!=~IRCOM[3])
{
EX0=1;
return;
}
if(IRCOM[0]!=0x00)
{
EX0=1;
return;
}
IRCOM[4]=IRCOM[2]&0x0F;
IRCOM[5]=IRCOM[2]》》4;
play();
beep();
EX0=1;
}