恭喜,你发布的帖子
发布于 2023-05-06 21:46:16
19楼
有空将5、6楼的程序由静态(只算一次最大的剩余梯形)纯开环梯形减速,改成动态(算n次第一个小的剩余梯形)纯开环的梯形减速:即进入到减速阶段后每个2ms时间都要计算一次剩余路程的梯形减速且每次只取总体梯形的第一小段梯形Sn脉冲串来发送,例程中的的JerK是无效的,暂时没有启用。
主要改进:1: 消除了部分浮点数和整数相互转换的部分精度损失 2:仅动态实时的计算剩余减速距离的第一个一小段梯形的面积,增强实时性。 3:纯PLC侧开环(PLC不带任何物理设备:电机等)实际测试,从抓取的开环脉冲串看来,相对平滑,比静态的梯形减速有一定改善。梯形减速公式还是遵循5楼的:Sn={4Vmax*S减速总距-(2n+1)*Ts*(Vmax-Vmin)*(Vmax+Vmin)}*Ts/(4*S减速总距),只不过公式中的Vmax;S减速总距参数变成动态改变的参数,n由于只算一次小梯形所以固定成1.0了。
实测在总减速距离仅为2mm即S总减速距==2mm时(2mm的减速距离速度必须由100pp/Ts减速到1pp/Ts),动态梯形减速算出减速段的每个2ms时间片中要发的脉冲个数也是相对平滑均匀的,且减速次数固定为34次。如果将总减速距离改为大于2mm以上的减速距离,整个减速段的每个2ms时间片中的脉冲串个数比S总减速距==2mm还要相对均匀,而且结尾的V减速尾速也在可以停车的合理区间。
如下图01:每个开环参数都是动态实时改变的
如下图02:由于是n次计算剩余梯形,所以公式的n减速次数每次固定成1.0了,因为只计算一次当前的第一个梯形减速面积,而且每次的V减速始速;S剩余距离等几个参数也是动态改变的,
如下图03:S总减速距==2mm时每个2ms时间片内动态梯形减速算法,算出的要发的脉冲串个数,从序号上看和总减速次数==34次相吻合
如下图04:动图抓取S总减速距==2mm时每个Ts=2ms时间片的开环脉冲给定值,有两段开始减速时的过渡,过渡段#减速因子==0.0,过渡段之后#减速因子==1.0,详见动图和例程。
如图05/06/07/08/09/10完整的显示S总减速距==10mm的全过程,10mm减速距离很短,减速次数105,减速时间0.21S,过渡次数==2次;减速次数和抓取的脉冲序号相吻合,每个Ts==2ms的时间片内的脉冲个数相对平滑:
图05
图06
图07
图08
图09趋势图jerk两次过渡
图10趋势图jerk20次过渡
以下针对图10局部放大并添加数据标签图
图09和图10看起来好像不那么S曲线,那是因为横轴的时间分辨率是1ms级别,当你缩放到100ms级别,就会看出有点S曲线了。
19楼贴最后一个分享:将采样给定周期#采样毫秒==Ts==4ms,只需要改动#采样毫秒==4.0一个参数,重新下载并令SMB34==4即可;以下例程以及图片完整的展示了一个开环的,理想的,速度同步,位置同步,无过渡,无超距,减速次数固定成1.0的例程,这个例程没任何Jerk过渡,过冲判断,实测也是完全可用,易用的版本。改动的原因是为了匹配结尾速度同步问题,当V减速尾速不为0时,且要保证开环位置同步,开环速度同步。
如图11、12、13屏蔽过渡超距的一个:开环理想的速度同步位置同步的图片;结尾速度固定40mm/s==0.04mm/ms;位置定差125000个脉冲。
图11:最终位置到达#位置动差==#设定位置==125000pp,且速度恒定68pp/4ms==17pp/ms==17000pp/s==(17000pp/s)/(425pp/mm)==40mm/s
图12:状态图标抓取的全程脉冲串给定个数
图13:如图结尾最后一个Ts==4ms要发的脉冲个数是68pp==68pp/4ms==17pp/ms==17000pp/s==(17000pp/ms)/(425pp/mm)=40mm/s,说明开环算法明确的算出了理想的开环位置同步,开环速度同步
默认不过渡即#过渡开关===0设置成0
本真版的采样时间由Ts==2ms改成Ts==4ms,各大厂商选用4ms作为位置给定的通用周期其实是有一定道理的,因为你还有可能需要1ms甚至更低的”滤波斜坡“,仔细测试以上三个例程,尤其是最后一个本真版,可以简单的看出来。当然软硬件的进步,插补周期早已经不再是典型值4ms,而是更小,但低性能的脉冲频率不高的开环脉冲串,其实选用4ms更合适。
以上三个版本本质都没有大的变化,仅仅有小范围改动,都是可用的,这个计算方法本质就是减速阶段在每个Ts时间片内实时的取路程的调和平均,数学里《调和分析》是一个非常和谐丰富的篇章。
进一步的要讨论的,结尾速度不为零的时候的,离散每个脉冲串时的浮点数的尾差处理,因为例程的V减速尾速只有在能被系统整除的时候,开环的位置同步和速度同步才能看起来很和谐,这些细节以后再说,主要思路是实时计算等差数列求和公式,算出浮点小数部分的差值以及结尾速度的关系,并考虑Trunc浮点数转整数给SMD72,剩余的小数部分放大1000或10000倍,甚至100000倍,残差相加,残差累计到倍数值时,适当的补偿本次:比如SMD72==SMD72+1,并将残差累计值减去倍数值,然后下个减速时间片周期继续累加残差;这些措施都可以弥补一部分精度损失,但本质位置以及速度同步遇到的尾差处理等凡此种种大概是因为:
1:没有分辨率高,频率高的脉冲串。
2:没有48位或者64位甚至是80位的浮点数计算精度。
3:没有硬件时钟的加持。
......
采样周期如果缩短到1ms甚至更小,可以非常明显的消除位置同步,速度同步的误差,但是前提是建立在以上三点满足的基础上,就是要有高分辨率,高速的脉冲串,以及高精度浮点数计算,,,,,,
控制的本质可能是高分辨率,高精度,高速的给定和反馈。
请填写推广理由:
分享
只看
楼主