本页目录

21 · MCU、唤醒与 PWM:用时间账本管理电流和波形

一个环境监测节点大部分时间在睡眠,却不代表它的平均电流等于睡眠电流。唤醒、ADC、传感器激励、无线发送、定时器和 PWM 负载都在不同时间取电;PWM 的占空比决定理想平均值,但负载的 RC、GPIO 电阻和定时器时钟决定纹波与能否继续运行。要交付系统,必须同时画事件时间线、电流积分、PWM 波形和外设边界。

学习层:先算一整个唤醒周期,而不是盯着一个峰值

1. 具体情境:1 秒一醒的节点到底用了多少电

教学节点以 \(3.3 \mathrm V\) 供电,每 \(1 \mathrm s\) 唤醒一次。MCU 活动 \(12 \mathrm{ms}\)、活动电流 \(6 \mathrm{mA}\),睡眠电流 \(20 \mu\mathrm A\);传感器在其中 \(8 \mathrm{ms}\) 取 \(0.4 \mathrm{mA}\),发送事件持续 \(2 \mathrm{ms}\)、取 \(12 \mathrm{mA}\)。另有一个 \(1 \mathrm{kHz}\)、\(40\%\) 占空比的 PWM,驱动 \(1 \mathrm{k\Omega}\) 与 \(1 \mu\mathrm F\) 的教学 RC 负载。

这些数值是教学设定,不是某个 MCU、无线芯片、传感器或稳压器的动态规格。默认 PWM 定时器在睡眠时继续运行,且 PWM 负载也要进入整周期供电账本:系统平均约 \(1.4314\mathrm{mA}\),每秒约 \(0.3976\,\mu\mathrm{Ah}\)。这里要特别注意单位:每周期的电荷不是把平均电流直接当作一小时电荷;互动表会同时给出 mA、\(\mu\mathrm{Ah}\) 和 J,帮助检查量纲。

2. 揭示前预测:先把电流和 PWM 分开

  1. 周期性唤醒系统的平均电流,能否由一个睡眠电流或一个活动峰值单独代表?
  2. 在同一个 RC 负载下提高 PWM 频率,纹波会变大、变小,还是必然变成零?
  3. MCU 进入睡眠后 PWM 是否继续运行,应看占空比,还是看具体外设和时钟源的条件?

3. 公式桥:积分、平均值与纹波

对周期 \(T\) 的分段电流,平均值定义为

\[ I_{avg}=\frac1T\int_0^T i(t)\,dt. \]

在活动、睡眠、传感器和发送时间分别为 \(t_a,t_s,t_{sen},t_{tx}\) 的矩形近似下,可写成

\[ I_{avg}\approx I_{MCU,a}\frac{t_a}{T}+I_{MCU,s}\left(1-\frac{t_a}{T}\right)+I_{sen}\frac{t_{sen}}{T}+I_{tx}\frac{t_{tx}}{T}. \]

这只是 MCU、传感器和无线事件的部分账本;若 PWM 负载是电阻 \(R_L\),还要用实际 RC 电压积分加入

\[ I_{PWM}=\frac1T\int_0^T\frac{v(t)}{R_L}\,dt, \qquad I_{avg,total}=I_{MCU}+I_{sen}+I_{tx}+I_{PWM}, \]

并以

\[ P_{PWM}=\frac1T\int_0^T\frac{v(t)^2}{R_L}\,dt \]

检查负载耗散;不能用 \((\overline v)^2/R_L\) 代替平均功率。

单位检查:mA 乘以 ms 再除以 ms 仍为 mA;周期电荷则为

\[ Q_{period}=I_{avg}T, \]

如果 \(I\) 用 mA、\(T\) 用小时,结果才是 mAh。默认整周期 \(I_{avg,total}=1.43142 \mathrm{mA}\)、\(T=1/3600 \mathrm h\),所以 \(Q_{period}\approx0.3976 \mathrm{\mu Ah}\),供电平均功率约 \(P_{avg}=V I_{avg,total}=4.724 \mathrm{mW}\);其中 PWM 负载的平均电流约 \(1.31246\mathrm{mA}\)。

理想 PWM 平均值为

\[ V_{PWM,avg}=V_{low}+D(V_{high}-V_{low}), \]

其中 \(D\) 无量纲。若经过 \(R\)–\(C\) 低通,\(\tau=RC\),在一个高电平时间 \(t_{on}=DT_{PWM}\) 内有

\[ v(t)=V_{high}+(v_{min}-V_{high})e^{-t/\tau}, \]

低电平段同理。令 \(a=e^{-t_{on}/\tau}\)、\(b=e^{-t_{off}/\tau}\),非零 \(V_{low}\) 时的周期稳态起点应直接解为

