37.PWM.md 5.1 KB

PWM

判别规则(核心,唯一要记的)

  1. 频率看 ARR、占空比看 CCR频率 = CK_PSC / (PSC+1) / (ARR+1)占空比 = CCR / (ARR+1) × 100%
  2. 调亮度/转速/舵机角度 = 改 CCR(占空比);改频率 = 改 ARR 或 PSC
  3. 场景判别:要"平滑控制平均输出"(灯亮暗、电机快慢、舵机角度)→ 就是 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 题,全过=学会)

  1. 计算:72MHz、PSC=7199、ARR=99、CCR=50 → 频率 = 72M/7200/100 = 100Hz,占空比 = 50/100 = 50%
  2. 陷阱题:"想提高频率应该增大 ARR" → ,增大 ARR 频率变小,要提高频率减小 ARR 或 PSC
  3. 陷阱题:"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


每主题一页,复习时只翻本目录。