文档介绍:电机SpTA控制算法
PosAccumulator += Actualvelocity; PosAdd = PosAccumulator » 17;
PosAccumulator -= PosAdd « 17; if(PosAdd! =0)
{
ActualPosition+=l;
产生一个步进脉冲;
SpTA即Steps per Time algorithm,它与步进电机S形曲线控制算不同,S形曲线控制算 法思想是根据电机的步数来计算时间,即所谓的Time per Steps,该控制算法先计算电机每 一步运行频率,再根据运动曲线计算得到时间参数,而SpTA算法则是以时间计算为中心, 根据时间来讣算运动步数相关参数,它的做法是将电机的运动时间分割成若干个合适的小时 间片,在每个时间片内它都将速度参数加到位宜参数上,如果位苣参数溢出,它就会输出一 个脉冲,速度参数根拯加速度参数和时间而改变,随着时间推移,速度参数越来越大,位巻 参数溢出频率越来越髙,则电机的运行频率也越来越爲枷^找朝用叭 为了实现根据速度参数
控制脉冲输出频率,需要左义以下变虽:
PosAccumulator
位垃累加器
PosAdd
位宜增加值
ActualPositio n
实际位置
TargetPosition
目标位置,用户输入步进电机运动的步数
在时间片到来后进行如下计算:
〃位置累加器+实际速度
〃移位,判断速度累加器是否溢出
〃位置累加器去掉溢出部分
〃位置累加器溢出,产生一个不进脉冲
这样控制器输岀的脉冲频率就随着实际速度的增大而增髙,随着实际速度减小而降低•
为了根据时间实现实际速度的变化,需要定义以下变量:
VelAccumulator
速度累加器
ActualAcceleration
实际加速度,用户设定的加速度数值
VelAdd
速度增加值
Actualvelocity
实际速度
Targetvelocity
目标速度
在时间片到来后进行如下计算:
if(ActualVelocity!=TargetVelocity)
{
〃如果实际速度!二目标速度
VelAccumulator+=ActualAcceleration; 〃速度累加器+实际加速度
VelAdd = VelAccumulator » 17; 〃移位,判断速度累加器是否溢出
VelAccumulator-=VelAdd « 17; 〃速度累加器去掉溢出部分
if(ActualVelocity<TargetVelocity)
{
〃如果实际速度V目标速度
ActualVelocity=MIN(ActualVelocity+VelAddz Targetvelocity); 〃实际速度为两者 中小者
else if(ActualVelocity>TargetVelocity)
{
〃如果实际速度〉大于目标速度 ActualVelocity=MAX(ActualVelocity-VelAdd/ Targetvelocity);〃实际速度为两者中 大者
}
}
else
{
〃实际速度二目标速度,不需要执行加加速算法
VelAccumulator=0;
VelAdd=0;
}
这样,就实