PWM
判别规则(核心,唯一要记的)
- 频率看 ARR、占空比看 CCR:
频率 = CK_PSC / (PSC+1) / (ARR+1),占空比 = CCR / (ARR+1) × 100%
- 调亮度/转速/舵机角度 = 改 CCR(占空比);改频率 = 改 ARR 或 PSC
- 场景判别:要"平滑控制平均输出"(灯亮暗、电机快慢、舵机角度)→ 就是 PWM
一句话:"ARR 定周期、CCR 定高电平比例;要变亮度改 CCR,要变频率改 ARR。"
抽象描述(一句话本质)
PWM = 快速开关信号(每秒几千上万次),靠"高电平占整个周期的比例"(占空比)控制平均电压 → 灯变暗、电机变慢、舵机转角度。频率决定快不快,占空比决定平均多高。
核心概念(先分清三样东西)
| 概念 |
是什么 |
谁决定 |
| 频率 |
每秒波形循环多少次 |
ARR(+PSC) |
| 占空比 |
高电平占一个周期的百分比 |
CCR |
| 分辨率 |
占空比能调多细 |
ARR 越大分得越细 |
两条公式(背下来)
频率 Freq = CK_PSC / (PSC + 1) / (ARR + 1)
占空比 Duty = CCR / (ARR + 1) × 100%
- PSC 预分频:把 TIM 时钟降下来(CK_PSC 通常是 72MHz 或 APB1×2)
- ARR:计数到顶的值 → 定周期/频率
- CCR:比较值 → 定高电平占多少(占空比)
算例(注意两步除法):
- 72MHz,PSC=7199(7200 分频 → 10KHz 计数时钟),ARR=99 → 频率 = 10K/100 = 100Hz;CCR=50 → 占空比 = 50%
- 72MHz,PSC=71(72 分频 → 1MHz 计数时钟),ARR=999 → 频率 = 1M/1000 = 1KHz
坑:别把"计数时钟"当成"PWM 频率",还差最后一步 ÷(ARR+1)。
波形怎么出来(PWM 模式 1)
CNT 从 0 往上数到 ARR:
CNT < CCR → 输出高
CNT ≥ CCR → 输出低
周期 = (ARR+1) 个计数;高电平时间 = CCR 个计数
- PWM 模式 1:前半段(CNT<CCR)高;模式 2 反过来(前半段低)
- 影子寄存器(ARPE):改 ARR/CCR 时,先写预装载寄存器,等当前周期结束(更新事件)才生效。立即生效会导致当前周期中途波形突变、输出毛刺(如 ARR 3→2,CNT 已超新值,计数/比较立即异常)——不是跑飞,是波形烂
呼吸灯本质
占空比从 0% 渐变到 100% 再回来——只调 CCR,不动 ARR(频率不变,亮度平滑渐变)。平均电压 = 占空比 × 峰值电压,所以占空比变了亮度就变。
正反例(建立直觉)
- 正例1:呼吸灯 → 只改 CCR(占空比渐变),ARR 不动
- 正例2:电机调速 → 改 CCR 控制平均电压 → 转速
- 正例3:舵机角度 → 靠不同占空比映射不同角度
- 反例1:想提高频率却增大 ARR → 错,频率 = CK/(PSC+1)/(ARR+1),增大 ARR 频率变小
- 反例2:以为频率越高灯越亮 → 错,亮暗由占空比决定,频率只管"闪不闪"
- 反例3:改 ARR/CCR 立即生效改到一半 → 波形毛刺,要用影子寄存器
易混对比
ARR vs CCR vs PSC
|
管什么 |
影响 |
| PSC |
计数时钟分频 |
频率(粗调) |
| ARR |
计数到顶值 |
频率/周期(精确) |
| CCR |
比较值 |
占空比(亮暗/转速) |
占空比 vs 频率
|
决定什么 |
场景 |
| 占空比 |
平均电压(亮暗/转速/角度) |
呼吸灯、调速、舵机 |
| 频率 |
波形快慢(闪不闪、能否平滑) |
频率太低灯会闪 |
变体验证(3 题,全过=学会)
- 计算:72MHz、PSC=7199、ARR=99、CCR=50 → 频率 = 72M/7200/100 = 100Hz,占空比 = 50/100 = 50%
- 陷阱题:"想提高频率应该增大 ARR" → 错,增大 ARR 频率变小,要提高频率减小 ARR 或 PSC
- 陷阱题:"PWM 频率越高 LED 越亮" → 错,亮暗由占空比决定,频率只管闪不闪
口述要点(面试怎么讲)
- 结论先行:ARR 定频率、CCR 定占空比;调亮度改 CCR,改频率改 ARR
- 为什么改占空比能调亮度/转速:平均电压 = 占空比 × 峰值电压,占空比变了平均输出就变
- 为什么呼吸灯只改 CCR:ARR 管频率,改了节奏就乱;CCR 只改平均电压大小 → 只改亮暗
- 为什么用影子寄存器(ARPE):改 ARR/CCR 立即生效会让当前周期中途突变、波形毛刺;影子寄存器 = 双缓冲,等当前周期结束才生效,保证每周期波形完整
- 易错点:算频率忘了最后一步 ÷(ARR+1);把计数时钟当 PWM 频率;以为频率决定亮度
关系网络
| 相邻概念 |
关系 |
孤立理解会犯的错 |
| 定时器 TIM |
PWM 就是定时器比较/重装的产物 |
以为 PWM 是独立外设 |
| 时钟树 |
CK_PSC 来自 APB1(TIM 有时 ×2),算错频率 |
直接用 APB1 频率算 CK_PSC,忘 ×2 |
| 中断 |
输入捕获 = 用定时器测别人 PWM 的周期/占空比 |
把输出 PWM 和输入捕获混为一谈 |
| HAL vs LL |
HAL 用 __HAL_TIM_SET_COMPARE 改 CCR |
不知道改占空比就是改这个宏 |
学习日期
2026-08-18
每主题一页,复习时只翻本目录。