上一篇的数字积分加减速度,其实就与网络上的SPTA加减速原理是哪么一回事,也就是固定时间分段,不过网络上找到的SPTA方法介绍也不是太详细,对于哪些增量参数也没提及如何计算
先看看速度,加速度与时间三者的关系
v=t*a
此式好明显速度就是时间与加速度的乘积,如果定时器频率为100KHZ,哪每周期的时间就是10微秒,先说一下如果速度为19200步每秒,这里所有说的步单位都以秒作为时间单位,在100KHZ定时器频率下,按19200这个速度移动,100000/19200=5.2083333.....个周期输出一个脉冲,这样电机就以19200HZ的速度移动了,现在看一下如何积分输出脉冲
accumulator=0;
v=19200;
F=100000;
out=0;
//以上初始化变量
for(;;)
{
accumulator = accumulator + v; //位置累加
if(accumulator>F) //溢出
{
++out;//输出脉冲
accumulator = accumulator-F;//清除溢出位
}
}
代码里死循环模仿定时器中断函数,每循环一次,累加器累加一次速度值,直到大于定时器的频率值,就输出一步,也就是溢出,累加器减去频率值,就是去除溢出位,保留余数,作为下一次累加使用,这样0.xxx个周期就补回去了,它实际输出的脉冲频率,也就是并不会稳定在19200的频率,100000/19200=5.2083333.....,这0.20833333个周期会被保留起来累积到一个整数才会输出一个脉冲,所以实际输出的脉冲是一直在16666.6666...到20000范围内波动,但在整体的移动总时间是一样的,只有速度与定时器频率整数除时才是稳定不波动的脉冲频率,频率越高,这个跳动频率范围越大,如果按取一定时间长度的频率平均值,确实还是19200的频率,实际这样的波动频率脉冲输出到电机上,会不会造成电机直接卡死,也只有试验了才知道,题目为实时加减速度实现,哪就先看看以这种方法如何实现实时加减速.
这里只指定一个频率进行累加移动,加速度斜坡又应该怎么样才行呢,19200为目标速度,从启动速度到19200的速度,可以看作为一个斜率,启动为0,即电机静止状态,即0-19200,按定时器一个周期时间的长度分成许多多份,得到一个速度增量值,定时器每一个周期,把当前速度增加一个速度增量值,同时每定时周期累加器进行累加,看是否溢出,是否输出脉冲
速度增量值根据加速度和定时器频率求得 inc_v=a/f
假定加速度为a=64000步每秒,inc_v=a/f=64000/100000=0.64
inc_v=a/f 是根据 t=v/a=19200/64000=0.3
v=t*f*at_v = 0.3*100000*0.64=19200 所以:

文章探讨了SPTA(SampledPositionTrajectoryAlgorithm)在电机控制中的加减速实现,通过固定时间分段和累加器原理,解释了如何计算速度增量和处理频率波动。重点在于整数运算优化,避免浮点数运算带来的开销,以及如何通过调整频率和加速度倍率确保脉冲频率的稳定性。文章还触及了脉冲频率的波动对电机运行的影响,并提出了整数积分法的局限性和可能的解决方案。
最低0.47元/天 解锁文章
2708

被折叠的 条评论
为什么被折叠?