\[ v_{min}=\frac{V_{low}(1-b)+V_{high}b(1-a)}{1-ab}, \qquad v_{max}=V_{high}+(v_{min}-V_{high})a. \]

周期稳态的 \(v_{max}-v_{min}\) 是纹波峰峰值,它不会因为平均值公式漂亮就自动消失。默认 \(\tau=1 \mathrm{ms}\)、\(D=0.4\),运行段理想与 RC 稳态平均值都为 \(1.32 \mathrm V\),稳态纹波约 \(0.777 \mathrm V_{pp}\);从每次唤醒的低电平启动算整周期时,RC 输出平均值为 \(1.312\mathrm V\),所以 PWM 负载电流也按整段积分。

数量级判断:活动时间占比只有 \(12/1000=1.2\%\),但活动电流比睡眠电流大约两个数量级,所以活动段仍是 MCU 电流账本的主要项。PWM 负载是同一供电账本中的另一条时间积分:若负载是 \(1 \mathrm{k\Omega}\),运行段约 \(1.32 \mathrm V\) 对应约 \(1.32 \mathrm{mA}\);若定时器在睡眠停止,停机后的 GPIO 保持电平还会把 RC 输出和平均电流改成另一种波形,不能继续套用连续运行的占空比平均值。

4. 互动实验:把时间线、功耗和 PWM 波形放在同一页

无 JavaScript 时的静态 fallback:默认教学设定为 \(V=3.3 \mathrm V\)、周期 \(1000 \mathrm{ms}\);MCU 活动 \(6 \mathrm{mA}\times12 \mathrm{ms}\)、睡眠 \(20 \mu\mathrm A\),传感器 \(0.4 \mathrm{mA}\times8 \mathrm{ms}\),发送 \(12 \mathrm{mA}\times2 \mathrm{ms}\)。PWM 为 \(1 \mathrm{kHz}\)、\(D=0.4\)、\(V_{high}=3.3 \mathrm V\)、\(V_{low}=0\),负载 \(1 \mathrm{k\Omega}\) 与 \(1 \mu\mathrm F\) RC;默认定时器在允许的睡眠时钟条件下继续运行,PWM 从 \(5\mathrm{ms}\) 的低电平启动并按实际分段指数波形积分。

账本项 默认结果 单位 / 解释
MCU 平均电流 0.09176 mA;活动/睡眠加权
传感器平均电流 0.00320 mA;按 8 ms/周期
发送平均电流 0.02400 mA;按 2 ms/周期
PWM 负载平均电流 1.31246 mA;\((1/T)\int v(t)/R_L\,dt\),已计入系统
系统平均电流 1.43142 mA;四项相加,含 PWM 负载
每周期电荷 0.39762 µAh;1 秒周期
平均功率 4.72367 mW;\(VI_{avg,total}\)
PWM 负载平均功率 1.78238 mW;\((1/T)\int v(t)^2/R_L\,dt\)
PWM 理想平均值 1.320 V;运行段占空比公式
RC 输出整周期平均值 1.312 V;含 5 ms 低电平启动
RC 稳态平均值 1.320 V;周期稳态积分
PWM 稳态纹波 776.541 mV 峰峰值;指数 RC 的 min/max
停机后输出 睡眠中继续运行 若 timerRunsInSleep=false,则停机后保持最后高/低电平
外设边界 条件继续 需由具体 MCU 和时钟源确认

图意说明:互动 SVG 应画出唤醒、ADC、PWM 定时器、发送、停机后输出保持和睡眠的事件时间线;下面用实际的分段指数 RC 曲线画 PWM 命令与输出,不要用正弦曲线代替。时间线中的“睡眠继续运行”或“停机后保持高/低电平”要用文字说明条件,不能用颜色单独表示;平均值、稳态纹波和整周期积分也要分开标注。

5. 真实修正:MCU 功耗由模式、外设和时钟共同决定

  • 睡眠电流不是一个永恒常数。 低功耗模式、保留的 RAM、唤醒源、BOR、看门狗、稳压器、GPIO 状态和温度都会改变它;数据手册的测试条件要逐项对齐。
  • 活动电流要按事件拆分。 唤醒瞬态、ADC 采样、传感器自热、无线发送、Flash 操作和 DMA/定时器可能有不同电流峰值。平均值正确不代表电源能承受峰值。
  • PWM 是外设和时钟的边界。 有的定时器在某些睡眠模式保持时钟,有的会停;时钟源切换、唤醒延迟和输出保持状态必须查具体型号和模式。
  • PWM 负载属于系统电流账。 电阻负载的平均电流按 \(\int v(t)/R\,dt\) 计入;负载功率按 \(\int v(t)^2/R\,dt\) 计,不能从 MCU 的三项平均电流中遗漏。
  • 平均值不描述纹波。 PWM 负载的电阻、电感、电容、驱动电阻和布局决定瞬时电流/电压;ADC 采样时刻若与 PWM 相关,还会出现同步采样误差。
  • 滤波器有代价。 更大的 \(RC\) 减小纹波却增加启动/响应时间;电阻还会消耗静态功率,电容的 ESR/ESL 会把第 15 讲的真实元件边界带回来。

