2、伺服驱动器的PWM生成原理:H桥电路与PWM、互补PWM与死区时间、空间矢量PWM(SVPWM)简介

各位好,我是老周。今天咱们聊聊伺服驱动器里最核心的环节——PWM是怎么生成的。

很多人觉得PWM嘛,不就是单片机输出个方波吗?其实没那么简单。你想想看,电机要正转、反转、刹车、调速,背后全靠一套精密的PWM逻辑在撑着。我当年刚入行时,就因为死区时间设得太小,直接把一整个H桥的MOS管给烧了……嗯,从那以后我再也不敢小看这部分了。

2.1 H桥电路与PWM基础

先看最基本的H桥。为什么叫H桥?四个开关管(Q1~Q4)摆成"H"字形,电机接在中间横杠上。就这么个结构,能实现电机的正转、反转和制动。

核心逻辑:

  • 正转:Q1 + Q4 导通,电流从左到右流过电机
  • 反转:Q2 + Q3 导通,电流从右到左
  • 制动:Q1 + Q3 或 Q2 + Q4 同时导通,电机两端短路
  • 自由滑行:四个管子全关,电机靠惯性转

但实际控制时,我们不会让管子一直开着。而是用PWM波去驱动它们。PWM的占空比决定了平均电压,也就决定了电机转速。

举个例子:假设母线电压是48V,PWM占空比50%,那电机两端的平均电压就是24V。占空比越高,转速越快。这个道理很简单,但真正做起来,坑不少。

我的经验:调试初期,先把PWM频率定在8kHz~16kHz之间。太低会有啸叫声(人耳能听到),太高会增加开关损耗。我一般从10kHz起步,听不到声音为止。

2.2 互补PWM与死区时间

H桥里有个致命问题——上下管不能同时导通。你想想,如果Q1和Q2同时开了,那就是电源直接对地短路,瞬间大电流,管子秒烧。

所以我们需要互补PWM:Q1和Q2的驱动信号正好相反。Q1开的时候Q2关,Q2开的时候Q1关。但问题来了——开关管不是瞬间完成的。关断需要时间,开通也需要时间。

如果Q1刚关到一半,Q2就开始开了,那中间会有那么一瞬间,两个管子都处于半导通状态。这就是"直通"(shoot-through),是H桥的头号杀手。

避坑指南:我曾经在一个项目里,把死区时间设成了200ns,觉得够用了。结果上电一跑,MOS管温度直接飙到120°C。后来用示波器一抓,发现驱动芯片的传播延迟比手册标的大了100ns,实际死区只剩100ns,根本不够。最后改到500ns才稳定。

死区时间怎么设?我一般按这个流程来:

  1. 查MOS管手册,找到关断延迟时间(t_off)和开通延迟时间(t_on)
  2. 死区时间 ≥ t_off(max) - t_on(min) + 安全裕量
  3. 安全裕量通常取200ns~500ns,看功率大小
  4. 用示波器抓上下管栅极波形,确认没有重叠
功率等级 推荐死区时间 典型MOS管
小功率(<100W) 200ns ~ 500ns IRF540、N沟道小管
中功率(100W~1kW) 500ns ~ 1.5μs IRFP460、CoolMOS
大功率(>1kW) 1.5μs ~ 3μs IGBT模块

死区时间也不是越大越好。太大了,输出电压会失真,电流波形变差,电机运行会抖动。这是个权衡——安全 vs 性能。

2.3 空间矢量PWM(SVPWM)简介

好了,前面说的都是单相H桥。但伺服电机是三相的,需要三个H桥协同工作。这时候,简单的互补PWM就不够用了。

为什么?因为我们要的不是简单的正弦波,而是要让电机产生一个旋转的磁场。这个磁场的方向和大小,需要用空间矢量来描述。

SVPWM的核心思想:用八个基本电压矢量(六个非零矢量 + 两个零矢量)去合成任意方向、任意大小的目标电压矢量。

八个基本矢量:

  • V1~V6:六个非零矢量,间隔60°,分布在复平面上
  • V0、V7:两个零矢量,所有上管全开或全关

具体怎么合成?假设我们要输出一个角度30°、幅值0.8的电压矢量。那就用相邻的两个非零矢量(V1和V2)加上零矢量,按时间比例组合。这个比例计算,就是SVPWM的核心算法。

我习惯用七段式SVPWM,因为它的谐波特性最好。每次切换只改变一个开关管的状态,开关损耗也小。

个人习惯:在DSP里实现SVPWM时,我会先算扇区号,再算两个相邻矢量的作用时间T1和T2,最后分配零矢量时间。代码写熟了之后,其实就几个公式来回用。但第一次写的时候,建议对着矢量图画着算,不容易搞错扇区。

下面这张图,是我当年培训新人时画的SVPWM矢量合成示意图,帮你理解整个逻辑:

SVPWM 矢量合成与扇区划分 V1 (100) V2 (110) V3 (010) V4 (011) V5 (001) V6 (101) 扇区Ⅰ 扇区Ⅱ 扇区Ⅲ 扇区Ⅳ 扇区Ⅴ 扇区Ⅵ Vref θ 合成原理: Vref 由相邻两个非零矢量(V1、V2)和零矢量(V0/V7)按时间比例合成。 T = T1 + T2 + T0,其中 T1/T2 对应 V1/V2 的作用时间,T0 为零矢量时间。

SVPWM相比传统的正弦PWM(SPWM),好处很明显:

  • 母线电压利用率高:SVPWM能达到1.0的调制比,而SPWM只有0.866。说白了,同样电压下,SVPWM能让电机跑得更快。
  • 谐波小:电流波形更接近正弦,电机发热小、噪音低。
  • 动态响应快:矢量控制天然适合SVPWM,转矩响应能做到毫秒级。

注意:SVPWM虽然好,但计算量比SPWM大。早期用8位单片机根本跑不动,现在有了DSP和FPGA,才普及开来。如果你用STM32做伺服,记得开硬件浮点运算单元(FPU),不然算T1、T2时会卡顿。

最后说一句,PWM生成这部分,理论不难,但调试很磨人。我建议你手边常备一台示波器,抓栅极波形、抓输出相电压、抓电流波形。光靠仿真软件,永远看不到真实世界里的振铃和尖峰。