4、PWM接口设计:PWM原理、频率与占空比、死区时间、PWM驱动电路

各位好,今天我们聊聊PWM接口。说实话,PWM这东西看着简单,但真要在飞控系统里用好它,坑还真不少。我最早做飞控那会儿,就因为在PWM上栽了个跟头,导致舵机乱抖,差点把测试台给掀了。嗯,咱们今天就把这些门道掰开揉碎了讲清楚。

4.1 PWM原理:说白了就是开关的快慢艺术

PWM,脉宽调制。你想想看,其实就是用数字信号去模拟一个模拟量。怎么模拟?靠开关。开一下,关一下,开的时间长一点,关的时间短一点,平均下来电压就高了。

核心公式其实就一个:

占空比 = Ton / T × 100%

其中Ton是高电平时间,T是周期。占空比50%,就是一半时间高,一半时间低。平均电压就是Vcc的一半。

我在项目中遇到过一个问题:有个同事直接用GPIO翻转来做PWM,结果CPU一忙,波形就变形了。飞控里舵机对脉宽精度要求很高,差个几十微秒,舵机角度就偏了。所以,千万别用软件延时做PWM,一定要用硬件定时器。

关键点:飞控系统中,PWM的精度直接影响舵机控制精度。硬件PWM是标配,软件模拟只适合调试。

4.2 频率与占空比:选对了才能稳

频率和占空比,这两个参数是PWM的灵魂。选错了,系统就抖给你看。

频率怎么选?

  • 舵机:标准是50Hz,周期20ms。脉宽范围1ms到2ms,对应0°到180°。有些高速舵机支持更高频率,但别乱试,我见过有人用400Hz去驱动普通舵机,结果舵机直接冒烟了。
  • 电机(电调):常见的是50Hz到400Hz。多旋翼飞控一般用50Hz,但有些高速电机需要更高频率。我个人习惯是:先看电调手册,再定频率
  • LED调光:人眼对100Hz以上的闪烁不敏感,所以一般用1kHz以上。但别太高,否则MOS管开关损耗会变大。

占空比怎么算?

以舵机为例,假设你要让舵机转到90°:

脉宽 = 1ms + (90° / 180°) × (2ms - 1ms) = 1.5ms
占空比 = 1.5ms / 20ms × 100% = 7.5%

嗯,这里要注意:不同舵机的脉宽范围可能不一样。有些是0.5ms到2.5ms,有些是1ms到2ms。我建议你拿到舵机后,先实测一下它的极限脉宽,别直接套公式。

小技巧:调试时可以用示波器看PWM波形。我曾经用逻辑分析仪抓到过一个问题:定时器溢出导致周期不稳,波形周期在19.8ms到20.2ms之间跳。这种问题肉眼看不出来,但舵机会轻微抖动。

4.3 死区时间:别让上下管同时导通

死区时间,这是做电机驱动时绕不开的坎。说白了,就是防止H桥上下两个MOS管同时导通。同时导通会发生什么?短路,大电流,然后MOS管冒烟。嗯,我烧过,真的烧过。

为什么需要死区时间?

MOS管开关不是瞬间完成的。关断需要时间,开通也需要时间。如果上管还没完全关断,下管就开了,那就直通了。死区时间就是在这两个动作之间插入一段「空白期」,让两个管子都关着。

死区时间怎么设?

  • 看MOS管手册:关断延迟时间(td_off)和开通延迟时间(td_on)都会写。死区时间至少要大于这两个值的差。
  • 经验值:对于常见的电机驱动,死区时间一般在100ns到500ns之间。我习惯留点余量,设成300ns左右。
  • 别设太大:死区时间太长,会导致波形失真,电机效率下降。你想想看,死区期间电机是不通电的,相当于在「空转」。

警告:死区时间设置不当,轻则电机抖动,重则烧毁MOS管。我曾经在调试一个四轴飞行器时,因为死区时间设得太短,导致一个桥臂直通,MOS管瞬间炸裂。从那以后,我每次都会用示波器确认死区时间。

4.4 PWM驱动电路:从逻辑电平到功率驱动

MCU出来的PWM信号,电压一般是3.3V或5V,电流很小。但舵机、电机这些负载,需要更高的电压和电流。所以,中间需要驱动电路。

常见的驱动方案:

方案 适用场景 优点 缺点
三极管驱动 小功率舵机、LED 简单、便宜 驱动能力有限
MOS管驱动 电机、大功率负载 效率高、开关快 需要栅极驱动电路
专用驱动芯片 复杂电机控制 集成保护、死区控制 成本高
光耦隔离 需要电气隔离的场景 安全、抗干扰 速度受限

我常用的电路结构:

MCU PWM输出 → 电平转换(3.3V→5V) → 栅极驱动芯片 → MOS管 → 负载

为什么加电平转换?因为很多栅极驱动芯片需要5V或12V的输入逻辑。直接用3.3V推,可能推不动。

另外,栅极电阻也很关键。它控制MOS管的开关速度。电阻太小,开关太快,会产生振铃和EMI。电阻太大,开关太慢,开关损耗增加。我一般选10Ω到100Ω之间,具体看MOS管的栅极电荷量。

避坑指南:我曾经在PCB布局上吃过亏。PWM信号线走得太长,又没有包地,结果被电机的大电流干扰了。波形上全是毛刺,舵机乱跳。后来我把PWM线缩短,并在靠近MCU引脚的地方加了一个100Ω的串联电阻,问题就解决了。

4.5 总结一下

PWM接口设计,说难不难,说简单也不简单。核心就几点:

  • 用硬件PWM,别用软件模拟。
  • 频率和占空比要匹配负载。舵机50Hz,电机看手册。
  • 死区时间不能省。设得太短会烧管子,设得太长影响效率。
  • 驱动电路要留余量。电平转换、栅极电阻、PCB布局,一个都不能马虎。

嗯,今天就聊到这儿。下一章我们讲SPI接口设计,那也是飞控系统里的重头戏。到时候再跟大家分享一些实战经验。