步进电机直接给很高的频率,电机容易堵转,这是因为高频率下启动,磁力的变化非常快,步进电机是靠磁力的步进移动,从而带动转子的角位移,但是转子有一定惯性,因此,步进电机转子在磁力的作用下还未移动,就被下一个反方向的磁力扯回来了,这就发生了堵转。但我们想让步进电机高速转,怎么办?
既然一步不能到位,那就多步,一点点加速。
代码如下:
#include<reg52.h>
#define uint unsigned int
sbit motor = P1^0;//位定义电机脉冲信号端口
sbit block = P1^1; //位定义接收光电开关遮挡信号的端口
sbit dir = P1^2;//位定义步进电机方向控制端口
sbit WE = P2^7;
sbit DU = P2^6;
sbit beep = P2^3;
uint i,pp,m;
void InitTimer0(void)
{
TMOD=0x01; //模式设置,00000001,采用的是定时器0,工作与模式1(M1=0,M0=1)。
TR0=1; //打开定时器
TH0=0Xff; //定时器设置,每隔100微秒发起一次中断。
TL0=0X48; // 0Xa4
ET0=1; //开定时器0中断
EA=1; //开总中断
}
void time0() interrupt 1 //每隔100微秒发起一次中断
{ TH0=0Xff;
TL0=0Xa4; // TH0 = 0x0FF; TL0=0Xa4;
pp++;
}
void main()
{
InitTimer0(); //定时器0初始化
while(1)
{
WE = 1; //打开位选锁存器
P0 = 0xfe; //选中第一位数码管1111 1110
WE = 0; // 锁存位选数据
m = 10000;
i = m;
while(i--)
{
if(pp<1)
motor = 1;
else
motor = 0;
if(pp==9)
pp=0;
}
i = m;
while(i--)
{
if(pp<1)
motor = 1;
else
motor = 0;
if(pp==8)
pp=0;
}
i = m;
while(i--)
{
if(pp<1) //占空比0.2
motor = 1;
else
motor = 0;
if(pp==7)
pp=0;
}
i = m;
while(i--)
{
if(pp<1)
motor = 1;
else
motor = 0;
if(pp==6)
pp=0;
}
i = m;
while(i--)
{
if(pp<1) //占空比0.2
motor = 1;
else
motor = 0;
if(pp==5)
pp=0;
}
i = m;
while(i--)
{
if(pp<1)
motor = 1;
else
motor = 0;
if(pp==4)
pp=0;
}
i = m;
while(i--)
{
if(pp<1)
motor = 1;
else
motor = 0;
if(pp==3)
pp=0;
}
while(1)
{
if(pp<1)
motor = 1;
else
motor = 0;
if(pp==3)
pp=0;
}
}
}
代码中,步进电机转速是慢慢升高的,最终在高速档位旋转。反之亦然,你也可以慢慢减速。
事实上这个思想非常的简单,不需要高深的知识,我们仅仅需要知道,量变引起质变,可以用缓慢的叠加得到我们想要的结果。