恭喜,你发布的帖子
发布于 2019-11-14 17:21:41
12楼
问题不在准不准时这里,而是在每一个时间片里面能不能把企图的脉冲数发完?发多了怎么办,发不够怎么办?多了和不够都好,下一个时间片还是会来的。新的任务又加入了。
差值和新任务加起来,计算预算下一个时间片要用多大的频率发完这些脉冲?预算归预算,扫描周期的不确定性确定了你一定不能好好地把脉冲发完,总是多了或者少了。【这一点与用pls指令的极为不同,用pls指令的说发完就发完。只要在时间片里面提早一个很小的一个时间单位完成脉冲,那么下一个时间片里面就不带有上次的残留脉冲。假如计算出需要2345赫兹的脉冲频率发送12个脉冲,那么,设定pls的时候就使用2350赫兹发12个脉冲,那么总可以在每次中断内完成所有脉冲任务。可是库的man指令就不行。】
man指令由于扫描的原因总是迟到。在时间片里面2345赫兹发12个脉冲可能下一个时间片到来的时候正在发地13个脉冲或者第12个脉冲还没发完。那么这个脉冲可能算不出来,硬件自己都不知道,就不能在下一个时间片里面加入误差。所以误差又要连累到再下一个时间片了。
还有一个致命的问题。除法得到的速度,脉冲数除以时间片单位,然后取整。假如10毫秒里面数到18个脉冲……那么频率是多少?18×1000÷10=1800赫兹。那么1800将会给到man指令的speed。假如数到17个脉冲呢?那么就把1700作为给定。问题来了。18个脉冲和17个脉冲两种结果之间的跳动,对于高速计数器来说是很平常的事情,但是1800和1700作为给定,就让脉冲偏差了100个。本来理论上是匀速的1800赫兹最适合的,但是一旦出现了1700的给定之后,下一个时间片就要欠了100个脉冲,再加上理论的1800就是1900个脉冲了。当你用1900作为给定的时候,下一个时间片就超了100多个脉冲,然后下一个时间片又要把给定调整为1690。结果震荡发生了。最后可能没有脉冲了,都回不来,十几二十个回合才能停住在目标位置。
哎。
此情此境,大家又会想到pid了……瘘子大了。
果然想的高深,但是手轮应该很简单的功能
请填写推广理由:
分享
只看
楼主