续-数字积分法DDA(实时步进电机梯形+S形加减速)实现方法

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

上一篇的数字积分加减速度,其实就与网络上的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 所以:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值