STM32
直播中

王萍

7年用户 1337经验值
私信 关注

用STM32的一个芯片测PWM输入,频率有的时候不对是什么原因造成的?

最近用STM32的一个芯片测PWM输入,发现频率有的时候不对,原因是HAL_tiM_IC_CaptureCallback函数里测量的上升沿之间间隔和上升沿下降沿之间间隔,发现有的时候丢了一个上升沿或者下降沿。将这个定时器的优先级该成0,状况好点,但是还出错。输入频率是10000Hz的时候,__HAL_TIM_GetCounter函数测的值,比HAL_TIM_ReadCapturedValue要多2个,即使__HAL_TIM_GetCounter放到前面。
我用的是TIM10和TIM13分别做两路PWM输入捕获,每个定时器都是先测上升沿,之后再测下降沿,再测上升沿的方式,来计算频率和占空比。

回帖(1)

贾飞世

2024-9-29 16:38:00
在使用STM32芯片测量PWM输入时,频率有时不正确的原因可能有以下几点:

1. 定时器配置问题:检查定时器的配置,确保其工作在正确的模式下,例如捕获模式。同时,确保定时器的时钟源和预分频器设置正确。

2. 中断优先级问题:您提到将定时器的优先级改为0后,情况有所改善。这可能是因为中断优先级设置不当导致中断处理不及时,从而丢失了上升沿或下降沿。可以尝试调整中断优先级,确保定时器中断能够及时处理。

3. 定时器溢出问题:如果定时器的计数器溢出,可能会导致捕获的上升沿或下降沿丢失。检查定时器的计数器溢出设置,确保在溢出之前完成捕获。

4. 硬件问题:检查PWM输入信号的质量和稳定性,确保信号没有噪声或干扰。此外,检查STM32芯片的电源和接地是否稳定。

5. 软件问题:检查您的代码逻辑,确保在捕获上升沿和下降沿时没有遗漏或错误。同时,确保在测量频率和占空比时,代码逻辑正确。

关于您提到的__HAL_TIM_GetCounter函数测的值比HAL_TIM_ReadCapturedValue多2个的问题,这可能是因为在读取计数器值时,定时器仍在计数,导致计数器值发生变化。您可以尝试在读取计数器值之前,先暂停定时器的计数,然后再读取计数器值。

总之,要解决这个问题,需要从硬件和软件两方面进行排查和优化。希望这些建议对您有所帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分