STM32中PWM的预分频器和周期值

问题描述 投票:0回答:1

我正在使用STM32F103C8Tx,我试图创建一个PID可调的PWM。在PID中,我将给PWM提供从0到100的值来设置占空比。这意味着我的计数器周期在Cubemx中需要为100。因为我已经了解到,当我改变荷兰周期时,它会改变计数器周期。然而,我需要创建200KHz频率的PWM和定时器的时钟是72MHz.为了实现100的计数器周期值,我需要有一个3.6预分频器。我是按照错误的方法还是在stm32中把PWM占空比的事情弄错了?

注:我使用的是 htimx.Instance->CCRx =Duty_Cycle; 以便从代码中改变占空比。

c stm32 pwm
1个回答
2
投票

为了实现0-100%的占空比,你不必将计数器周期设置为100。相反,你可以设置的更高,切换阈值也更高。我们用你的例子,你需要200KHz的频率,你的定时器的时钟是72Mhz,所以计数器周期应该是360,阈值应该是 htimx.Instance->CCRx = (int)(360 * dutyCycle / 100). 但如果用PID控制电机,就必须考虑它的死区,0-100%对应60-360,数值应该是 htimx.Instance->CCRx = (int)((360 - 60) * dutyCycle / 100)

如果你需要准确的数值,你可以把系统频率调整到50Mhz甚至100Mhz(是的,但我不鼓励这样做),或者你可以用另一个MCU,比如stm32f401ccu6,成本相同。

PS:只是我的好奇心,你想控制的目标是什么。我的意思是,如果是一个电机,我认为200Mhz是相当高的。要控制电机,我通常用20Mhz(哦,我的低成本驱动器:)),CCRx值会更漂亮。

© www.soinside.com 2019 - 2024. All rights reserved.