上篇文章把三相PMSM的FOC数字实现从头到尾捋了一遍从电流采样标定到SVPWM占空比写入再到PI参数整定评论区里问得最多的是一个问题多相电机怎么办正好这段时间在调试一台“三六相PMSM”趁热打铁把这个系列的第二篇写出来。聊一聊从三相FOC扩展到六相FOC到底多出来哪些事哪些是简单复制哪些地方照搬会翻车。先解释一下标题里的“三六相PMSM”。这不是某个非标型号而是指电机内部有两套三相绕组一共六个相绕组、六个相电流行业里更常见的叫法是六相PMSM或者双三相PMSM。工程上有人把这种“两套三相绕组”的拓扑简写成“三六相”意思是三相互相错开、组合出六个相。第一篇文章里我们解决的是单套三相绕组怎么转起来这篇要解决的问题是六相电机的六个桥臂怎么协调、两套绕组怎么解耦、数字控制器里要准备几个电流环以及你最需要的踩坑清单。1. 三六相PMSM的拓扑与基本盘先搞懂电机电控长什么样1.1 绕组结构与“三六相”命名的由来有些入门的朋友看到“三六相”三个字会习惯性念成“三十六相”然后觉得这个电机一定特别高级。其实它的本意非常简单前面说了电机里的两套三相绕组在空间上错开30度电角度每一套都有A、B、C三相加起来就是A1、B1、C1、A2、B2、C2六个相。有些厂家的技术文档里会把这种电机写成“3相×2组”念快了就成了“三六相”。那么这个结构和单套三相绕组最大的区别是什么不是多接了三根线而是电机内部有两个可以独立控制的磁动势来源。两套绕组在定子铁芯里共同产生旋转磁场如果控制得当基波磁动势叠加输出转矩比同体积三相电机更高。同样的输出功率下每一相的电流可以降下来功率管的电流应力更小。这种拓扑在工程上受欢迎还有另一个原因容错能力。如果其中一套绕组对应的桥臂出现故障另一套绕组仍然可以维持部分转矩输出这在电动汽车、船舶电力推进、矿山提升这类对安全等级有要求的场合非常值钱。三相电机一旦缺相就比较麻烦六相电机相当于多了一条“半条命”。我记得第一次拿到这种电机时第一反应是“这玩意能不能当成两台三相电机分开控制”理论上可以近似但实际运行起来问题很多两套绕组在同一个定子铁芯上互感强烈分开控制很容易出现环流。所以行业里最终形成了统一的做法用矢量空间解耦的理想坐标变换把六相系统分解成可以独立控制的平面再在平面上做类似三相FOC的控制。这个展开放在第2章。1.2 双Y移30度的经典拓扑选型“三六相PMSM”最常见的是双Y移30度结构。所谓双Y就是两套三相绕组各自构成一个星形连接分别有自己的中性点N1和N2。两个中性点可以相互隔离也可以接到一起实际绝大多数电机选择隔离。两个Y之间互差30度电角度这也是这种电机被叫做“移30度双Y”的原因。为什么要移这个30度这是绕组的排列方式直接影响谐波磁动势的抵消。两套三相绕组错开30度后5次、7次这类6k±1次谐波会在合成磁动势中部分抵消电机的转矩脉动、铁耗和噪声都比单三相绕组有明显改善。如果两套绕组完全对齐那其实就是把一套三相绕组拆成两半分别出线并没有获得谐波抵消的好处反而增加了驱动器的复杂程度不划算。选型时还有一个关键点两个中性点是否连接。如果中性点隔离那么两套三相子系统之间理论上没有零序电流通路控制时会少一个麻烦。如果两个中性点连接在一起零序电流有了回路就必须在控制算法里额外增加零序电流抑制否则会莫名其妙出现很大的环流甚至烧母线电容。我在项目选型时把“隔离中性点”作为硬性指标就是为了少惹这部分麻烦。1.3 数字控制器视角下的资源变化从数字实现的角度看三六相PMSM和三相PMSM的差异不是“有点多”而是“多了一整套三相通道”。三相FOC需要的是三个桥臂、三路相电流采样、两路电流PI和一路速度PI。六相FOC需要的是六个桥臂、六路相电流采样至少需要能重构出六相电流的信号、至少四路电流PI和一路速度PI。此外PWM外设也从三相变成了六相。很多MCU的定时器能输出三相互补PWM但六个桥臂需要的是两组三相PWM且两组之间还要做到同步触发、同步更新占空比。我看过一些方案把两个独立的定时器分别做主从同步工作一段时间后因为时钟漂移产生相位误差电流波形会出现周期性的鼓包。所以选控制器时要优先挑支持多路PWM并带有硬件同步机制的主控不要指望软件把相位误差压得完美。2. 六相坐标变换与双d-q模型数字实现的理论地基2.1 从六相到αβ平面Clarke变换到底在变什么三相电机有Clarke变换把三个电流映射到两相静止坐标系。六相电机同样有Clarke变换只不过是把六个相电流映射到四个平面αβ平面、z1z2平面、o1o2零序平面。我每次给别人讲这个变换的时候喜欢用快递分拣来类比一个包裹车上有六个包裹Clarke变换不是把六个包裹合并成两个而是把它们按“目的地”拆到不同的分拣线上有些线需要重点管理有些线只需要监视甚至直接忽略。对于双Y移30度绕组经过适当的变换矩阵基波以及11次、13次等6k±1次谐波会被映射到αβ平面这部分是产生旋转磁动势和电磁转矩的主力。而3次、9次等6k±3次谐波会被映射到z1z2平面这部分不产生有效转矩只会造成铜耗和转矩脉动。剩下的零序分量落在o1o2平面中性点隔离时没有通路可以放在一边。控制目标因此变得非常清晰αβ平面里的电流要精准受控它决定了转矩z1z2平面里的电流要尽量压到零它属于“有害噪声”。这句话是整个六相FOC的定海神针后面所有调试工作都围绕着它展开。坐标变换的矩阵写法这里不展开完整公式实际代码里我更推荐把六相Clarke变换预计算出常数矩阵然后做向量乘。不要在现场临时算正弦余弦那会浪费MCU宝贵的周期。下面的C语言片段展示了把六个采样电流变换到αβ和z1z2的框架typedef struct { float alpha, beta; float z1, z2; } SixPhaseCurrentStationary; void clarke_6phase(const float *i, SixPhaseCurrentStationary *out) { // 矩阵系数按双Y移30度绕组预计算 // 这里省略了具体的 sin/cos 常量直接以系数数组形式给出 out-alpha 0.3333f * (i[0] - 0.5f*i[1] - 0.5f*i[2] 0.8660f*i[3] - 0.8660f*i[4]); out-beta 0.3333f * (0.8660f*i[1] - 0.8660f*i[2] 0.5f*i[3] 0.5f*i[4] - i[5]); out-z1 0.3333f * (i[0] - 0.5f*i[1] - 0.5f*i[2] - 0.8660f*i[3] 0.8660f*i[4]); out-z2 0.3333f * (-0.8660f*i[1] 0.8660f*i[2] 0.5f*i[3] 0.5f*i[4] - i[5]); }注意这个代码只是演示框架用到了三相绕组之间的对称性真正的工程矩阵需要根据你电机的实际绕组布局做归一化。2.2 双d-q模型需要几路电流环完成Clarke变换之后下一步是旋转变换。αβ平面需要变换到同步旋转坐标系得到d轴和q轴电流这跟三相FOC完全一样。z1z2平面也需要做一次旋转变换得到一组对应的谐波d-q电流。于是整个控制器的电流环数量跟着翻倍αβ平面对应的d轴电流环、q轴电流环z1z2平面对应的d轴谐波电流环、q轴谐波电流环加上最外圈的速度环一共5个PI调节器。相比三相FOC多了两个谐波平面电流环。很多人第一次接触六相FOC时会问z1z2平面的PI目标值设成多少答案很简单全部设零。谐波平面里的d-q电流目标值就是零把z1z2平面的谐波电流死死压住波形自然干净。这两个PI的带宽不需要像主电流环那么高因为谐波分量的频率远低于开关频率带宽太高反而容易引入噪声。实际调试中我通常把z平面PI的带宽取主电流环的三分之一到二分之一。2.3 中性点连接方式带来的控制差异前面提过中性点隔离和共中性点的区别这在数字实现里直接体现为“要不要给零序轴设计控制器”。隔离中性点的电机o1o2平面没有电流通路软件里直接把零序分量丢弃就行。共中性点的电机零序电流可以流通需要在o1o2平面额外增加零序电流环或者至少增加零序电流的监测与限幅。从工程便利度排序隔离双Y最优、共中性点双Y次之、单Y六相最麻烦。单Y六相没有第二个中性点全部相电流都要通过同一个中性点回流控制模型的耦合更强对PI参数更敏感。所以我建议初学者在搭第一台三六相PMSM平台时尽量选隔离双Y形式的样机把精力集中到主回路控制上不要一上来就跟零序环流缠斗。3. 六相SVPWM的数字实现从两套三相开始3.1 六相逆变器的开关状态和基本矢量六相逆变器有六个桥臂、64个开关状态。在αβ平面上这些开关状态会生成一系列电压矢量其中幅值最大的12个非零矢量把平面分成12个扇区。如果按照三相SVPWM的思维你会想做一个12扇区的统一调制器找到每个扇区相邻矢量并计算作用时间。这个思路完全正确也是六相最优调制的基础。但说实话我刚开始做数字实现时并没有一步到位直接用12扇区最优调制而是选了更稳妥的“双套三相SVPWM”方案。理由是两套绕组中性点隔离空间错开30度可以先把六相电机当作两台三相电机分别跑标准三相SVPWM再在同一个PWM周期里把两套占空比合并输出。这样做出来的调制结果是次优的母线电压利用率会略有损失但实现简单、调试直观而且可以直接复用上一篇三相FOC里写好的SVPWM代码。等整个系统的电流环和速度环都稳定了再考虑升级到统一的六相最优调制那是性能优化阶段的事情。3.2 双套SVPWM的占空比计算和零序注入双套三相SVPWM具体怎么算占空比对A1B1C1这套绕组来说输入给它的是αβ平面的目标电压这跟在标准三相电机里做SVPWM完全一样。对A2B2C2这套绕组输入的是同一组αβ电压目标但两套绕组的空间位置相差30度所以实际的相电压指令要做一个30度的旋转变换再送去标准SVPWM模块。这里有个容易踩的坑两套SVPWM各自独立注入零序出来的两套PWM波形在时间轴上可能错位导致母线电流里有明显的开关频率纹波。我在第一次台架实验时遇到过母线电流毛刺大得吓人。解决方法是让两套SVPWM共用同一个零序基准或者简单点直接把两套三相的占空比计算同步到同一个PWM定时器周期内保证所有桥臂的开关动作对齐。零序注入的公式和三相电机一致把三相电压指令的最大值和最小值取平均作为零序分量再叠加到三相指令上。实测下来线性调制区大约能把相电压基波峰值扩展到直流母线电压的0.577倍约等于标准SVPWM的1.15倍过调制上限。如果你真的把母线电压压得很死再去研究12扇区最优调制收益才会明显。3.3 为什么不用最大矢量直接调制有些论文里强调六相SVPWM要用αβ平面最大幅值的12矢量不要用小矢量这是有原因的。六相电机不同平面的电压矢量幅值不一样某些开关状态在αβ平面幅值大在z1z2平面也有不小的投影。如果用这些状态调制会把谐波电压也注入到z1z2平面干扰谐波电流环。最优调制要做的事情就是在保证αβ平面输出目标电压的同时把z1z2平面的电压投影尽量减少。但在双套三相SVPWM的框架下这个问题天然简化了每套三相SVPWM自己用的就是本套绕组的标准电压矢量两套合成后z1z2平面的电压分量已经比较小。这就是为什么主流工程方案都从双套三相起步因为它把最复杂的“矢量选择”问题外包给了我上一篇写过的老代码。4. 数字控制器实现流程从三相到六相的工程改造4.1 中断频率与延时预算六相电机因为相数多开关损耗分布到六个桥臂上但总的开关次数比三相多了不少。常用载波频率10kHz到12kHz控制周期和PWM周期同步。六路电流采样通常安排在PWM下溢或周期中点避开上下桥臂开关动作的噪声窗口。整个控制链路的延时预算大概是电流采样需要约1到2微秒ADC转换约1到3微秒坐标变换加5个PI调节器加双套SVPWM在带浮点单元的MCU上大约耗时15到25微秒。也就是说从采样到占空比更新接近一个控制周期。这个延时在整定电流环PI时不能忽略否则算出来的带宽会偏冒进。我的经验是先用延时近似为1.5个控制周期代入带宽估算再实测电流阶跃响应微调。4.2 电流环PI参数怎么给Ld、Lq与谐波电感三相FOC的电流环PI参数设计思路同样适用于六相主电流环先得到d、q轴电感Ld、Lq和定子电阻Rs然后按“零极点对消”的常规做法计算。工程简化公式一般是Kp Ls / (1.5 * Ts) Ti Ls / Rs其中Ts是控制周期Ls对应d轴或q轴电感两个轴要分别计算。算完后实测电流阶跃如果振荡把Kp往下调一半再试。六相电机的主平面电感和三相电机在同一量级这套公式依然好使。但z1z2平面的情况完全不同。谐波平面的等效电感通常比主平面电感小一个数量级甚至更小。这意味着同样的PI参数在z平面上会产生非常高的电流带宽很容易振荡。所以z平面PI的Kp必须显著降低积分作用也可以放慢。我调试时先把z平面的Kp设置为αβ平面Kp的五分之一到三分之一再根据电流波形微调。这里给出一个参数配置的对照表格方便参考控制对象电感经验值Kp起始系数KI起始系数调试重点αβ平面d轴电流环Ld电机定子电感1.0基准1.0基准阶跃响应无超调αβ平面q轴电流环Lq电机定子电感1.0基准1.0基准转矩响应快且平稳z1z2平面d轴谐波电流环0.1~0.2倍Ld0.2~0.3基准0.5基准谐波电流幅值收敛z1z2平面q轴谐波电流环0.1~0.2倍Lq0.2~0.3基准0.5基准无高次振荡速度环转动惯量折算0.05~0.1基准0.1基准抗负载扰动这个表格是起点不是终点。每台电机参数都有差异一定以实测波形为准。4.3 代码框架改造把两套绕组缝合起来从三相FOC代码迁移到六相FOC最忌讳的是把整套算法复制两份分开跑。正确的做法是把两套三相绕组放到同一个控制任务里共享同一个角度、同一份PI调节器数组只在坐标系变换和PWM写入时做“两套展开”。定义数据结构时我会把六相电流拆成两组三相便于复用现有的三相坐标变换函数typedef struct { float a, b, c; } ThreePhaseCurrents; typedef struct { ThreePhaseCurrents sys1; ThreePhaseCurrents sys2; } SixPhaseCurrents;主控制任务的结构大致如下读取六路ADC填入SixPhaseCurrents对sys1和sys2分别做三相Clarke变换得到两套αβ电流根据两套绕组互差30度把sys2的αβ电流旋转到sys1的坐标系下再合并成六相αβ电流做六相Clarke变换得到αβ和z1z2平面的电流分别对αβ平面和z1z2平面做Park变换运行4个电流PI调节器对两套d-q电压做逆Park变换、逆Clarke变换得到各相的静止电压分别对两套三相电压跑标准SVPWM输出6路占空比PWM定时器下溢中断里更新占空比完成闭环。上面步骤里第3步容易让人绕晕。简单说两套绕组的电流最终要统一到同一个αβ坐标系下所以sys2的电流要先做一个30度坐标旋转再和sys1相加。这个旋转矩阵是常系数计算量很小。4.4 标幺化与数值处理三相FOC里通常以额定电流峰值为电流基值额定母线电压为电压基值。六相系统中为了避免d-q电流数值过大或过小电流基值依然取单套绕组的相电流峰值这样两套绕组的电流在标幺化后都在合理范围内。电压基值取直流母线电压的某个比例具体以你的代码习惯为准。我个人的建议是全系统统一采用单位标幺值所有PI参数也按照标幺系统整定。这样做的好处是更换不同功率等级的电机时PI参数的变化范围很小方便经验迁移。5. 台架调试实录常见问题与排查技巧5.1 电流波形总有一层高频毛刺第一次上电d-q电流波形看起来大方向对但上面叠了一层细密的毛刺频率接近开关频率。这种问题在六相系统里比三相更常见因为六路PWM开关瞬间的共模干扰更强而且ADC采样时刻稍有误差就会采到开关噪声。排查方法很简单先用示波器看PWM下溢信号和ADC采样触发信号之间的相位关系确认采样时刻位于PWM周期的中点或者下溢附近远离死区结束和开关切换瞬间。然后检查六路ADC是不是真的同时触发。有些MCU的ADC规则组无法一次采集六路信号用注入组或扫描模式容易产生几十ns到几百ns的时间差这在低保真环境下可能表现不明显但在六相系统里会直接反映为电流毛刺。如果采样时刻没问题再检查电流传感器的带宽和滤波电容。相电流采样信号经过RC滤波后会有相位滞后滞后在闭环里体现为额外延时高频毛刺也可能由此放大。通常把RC截止频率放在50kHz到100kHz之间既能滤掉开关噪声又不至于引入太大相位滞后。5.2 z1z2平面电流振荡六相FOC调试中最容易遇到的现象是转矩输出正常但相电流波形里有明显的3次或9次谐波母线电流高频振荡电机噪音变大。这是z1z2平面的谐波电流环没有压住甚至发生振荡了。我调试过的第一台六相样机就遇到过这个问题。当时把z平面的PI参数设置得和主电流环一样结果轻载时相电流波形上叠了一层明显的波纹。后来把z平面的Kp降到原来的三分之一问题立刻缓解。不要指望z平面PI响应特别快这个平面的主要任务是“压制”而不是“跟随”宁可慢一点也要稳。如果参数调低后依然振荡检查是否有某一路电流采样增益不准导致Clarke变换后的z分量偏大。用双通道示波器对比同一采样点的两路电流看增益是否一致。5.3 两套绕组电流幅值不一致正常运行时sys1和sys2的相电流幅值应当基本一致。如果出现其中一套绕组电流明显偏大首先怀疑电机绕组本身不对称而不是控制算法问题。用LCR表离线测量六个相绕组的电阻和电感两套绕组对应相之间的偏差如果大于3%基本可以确认是工艺问题。还有一种情况是两套绕组的连接线序反了。双Y移30度绕组对相序非常敏感如果sys2的B2、C2接线对调整个磁场方向出现偏差电流环虽然可以勉强稳住但转矩输出会明显下降。排查时可以在开环状态下给两套绕组分别通同一个三相电流指令对比电机内部声音和电流波形是否一致。5.4 起动困难预定位电流怎么给六相电机起动比三相稍微麻烦。三相常见做法是给d轴注入直流电流让转子定位到一个已知的电角度然后开环斜坡起动。六相电机同样可以使用这个方法但要注意两套绕组一起施加定位电流不能让某一套单独流过大电流。实际操作中我会把预定位电流设定为额定电流的20%到30%持续约200ms然后读取转子位置传感器的绝对值确认角度和控制器给定的一致。如果电机带负载起动定位电流可以适当加大但不能超过额定电流的50%否则绕组发热太快。另一个实用技巧是“开环角度斜坡起动”即完全没有位置传感器反馈时强制给d-q旋转角度一个斜坡让气隙磁场拉着转子一起转。等转速超过5%额定转速后再切入闭环位置反馈。这个切换瞬时时机会造成电流冲击可以在切换前把q轴电流指令降为零等状态稳定后再加载。6. 个人体会与几个补充建议回头整理这个系列第二篇的时候我心里最清楚的一点是从三相FOC到三六相PMSM的FOC并不是“把代码扩一倍”这么简单。多出来的不只是三个桥臂和两个PI环还有整个系统对采样同步、PWM一致性、绕组对称性的更高要求。三相FOC里可以容忍的误差在六相系统里会被放大成明显的谐波电流和转矩脉动。调试阶段建议在上位机里同时观察两类变量一类是αβ平面的d-q电流另一类是z1z2平面的d-q电流。只看相电流很难判断问题出在哪个平面但把z平面电流单独拉出来看毛刺多了就知道谐波压制无效波形抖动了就知道PI参数偏激进。调试工具链里最好有这么一条独立通道对问题定位的帮助是决定性的。另外如果条件允许先做一套离线参数辨识。给d轴电压阶跃记录电流上升斜率算出Ld给q轴电压阶跃算出Lq再用直流伏安法算定子电阻。没有这套参数后续PI整定会盲人摸象。我见过一些人上来就抄别人程序里的PI值结果因为电机参数差一倍直接烧了模块。六相电机的成本比三相高不少把参数辨识这一步做扎实能省下很多真金白银。关于后续扩展这套六相FOC代码可以继续往上叠东西弱磁控制、最大转矩电流比控制、容错控制都可以基于现有的双d-q框架和双套SVPWM框架去实现。下一篇我大概率会讲一台三六相PMSM的容错控制也就是在缺相情况下怎么重新分配指令让剩余绕组继续输出转矩。先把这篇文章里的基础打好后面就顺了。
阅读完成 · 觉得有帮助?