ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

双三相电机SVPWM谐波大?四矢量调制原理与完整实现

双三相电机SVPWM谐波大?四矢量调制原理与完整实现 先说自己调试双三相电机的经历。样机用两套三相绕组、空间错开30度控制器是自研的驱动板。上电后空载电流就有毛刺加载后电流波形更难看FFT一测5次、7次谐波分量明显偏高电机温升快噪声也大。当时第一反应是电流环PI参数没调好调了一个星期没改善。后来把问题定位到调制层面传统SVPWM直接套用到双三相电机上x-y谐波子空间的电压完全没约束谐波大是必然的。换成四矢量调制之后同样的PI参数电流波形立刻干净很多。这篇就把双三相电机SVPWM谐波大的根因和四矢量调制的完整实现思路整理出来。1. 谐波大的根因传统SVPWM根本没有照顾到x-y子空间1.1 双三相电机不是两套三相走线这么简单双三相电机最常见的结构是两套三相绕组空间电角度相差30度两套绕组各自星形连接中性点电气隔离。很多人第一反应是既然有两套三相那就用两个独立的SVPWM模块分别控制一个管ABC一个管UVW各调各的不就行了吗这个想法在转矩输出层面确实能转因为两套绕组在气隙里产生的旋转磁动势会叠加。但在电流谐波层面这种双SVPWM方案会把两个三相系统之间的耦合问题完全暴露出来。两套绕组在空间上错开30度但共用同一个转子磁场它们的电压、电流在六维空间里是相互耦合的。把一套三相当成孤立系统来控制就相当于无视了另一半绕组的电磁关系。正确的做法是把六相看成一个整体用VSD变换矢量空间解耦把六维变量映射到三个相互解耦的平面上。这一步没做对后面一切调参都是治标不治本。1.2 VSD变换把六维空间拆成三个解耦平面VSD变换的本质就是给六相变量找一个合适的坐标系。以30度相移双三相电机为例用Clarke扩展矩阵把六个相电压/相电流变换到α-β、x-y、o1-o2三个子空间α-β子空间基波分量和主要磁动势在这里负责机电能量转换等同于普通三相电机的α-β平面。x-y子空间5次、7次、17次、19次等谐波分量映射到这里它不参与基波能量转换。o1-o2子空间3的倍数次谐波3次、9次等落在这一组。由于两套绕组中性点隔离正常工况下零序电流没有流通回路o1-o2这一块基本可以忽略。变换矩阵的具体形式不同论文里有不同写法但思路一致。关键结论是α-β平面上的电压、电流决定电机的转矩和转速x-y平面上的电压决定谐波电流的大小。1.3 x-y子空间阻抗小同样的电压能打出更大的电流双三相电机在设计时x-y子空间的阻抗主要成分是漏感没有主磁路的感抗。漏感比主电感小一两个数量级所以哪怕x-y子空间上只有很小的电压也会产生不可忽略的谐波电流。打个比方普通三相电机的基波电流通路和水管主路一样主管道又粗又长阻抗大而双三相电机的x-y谐波通路就像一段短而粗的旁路阻抗小一点点压差就能催生很大水流。传统SVPWM只保证α-β平面电压的平均值等于参考值x-y平面的电压完全没有控制目标那谐波大水到渠成。明白这一点之后问题就变成如何在每个开关周期里既保证α-β电压正确合成又把x-y平面的平均电压压到零。这正是四矢量调制的出发点。2. 传统两矢量SVPWM在双三相系统上会留下什么2.1 双三相逆变器的64个开关状态与电压矢量双三相逆变器有6个桥臂、12个开关管每个桥臂两种状态一共2的6次方等于64个开关状态。其中一部分是零矢量比如全上管导通、全下管导通其余是非零矢量。把这些开关状态通过VSD变换映射到α-β平面和x-y平面会得到一组空间矢量。按幅值分档大致分成大矢量、中矢量、小矢量和零矢量几类。传统三相SVPWM只需要盯住α-β平面在6个大矢量里选相邻两个加零矢量来合成。但双三相系统里每一个开关状态在α-β平面有投影在x-y平面同样有投影。2.2 两个矢量加一个零矢量x-y残差无法抵消传统SVPWM在一个PWM周期内作用两个相邻非零矢量和零矢量目标是让α-β平面的平均电压等于参考电压。但问题在于这两个非零矢量在x-y平面上的投影通常都不为零而且两个矢量的x-y投影方向不一定相反作用时间也不相等所以合成之后x-y平面会留下一个残余电压。这个残余电压一个周期出现一次持续作用在x-y子空间的低阻抗回路上就形成了谐波电流。5次、7次谐波在相电流FFT上特别显眼就是因为它们对应的分量在x-y平面被持续激励。2.3 为什么普通三相电机没这么明显的现象普通三相电机不存在x-y子空间或者即使变换出类似平面也因为没有对应的绕组分布几乎不产生该子空间的低阻通路。所以传统SVPWM在普通三相电机上做了几十年谐波问题远没有双三相电机这么尖锐。但双三相电机因为绕组空间结构天然就有这个低阻抗旁路。你拿三相系统的调制思维硬套谐波大是必然的。这不是PI参数的问题也不是采样的问题而是调制策略的维度缺失。3. 四矢量调制原理多两个矢量把自由度补回来3.1 为什么要选4个非零矢量拿一个开关周期看参考电压在α-β平面需要两个自由度Vα、Vβx-y平面需要两个约束Vx0、Vy0。两个非零矢量加零矢量时间变量只有两个只能满足α-β平面的两个方程x-y平面只能听天由命。四矢量调制在一个周期内选择4个非零矢量加零矢量时间变量有4个刚好可以同时满足α-β平面的两个电压方程和x-y平面的两个归零约束。从数学上看就是方程个数等于未知数个数能解出唯一解。3.2 大矢量加中矢量的组合逻辑四矢量调制最经典的选法是在每个30度扇区内选2个相邻大矢量和2个相邻中矢量。大矢量幅值大负责提供α-β平面的主要电压中矢量幅值相对小配合调整x-y平面的投影。零矢量负责填充剩余时间。不是随便选4个矢量都行。选矢量的原则是4个矢量在4维空间里线性无关既保证方程组可解又保证解出来的时间都为正值。大矢量和中矢量的组合经过验证是最稳定的方案因为它们在α-β平面的方向分布集中x-y平面的投影组合又能覆盖需要补偿的区域。3.3 开关顺序对称七段式4个非零矢量加零矢量一个周期可以排成五段式或七段式。五段式是4个非零矢量各一次零矢量只在中间出现一次开关次数少但谐波相对大、电流纹波明显。七段式把零矢量和部分矢量对称排列比如大矢量L1 - 中矢量M1 - 大矢量L2 - 中矢量M2 - 零矢量 - 中矢量M2 - 大矢量L2 - 中矢量M1 - 大矢量L1这样安排的好处是开关序列对称每次状态切换只动一个桥臂开关损耗和电流纹波都能控制在合理范围。工程上绝大多数双三相四矢量调制都用七段式我建议直接用这个省得后面为了纹波问题再折腾。4. 四矢量调制完整实战从扇区判断到作用时间计算4.1 12扇区划分与矢量选择表双三相系统α-β平面上因为两套绕组错开30度基波电压矢量的扇区不是传统的6个而是12个每个扇区30度。扇区判断可以用参考电压矢量的角度直接做[ \theta \text{atan2}(V_\beta^, V_\alpha^) ]然后按30度一个扇区划分12个扇区对应0到11。角度计算建议用atan2而不是简单查表避免在扇区边界出现抖动。矢量选择用查表法。每个扇区要提前确定4个非零矢量对应的6位开关状态和它们在α-β、x-y平面上的投影分量。以第一扇区为例典型选法是两个相邻大矢量和两个相邻中矢量顺序固定为L1-M1-L2-M2。实际项目里把每个扇区的4组开关状态做成一个常量表运行时直接索引即可。这个表是整个四矢量调制的核心一旦表错后面时间算得再准也白搭。建表方法很简单用VSD变换矩阵把所有64个开关状态遍历一遍算出各矢量在α-β、x-y的分量再按幅值和角度归类。4.2 作用时间推导4x4线性方程组设4个非零矢量作用时间为t1、t2、t3、t4零矢量时间为t0开关周期为Ts。4个矢量在α、β、x、y轴上的分量事先已知则方程组如下[ \begin{cases} V_{\alpha1}t_1 V_{\alpha2}t_2 V_{\alpha3}t_3 V_{\alpha4}t_4 V_\alpha^* T_s \ V_{\beta1}t_1 V_{\beta2}t_2 V_{\beta3}t_3 V_{\beta4}t_4 V_\beta^* T_s \ V_{x1}t_1 V_{x2}t_2 V_{x3}t_3 V_{x4}t_4 0 \ V_{y1}t_1 V_{y2}t_2 V_{y3}t_3 V_{y4}t_4 0 \end{cases} ]写成矩阵形式[ \begin{bmatrix} V_{\alpha1} V_{\alpha2} V_{\alpha3} V_{\alpha4} \ V_{\beta1} V_{\beta2} V_{\beta3} V_{\beta4} \ V_{x1} V_{x2} V_{x3} V_{x4} \ V_{y1} V_{y2} V_{y3} V_{y4} \end{bmatrix} \begin{bmatrix} t_1 \ t_2 \ t_3 \ t_4 \end{bmatrix}\begin{bmatrix} V_\alpha^* T_s \ V_\beta^* T_s \ 0 \ 0 \end{bmatrix} ]矩阵求逆后可以得到[ \begin{bmatrix} t_1 \ t_2 \ t_3 \ t_4 \end{bmatrix} T_s \cdot A^{-1} \begin{bmatrix} V_\alpha^* \ V_\beta^* \ 0 \ 0 \end{bmatrix} ]由于右边只有Vα和Vβ是变量每个时间的解都可以写成[ t_i T_s \left( k_{i\alpha} V_\alpha^* k_{i\beta} V_\beta^* \right) ]也就是说每个扇区预计算8个系数4个时间各自对应Vα和Vβ的系数运行时一次乘加就得到4个时间完全不需要实时做矩阵求逆。4.3 一个可直接参考的C语言实现思路扇区判断部分直接算角度float theta atan2f(beta_ref, alpha_ref); int sector (int)(theta / 30.0f * 180.0f / PI); if (sector 0) sector 12;矢量选择和时间计算const SectorTable* p table[sector]; float t1 Ts * (p-k1_alpha * alpha_ref p-k1_beta * beta_ref); float t2 Ts * (p-k2_alpha * alpha_ref p-k2_beta * beta_ref); float t3 Ts * (p-k3_alpha * alpha_ref p-k3_beta * beta_ref); float t4 Ts * (p-k4_alpha * alpha_ref p-k4_beta * beta_ref); float t0 Ts - t1 - t2 - t3 - t4;算出t0后要检查是否大于等于0。如果t0小于0说明参考电压已经超出线性调制范围需要做过调制限制最常见的方法是等比例压缩t1到t4。得到4个时间后按照七段式顺序填入比较寄存器。这里尤其要注意6个桥臂的比较值必须严格按选定的开关状态切换顺序计算不能拿三相SVPWM的两两对称直接改。6个桥臂的PWM输出中间还要插入死区死区插入逻辑和普通三相相同但6路独立输出都要覆盖。4.4 定点化与性能优化如果控制芯片是浮点MCU上面的浮点写法直接能用。如果用的是定点DSP或者低成本MCU建议把8个系数预先放大到合适的Q格式比如Q15或者Q24避免每次乘加都做浮点运算。我用过Q15格式注意点是系数量纲。因为Vα和Vβ都以Vdc为基值做了标幺系数算出来范围不会太大选Q15够用。但如果实际电压用伏特直接参与运算动态范围大Q15可能溢出这时改用Q24或者直接浮点更省心。5. 仿真和实测中的几个大坑5.1 仿真模型最容易忽略的环节先建仿真模型验证四矢量调制算法时很多人都栽在同一个地方用理想开关模型忽略死区。理想模型下四矢量调制效果完美x-y电流几乎为零谐波大幅下降。但只要把死区时间加进去波形立刻出现明显退化。原因是死区时间会在每个开关周期引入伏秒误差而这个误差对x-y平面来说是随机的、无法被四矢量调制的对称序列抵消。仿真阶段就建议把死区、管压降、导通压降都建模进去宁可仿真慢一点也别等到实测再返工。5.2 死区对四矢量调制的破坏与补偿实测中发现死区引起的谐波增加跟电流极性强相关。电流过零点附近死区影响最明显因为此时的伏秒误差方向不定。四矢量调制在理论上让x-y平均电压为零但死区补偿做不好这个零就被打破。死区补偿最常用的方法是基于电流极性的电压前馈检测每相电流极性根据极性和死区时间估算平均电压误差在调制波上做修正。对双三相系统6相电流极性都要判断整定工作量不小。如果你不想一开始就上复杂的死区补偿可以先用一个妥协做法把死区时间做小比如控制在1到2微秒以内然后看x-y电流是否还在可接受范围。我在样机调试时死区从3.2微秒降到1.6微秒负载电流5A工况下的5次谐波幅值下降了将近一半。5.3 谐波大问题的快速排查清单如果已经换成四矢量调制谐波还是大按下面顺序排查排查项现象判断方法矢量选择表错误电流波形正常但谐波异常大对比仿真和实测x-y电流看有没有周期性毛刺扇区判断抖动扇区边界电流突变用示波器看α-β参考角度确认角度是否连续死区补偿极性反谐波随电流方向对称恶化反向运行对比5次谐波幅值最小脉宽限制冲突部分矢量时间被截断检查PWM比较寄存器是否有低于最小脉宽的脉冲采样时刻不对电流有固定频率噪声用PWM中心对齐的ADC触发确认采样点矢量选择表错了是最隐蔽的坑。四矢量调制每个扇区4个矢量12个扇区共48个表项如果变换矩阵的符号或归一化系数弄错表里某些矢量投影方向会歪掉导致时间计算结果时好时坏谐波居高不下却查不出明显错误。我自己踩过这个坑。当时第一版表是用脚本算的某个扇区的β轴分量符号写反结果0到30度这个范围电流波形很漂亮30到60度一塌糊涂。整个排查过程耗了大半天最后还是把64个开关状态的α-β投影画出来逐个核对才找到。5.4 一个工程上很实用的验证手段四矢量调制的效果不要只看相电流THD。更好的办法是直接在VSD变换后的坐标系里观察x-y电流。调试器里实时算出ix、iy两个变量正常情况下它们的波形应该是接近零的小幅高频纹波。如果ix、iy出现明显的低频波动说明调制器还有问题或者死区补偿不合格。这个指标比相电流FFT更直观因为相电流FFT里面基波分量占主导谐波变化不仔细看根本看不出来。而x-y电流本身就是谐波的直接映射大小一目了然。6. 最后的经验总结从调参到调制的思维切换调试双三相电机驱动顺序很重要。先把调制器做对再调电流环。我见过太多同行上来先调PI调半天发现电流波形还是有毛刺回头才发现调制策略问题。电流环的带宽再高也没办法消除调制层面带来的谐波激励。四矢量调制在算法上只比传统SVPWM多几步乘加和查表复杂度增加不多收益却非常明显。我实际测的一组数据额定转速1500转、负载10牛米工况下相电流5次谐波从传统双SVPWM方案的百分之八左右降到百分之二以下7次谐波也有明显下降。电机温升和噪声都有改善。如果你正在做双三相电机控制建议先按上面的方法把四矢量调制跑通再回头去调电流环参数。同一套PI参数调制策略换对之后波形会给你一个非常直观的反馈。
返回列表