单片机工控的电机减速算法是什么?

描述

有不少网友感叹高铁技术之稳,一杯水放在窗户上面都不会晃动.要达到这个‘稳’,就要在电机启动停止时,有一个加减速.电机启动时,速度需要逐渐提高,停止时,速度逐渐减小,这就是步进电机的加减速过程。单片机给步进驱动一个脉冲,电机转动一个步距角,单片机给脉冲越快,步进电机单位时间内,转动的角度也就越大.即脉冲频率正比于电机转速.另一方面,速度的变化对应的物理量是加速度,高中物理可以知道,一个加速过程一般涉及:初始速度,加速度,加速时间这三个量.对应到电机转动:起始转速(rpm),最大速度(rpm),加速时间(min),转速对应单片机定时器的频率 pulse/ms(单片机定时器1毫秒中断次数).

工控行业电机加减速一般有T型加速,S型加速.负载惯量比较轻的情况就可以使用T型曲线,负载惯量比较重的情况一般使用S型曲线,S型曲线光滑,速度不突变.

单片机速度控制原理

单片机通过调节频率控制电机速度,频率是单片机定时器的定时间隔决定的,只需要在定时器中断处理程序里边翻转脉冲输出端口即可.单片机的RAM和CPU不是很快,定时器的间隔使用查表的方法来获取,效率比较高.

脉冲频率

控制流程

脉冲频率

T型曲线

T型曲线的加速减阶段是线性加减速的,整个运动[加速,匀速,减速]速度变化看起来像一个等腰梯形.

脉冲频率

加速阶段就是一个一次线性函数,斜率不变[加速度不变],公式如下:

脉冲频率

单片机生成加速数组代码:

//生成T形加速数组//Vmin:起始速度(pulse/s)//Vmax:最大速度,即匀速速度(pulse/s)//AccTime:加速时间(ms)//pBuffer:数组缓存区//返回值:数组长度intGenTTable(uintVmin,uintVmax,intAccTime,uint* pBuffer){//计算加速度uinta = (Vmax-Vmin)/AccTime;uintv = Vmin;uintt =0;intindex =0;while(v<=Vmax) { v = a*t+Vmin; pBuffer[index] = f/v;//f为定时器的工作频率t +=1000000/v;//v的速度为pulse/s,一个脉冲的时间为:1/v s=1000000/v usindex++; }returnindex; }

S形加减速

T形加速曲线的图形,可以看出加速阶段转向匀速阶段时加速度是突然变为零的,这对大惯量的设备晃动比较大,要想设备晃动比较小,就需要加速过渡到匀速阶段是渐进光滑的,加速度不突变,进入到匀速阶段时加速度刚好为0.数学模型的S形曲线就是光滑,加速度不突变的。数学方程可以参考**逻辑斯蒂**曲线,下图是公式推导:

脉冲频率

脉冲频率

单片机S形曲线加速数组生成:

上面的公式推导有一个结论:

脉冲频率

程序代码就是根据这个公式来生成数组数据

//生成S形加速数组//Vmin:起始速度(pulse/s)//Vmax:最大速度,即匀速速度(pulse/s)//AccTime:加速时间(s)//pBuffer:数组缓存区//返回值:数组长度intGenSTable(uintVmin,uintVmax,intAccTime,uint* pBuffer){doubletSum =0;doubleT= AccTime*f;//f为定时器工作频率uintC0 = (uint)(f/Vmin);uintCmax = (uint)(f/Vmax);uintindex =0;while(tSum < T) { pBuffer[index]= (uint)(Cmax+pow(C0-Cmax,(T-tSum)/T)); tSum += pBuffer[index]; index++; }returnindex; }

上面生成的加速数据就是定时器的间隔,可以把这边这份数据写到Flash的扇区,这样不用电机每次运动都来生成一次,减少单片机的运算量.也可使用上位机改变电机的起始速度,匀速速度,加速时间来调节电机加速性能,不用重新编译单片机代码,使用起来很方便.

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分