一、目标功能
输入多个目标角度,以及每个角度对应的速度,实现步进电机的多段多速度转动
二、计算过程
**2.1 **简化C与n函数关系
根据上一节内容,定时器初值与速度函数关系为
硬件系统确定后,angle、Xtal、X均为定值,为降低计算量,将公式中可以提前计算好的地方直接计算出来
根据硬件设置情况,step=1.8,Xtal=12000000,X=2,计算K值
2.2计算步数(step_num)与角度(angle)函数关系
三、程序代码
//定义步进电机转动段数及运动参数
#define para 5
unsigned int angle[5]={90,360,720,180,0}; //电机目标转角
unsigned int v[5]={20,60,120,60,20}; //电机速度
void main()
{
//计算step_num与c
step_num=10*angle[0]/9;
c=65536-150000/v[0];//计算V[0]对应的定时器初值
while(1)
{
}
}
//定时器0中断程序
void time0_int() interrupt 1
{
TH0=c/256;//重装定时寄存器初值
TL0=c%256;
//低电平切换到高电平,产生一个脉冲
PUL=1;
_nop_();_nop_();nop_();nop_();
PUL=0;
DIR==1?n++:n--;//根据方向,判断步数加或减
if(n==step_num)//当前阶段完成判断
{
i++;
if(i==para)//整个运动阶段走完
{
TR0=0;//电机停止
}
else //计算下一阶段参数
{
//刷新步数与速度值
step_num=10*angle[i]/9;
c=65536-150000/v[i];
//判断方向
if(angle[i] >angle[i-1])
DIR=1;
else
DIR=0;
}
}
}
四、总结
此种方式利用定时器精确定时能力,从而控制电机转速,同时实现步进电机的多段运动,至此实现了步进电机三个主要参数角度、速度、方向的简单协同操作。