6. 测量纪律:同时测时间、电流和波形

  1. 在低压、限流、可断电条件下串入合适的电流测量元件,记录测量电阻的压降、带宽和仪器输入;不要让测量装置改变唤醒电压。
  2. 用足够采样率捕捉唤醒峰值、发送脉冲和 PWM 边沿,再用明确的时间窗积分得到平均电流。把“峰值”“平均”“每周期电荷”分成不同栏。
  3. 用示波器同时观察 GPIO/PWM、传感器供电、ADC 采样触发和电源轨;确认采样发生在 PWM 的哪个相位,避免把同步误差当成传感器噪声。
  4. 改变睡眠时间、唤醒周期、PWM 频率、占空比和滤波器,每次保留固件版本、时钟源、外设状态和环境条件。
  5. 数据手册给出的典型电流、最大电流和低功耗条件要与实测分别记录;一条电池寿命估算不能替代峰值供电和热检查。

7. 模型边界与项目产物

本页把 MCU、传感器和发送器看成分段恒流负载,把 PWM 负载看成线性一阶 RC,并假定事件时间固定、滤波器进入周期稳态。它不能预测启动瞬态、非线性负载、稳压器环路、时钟切换、无线协议重试、ADC 孔径效应或具体 MCU 睡眠寄存器的全部行为。

项目产物是“MCU 供电与事件账本”:工作模式、唤醒源、活动/睡眠/外设电流、事件持续时间、峰值与平均值、每周期电荷、PWM 频率/占空比/纹波、采样相位、外设时钟条件、实测波形和数据手册版本。把电池寿命估算、供电瞬态和信号质量分别验收。

1. 电流账本的四个层次

先列出每个状态的电流,再乘以停留时间;再把事件发生率映射到一个周期;最后才做长期平均。若系统存在不规则重试或事件,应用期望值和分布,而不要强行塞成固定周期。对于电池或限流电源,还要保留峰值、启动和故障路径,因为它们决定电源是否掉压。

平均功耗只反映能量速率。电容储能可以撑过很短的峰值,但其电压下跌、ESR、ESL 和稳压器响应必须测量。把 \(Q=I_{avg}T\) 用错单位,是低功耗估算中最常见的错误之一:1 秒周期的电荷不是 1 小时电荷,mA·ms 要换成 mA·h 才能得到 mAh。

2. PWM 的平均值不等于模拟输出

若负载是纯电阻,PWM 电压瞬时变化会直接形成方波电流;若有电感,电流由 \(L,di/dt\) 限制;若有 RC,电压是充放电曲线。负载的“平均值”要说明平均的是电压、电流、功率还是传感器响应。对于非线性 LED、磁性负载或开关稳压器,\(P(V_{avg})\) 通常不等于 \(\langle P(V)\rangle\)。

频率提高通常可以在同一个低通滤波器下减小纹波,但会增加开关损耗、EMI、定时器时钟负担和可能的测量混叠。占空比改变平均值,频率和滤波器改变纹波,两者不能互相替代。

3. 常见误判与纠正

  • 误判:睡眠电流就是整机平均电流。纠正:唤醒、传感器、发送和外设按时间积分。
  • 误判:PWM 占空比就是负载看到的直流电压。纠正:要写负载、滤波器和观察带宽;纹波可能很大。
  • 误判:低功耗模式会自动保留所有定时器。纠正:查具体外设、时钟源、输出保持和唤醒条件。
  • 误判:电流表读出一个稳定小数就足够。纠正:测量带宽、采样率和时间窗决定你看见的是平均还是被滤掉的峰值。
  • 误判:增加显示位数就能延长电池寿命。纠正:电池寿命来自能量预算、峰值供电、温度和真实事件统计。

4. 资料与边界

本讲只讨论低压、限流、可断电的教学系统;不涉及市电、建筑配电、并网或高能电池包施工。

5. 小结

MCU 设计要把状态电流乘以时间,把事件放进周期账本,再把 PWM 的平均值与纹波、采样相位和外设时钟边界分开验证。平均功率、峰值电流、周期电荷和波形各回答不同问题;具体芯片的睡眠与定时器行为必须回到数据手册,并用带条件的实测确认。至此,15–21 讲已经把真实元件、保护、模拟接口、传感器、数字电气、同步和 MCU 供电串成一条可审计证据链。