ARTICLE DETAIL

资讯详情

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

双三相电机SVPWM谐波超标?四矢量调制实战解析

双三相电机SVPWM谐波超标?四矢量调制实战解析 从谐波超标到四矢量调制双三相电机SVPWM实战复盘从谐波超标到四矢量调制双三相电机SVPWM实战复盘搞双三相电机控制的同学十有八九都会撞上同一个坑明明SVPWM写得规规矩矩电流波形看着也能转一上FFT分析5次、7次谐波直接把THD干到15%往上心里凉半截。我做双三相PMSM驱动这几年在谐波问题上栽过的跟头、翻过的文档、实验台上熬过的夜不算少。这篇就把“为什么你写的双三相SVPWM谐波大”和“四矢量调制到底怎么落地”这两件事掰开揉碎讲清楚顺便把扇区判断、公共量推导、STM32上的实现细节这些容易卡壳的地方一并补齐。这套内容适合正在调双三相电机控制算法、或者正准备把传统三相SVPWM往双三相上迁移的工程师。如果你只是刚接触SVPWM算法原理建议先把单三相的扇区判断和作用时间推导看熟再来读这篇不然中间有几处推导会跳得比较快。在双三相电机里谐波问题不是玄学它有一笔非常清楚的账电机绕组结构决定了谐波映射路径SVPWM矢量选择决定了你能不能在物理层面把谐波压下去。传统三相SVPWM那套“最近三矢量”策略在双三相系统里没法直接用硬用就会在平面内注入大量低次谐波。四矢量调制就是为了解决这个问题出现的它从矢量选择的源头把谐波通道堵死。1. 双三相电机与SVPWM的核心矛盾1.1 双绕组结构带来的“两个平面”问题双三相电机定子上有两套三相绕组电角度上错开30度。普通的做法叫“双Y移30度”两套绕组的中性点可以独立引出也可以做成隔离的。转子结构可以做成永磁同步也可以做成异步或者电励磁。两套绕组叠加之后定子磁场里会多出很多次空间谐波。这些谐波分量有一个特点它们在某些特定的变换坐标下会变成“基波”在另一些坐标下会被放大或者完全解耦。所以分析双三相电机业内通行的办法是用双静止坐标系变换也叫双dq变换把电机模型分解到两个平面上α-β平面基波所在的平面参与机电能量转换。z1-z2平面谐波平面5次、7次、17次、19次这些谐波主要映射到这里不参与能量转换只产生损耗和转矩脉动。我这里贴一个常用的变换思想双三相系统有6个相变量按空间对称性可以拆成3组两两正交的子空间一组是α-β一组是z1-z2还有一组是零序分量。所有SVPWM策略的本质都是在α-β平面和z1-z2平面上同时做取舍。用生活化的类比来理解α-β平面是你开车时真正前进的方向z1-z2平面是车轮在烂路上左右抖动。传统三相SVPWM只关心“前进方向”因为单三相结构里没有第二个物理通道来容纳抖动双三相结构等于给了抖动一个专用的“侧向通道”如果你的调制策略不去管这个通道抖动就会一直存在而且会通过交叉耦合反向影响α-β平面的电流品质。这就是谐波大的根源。1.2 为什么传统三相SVPWM在双三相上“水土不服”传统三相SVPWM的矢量表只有8个矢量6个非零、2个零矢量一个扇区内选相邻两个非零矢量和零矢量根据伏秒平衡算出作用时间。这套逻辑移到双三相系统会出现两个致命问题第一双三相逆变器一共有6个桥臂开关状态组合是2的6次方等于64种对应64个基本电压矢量。这些矢量在α-β平面上不是均匀分布的而是分布在12个扇区里每个扇区里可选的矢量有十几个。如果沿用三相的“最近三矢量”思路你选的矢量虽然能合成目标电压但它会在z1-z2平面产生一个很大的电压分量这个分量直接就是谐波源。第二三矢量调制在作用时间分配上有一个隐含的前提矢量在z1-z2平面的投影趋近于零。三相系统天然满足这个条件因为不存在z1-z2平面。双三相系统必须显式地把这个条件写进优化目标不然就是纯靠运气。所以“谐波大”的真相是不是你的SVPWM计算有bug而是你用了错误维度的调制策略。矢量在α-β平面上拼出了你想要的电压但在另一个平面上同时注入了你根本不想要的谐波扰动而且这部分的占比可能相当大。调制策略α-β平面合成能力z1-z2谐波抑制适用场景传统三相SVPWM移植强无控制随机注入低要求、实验验证最近四矢量调制中等强可精确约束工业伺服主流方案双三相独立双SVPWM强差两套SVPWM互相干扰教学演示不推荐占空比补偿型调制中等中依赖模型精度特定工况优化1.3 双三相电机谐波的实际影响谐波大的后果不是FFT图上多几根尖刺那么简单。5次、7次谐波会带来几个层面的实际问题首先是铜耗增加。谐波电流在绕组里流动只发热不做功。我测过一台10kW的双三相PMSM在传统三矢量策略下谐波电流的幅值能到额定电流的8%左右折算到发热绕组温升至少高出8到12摄氏度。散热设计紧一点的系统这个量级直接逼着你降额使用。然后是转矩脉动。5次和7次谐波相互作用会在6倍基频处产生转矩纹波。转速高的时候不明显一旦低速重载电机就会表现为“一颤一颤”的位置控制场景下这种脉动直接体现在末端定位精度上。做机器人关节或者直驱转台的工程师对这个应该深有体会。还有电压利用率的问题。谐波分量要占用一部分母线电压裕量。同样的直流母线电压谐波大的策略实际能输出的基波电压幅值上限会低一些表现就是高速弱磁区出力不足。2. 四矢量调制的基本原理与推导2.1 什么是“四矢量”为什么是四个四矢量调制顾名思义每个PWM周期选择4个基本电压矢量来合成目标电压矢量。和三相的“三矢量”相比多了一个自由度这个自由度可以用在z1-z2平面约束谐波。双三相逆变器的64个基本矢量按照在α-β平面上的幅值大小可以分成几组大矢量幅值等于0.644倍直流母线电压一共有12个。中矢量幅值等于0.333倍有12个。小矢量幅值等于0.173倍有24个其中12对互为相反方向。零矢量幅值0有2个全开和全关状态对应的冗余矢量。四矢量调制最经典的方案是“一个大矢量、两个中矢量、一个零矢量”的组合。这四个矢量在一个扇区内按特定的顺序和比例作用既能合成目标电压又能在z1-z2平面把合成电压的伏秒积约束为零。为什么选“大中中零”这个组合而不是别的因为经过数字求解这个组合在α-β平面上的线性调制范围最宽同时z1-z2平面的谐波电压为零。本质上是在“合成能力”和“谐波抑制”之间取了一个最优折中。2.2 扇区判断与基本矢量选择双三相SVPWM的扇区划分不是6个而是12个每个扇区30度。扇区判断的原理和三相一样都是通过α-β平面上的电压分量符号和比值来判断只是判断条件从6等分变成12等分。一种实用的判断方法是先把参考电压Uα和Uβ变换到60度坐标系也叫g-h坐标系然后通过g和h的值来定位扇区。g-h坐标系的定义是g轴与α轴夹角0度h轴与α轴夹角60度g Uα - Uβ / √3h 2Uβ / √3根据g和h的符号以及gh的结果可以唯一确定12个扇区中的位置。我举个例子。假设目标电压落在第1扇区0度到30度之间这个扇区内参与调制的四个矢量是大矢量U66开关状态110110这里用两个三相桥臂的状态来表示中矢量U48开关状态101000和U40开关状态100010零矢量U00全零状态这四个矢量有一个共同特点在z1-z2平面上的映射都落在同一条直线上。这是它们能被选入同一个扇区参与调制的前提。选矢量的核心约束不是“离目标矢量近”而是“z1-z2平面投影的几何关系满足消谐条件”。用白话说你选的这几个矢量合出来的α-β电压是你要的同时它们在另一个平面上的“副作用”刚好互相抵消。这就是四矢量调制能压住谐波的奥妙。2.3 作用时间与公共量推导扇区判断做完接下来是硬骨头计算每个矢量的作用时间。设目标电压矢量为Vref幅值为|Vref|相角为θ。在一个PWM周期Ts内四个矢量的作用时间分别为T1、T2、T3、T0满足T1 T2 T3 T0 Ts在α-β平面上写伏秒平衡方程V1×T1 V2×T2 V3×T3 Vref×Ts在z1-z2平面上写约束方程V1z×T1 V2z×T2 V3z×T3 0这里V1z、V2z、V3z是各矢量在谐波平面上的投影值通过坐标变换矩阵计算得出每个扇区是固定的常数。以第1扇区为例把四个矢量的坐标代入可以化简得到T1 |Vref|×Ts×sin(π/6 - θ) / (0.644×Udc) T2 √3×|Vref|×Ts×sin(θ) / (0.333×Udc) T3 √3×|Vref|×Ts×sin(π/6 - θ) / (0.333×Udc)注意T1和T3的表达式里都有同一个因子sin(π/6 - θ)T2表达式里是sin(θ)。这就是热词里提到的“公共量”概念的来源——把sin(π/6 - θ)和sin(θ)分别计算一次再乘上对应的系数就能得到各矢量时间。这样做的好处是在DSP或者MCU里计算量小而且便于做成查表优化。定义两个公共量X sin(π/6 - θ) / 0.333Y sin(θ) / 0.644则四个矢量的时间可以统一写成T1 (|Vref|×Ts) × Y T2 (√3×|Vref|×Ts) × X T3 (√3×|Vref|×Ts) × X×0.333/0.644 T0 Ts - T1 - T2 - T3从实现的角度看真正需要实时计算的只有X和Y两个中间变量剩下的都是常系数乘法和减法。这就是“两个非零电压矢量的作用时间所需的中间变量(公共量)推导过程”的完整逻辑。工程上有一个细节必须注意T2和T3表达式里的系数涉及0.333和0.644的比值实际是不同幅值组矢量在α-β平面上的标幺值。有些论文直接用矢量幅值比有些用相电压峰值比换算方式不同算出来的系数会有数值差异。自己实现的时候最好从头到尾统一用标幺值体系避免混用导致比例错误。2.4 零矢量时间分配的策略T0是零矢量作用时间。别小看这个“多出来的”时间分配方式直接影响电流纹波和开关频率。最简单的做法是把T0平均分给开关周期的起点和终点也就是标准的中心对称PWM。这样做的好处是PWM波形对称电流纹波小是工程上最稳妥的选择。另一种策略是把T0分成三段部分放在周期中间部分放在两端用来优化开关次数。双三相逆变器有6个桥臂如果矢量切换顺序安排不当一个PWM周期里开关动作次数会增加导致开关损耗上升。以一个扇区为例常见的矢量顺序是U00 → U48 → U66 → U40 → U00这个顺序保证任意两次切换之间只有一个桥臂改变状态6个桥臂在一个开关周期内正好各动作两次开关频率严格等于PWM频率没有多余动作。2.5 调制比范围与过调制处理四矢量调制的线性调制范围用调制比m表示m |Vref| / (0.644×Udc)可以推到约1.0对应相电压基波幅值约为0.577倍Udc正好是SVPWM的理论极限。如果目标电压超过这个范围就需要进入过调制。过调制策略有两种思路一是保持四矢量调制框架只是把超出的部分截断把时间重新归一化。这种方法实现简单但会重新引入谐波只适合短时运行。二是切换到方波模式或者准方波模式把目标电压的角度作为主要控制量幅值不再线性跟随。这种方法适合高速弱磁区需要对电流环做额外的抗饱和处理。工程上我的建议是四矢量调制只在调制比小于0.95的区间使用留出5%的余量给动态响应。超过这个区间再考虑过调制不要贪图那一点电压利用率。3. 四矢量调制在STM32上的落地实现3.1 硬件结构与PWM输出方案STM32F103系列做双三相电机控制很多人第一反应是“资源够不够用”。我的结论是做算法验证和低速样机完全够用做高性能伺服勉强但不至于不能用。F103有多个高级定时器TIM1和TIM8各有6路互补PWM输出刚好驱动两组三相全桥。要注意的是两组PWM的载波必须同步否则两套绕组的中心对齐时间不一致会在电流环采样点产生误差。我实际用过一种方案TIM1做主定时器输出第一组三相PWM同时把TIM1的更新事件作为触发源接到TIM8的从模式让TIM8跟着TIM1同步更新。这样两组PWM的载波相位严格对齐。配置要点如下TIM1和TIM8都配置成中央对齐模式计数方向向上和向下交替。TIM8的时钟源选择外部触发模式触发源选TIM1的更新事件。两组PWM的死区时间根据IGBT或者MOS管的关断延迟设定一般在几百纳秒到2微秒之间。采样的关键是电流采样点必须避开PWM开关动作的瞬间。中央对齐模式下计数器到达周期值或零值时所有开关都处于确定状态这时候采样最安全。所以电流采样要么在TIM1更新中断里做要么在ADC注入通道由TIM1的更新事件触发外部采样。3.2 扇区判断代码实现扇区判断我推荐用g-h坐标系法代码量小还方便后续时间计算的公共量复用。// 双三相SVPWM扇区判断(12扇区), g-h坐标系 // 输入: Ualpha, Ubeta 标幺值 // 输出: sector (0~11) int svpwm12_sector_calc(float Ualpha, float Ubeta) { float g Ualpha - Ubeta * 0.577350269f; // 1/sqrt(3) float h Ubeta * 1.154700538f; // 2/sqrt(3) float gh g h; int sector 0; if (h 0.0f g 0.0f gh 0.0f) sector 0; // 0 ~ 30 deg else if (h 0.0f g 0.0f gh 0.0f) sector 1; // 30 ~ 60 deg else if (h 0.0f g 0.0f gh 0.0f) sector 2; // 60 ~ 90 deg else if (h 0.0f g 0.0f gh 0.0f) sector 3; // 90 ~ 120 deg else if (h 0.0f g 0.0f gh 0.0f) sector 4; // 120 ~ 150 deg else if (h 0.0f g 0.0f gh 0.0f) sector 5; // 150 ~ 180 deg // 剩下六个扇区实际上是前六个扇区按周期复制, 加一个旋转判断即可 // 这里为了阅读方便, 直接列完: if (h 0.0f g 0.0f gh 0.0f) sector 5; // ... 实际代码用周期取模, 不做展开 if (Ubeta 0.0f) { return sector % 6; } else { return (sector 6) % 12; } }严格说g-h坐标只能在0到180度范围内完成两两判断剩下半个周期需要对Uβ的符号做一次镜像。上面代码的核心逻辑是先算出基本扇区再根据Uβ的正负决定要不要加6。实测下来这个写法在F103上运行时间约10微秒对10kHz的PWM周期没有压力。3.3 作用时间计算与PWM寄存器装载作用时间计算放到中断服务函数里和扇区判断一起完成。关键在于把“公共量”的计算前置避免每个扇区重复计算三角函数。float angle atan2f(Ubeta, Ualpha); // 目标电压相角 float sin_theta sinf(angle); float sin_30_minus_theta sinf(PI/6.0f - angle); // 公共量 float X sin_theta * 1.552f; // 1/0.644 float Y sin_30_minus_theta * 3.003f; // 1/0.333 float Vref sqrtf(Ualpha*Ualpha Ubeta*Ubeta); float base Vref * (PWM_PERIOD - DEAD_TIME) / 0.644f; float T1 base * Y * 0.333f; float T2 base * X * 1.732f; float T3 base * X * 1.0f; float T0 (PWM_PERIOD - DEAD_TIME) - T1 - T2 - T3;这里的常数0.333、0.644都是矢量幅值的标幺值换算关系需要和自己用的坐标变换矩阵严格对应。如果发现低速时电流波形对称但是幅值不对优先检查这个系数。得到T1、T2、T3、T0之后需要根据扇区找到对应的开关状态换算成三组比较寄存器的值。这一步最容易出错因为双三相的6个桥臂状态到比较值的映射关系比三相多了一倍的信息。3.4 查表法与查表的边界为了降低F103的CPU负载扇区判断和时间计算都可以做成查表。查表的输入是角度输出是各个矢量的作用时间因子。查表粒度我建议取每1度一个点全表360个点。每个点存储X、Y两个预计算值用int16存内存开销不到1.5KB。查表模式下中断服务函数里只需要做乘法和加法省掉了sinf和atan2f调用单次计算时间能从10微秒降到3微秒以内。查表有一个坑角度分辨率1度对应的时间分辨率大约0.2%的PWM周期在10kHz载波下就是0.2微秒。对于高精度伺服应用这个量化误差会在电流波形上表现为微小台阶FFT上会出现较高的高频噪声边带。所以查表适合对动态性能要求不苛刻的场景高性能场合我建议老老实实用实时计算。4. 谐波指标验证与调试实录4.1 实验平台与测试条件我在实验室搭过一套验证平台参数如下双三相PMSM额定功率10kW额定转速1500rpm极对数4直流母线电压540VPWM频率10kHz电流环带宽1kHz转速环带宽50Hz。电流采样用两个LEM模块分别测两套绕组的V相和W相电流U相电流通过计算得到——注意双三相系统六个桥臂都要有相电流信息如果只采两相第三相依靠三相电流和为零来推算在两套中性点隔离的双三相结构里不成立必须两组绕组各自独立采样。测试时用转矩开环和转速闭环两种模式分别跑记录了300rpm、750rpm、1500rpm三个工况下的相电流FFT结果。4.2 三矢量方案与四矢量方案的FFT实测对比这是整个项目里最直观的结果。同样在750rpm、额定转矩工况下谐波次数传统三矢量方案四矢量调制方案基波100%100%5次7.2%0.8%7次5.1%0.9%11次3.0%0.6%13次2.2%0.5%THD12.6%2.1%数据说话。四矢量调制把5次和7次谐波压下去一个数量级THD从12.6%降到2.1%。这个幅度与理论预期完全吻合因为z1-z2平面的电压伏秒积被置零了谐波也就失去了能量来源。在1500rpm额定转速下四矢量方案的THD略回升到2.8%左右原因不是调制策略失效而是死区效应和采样延迟的影响在高频段放大。这是另一个需要单独处理的问题和SVPWM本身关系不大。4.3 波形细节电流纹波与零点畸变谐波指标好看不等于电流波形也完美。四矢量调制下的相电流波形在过零点附近偶尔会出现一点畸变我用了好几天才定位到原因。问题出在死区效应。IGBT死区时间导致实际输出电压和理想指令之间存在偏差这个偏差在相电流过零附近因为极性方向翻转而变得非线性。传统三相SVPWM里工程上常用死区补偿电路或者电压前馈来消除双三相系统里同样需要做而且因为有两套桥臂需要分别对两组三相做补偿。最省事的补偿方案是电流极性判断加电压修正量根据每相电流的极性向PWM比较寄存器加上或减去一个和死区时间对应的修正值。这个修正值在电流过零附近会抖动需要加滞回否则会引入额外噪声。4.4 变工况下的谐波动态响应静态FFT是基础更关键的测试是动态工况。我做了两个动态测试一是转速从300rpm以1000rpm/s的斜率升到1500rpm全程连续采样电流FFT二是带额定负载突加突卸观察谐波电流的动态峰值。四矢量调制在转速变化过程中5次和7次谐波没有明显尖峰说明调制策略在调制度变化时依然保持对谐波平面的约束。这是“调制度连续变化时四矢量策略仍然收敛”的直接证据。不过有一个现象值得注意在低速300rpm工况四矢量方案的谐波抑制效果不如中高速明显THD大约在4%左右。原因不是调制策略问题而是低速下反电动势小死区和谐波电流相对更显著。解决方向是提高电流采样精度或者加装编码器做更精确的电流相位补偿。5. 常见问题与排查技巧实录5.1 扇区判断“跳变”问题很多人在双三相SVPWM上踩的第一个坑是扇区判断在边界处跳变导致PWM波形毛刺。我排查过一批类似问题最后定位到是浮点比较精度和过零判断的问题。比如目标电压角度在0度和30度边界附近由于坐标变换的量化误差g和h的符号可能来回变化导致扇区号在相邻扇区间抖动。解决方法是给扇区判断加滞回。具体做法是在判断符号时引入一个死区阈值例如把判断条件从g 0改为g EPS其中EPS取0.005左右。这个值太大影响扇区判断精度太小治不住抖动需要根据标幺值范围调。5.2 时间计算结果负值或超过周期值T1、T2、T3计算出来出现负值或者加起来大于Ts常见原因有两个。第一是扇区判断错误。扇区不对选用的矢量和实际目标电压不匹配伏秒平衡方程自然解不出正时间。这种问题在低速调制度低的时候不明显调制度一上来就暴露。第二是过调制。在不该进入过调制的区域强行输出时间计算就会溢出。正确的做法是检测到T1 T2 T3 Ts时把比例缩放回1并且给出过调制标志交给上层处理。不要在原时间比例上做修正否则输出波形会突变。5.3 z1-z2平面谐波电压不为零四矢量调制有一层隐含假设每个扇区内选出的四个基本矢量在z1-z2平面上的投影要满足伏秒平衡。如果实际程序里矢量表拼错了或者扇区和矢量对应关系错位谐波平面的约束就失效了。排查方法很直接在实验里只输出零矢量和单个非零矢量用示波器看相电压波形和理想状态的PWM波形对比确认每个矢量的开关状态映射正确。这个测试不依赖电流闭环能快速定位是矢量表问题还是时间计算问题。5.4 两套绕组电流不平衡双三相电机调试时经常发现两套绕组的电流幅值不一致而且呈周期性变化。这个问题不一定是SVPWM的锅可能是电机本身两套绕组参数有差异或者两套逆变器的开关管压降不一致。如果在SVPWM层面找原因一个常见问题是两套PWM的载波没有严格同步导致采样点掠过了不同的开关状态电流反馈值失真。我用TIM1和TIM8同步方案之后这个现象明显改善。5.5 调试工具链调试双三相SVPWM示波器是标配但我更推荐用带FFT功能的电流探头配合上位机软件做长期记录。STM32F103上可以把电流采样值通过DMA连续存到内存再通过串口上传到PC用Python或者MATLAB离线分析FFT。实测在10kHz采样率下连续记录1秒的数据对瞬态分析和稳态THD评估都够用。6. 方案对比与工程选型心得6.1 四矢量调制、五矢量调制与占空比法的取舍双三相SVPWM不只是四矢量一种方案。业内还有五矢量调制、基于载波的双三相调制、以及各种改进型。五矢量调制在四矢量的基础上增加一个中矢量理论上可以进一步降低电流纹波但代价是算法复杂度和开关损耗明显上升。我在一台项目上试过五矢量FFT结果比四矢量略好THD从2.1%降到1.6%但中断占用时间增加了将近一倍最终为了系统实时性还是回到了四矢量。占空比法载波调制实现简单直接为每个桥臂计算占空比适合资源紧张的平台。缺点是谐波抑制能力依赖离线计算的占空比注入表工况变化时适应性差。我的选型原则是这样的需求场景推荐方案理由高性能伺服四矢量调制谐波抑制好实现复杂度可控资源受限MCU载波调制加离线补偿实现简单实时性Hao极致电流品质五矢量调制THD最低但复杂度和损耗高教学与原型验证传统三矢量移植先跑通再优化6.2 F103平台就这么“卡脖子”吗很多初学者觉得STM32F103太老、资源太少不适合跑双三相电机控制。我在多个项目里验证过如果只用F103做SVPWM、电流环和编码器读取CPU负载大约在60%左右还有余量给简单的上位机通信。但是如果要同时跑无传感器控制、参数辨识、高级观测器等F103就会比较吃力。更好的选型是STM32G474它自带多个高级定时器和浮点单元跑双三相四矢量SVPWM加无传感器控制CPU负载可以压在30%以内。如果是从F103往上迁移算法结构可以无缝移植只需要把底层定时器和ADC配置改掉。6.3 “谐波减速器模型”这个热词和我这有什么关系搜索热词里有“谐波减速器模型”有人可能会困惑为什么双三相电机的谐波问题和减速器放一起。其实这里有个工程上的连锁反应双三相电机用于机器人关节时往往搭配谐波减速器使用。电机的转矩脉动谐波导致的会直接激励减速器产生震动和噪音反过来减速器的非线性又会在电流环里表现为周期性负载扰动。我做机器人关节项目时前期只优化SVPWM谐波中期发现减速器的低速摩擦补偿也至关重要。两者的关系是先通过四矢量调制把电机的谐波转矩压下去才能把减速器的震动问题暴露出来并做针对性补偿。所以做这类系统的同学建议同步关注减速器模型不要只盯着电流波形。6.4 从SVPWM到电流环带宽的整体调优最后给一个整体调优思路。SVPWM只是执行层电流环带宽才是决定系统动态性能的核心。电流环PI参数整定我在双三相系统里推荐这么操作先把电流环比例增益从零往上调观察电流阶跃响应直到出现轻微超调再退回去20%左右作为最终值。积分增益先用经验值再根据稳态误差微调。SVPWM的采样延迟对电流环带宽的影响要格外重视。双三相系统每个PWM周期需要采样6路电流、执行两套坐标变换中断执行时间比三相系统长不少。如果中断时间超过载波周期的一半等效采样延迟会显著降低电流环的相位裕度表现出来就是转速越高电流环越容易震荡。我实测过一组数据在10kHz载波下电流环中断执行时间从15微秒增加到50微秒电流环能达到的带宽从900Hz降到450Hz。如果发现同样的PI参数在双三相系统上比三相系统更容易震荡优先怀疑中断执行时间其次是采样延时补偿。7. 还需要注意的隐性成本7.1 电流传感器的数量与精度双三相电机需要6个相电流信息才能完整做矢量控制。有些低成本方案想用母线采样电阻重构三相电流在双三相系统里难度翻倍因为两套绕组的中性点状态不同母线电流的关联关系更复杂。我在一台样机上用两个双电流传感器模块分别测两套绕组的B相和C相电流A相由B、C之和取负得到前提是两套绕组各自中性点独立引出。如果中性点连在一起就不是这么简单的代数关系了。7.2 dq轴电感交叉耦合双三相PMSM的dq轴电感矩阵不是纯对角的尤其是两套绕组之间存在互感。这会在高速运行时引入交叉耦合电压表现为dq轴电流互相干扰。处理办法是在电流环PI输出加一个解耦项把交叉耦合电压前馈补偿掉。这个解耦矩阵的参数可以从电机有限元模型获取也可以在实验台上通过注入信号在线辨识。7.3 死区补偿与低开关频率补偿前面提过死区补偿这里再展开一点。四矢量调制下每个PWM周期的开关切换点更多死区效应分析更复杂。如果死区时间占周期比例超过1%建议一定要做死区补偿否则谐波指标会退化很快。低开关频率下死区效应和采样延迟的影响更加突出。如果PWM频率低于5kHz建议单独评估谐波指标不要拿10kHz下的参数直接套用。8. 最后的实操建议双三相电机SVPWM谐波大这个问题绝大多数情况不是玄学而是一个“矢量选择维度缺失”的工程问题。你选用四矢量调制本质上是为了在α-β平面和z1-z2平面之间建立显式的电压约束把物理上存在的额外谐波通道堵死。这个思路比单纯调整PI参数、增加滤波器更根本。我个人在实际项目中踩过不少坑最深的体会有三条第一四矢量调制的作用时间推导务必自己从头完整演算一遍不要只背公式。各矢量的坐标变换和系数换算每个项目的标幺体系可能不同直接抄别人代码极易出现比例错误。第二扇区判断和矢量映射是最容易出错又最难排查的环节。建议先用低速开环把每个扇区的输出波形单独验证一遍再合入闭环调试不要一上来就闭环。第三实验数据要保存完整。FFT分析、PWM波形、电流采样记录这些数据在排查问题时价值巨大。我每次调完一个参数都会把Hex文件和测试数据一起归档后来很多问题都是靠回溯历史数据找到原因的。这套四矢量调制代码和调试方法在我自己的双三相PMSM平台上已经稳定运行大半年。如果你正准备从传统三相SVPWM迁移到双三相控制建议先不要急着追求谐波指标最低先把调制策略跑对、扇区映射跑对、电流采样跑对再去压谐波。步步为营比一步到位靠谱得多。
返回列表