📐 PWM · 频率 · 分辨率 · 占空比

1. 占空比是什么?它和频率是什么关系?

占空比(Duty Cycle) 是指一个周期内,高电平(开)时间占整个周期的百分比。

一个周期(T) 必须是 "开时间 + 关时间" 的完整组合,缺一不可。

频率(f) 是指每秒完成的周期数,单位是赫兹(Hz)。

核心公式:

T = 1 / f(周期 = 频率的倒数)

两者的独立关系:

  • 频率 决定"闪烁的快慢"(每秒切换多少次)。
  • 占空比 决定"亮的程度"(每次开的时间比例)。
  • 亮度 只由占空比决定,与频率无关。

逻辑关系:
100% 占空比时,开关一直处于"开"状态,没有切换,频率物理失效,灯最亮。
0% 占空比时,开关一直处于"关"状态,没有切换,频率物理失效,灯熄灭。
只有当占空比在 1%~99% 之间时,才存在实际通断切换,频率才起效。


2. 频率和分辨率之间的"跷跷板"关系

在芯片内部,PWM信号由一个固定频率的时钟驱动。这个时钟每"滴答"一次,计数器走一格。

核心公式:

PWM频率 = 时钟频率 ÷ 分辨率级数

这里的分辨率级数 = 2^n(n为位数)。

这个公式意味着:

  • 分辨率越高(级数越多) → 每个周期需要走的格子越多 → 需要的时间越长 → 频率越低
  • 分辨率越低(级数越少) → 每个周期需要走的格子越少 → 需要的时间越短 → 频率越高

逻辑关系:
频率和分辨率在同一个时钟频率下是严格的跷跷板关系,此消彼长,无法同时达到最大。


3. ESP32 的 PWM 硬件基准时钟

ESP32 的 LEDC(PWM 硬件)使用的时钟源是 APB 总线时钟,固定为 80MHz,而不是 CPU 主频(240MHz)。

固定关系:

80,000,000 Hz = PWM频率 × 分辨率级数

计算每个"节拍"的时间:

1 / 80,000,000 = 12.5 纳秒(ns)

逻辑关系:
12.5ns 是芯片内部 PWM 计数器的最小时间单位。
一个完整的 PWM 周期必须由整数个 12.5ns 节拍组成。


4. 如何根据目标频率和分辨率判断"是否匹配"?

判决公式:

满速极限频率 ≥ 实际运行频率 → 完美匹配(不削顶)

"满速极限频率"的计算:

满速极限频率 = 80,000,000 / 分辨率级数

举例(10kHz 目标频率下):

分辨率(位数)级数满速极限频率10kHz下是否匹配?实际效果
10位102478.125 kHz✅ 匹配(远大于)全段 0%~100% 可用
11位204839.06 kHz✅ 匹配(远大于)全段 0%~100% 可用
12位409619.53 kHz✅ 匹配(大于)全段 0%~100% 可用
13位81929.76 kHz❌ 不匹配(小于)100% 时实际只有 97.6%

逻辑关系:
当"满速极限频率" ≥ 实际运行频率时,芯片可以通过分频器"踩刹车"降速,在目标周期内完整数完所有格子,全段精度保留。
当"满速极限频率" < 实际运行频率时,周期时间不够,计数到上限就被迫重置,顶端被削掉(俗称"削顶")。


5. 如何从目标频率反推出需要多少位?

已知目标频率(如 10kHz),求需要多少位(n):

第一步:计算一个周期内能容纳的节拍数

周期时间 = 1 / 目标频率
节拍数 = 周期时间 / 12.5ns

例如:10kHz 的周期 = 100微秒
节拍数 = 100微秒 / 12.5ns = 8000

第二步:在 2 的次方表中找"刚好够装"的数

2^12 = 4096(装不下 8000)
2^13 = 8192(刚好大于 8000)

结论: 在 10kHz 下,需要的最小位数是 13位(8192级),但此时会有 192 级(2.34%)的顶端截断。
若追求 0%~100% 全段可用,应选择 12位(4096级),因为 4096 < 8000,时间绰绰有余。

实战口诀:

"连续除以2,直到小于1。除了几次,就是几位。"

6. 为什么在 10kHz 下选 10位~12位 完全够用?

  • 人眼极限: 人眼对亮度的最小可觉差约为 1%~2%。8位(256级)已接近人眼极限,10位(1024级)远超。
  • 专业基准: DMX512 专业舞台灯标准为 8位(256级)。
  • 10位(1024级): 步进精度 0.098%,是舞台标准(256级)的 4 倍。
  • 12位(4096级): 步进精度 0.024%,是舞台标准的 16 倍。

逻辑关系:
调光精度的"天花板"是人眼的物理分辨能力。
超过 10位的精度,对肉眼来说已经没有可感知的差异,属于"为仪器预留的冗余"。


7. 实战参数推荐(ESP32 + COB灯板)

推荐配置:

  • PWM 频率: 10kHz
  • 分辨率: 10位(1024级)或 12位(4096级)
  • 占空比范围: 0 ~ 级数-1(如 0~1023 或 0~4095)

推荐理由:

  • 10kHz:远超人眼闪烁阈值(100Hz),且远低于MOS管发热严重的频段。
  • 10位/12位:精度远超肉眼需求,且频率资源绰绰有余,无削顶风险。
  • 代码写法频率 = 10000分辨率 = 1012,芯片自动处理分频。

📌 核心总结

  1. 占空比 决定亮度,频率 决定闪烁速度。
  2. 频率 × 分辨率级数 = 固定时钟频率(ESP32的PWM硬件时钟为80MHz)。
  3. 满速极限频率 ≥ 目标频率 时,分辨率才能完整使用。
  4. 10位(1024级) 在 10kHz 下已远超肉眼极限,且无任何副作用。
  5. 选参数时"够用就好",不需要为了追求高位数而牺牲频率或导致削顶。
  6. 实战中最稳的配置:10kHz + 10位/12位,代码简单、MOS管凉快、调光丝滑。

今日核心结论:

"在10kHz下,10位~12位全都能完美跑满,且精度远超肉眼极限。没必要为了更高的位数去纠结那2.4%的削顶——因为你的眼睛根本分不出来。"

标签: 电路

添加新评论