空间矢量 PWM
电流环的最后一步是请求一个电压矢量。它以伏特为单位,按任意角度和幅值提出请求,就好像逆变器是一个理想的三相电源一样。
事实并非如此。逆变器由六个开关管组成,三个桥臂中的每一个都只能连接到正母线或负母线。共有八种组合,这便是三相桥所能产生的全部瞬时电压。其余的一切——任意角度、任意中间幅值——都必须通过在这些状态之间足够快速地切换来合成,利用电机电感将结果平均化。
本页将探讨如何安排这种开关平均过程,以及最直观的调制方法所白白浪费掉的 15.5% 直流母线电压。
八个状态,其中六个有用
根据哪些桥臂接高电平来标记每个状态。100 表示 相桥臂接正母线,而 、 相桥臂接负母线。
八种状态中的六种会在不同相之间施加不同的电压。对每一种状态进行 Clarke 变换后,会得到六个长度相等的空间矢量 ,彼此间隔 60°——即 至 。其余两种,000 和 111,则将三相都连接到同一母线。在这两种情况下,电机在其端子上看到的电压均为零。这些就是 零矢量、 和 ,它们并非无效状态,而是起到节流作用。
将六个有效矢量的端点连接起来,便得到一个六边形。其内部区域正是该桥所能合成的平均电压集合。
生成一个任意矢量
六边形内的任意请求矢量都落在两个相邻的有效矢量之间。在一个周期内分别在两个有效矢量上作用一部分时间,其余时间作用零矢量,所得的平均电压即为请求的矢量。
对于位于其所在扇区内夹角为 的请求矢量,各矢量的作用时间占比分别为:
其中 分配给滞后有效矢量, 分配给超前有效矢量,而 由两个零矢量共同分担。
取图中的默认值:调制指数为 0.75,位于 30°,即正好处于扇区中央。由此可得 V,以及 和 。 由于几何结构的对称性,结果必然是对称的。
为什么线性极限是内切圆,而非六边形
稳定的旋转电压请求在平面上描绘出一个圆。若要无失真地合成该电压,整个圆都必须容纳在六边形内部——因此起限制作用的是内切圆,而非六边形的顶点:
对于48 V母线而言,每相峰值电压为27.71 V,而在六边形顶点处为32 V。角点处的电压是真实存在的,并且可达——但仅限于六个特定方向,因此旋转矢量若要利用这些电压就必须引入失真。
15.5%
普通的正弦脉宽调制(SPWM)根据各相的参考信号分别确定其占空比: 。当 达到 时,占空比达到 1——在 48 V 的直流母线上,此时电压为 24 V。对比来看:
SPWM 将 15.5% 的可用电压闲置不用。对于电机而言,这意味着在你已经花钱买下的硬件上,弱磁控制前的最高转速白白降低了 15.5%。
找回这部分电压的诀窍简单得令人难以置信——在三相参考电压上同时加上相同的共模偏移量:
使三相参考值在正负母线之间居中对称,然后再按原公式计算占空比。
共模偏移量会同等地出现在三个相端子上。中性点悬空的电机星点电位只是随之浮动,因此相间的电压差——唯一驱动相电流的因素——丝毫不受影响。电机根本无从察觉。
将调制指数设为 1.0,并在这两种调制方式之间切换。SPWM 会出现严重削顶失真。SVPWM 的输出则严格限制在 0.0 和 1.0 之间,不会超出范围——其马鞍形波形会触碰每条母线,但绝不会越过。注入的共模分量峰值为 6.93 V,占直流母线电压的 14.4%,且为三角形的三次谐波:它每完成一个基波周期就会完成三个周期,因此不会干扰三相对称系统。
在试验台上 普通的 SPWM 在调制指数达到 0.866 时就会开始削波——也就是, 即两个极限值的比值。如果你接手了一台在约 87% 满功率输出时就失稳的驱动器,在怀疑其他原因之前,请先检查调制器。
请注意,它是先在相电压峰值附近发生削波,而非在所有角度同时削波。在六边形交互图中,将调制比设为 0.9 并旋转:SPWM 读数在 30° 时显示“未削波(in range)”,而当矢量摆向 0° 时则显示“已削波(clipped)”。正因如此,过调制的症状表现为波形畸变,而非硬性的电压封顶。
最小-最大注入就是空间矢量 PWM
两种推导方法看起来完全不同。一种通过三角函数和扇区查表分解到基底矢量上;另一种则取最大值、最小值和平均值。
它们生成的占空比是相同的。生产固件采用的是“最小-最大”形式——只需少数几次比较,而无需扇区分支和两次正弦函数计算;而扇区构造方式则有助于理解其具体实现原理。
这种等价性远不止是一句断言,因此该网站的测试套件通过排序六个栅极边沿来独立推导开关序列,并检查在整个平面上每个空间矢量所占用的时间是否与扇区分解的、 和 一致。结果在1e-9的精度范围内完全吻合。
序列的顺序很重要
知道每个空间矢量应占用的多长时间 并不能确定其顺序。只需将各相的导通时间以周期为中心对齐,顺序便会自然确定。对于上述示例:
零矢量时间被平均分配, 和 各占 12.5%。
有两个特性决定了这是正确的顺序,且这两个特性均可从时序图中看出:
每次切换时仅有一相桥臂进行开关。 按照如下顺序遍历:
000 → 100 → 110 → 111,然后再回到起点。每一步仅改变一位状态。如果同时改变两相,只会使开关损耗加倍而毫无益处,并向电机注入更大的共模阶跃。
它在周期中间是对称的。 将该模式反向读取,与正向读取的结果相同,这使得电流纹波的质心恰好位于周期中点。这也正是为什么可以在PWM中心时刻对相电流进行采样而无需滤波即可得到真实平均值——这也是所有驱动器所依赖的采样策略。
所有六个扇区
每个扇区的结构都相同,值得仔细查看——尤其是因为其中一列的行为并不符合人们的预期:
| 扇区 | 角度 | t1 作用矢量 | t2 作用矢量 | 周期的前半部分 |
|---|---|---|---|---|
| 1 | 0°–60° | V1 100 | V2 110 | V0 000 V1 100 V2 110 V7 111 |
| 2 | 60°–120° | V2 110 | V3 010 | V0 000 V3 010 V2 110 V7 111 |
| 3 | 120°–180° | V3 010 | V4 011 | V0 000 V3 010 V4 011 V7 111 |
| 4 | 180°–240° | V4 011 | V5 001 | V0 000 V5 001 V4 011 V7 111 |
| 5 | 240°–300° | V5 001 | V6 101 | V0 000 V5 001 V6 101 V7 111 |
| 6 | 300°–360° | V6 101 | V1 100 | V0 000 V1 100 V6 101 V7 111 |
从一张表格中可以得出两个仅凭一个示例难以察觉的结论。
编号采用格雷码。 V1 为 100,V2 为 110,V3 为 010;沿六边形依次走,相邻矢量的开关状态只差一位。这不是为了编号整齐;这种编码使得相邻状态之间只需切换一个桥臂。若两个状态不相邻,过渡时就得同时切换两个桥臂。
序列并不总是从 对应的矢量开始。 在扇区 1、3 和 5 中确实如此。但在扇区 2、4 和 6 中,序列却是从超前矢量开始的,因此顺序看起来像是反了。其实什么都没有反:每个周期都始于 000,而与 000 仅相差一次开关切换的唯一矢量就是只有一位为 1 的那个。在夹持请求矢量的两个相邻有效矢量中,哪一个满足这一条件,哪一个就排在前面,因此先后顺序随扇区交替变化。点击上图中的 旋转,你会看到序列标签正因为这个原因而交替翻转。
这一区别在编写代码时至关重要。t1 和 t2 是与扇区几何绑定的作用时间;而开关顺序则是与开关状态字绑定的。如果软件假定第一个施加的有效矢量永远是滞后矢量,那么它只有一半的时间是对的。
在试验台上
将零矢量时间平均分配给000和111,正是这种做法使该模式具有对称性。不均分则是一种实际的技术——通过停驻在一个零矢量上进行不连续调制,可将开关损耗降低三分之一——但这样做会牺牲对称性,从而失去理想的中心采样特性。
过调制
当请求矢量超出内切圆时,:仅靠两个有效矢量所占用的时间就已超过整个周期,导致负的零矢量时间。在图中将矢量拖出圆外,读数会变为红色。
这里没有“诚实”的答案——逆变桥无法实现。它所能做的,是尽可能地逼近目标,这意味着需要进行限幅并接受波形畸变。在svpwmDuties的实现中,每个占空比都被钳位到,这是最简单且最常见的选择。
有效区域介于内切圆与六边形之间:调制指数为1.0至1.155。那些在高速下需要充分利用每一伏电压的驱动器会刻意在此范围内运行,并接受随之而来的低次谐波。
在代码中
/* SVPWM by min-max injection. This is the whole modulator. */
void svpwm(float v_alpha, float v_beta, float vdc, float *duty)
{
/* Inverse Clarke: the three phase references. */
const float va = v_alpha;
const float vb = -0.5f * v_alpha + SQRT3_2 * v_beta;
const float vc = -0.5f * v_alpha - SQRT3_2 * v_beta;
/* Centre them between the rails. */
float vmax = fmaxf(va, fmaxf(vb, vc));
float vmin = fminf(va, fminf(vb, vc));
const float offset = 0.5f * (vmax + vmin);
duty[0] = clamp01(0.5f + (va - offset) / vdc);
duty[1] = clamp01(0.5f + (vb - offset) / vdc);
duty[2] = clamp01(0.5f + (vc - offset) / vdc);
}
无需扇区查表,无需三角函数,也无需计算矢量作用时间。只需将这三个结果写入中心对齐模式下的定时器比较寄存器,硬件就会自动生成对称的开关序列。
要点回顾
- 桥式电路共有八种状态。介于这些状态之间的任何输出都是通过平均得到的,而零矢量则决定了输出的幅值。
- 线性极限就是内切圆,即,因为旋转的参考矢量必须在各个方向上同时满足要求。
- 普通 SPWM 只能达到 ,并浪费了 15.5% 的直流母线电压。通过注入共模信号,只需三行代码即可将其恢复,且电机无法检测到该注入。
- 最小-最大共模注入法与扇区-作用时间构造法本质上是同一个调制器。在代码中实现前者,在原理上理解后者。
- 中心对齐的占空比每个步进只产生一次开关切换,并形成对称的波形,这正是使周期中点电流采样正确的关键。
接下来:死区时间会对这一切产生什么影响,以及为什么在电压余量最小时,补偿显得尤为重要。