求单片机90C516,以ULN2003D做驱动驱动步进电机的C语言程序!
2个回答
展开全部
5线步进电机一般分为4拍跟8拍模式驱动
//四拍方式,顺序为A B C D
//八拍方式,顺序为A AB B BC C CD D DA
依次改变绕组的磁场,就可以使步进电机正转或反转(比如通电次序为
A->B->C->D正转,反之则反转)。而改变磁场切换的时间间隔,就可以控制步进电机的速度了,这就是步进电机的驱动原理。
下面是步进电机接P0口的演示
#include<at89x52.h>
unsigned char tab[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x0d};//8拍模式数组
void delayms(unsigned char time)//延时
{
unsigned char a,b;
while(time--)
for(b=199;b>0;b--)
for(a=1;a>0;a--);
}
void main()
{
unsigned char i=0;
while(1)
{
if(!P1_0)//当按下P1.0时往相反的方向转
{
P0=tab[i];
i++;
i%=8;
delayms(1);
}
else
{
P0=tab[i];
if(i==0)i=8;
i--;
delayms(1);
}
}
}
//四拍方式,顺序为A B C D
//八拍方式,顺序为A AB B BC C CD D DA
依次改变绕组的磁场,就可以使步进电机正转或反转(比如通电次序为
A->B->C->D正转,反之则反转)。而改变磁场切换的时间间隔,就可以控制步进电机的速度了,这就是步进电机的驱动原理。
下面是步进电机接P0口的演示
#include<at89x52.h>
unsigned char tab[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x0d};//8拍模式数组
void delayms(unsigned char time)//延时
{
unsigned char a,b;
while(time--)
for(b=199;b>0;b--)
for(a=1;a>0;a--);
}
void main()
{
unsigned char i=0;
while(1)
{
if(!P1_0)//当按下P1.0时往相反的方向转
{
P0=tab[i];
i++;
i%=8;
delayms(1);
}
else
{
P0=tab[i];
if(i==0)i=8;
i--;
delayms(1);
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询