PWM / 定时器 频率-占空比计算器
填预分频和 TOP 求频率与分辨率,或反过来给目标频率反解 TOP。对应 STM32 的 PSC/ARR、ESP32 LEDC,看清频率与分辨率怎么权衡。
通用结构:时钟先被 prescaler 分频,再数到 TOP 溢出一次即一个 PWM 周期。 频率 = 时钟 / (prescaler × (TOP+1)),占空比能分成 TOP+1 档、等效 log2(TOP+1) 位。对应 STM32 的 PSC/ARR、ESP32 LEDC 的 clk/duty_resolution。
这套配置输出 1 kHz 的 PWM,占空比可以调 1000 档, 等效约 9.97 位分辨率。想要更细腻的调节(比如平滑调光),就把 TOP 加大、预分频减小;想要更高频率,则相反,二者是此消彼长的取舍。
怎么用
先在顶部选正算还是反解。正算适合你已经写好了寄存器值、想确认输出频率和能调几位占空比:填定时器时钟、预分频、TOP, 结果立刻出来。反解适合你心里有个目标频率、想倒推该把 TOP 设成多少:填时钟、预分频和目标频率,工具给出取整后的 TOP 和对应的实际频率。
时钟一栏放了 ESP32 LEDC 80MHz、STM32F1 72MHz 等预设,点一下就填。名词对照:STM32 里预分频是寄存器 PSC、TOP 是 ARR;ESP32 LEDC 里 TOP 对应 duty_resolution 决定的档数。
频率与分辨率的取舍
这是用 PWM 时绕不开的一对矛盾。定时器的核心公式就两条:
- 频率 = 时钟 /(预分频 × (TOP+1))
- 占空比分辨率 = log2(TOP+1) 位,也就是占空比能分成 TOP+1 档
两条公式里 TOP 同时出现,方向相反:TOP 越大,分辨率越高,但频率越低;TOP 越小,频率上得去,分辨率却掉下来。 时钟频率是固定的「预算」,你把它撒在频率上还是分辨率上,是个此消彼长的选择。
实操上先定死更硬的那个需求。做LED 调光,几百 Hz 到几 kHz 人眼就不闪,于是优先把 TOP 拉大拿到 10~12 位让亮度过渡平滑; 做电机/开关,频率往往被啸叫、开关损耗、驱动器要求锁死(比如推到 20kHz 以上避开人耳),这时就得接受分辨率变低。 如果两头都要、时钟不够分,唯一的出路是换更高频的时钟源,或换 32 位定时器把 TOP 的天花板抬上去。
常见问题
- PWM 频率、预分频、TOP 三者到底什么关系?
- 定时器的结构是「时钟 → 预分频器 → 计数器数到 TOP 溢出」。时钟先被预分频(prescaler)除一下变慢,慢下来的计数器从 0 数到 TOP,数满一圈就是一个 PWM 周期。所以频率 = 时钟 /(预分频 × (TOP+1))。举例:80MHz 时钟、预分频 80、TOP 999,频率 = 80000000 /(80 × 1000)= 1000Hz。对应到芯片寄存器:STM32 里预分频是 PSC、TOP 是 ARR;ESP32 LEDC 里则是时钟分频加 duty_resolution。
- 为什么频率越高,占空比分辨率越低?
- 因为占空比是靠 TOP 来分档的:TOP 是几,占空比就能分成 TOP+1 档,等效 log2(TOP+1) 位。而频率 = 时钟 /(预分频 × (TOP+1)),要频率高,(TOP+1) 就得小,档数自然变少。同一个时钟下,1kHz 可能能给到 10 位(1024 档)细腻调光,但你要做 1MHz,TOP 只剩几十,占空比就只有几位、调起来一格一格很粗。这是硬约束:时钟频率就那么多,撒在频率上还是分辨率上,只能二选一,除非换更高的时钟源。
- 做 LED 呼吸灯 / 电机调速该选多高频率?
- LED 调光一般用几百 Hz 到几 kHz 就够,人眼不会觉得闪,同时能留出高 TOP 拿到 8~12 位分辨率,让亮度过渡平滑。这类场景优先保分辨率。有刷电机、舵机则有各自惯例:舵机是固定 50Hz、脉宽 1~2ms;电机 PWM 调速常用几 kHz 到 20kHz 以上(超过 20kHz 可以避开人耳听到的啸叫)。开关电源、无刷驱动会更高。先定频率需求,再回来看这个频率下 TOP 能给几位分辨率够不够用。
- 反解出来的 TOP 很大 / 是小数怎么办?
- TOP 必须是整数,工具反解时已经四舍五入了,所以「实际频率」会跟你的目标值差一点点,这是正常的,看实际频率一栏就是最终值。如果反解出的 TOP 超过 65535,说明超出了多数 16 位定时器的装载范围——办法有三:加大预分频让计数器慢下来(TOP 就变小)、改用 32 位定时器(STM32 的 TIM2/TIM5 是 32 位)、或者接受低一点的分辨率。反过来 TOP 太小(分辨率不够)就减小预分频或降目标频率。
延伸阅读
想从零跑通一路 PWM 调光,读 用 PWM 控制 LED 亮度, 原理层面看 PWM 是怎么把数字变模拟的。 定时器本身与 RTOS 配合的用法在 RTOS 软件定时器 里; 换到 STM32 平台,STM32 HAL 外设实战 有 TIM/PWM 的对照写法。 常一起用的还有 进制/波特率计算器 和 电池续航估算器,更多见 GPIO 选脚检查器。