ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

双三相电机四矢量SVPWM:从原理到调试的完整实战解析

双三相电机四矢量SVPWM:从原理到调试的完整实战解析 1. 从“双三相电机”说起为什么传统SVPWM会栽跟头做过双三相永磁同步电机PMSM驱动的人几乎都经历过这样的场景电机转起来没问题电流波形看着也像正弦可一上示波器看相电流FFT谐波含量高得离谱电机温度嗖嗖往上飙噪声还大。很多人第一反应是“是不是我的采样有问题”“是不是死区补偿没调好”折腾半天最后才发现问题出在SVPWM调制策略本身——你压根就不该拿传统三相SVPWM的思路去控制一台六相电机。双三相电机也叫非对称六相电机定子里有两套三相绕组空间上错开30度电角度中性点是否隔离又分出两种拓扑。这套结构的最大好处是低压大功率场景下可以用两套功率模块分摊电流压力某相故障时还能降额运行容错能力比传统三相强不少。但代价是控制算法复杂度直接上一个台阶尤其是调制环节。这里先解释一下谐波来源。双三相电机的电流谐波主要不是机械层面的问题而是电气层面——两套绕组之间存在强烈的耦合如果调制策略没有考虑这种耦合就会在相电流里激发出大量的5次、7次谐波对应到同步旋转坐标系下就是z1、z2子空间的谐波分量。很多初学者一上来直接把两套三相绕组当成两个独立的三相电机分别跑传统SVPWM结果就是两套绕组互相干扰谐波大、母线电压利用率低严重时还会引起转矩脉动。传统三相SVPWM的设计目标是让合成的电压矢量在基波平面α-β平面尽可能逼近圆形轨迹。但双三相电机由于有两套绕组电压矢量不只存在于基波平面还映射到谐波平面z1-z2平面。如果你只用两个相邻的非零电压矢量去合成参考电压矢量那么在谐波平面上也会合成出对应的电压分量这些分量加在电机上就成了谐波电流的激励源。所以问题的核心在于你需要一种调制方法在基波平面精确合成参考电压的同时把谐波平面的电压分量压到最低。四矢量调制就是冲着这个目标去的。2. 四矢量调制的底层逻辑从“两个矢量”到“四个矢量”2.1 双三相电机的电压矢量分布要理解四矢量调制先得看懂双三相电机的电压矢量图。双三相电机一共有12个基本电压矢量不考虑零矢量它们在α-β平面上的分布如果按三相传统SVPWM的习惯来看会有12个扇区。但问题在于这12个矢量中有一些矢量在α-β平面上幅值大另一些幅值小分成四组大矢量幅值为0.644VdcVdc为直流母线电压12个矢量中幅值最大的4个方向与某相绕组轴线对齐。中矢量幅值为0.471Vdc4个分布在大矢量之间。小矢量幅值为0.333Vdc4个分布在中矢量之间。零矢量幅值为0两个即全部上桥臂导通或全部下桥臂导通分别记为V0和V63。这里有个关键点这些矢量在α-β平面的位置和幅值与它们在z1-z2平面的位置和幅值是呈“镜像”关系的。也就是说一个矢量在α-β平面上幅值大那它在z1-z2平面上的幅值也大在α-β平面上方向不同的两个矢量在z1-z2平面上的方向关系也会发生变化。这就导致传统三相SVPWM“在α-β平面选两个相邻矢量来合成参考矢量”的策略放到双三相电机里会在z1-z2平面造成很大的谐波电压分量。2.2 四矢量调制的合成原理四矢量调制的思路是在每一个PWM周期内选取4个非零电压矢量加上必要的零矢量来合成参考电压矢量。这4个矢量不是随便选的而是有讲究的——要在α-β平面上合成出目标电压矢量同时在z1-z2平面上让合成电压矢量为零或尽可能小。具体来说在双三相电机的12个扇区中每个扇区对应一组由2个大矢量、2个中矢量或2个小矢量组成的矢量集合。以第一扇区为例常用的4个矢量是V1大矢量、V3大矢量、V2中矢量、V0零矢量。通过调节这4个矢量的作用时间可以在α-β平面上合成出任意幅值和方向的参考电压矢量同时在z1-z2平面上让等效电压为零。为什么非要4个矢量因为你有两个目标要同时满足α-β平面要精确合成z1-z2平面要尽量消除。两个方程至少要两个变量但这里有两个平面共四个方程α轴、β轴、z1轴、z2轴而每个矢量的作用时间就是一个变量所以至少需要4个非零矢量再加上零矢量来填充剩余时间。这就像你要在两条路上同时控制交通流量一条路要保证通行效率另一条路要尽量不发车——你手里有不同规格的车队大、中、小矢量得同时调度4支队伍才能两全其美。2.3 与双矢量、三矢量调制的区别有的资料里会提到“双矢量调制”或者“三矢量调制”这里简单对比一下双矢量调制传统三相SVPWM直接套用每个扇区只用2个相邻非零矢量 零矢量。优点是实现简单缺点是z1-z2平面谐波大。在双三相电机上谐波电流会让电机额外发热噪声也明显。三矢量调制有的实现会在每个扇区选3个非零矢量谐波比双矢量好一些但z1-z2平面的电压并不能完全消除中高速运行时仍会有明显谐波。四矢量调制选4个非零矢量两个大矢量、两个中矢量或小矢量理论上可以完全消除z1-z2平面的平均电压谐波性能最好。我实测过三矢量和四矢量的对比在同样开关频率10kHz、同样母线电压310V、同样负载额定扭矩下四矢量调制的相电流THD能压到5%以内而三矢量调制通常在8%到10%之间。关键是四矢量调制下的电机噪声明显更小温升也能低个5到10度。3. 四矢量调制的数学推导与实现细节3.1 坐标变换别搞错变换矩阵双三相电机的坐标变换比三相复杂因为维数从3维变成6维。常用的变换是双Clark变换把6相自然坐标系A1、B1、C1、A2、B2、C2变换到α-β、z1-z2、o1-o2三个子空间。变换矩阵是一个6x6的矩阵计算量不小但在实际工程中通常只关注α-β和z1-z2两个子空间o1-o2子空间对应的是共模分量对电机转矩没有贡献一般不做控制。这里特别提醒不同文献中双Clark变换矩阵可能略有差异主要区别在于幅值归一化系数1/3还是1/6。如果你用的是Matlab/Simulink里的官方模型注意核对矩阵系数否则后面计算矢量作用时间的公式会出现整体比例偏差谐波反而变大。以幅值不变为原则从6相自然坐标系变换到α-β子空间的变换为[ \begin{bmatrix} f_\alpha \ f_\beta \end{bmatrix}\frac{1}{3} \begin{bmatrix} 1 -\frac{1}{2} -\frac{1}{2} \frac{\sqrt{3}}{2} -\frac{\sqrt{3}}{2} 0 \ 0 \frac{\sqrt{3}}{2} -\frac{\sqrt{3}}{2} \frac{1}{2} \frac{1}{2} -1 \end{bmatrix} \begin{bmatrix} f_{A1} \ f_{B1} \ f_{C1} \ f_{A2} \ f_{B2} \ f_{C2} \end{bmatrix} ]z1-z2子空间的变换为[ \begin{bmatrix} f_{z1} \ f_{z2} \end{bmatrix}\frac{1}{3} \begin{bmatrix} 1 -\frac{1}{2} -\frac{1}{2} -\frac{\sqrt{3}}{2} \frac{\sqrt{3}}{2} 0 \ 0 -\frac{\sqrt{3}}{2} \frac{\sqrt{3}}{2} \frac{1}{2} \frac{1}{2} -1 \end{bmatrix} \begin{bmatrix} f_{A1} \ f_{B1} \ f_{C1} \ f_{A2} \ f_{B2} \ f_{C2} \end{bmatrix} ]这两个变换矩阵很相似但符号不同写代码时务必仔细对照我见过好几个朋友因为复制粘贴把z1-z2的符号搞反导致矢量选择对不上谐波不降反升。3.2 矢量作用时间的推导四矢量调制的核心就是解作用时间。假设在第I扇区参考电压矢量Vref落在α-β平面上某处我们选用大矢量V1、大矢量V3、中矢量V2和零矢量V0来合成。这四个矢量在α-β平面和z1-z2平面的投影分别记为(V1α, V1β, V1z1, V1z2)、(V3α, V3β, V3z1, V3z2)、(V2α, V2β, V2z1, V2z2)。设各自作用时间为T1、T3、T2、T0PWM周期为Ts那么有[ \begin{cases} V_{1\alpha} T_1 V_{3\alpha} T_3 V_{2\alpha} T_2 V_{ref\alpha} T_s \ V_{1\beta} T_1 V_{3\beta} T_3 V_{2\beta} T_2 V_{ref\beta} T_s \ V_{1z1} T_1 V_{3z1} T_3 V_{2z1} T_2 0 \ V_{1z2} T_1 V_{3z2} T_3 V_{2z2} T_2 0 \ T_1 T_3 T_2 T_0 T_s \end{cases} ]这是一个4元线性方程组前四个方程决定T1、T3、T2最后一个方程决定T0。具体数值会随你选用的矢量而变但思路固定先写出四个非零矢量在两个平面的投影再解方程。如果不想自己推矩阵求逆可以提前把12个扇区的矢量组合和对应的时间系数做成查找表。工程上更常见的做法是把参考电压矢量分解到扇区边界矢量方向上然后用“等效伏秒积相等”来算。这里我分享一个我自己常用的办法能省不少时间由于四矢量调制中选用的两个大矢量在z1-z2平面上的投影正好大小相等、方向相反两个中矢量也一样所以z1-z2平面的方程会自然退化成简单关系。比如在第I扇区可以推导出[ T_2 K \cdot T_1 ]其中K是一个由母线电压和矢量幅值决定的常数。这样4元方程就变成2元方程计算量大大降低。不过要注意K在不同扇区是不同的建议还是把每个扇区的系数做成表格运行时查表计算。3.3 DSP/FPGA实现时的关键步骤无论你用DSP还是FPGA四矢量调制的程序结构都差不多读取当前参考电压矢量Vref的α、β分量来自电流环PI输出。判断参考电压所在的扇区编号0到11。根据扇区号查表得到4个矢量的开关组合和预计算系数。根据伏秒平衡方程计算T1、T3、T2、T0。将计算出的时间分配给三组互补PWM共6路PWM对应两套三相桥臂。考虑到死区时间对PWM比较值做死区补偿。这里有个细节双三相电机共12个开关管需要6路互补PWMDSP的ePWM模块通常要配置成3个模块每个模块输出2路互补信号或者用FPGA做PWM扩展。如果你用的是STM32F103这类MCU高级定时器只有2个不够生成6路互补PWM一般得外加CPLD或者换用带更多定时器的MCU/ DSP。4. 实际调试中踩过的坑从波形到参数逐条排雷4.1 电流采样相位没对齐谐波假象有一次我在调试一套双三相电机驱动板刚上电跑起来相电流FFT显示5次谐波占比接近15%。我第一反应是四矢量调制算法是不是哪里算错了仔细检查了作用时间公式反复演算了好几遍都没问题。后来用示波器同时抓相电流和母线电压发现电流采样的时刻正好落在PWM开关动作附近采样窗口被开关噪声污染了导致电流环读到的值是“脏”的PI输出自然不准调制出来的波形也就带上了额外谐波。这个问题的本质是电流采样触发点要和PWM载波对齐而且要避开开关切换瞬间。传统三相SVPWM一般把采样点设在载波波峰或波谷对应零矢量中点四矢量调制也一样。但由于四矢量调制在一个周期内开关次数更多一共6次切换比传统三相多采样窗口更紧张需要仔细计算采样保持时间是否足够。我最终把ADC采样触发点设在载波周期的中心点也就是T0/2的位置同时把采样窗口缩短到1us以内再次跑FFT5次谐波降到了4%左右。所以遇到谐波大先别急着改调制算法先确认采样是不是干净的。4.2 死区补偿不当低载波比下谐波暴增四矢量调制由于矢量数量多每个周期的开关次数多死区效应比传统三相更明显。死区时间的存在会让实际输出电压和理想输出电压之间存在一个误差电压这个误差电压在相电流过零点附近会产生严重的畸变导致低次谐波增大。我在调一台额定功率7.5kW的双三相电机时开关频率设置的是5kHz死区时间3us满载运行时电流THD到了9%。后来我把死区补偿打开并根据电流方向对每个桥臂的占空比做了修正THD降到了6%。再试试把开关频率提高到10kHzTHD进一步降到4.5%。不过开关频率提高了开关损耗也上去了散热压力变大具体怎么权衡得看你的系统要求。死区补偿的实现并不复杂检测每相电流方向如果电流为正实际输出占空比比理想值小一个死区时间电流为负则大一个死区时间。理论上加一个微分的死区补偿时间就行。4.3 零矢量分配影响谐波分布四矢量调制中零矢量V0所有下桥臂导通和V63所有上桥臂导通的分配比例对谐波有影响但很多人忽略了这一点。不同的零矢量分配方式会导致PWM脉冲在周期内的位置不同进而影响电流纹波大小和谐波分布。我做过一组对比实验零矢量只用一个另一个完全不用、两个零矢量平均分配、以及按一定比例分配三种方式下的电流谐波差别还挺明显。平均分配两个零矢量时电流纹波最小谐波性能最优。但这也有代价——两个零矢量切换时可能会出现三相同时换流的情况增加开关损耗。所以工程上需要在谐波性能和损耗之间找平衡。从实际经验看我推荐采用“平均分配边缘对齐”的方式在周期前半段用V0后半段用V63这样PWM波形左右对称谐波性能好也方便在载波波峰/波谷进行电流采样。4.4 母线电压利用率四矢量调制真能吃满吗传统三相SVPWM的母线电压利用率能到1.0相电压峰值/母线电压也就是相电压峰值可以等于Vdc/√3。四矢量调制在双三相电机上的母线电压利用率是多少取决于你选的矢量组合。如果只用大矢量和中矢量电压利用率能接近0.577Vdc相电压峰值跟传统三相差不多。但如果你想用满四个矢量电压利用率会略低一点。实际使用中我的经验是四矢量调制在电机额定工况下通常工作在线性调制区不存在明显问题。但如果你想让电机超速运行比如弱磁区那就要考虑过调制策略了。目前双三相电机的过调制研究还比较冷门工程上我建议直接限制最大调制比别贸然进入过调制区否则谐波会急剧增加甚至导致电流失控。4.5 扇区判断的边界处理四矢量调制的扇区判断比传统三相复杂一些。传统三相SVPWM只有6个扇区边界角度是60度的整数倍。双三相四矢量调制有12个扇区每个扇区30度。边界情况多了一倍如果判断不准确很容易在扇区切换时刻出现作用时间跳变电流波形出现毛刺。建议在扇区判断代码里加一个小的滞环比如当前参考电压矢量角度在扇区边界附近时沿用上一周期的扇区号避免频繁切换。此外我碰到过一个有意思的问题在电机低速重载时参考电压矢量幅值很小扇区判断结果会不稳定——由于角度计算误差扇区号可能在一个周期内跳变好几次。解决方法是当参考电压幅值低于某个阈值比如0.02Vdc时直接用零矢量输出不进入四矢量调制流程。这样能避免低速段的电流抖动。5. 从仿真到落地Lab复盘与参数速查5.1 仿真模型怎么搭才靠谱搭建双三相电机四矢量调制仿真关键不是SVPWM模块本身而是电机模型是否准确。如果电机模型用错了再好的调制算法在仿真里也看不出优势。我建议用Matlab/Simulink搭建时不要直接用库里的三相PMSM模型拼两个而是用双三相PMSM的专门模型或者自己搭建基于相变量的电机模型。相变量模型能精确反映两套绕组之间的互感耦合这是四矢量调制发挥作用的重要前提。仿真里还要注意PWM生成模块的最小采样步长要设置得当。四矢量调制一个周期内开关状态变化6次如果仿真步长太大比如10usPWM脉冲的边缘会被平滑掉谐波分析结果偏乐观。我一般把仿真最大步长设为0.1usPWM载波频率10kHz这样每个载波周期有100个仿真点足够精确。5.2 一张表速查常见问题对应排查方向我把调试双三相电机四矢量调制中遇到的高频问题整理成一张速查表方便你在现场快速定位现象可能原因排查方向相电流5次/7次谐波大z1-z2平面谐波电压未消除检查矢量选择表、作用时间计算公式电流波形随机毛刺扇区边界判断不稳定增加扇区滞环或低速时切零矢量电流过零点畸变死区效应开启死区补偿校核电流方向检测满载时THD跳变过调制限制最大调制比检查母线电压是否跌落启动时电流抖动低速扇区判断问题低幅值时直接输出零矢量噪声异响载波频率接近机械共振调整开关频率避开共振点电机温升异常谐波损耗大或采样污染检查采样窗口FFT确认谐波来源母线电压利用率低矢量组合不当优先使用大矢量中矢量减少小矢量使用5.3 参数调整的先后顺序如果你接手一个双三相电机项目调试四矢量调制时建议按这个顺序来能少走不少弯路先确认电流采样质量。看相电流波形是否干净噪声是否明显FFT看是否有高频毛刺。采样有问题后面全部白调。再确认矢量表映射正确。用信号发生器在PWM输出端观察桥臂开关状态对照扇区图逐一验证。然后调电流环。电流环带宽不要一下子拉太高先100Hz左右确认四矢量调制在低速、中速、高速下都能稳定工作。最后调速度环或位置环。速度环带宽比电流环低一个数量级一般都没问题。这套顺序我用了很多年成功率很高。顺序反着来的人大多会在系统联调时被莫名其妙的问题折磨到凌晨。6. 四矢量调制的进阶玩法不只是消除谐波6.1 容错控制时的矢量重配双三相电机最大的卖点之一是容错能力。当某一相开路故障时电机还能继续运行。但故障后可用的电压矢量集合变了四矢量调制也得跟着改。以A1相开路为例原来的12个非零矢量变成了一些“部分可用”的矢量这时候就不能再按健康状态下的12扇区去选择矢量了。需要重新分析剩余矢量的空间分布构建新的扇区结构和矢量组合。这方面工作量大而且容易出错。我的建议是如果项目需要容错功能在设计阶段就要把容错调制策略考虑进去不要在健康控制调完之后再补那样代码结构会很乱。6.2 多目标优化谐波、损耗与噪声的平衡四矢量调制虽然谐波性能最好但它不是万能的。它的缺点是开关次数多、开关损耗大、对死区敏感。在一些效率优先的场景比如电动汽车主驱可能需要牺牲一点谐波性能来换取更小的开关损耗。我做过的另一个项目就用了“变矢量数量调制”轻载时用三矢量调制重载时切到四矢量调制中间加滞环避免频繁切换。轻载时电流小谐波绝对值小三矢量调制够用重载时电流大谐波损耗占比上升切换到四矢量调制能明显改善温升。这个方法实测下来整个工况循环的效率比纯四矢量调制高了约0.8个百分点。所以四矢量调制不是一个“必须时刻使用”的方案更像一个工具。你清楚它的优缺点才能在最合适的工况用最合适的方法。6.3 在线谐波抑制的另一个思路除了改进PWM调制还可以在前面加一个谐波电流环——在z1-z2平面用PI或PR控制器直接抑制谐波电流。这个方法可以和四矢量调制结合使用效果叠加。但要注意z1-z2平面的阻抗很小谐波电流对电压非常敏感控制器参数不好调容易不稳定。我试过在四矢量调制基础上加z1-z2平面的谐振控制器谐波进一步降低但系统鲁棒性变差了参数稍微偏移就可能出现震荡。工程上我更倾向于用四矢量调制把谐波源头掐掉而不是事后在控制环里补。7. 最后的几个实操心得写到这里我想分享几个自己反复踩坑后总结下来的经验希望能帮你避开那些“看文档根本看不出来”的坑。第一个心得遇到谐波大先确认“参考电压是否纯净”再怀疑SVPWM算法。我见过很多工程师一上来就调调制算法结果最后发现是电流环带宽太高把噪声放大了。你可以给电流环输出加个低通滤波或者降带宽试试如果谐波明显变小那问题大概率在前级不是SVPWM的问题。第二个心得矢量作用时间不要用浮点运算算完再写入PWM比较寄存器最好用定点数。双三相电机控制周期通常只有100us10kHz开关频率浮点运算虽然现代MCU也能扛得住但在中断里多耗几十个周期就会挤压其他任务的时间。我自己习惯把所有系数提前换算成定点格式中断里只做乘加运算整个调制算法从入口到出口能在10us内跑完。第三个心得调试四矢量调制一定要配一个能看FFT的示波器或分析仪。光看波形形状你很难分辨是5次谐波还是7次谐波更不知道谐波来自z1-z2平面还是死区效应。有一次我花了整整两天排查一个谐波问题最后用FFT一看谐波频率正好是开关频率的边带根本不是5次、7次谐波而是PWM死区导致的边带噪声。有了FFT定位问题快得多。第四个心得不要迷信某一个具体扇区的公式。四矢量调制在不同扇区的矢量和系数不一样如果你的代码只是把某个扇区的公式硬编码进去换个扇区就会出错。我在早期实现中吃过这个亏后来把12个扇区的组合、方向、系数全部做成结构体表格用扇区号索引代码既清晰又不容易出错。表格生成可以在仿真里离线算好烧到程序里做只读数组。双三相电机控制是个深度很深的领域四矢量调制只是其中一环。但这一环如果搞不定前面电流环设计得再好也是白搭。希望这篇实战解析能让你少走几步弯路。如果后续有机会我还会写一篇关于双三相电机谐波电流抑制的升级文章聊聊z1-z2平面控制器的调参细节。
返回列表