首页 > 解决方案 > STM32 中 PWM 的预分频器和周期值

问题描述

我正在使用 STM32F103C8Tx,我正在尝试创建一个 PID 可调 PWM。在 PID 中,我将为 PWM 提供 0 到 100 的值以设置占空比。这意味着我的计数器周期需要在 Cubemx 中为 100。因为正如我在更改荷兰语周期时了解到的那样,它会更改计数器周期。但是,我需要创建频率为 200 KHz 的 PWM,定时器的时钟为 72 MHz。为了在计数器周期内达到 100 的值,我需要一个 3.6 的预分频器。我是按照错误的方式还是我在 stm32 中弄错了这个 PWM 占空比?

注意:我使用 htimx.Instance->CCRx =Duty_Cycle;它是为了从代码中更改占空比。

标签: cstm32pwm

解决方案


要实现 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,成本相同。

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


推荐阅读