电机SpTA控制算法

  • 格式:doc
  • 大小:195.00 KB
  • 文档页数:4

下载文档原格式

  / 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电机SpTA控制算法

SpTA即Steps per Time algorithm,它与步进电机S形曲线控制算不同,S形曲线控制算法思想就是根据电机的步数来计算时间,即所谓的Time per Steps,该控制算法先计算电机每一步运行频率,再根据运动曲线计算得到时间参数,而SpTA算法则就是以时间计算为中心,根据时间来计算运动步数相关参数,它的做法就是将电机的运动时间分割成若干个合适的小时间片,在每个时间片内它都将速度参数加到位置参数上,如果位置参数溢出,它就会输出一个脉冲,速度参数根据加速度参数与时间而改变,随着时间推移,速度参数越来越大,位置参数溢出频率越来越高,则电机的运行频率也越来越高错误!未找到引用源。。为了实现根据速度参数控制脉冲输出频率,需要定义以下变量:

PosAccumulator 位置累加器

PosAdd 位置增加值

ActualPosition 实际位置

TargetPosition 目标位置,用户输入步进电机运动的步数

在时间片到来后进行如下计算:

PosAccumulator += ActualVelocity; //位置累加器+实际速度

PosAdd = PosAccumulator >> 17; //移位,判断速度累加器就是否溢出

PosAccumulator -= PosAdd << 17; //位置累加器去掉溢出部分

if(PosAdd!=0) //位置累加器溢出,产生一个不进脉冲

{

ActualPosition+=1;

产生一个步进脉冲;

}

这样控制器输出的脉冲频率就随着实际速度的增大而增高,随着实际速度减小而降低。为了根据时间实现实际速度的变化,需要定义以下变量:

VelAccumulator 速度累加器

ActualAcceleration 实际加速度,用户设定的加速度数值

VelAdd 速度增加值

ActualVelocity 实际速度

TargetVelocity 目标速度

在时间片到来后进行如下计算:

if(ActualVelocity!=TargetVelocity)

{

//如果实际速度!=目标速度

VelAccumulator+=ActualAcceleration; //速度累加器+实际加速度

VelAdd = VelAccumulator >> 17; //移位,判断速度累加器就是否溢出

VelAccumulator-=VelAdd << 17; //速度累加器去掉溢出部分

if(ActualVelocity

{

//如果实际速度<目标速度

ActualVelocity=MIN(ActualVelocity+VelAdd, TargetVelocity); //实际速度为两者中小者

}

else if(ActualVelocity>TargetVelocity)

{

//如果实际速度>大于目标速度

ActualVelocity=MAX(ActualVelocity-VelAdd, TargetVelocity);//实际速度为两者中大者

}

}

else

{

//实际速度=目标速度,不需要执行加加速算法

VelAccumulator=0;

VelAdd=0;

}

这样,就实现了通过时间与目标速度改变电机实际速度参数,进而间接改变控制器输出

脉冲的频率,时间参数就是随着电机运行而递增的,目标速度参数数值就是使用一个状态机根据当前的运行状态来确定的,该状态机具有四种状态:

0: RAMP_IDLE-空闲状态

1: RAMP_ACCELERATE-加速状态

2: RAMP_DRIVING -匀速状态

3: RAMP_DECELERATE-减速状态

状态状态切换及其条件如图3-11所示:

图3-11 SpTA控制算法状态机状态切换图

SpTA算法同样就是通过定时器来实现的,与S形曲线算法不同的就是它没有使用定时器的PWM功能,仅仅就是通过定时器定时中断来产生一个时间片,在定时器中断服务子程序中完成上述算法,在需要时,通过控制GPIO产生一个步进脉冲。

SpTA与S型算法的比较:

从上面的两种算法可以瞧出,传统的S形曲线控制算法实现比较简单,但就是它将要输出的脉冲频率(周期)与脉冲个数存储在RAM里,占用了一定的内存,且要想实现更好的控制效果,S形曲线的离散化程度越高,占用的RAM越大,如果要改变电机的运行速度曲线,需要重新计算每个阶段脉冲频率与脉冲个数,计算时使用了浮点数,运算量较大。

SpTA算法就是根据用户输入的加速度与目标速度以及设定的总脉冲数,自行决定如何输出达到最佳运动效果的脉冲,它不需要占用额外的RAM来存储每个阶段脉冲频率与脉冲个

数,算法实现基本上都就是MCU“拿手”的加减法与移位运算,算法效率高,但就是该算法为了达到较好的运动控制,需要一个时间片很小的定时中断来调整数据,这样在输出一个脉冲期间要频繁产生中断,尤其就是在电机起步与停止的时候,脉冲频率低,但就是定时器中断的次数很高,这样CPU的效率就会被定时器中断拉低。

从算法计算量、占用RAM大小、控制效果与CPU效率上,两种控制算法对比分析如表3、2所示,综合考虑二者的优缺点,本系统中对于试剂盘、样本盘、反应盘等负载较大的电机使用SpTA控制算法,其它负载使用S形曲线控制算法。

表3、2 步进电机S形曲线控制算法与SpTA控制算法比较分析

比较项S形曲线控制算法SpTA控制算法

算法计算量大且使用了浮点数小且使用的就是整形数

占用RAM大小较多,与控制效果相关很少,与控制效果无关

控制效果由离散化程度决定自适应,效果较好

CPU效率中断次数=步进数,CPU效率

较高中断次数>>步进数,CPU效

率较低