4、扇区判断:如何根据目标电压矢量判断所在扇区?
好,咱们接着聊。上一节我们把 Clarke 和 Park 变换搞定了,拿到了 Vα 和 Vβ。这两个值,说白了就是目标电压矢量在静止坐标系下的坐标。
现在问题来了:SVPWM 是靠六个基本矢量(V1~V6)和零矢量来合成任意矢量的。你得先知道目标矢量落在哪个扇区,才能决定用哪两个基本矢量去合成它。
这就像你要去一个陌生城市送货,得先看地图,知道自己在哪个区,才能规划路线。扇区判断,就是那张地图。
4.1 扇区划分的几何直觉
先看个直观的图。六个基本矢量把平面分成了六个 60° 的扇区,编号从 I 到 VI。
核心思路: 扇区判断的本质,就是根据 Vα 和 Vβ 的符号和比例关系,确定目标矢量落在哪个 60° 区间里。
4.2 传统方法:三值逻辑判断
教科书上最经典的方法,是定义三个中间变量 A、B、C。我个人习惯叫它「三值逻辑法」,简单粗暴。
具体步骤是这样的:
- 计算三个参考量:
Vref1 = Vβ Vref2 = (√3/2)*Vα - (1/2)*Vβ Vref3 = -(√3/2)*Vα - (1/2)*Vβ - 判断符号,得到 A、B、C:
- 如果 Vref1 > 0,则 A = 1,否则 A = 0
- 如果 Vref2 > 0,则 B = 1,否则 B = 0
- 如果 Vref3 > 0,则 C = 1,否则 C = 0
- 计算扇区号:
然后查表:N = A + 2*B + 4*CN 值 1 2 3 4 5 6 扇区 II VI I IV III V
我的小技巧: 这个查表映射关系,不同资料可能不一样。我建议你拿到代码后,先拿几个已知角度(比如 30°、90°、150°)手动算一遍,确认映射关系对不对。我在项目里吃过这个亏,照着网上的表抄,结果电机转起来一顿一顿的。
4.3 我更喜欢的方法:直接角度判断
说实话,上面那个方法虽然经典,但每次都要算三个 Vref,还要查表,有点绕。
我个人在实际项目中更常用的是 直接角度判断法。既然我们已经有了 Vα 和 Vβ,那目标矢量的角度 θ 可以直接算出来:
θ = atan2(Vβ, Vα) // 结果范围:-π ~ π
然后根据 θ 落在哪个区间,直接判断扇区:
| 角度范围(弧度) | 角度范围(度) | 扇区 |
|---|---|---|
| 0 ~ π/3 | 0° ~ 60° | I |
| π/3 ~ 2π/3 | 60° ~ 120° | II |
| 2π/3 ~ π | 120° ~ 180° | III |
| -π ~ -2π/3 | -180° ~ -120° | IV |
| -2π/3 ~ -π/3 | -120° ~ -60° | V |
| -π/3 ~ 0 | -60° ~ 0° | VI |
代码实现也很简单:
// 计算角度
float theta = atan2f(Vbeta, Valpha);
// 角度归一化到 0 ~ 2π
if (theta < 0) theta += 2 * M_PI;
// 判断扇区
int sector;
if (theta < M_PI/3) sector = 1;
else if (theta < 2*M_PI/3) sector = 2;
else if (theta < M_PI) sector = 3;
else if (theta < 4*M_PI/3) sector = 4;
else if (theta < 5*M_PI/3) sector = 5;
else sector = 6;
注意: 直接角度法虽然直观,但 atan2 计算量比较大。在低端 MCU 上,一次 atan2 可能要几十微秒。如果你的控制周期只有 50μs,那这个方法就不太合适了。这时候还是老老实实用三值逻辑法,只有加减法和比较,快得多。
4.4 避坑指南:我踩过的三个坑
扇区判断看起来简单,但实际项目中容易出问题。我分享几个亲身经历:
- 坑一:Vα 和 Vβ 的符号搞反了。 有一次我调试新板子,电机死活转不起来。查了半天,发现是 ADC 采样回来的电流方向反了,导致 Park 变换后的 Vα 和 Vβ 符号全反。扇区判断自然全错。后来我养成了一个习惯:先在开环模式下给一个固定角度,看电机能不能转到对应位置,确认坐标变换没问题。
- 坑二:边界情况处理不当。 当目标矢量正好落在扇区边界上(比如正好 60°),判断结果可能会在相邻扇区间来回跳。这会导致输出电压抖动。我的做法是加一个小的滞回区间,比如在边界 ±1° 范围内保持上一次的扇区结果。
- 坑三:浮点运算精度问题。 在定点 MCU 上,Vref1、Vref2、Vref3 的计算结果可能因为舍入误差导致符号判断错误。我建议用 Q15 或 Q24 格式做定点运算,并且给比较器加一个很小的死区(比如 0.001),避免零值附近误判。
4.5 扇区判断的工程实现对比
最后,我把两种方法放在一起对比一下,方便你选型:
| 对比项 | 三值逻辑法 | 直接角度法 |
|---|---|---|
| 计算量 | 低(加减法 + 比较) | 高(需要 atan2) |
| 代码可读性 | 一般,需要查表 | 高,直观易懂 |
| 适用场景 | 低端 MCU,控制周期短 | 高端 MCU,或调试阶段 |
| 边界稳定性 | 较好(符号比较稳定) | 需要额外处理滞回 |
| 我的推荐 | 量产项目首选 | 调试和教学首选 |