[STM32G4]

关于多定时器中断定时不准确的问题

[复制链接]
1122|14
手机看帖
扫描二维码
随时随地手机跟帖
Hufei1994|  楼主 | 2024-6-9 14:32 | 显示全部楼层 |阅读模式
Hi,all

系统开了俩个定时器中断,其中一个周期50us,优先级最高(实际执行时间约为23us)。第二个周期500us,优先级次之

我发现实际在系统运行的时候,500us中断的任务周期部分点存在超时,变为525us以上,进一步导致数据处理偏差较大:电机恒定500rpm转速运行时,转速有个周期约为1s波动。
实际500us内任务的执行时间较短,执行时间40us以内。

然后为了验证是否500us中断定时不准导致的数据,我在main函数内开了一个500us的任务,将原任务放在此处执行,此时数据正常了。并且main函数的500us任务定时也基本是准的。它是由50us任务累加十次在main的死循环中触发一下

这边不明白的main死循环函数的优先级低于定时器任务,为什么反而它更准呢?
猜想是不是可能500us刚开始运行时此时来了50us任务,500us被打断了,被顺延了一个50us任务的执行时间?500us任务的输入原始数据是在50us任务内采集保存在buffer里面的,500us任务只执行计算。此时就算被打断应该也不影响速度的正常计算吧?

同时想请教大家如果不使用RTOS(最快只有1ms任务),怎么能开俩个互补影响的定时器任务呢?我目前的设置是不是有问题呢?

转速1s周期异常波动

转速1s周期异常波动
转速1s周期异常波动.png
脉宽触发.jpg
NVIC配置.png
500us定时器配置.png

使用特权

评论回复
xuanhuanzi| | 2024-6-9 18:10 | 显示全部楼层
异常波动是什么造成的。

使用特权

评论回复
qintian0303| | 2024-6-10 15:46 | 显示全部楼层
一个周期50us,优先级最高(实际执行时间约为23us),这么小的周期你是如何测试出来的?

使用特权

评论回复
qqqasdfc| | 2024-6-10 23:45 | 显示全部楼层
厉害

使用特权

评论回复
Hufei1994|  楼主 | 2024-6-11 08:51 | 显示全部楼层
qintian0303 发表于 2024-6-10 15:46
一个周期50us,优先级最高(实际执行时间约为23us),这么小的周期你是如何测试出来的? ...

是用示波器测量GPIO翻转实现的

使用特权

评论回复
cr315| | 2024-6-12 10:24 | 显示全部楼层
优化中断处理

使用特权

评论回复
呐咯密密| | 2024-6-12 15:05 | 显示全部楼层
我看了一下,大致是两个问题,第一个是你的50us中断23us触发了,是不是设置有问题,预分频器和重装载值不正确。其次是500us这个和50us(如果设置错误,应该是25us)属于倍数关系,当两个定时器同时启动,在计数到500us时候,两个中断会同时触发,但是50us的优先级高会优先被触发,这就导致500us这个中断可能会在50us这个中断结束后才会被触发

使用特权

评论回复
呐咯密密| | 2024-6-12 15:06 | 显示全部楼层
仅仅是猜测,不对论述结果正确性负责

使用特权

评论回复
jcky001| | 2024-6-12 16:00 | 显示全部楼层
考虑在中断处理函数中仅设置标志位,然后在主循环中根据这些标志位来执行相应的任务。这样可以减少中断处理函数的执行时间,并允许主循环在适当的时候处理任务。

使用特权

评论回复
laocuo1142| | 2024-6-12 16:59 | 显示全部楼层
在中断处理函数中避免锁定任何资源

使用特权

评论回复
Hufei1994|  楼主 | 2024-6-12 19:06 | 显示全部楼层
呐咯密密 发表于 2024-6-12 15:06
仅仅是猜测,不对论述结果正确性负责

感谢解答,问题已经解决了。
导致问题的原因是高级定时的ARR值设置成了期望值减1(170Mhz的MCU,中心对齐模式,ARR设置成了4250-1),正确值应该是就是期望值,不用减1,进而导致50us计时不准,然后应该是造成了周期性偏移,但是为啥周期是1s还没想明白

使用特权

评论回复
flycamelaaa| | 2024-6-12 20:26 | 显示全部楼层
检查硬件定时器的精度和稳定性。有时,硬件定时器本身可能存在一些误差或抖动。

使用特权

评论回复
powerantone| | 2024-6-13 10:00 | 显示全部楼层
如果硬件定时器无法满足需求,可以考虑使用软件定时器。例如,在主循环中使用一个计数器来模拟定时器。这种方法虽然不如硬件定时器精确,但在某些情况下可能足够用。

使用特权

评论回复
香水城| | 2024-6-17 11:38 | 显示全部楼层
Hufei1994 发表于 2024-6-12 19:06
感谢解答,问题已经解决了。
导致问题的原因是高级定时的ARR值设置成了期望值减1(170Mhz的MCU,中心对齐 ...

定时器时基参数的设置这个地方要注意类似细节。

对于单向计数模式,即向上或向下计数模式,计数周期为 ARR+1个计数时钟;

对于中心对齐计数模式,即向上和向下计数模式,计数周期为 2*ARR个时钟;

使用特权

评论回复
EmmaTT| | 2024-6-18 21:17 | 显示全部楼层
rtos是不是反应比裸机慢啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

151

帖子

0

粉丝