恭喜,你发布的帖子
发布于 2023-03-21 13:00:51
5楼
本贴针对上贴优化了减速算法的尾差处理,使得当变量#减速总距确定时,变量#减速次数的值每次测试都是同一个值(位置定,时间定),尾差处理也使得减速结尾即将停车的时候尽量让SMD72不减速到1这样平滑度和时间稍优,初步做到了定位定时。以下贴出一个全局变量版本的例程。
(一)中断定位梯形减速过程简单推导(考虑V减速始速和V减速尾速)
T形减速计算:计算中既有浮点数又有整数,这是非常有必要的,原因是一个脉冲不差要求要用整数加减;而减速过程的精密计算需要用浮点数来运算,最终再化成整数,并做尾差处理;所以浮点数和整数都要用。
1:位推算速:SMW68由SMD72配合Ts==2ms推出,目前简单点就是SMD72/Ts后续可能要缩放处理;
2:减速算法:
01:刚开始进入减速段,S减速总距=减速梯形或三角形面积=(Vmax+Vmin)*T减速总时/2,Vmax==V减速始速;Vmin==V减速尾速(一般等于0.0);Vmax=V减速始速就是在定时中断的中断初始的瞬间采样到的SMW68;以采样时间Ts==2ms将S减速总距划分成n个梯形,最后一个梯形上底长度==0本质是三角形;
02:Ts==2ms,Vmax,Vmin,S减速总距四个参数知道;
03:则算出T减速总时==2S减速总距/(Vmax+Vmin);
04:计算减速度a,每小段梯形的下底长度Vn,上底长度Vn+1;面积Sn;
05:减速度a=(Vmax-Vmin)/T减速总时=(Vmax-Vmin)*(Vmax+Vmin)/(2*S减速总距);
06:Vn==Vmax-(n*Ts*a);(n=0,1,2......)n=0时Vn==Vmax;
07:Vn+1==Vn-a*Ts==Vmax-((n+1)*Ts*a);(这两个公式是理想T梯形等价,S曲线不等价)
08:Sn=(Vn+Vn+1)*Ts/2;
09:Sn= {2Vmax-(2n+1)*Ts*a}*Ts/2={2Vmax-(2n+1)*Ts*(Vmax-Vmin)*(Vmax+Vmin)/(2*S减速总距)}*Ts/2
最终得到:Sn={4Vmax*S减速总距-(2n+1)*Ts*(Vmax-Vmin)*(Vmax+Vmin)}*Ts/(4*S减速总距)
10:浮点数:减速次数:就是n==0,1,2,3,......
算出来的Sn做尾差判断处理以后才能赋值给SMD72;并对SMD72进行下限幅值限幅成1;
尾差处理:就是结尾的几个算出的减速脉冲数加上位置动差不能超过设定位置,否则就会过冲几个脉冲,必须进行简单的加减运算处理过冲,这样的简单处理是非常正确且必要的,这也是需要仔细考虑的。
(二)例程说明:例程经过多次实践测试,自测是正确可用的,减速算法正确,程序一个脉冲也不差,同一个减速距离,减速次数多次测试都是同一个值,说明既能准确控制位置,整个中断定位期间的时间也是非常确定的。即:例程1完成了中断定位准确的定位,且整个定位时间完全可控且确定。仅供参考。
1:初始化必要参数
采样速度=1000.0ms/s
减速尾速=0.0mm/ms
总减速距=5.0mm
脉冲毫米=425.0pp/mm(机械减速比脉冲分辨率等决定)
设定位置==125000==294.117647mm
采样毫秒=2.0ms
初始脉冲=109pp/(2ms)
2:初始化2ms的中断和PTO使能位
3:由位置推算速度SMD72推导SMW68
4:减速算法见以上10点
5:定时中断中 运动启停初始化一些标志位
6:定时中断中最主要的运动程序
后续将测试一个中断定位距离一定:S定;且约束定位时间一定:T定,这要求动态计算S总减速距......
进一步是S定,T定,Vmin定且不等于0.0......
请填写推广理由:
分享
只看
楼主