FOC过调制实战:SVPWM电压利用率提升与PMSM高速控制

发布时间:2026/9/13 19:05:21
FOC过调制实战:SVPWM电压利用率提升与PMSM高速控制 做过无感FOC的人大多有类似经历电机中低速段调得很顺电流波形漂亮转速闭环也稳定可一旦想把电机推到更高转速问题就来了——给定电压已经顶到饱和电流环输出的Ud、Uq不管怎么加转速都上不去。这时候摆在面前的选项通常是两个要么接受转速上限要么想办法“压榨”母线电压。而后者最值得做的事就是给SVPWM打开过调制。FOCField-Oriented Control里的核心输出环节就是SVPWMSpace Vector Pulse Width Modulation它负责把电流环输出的电压指令变成三相逆变器六个开关管的开关序列。而“过调制”指的是让SVPWM输出的基波电压超过线性调制区上限的那一类算法。简单说不学过调制PMSM相电压基波幅值最大只能到 Udc/√3学了过调制极限能逼近 2Udc/π同样工况下能再挤出10%左右的电压。放在电动工具、风机、水泵、无人机电机这类对母线电压斤斤计较的场合这10%就是实打实的转速和功率上限。这篇文章适合正在调FOC、但还没系统看过过调制算法的同学。我会先把SVPWM线性区的扇区判断、作用时间和X/Y/Z公共量推导完整补一遍再把过调制I区、II区的原理和工程实现展开最后聊几个我在实测中踩过的坑。内容会偏算法和工程实现不涉及具体平台拿到STM32、DSP或者任何能跑浮点的MCU上都能落地。1. FOC里为什么要折腾SVPWM过调制1.1 SVPWM在整个FOC链路中的位置一个典型的永磁同步电机FOC控制链路是这么走的相电流采样 → Clarke变换得到iα、iβ → Park变换得到id、iq → 电流环PI输出ud、uq → 反Park变换得到uα、uβ → SVPWM生成六路PWM → 三相逆变器输出给电机。SVPWM就是uα、uβ到占空比的最后那段路。很多教程把它一句话带过把期望电压矢量在最近的两个非零矢量和零矢量之间做时间分配。但真正动手调FOC你会体会到这段代码决定了电压利用率、电流谐波和整个系统在高转速段的极限。它做得好不好直接决定你电流环的PI输出能不能真正变成电机端口的电压。我见过不少人在调试时只盯id、iq波形看到电流环PI饱和就误以为是电流环参数问题来回调Kp、Ki调了半天没用。实际上根子可能在调制环节——SVPWM的输出上限没处理好PI输出再大也到不了逆变器端口电机自然上不去转速。FOC调试难点里这是最容易被忽略的一个。1.2 “电压不够用”才是过调制的出发点先给一个直观结论线性SVPWM能输出的最大相电压基波幅值是 Udc/√3。为什么刚好是它这得从电压矢量空间说起。三相逆变器一共有8种开关状态6个非零电压矢量和2个零矢量。非零矢量的幅值都是 2Udc/3方向在空间里从0°到300°每60°一个凑成一个正六边形的六个顶点。线性SVPWM能输出的参考电压矢量必须落在这些顶点围成的正六边形内切圆以内这个内切圆半径就是 Udc/√3。一旦参考电压矢量跑到内切圆外面问题就来了两个相邻非零矢量再怎么组合也合不出这么长的矢量。那怎么办要么砍幅值要么砍角度要么两者一起砍。过调制算法的本质就是在参考电压矢量超出六边形边界时用一种可控的方式把实际输出拉回六边形边界同时尽量让基波分量跟住参考。“尽量跟住”是要付出代价的。输出电压波形不再正弦低次谐波会显著增加电流波形也会变差。但电机本身是感性负载高频谐波会被绕组电感滤掉大部分只要不过分系统照样能转输出基波电压却实实在在上去了。这就是过调制的收益来源用谐波换电压。2. 线性SVPWM的完整推导从扇区判断到作用时间想过调制首先得把线性区的SVPWM推导吃透。很多人对扇区判断和作用时间公式是“背代码”式的知其然不知其所以然一旦换一种坐标定义或者换一家参考代码就晕了。这里我把整个推导过程拆开讲透。2.1 八种开关状态与电压矢量空间逆变器每个桥臂的两个管子是互补导通的所以三相桥一共有2的3次方等于8种开关状态。设上管导通为1下管导通为0那么状态分别是100、110、010、011、001、101以及两个零状态000和111。以直流母线中点为参考点每个状态对应一个空间电压矢量。以100状态为例A相上管导通A相输出端接到正母线B、C相下管导通输出端接到负母线。合成后的电压矢量是 (2/3)Udc方向指向A相轴线。其余非零矢量幅值也都是 (2/3)Udc方向依次相差60°。两个零矢量幅值为0位于原点。这6个非零矢量顺时针方向分别是V1到V6围成一个正六边形。任意一个参考电压矢量都可以由它所在扇区的两个相邻非零矢量和零矢量线性合成这就是SVPWM的基础。2.2 扇区判断的三条判据要把参考电压矢量放到某个扇区里最常见的做法不是用atan2求角度再除60°而是直接用三条直线判据。原因是atan2涉及除法加反正切计算量大在MCU中断里做太浪费而直线判据全是乘法和比较快得多。三条判据是看uβ、√3uα-uβ、-√3uα-uβ这三个量的正负。为什么是这三条因为正六边形的每一条边界在αβ平面上恰好对应一条直线方程。比如V1到V2那条边它的直线方程就是 uα uβ/√3 2Udc/3。三个判据组合起来能唯一确定参考矢量落在哪个扇区。代码实现一般是这样uint8_t A (u_beta 0); uint8_t B (1.732f * u_alpha - u_beta 0); uint8_t C (-1.732f * u_alpha - u_beta 0); uint8_t sector A 2*B 4*C;这个sector值和扇区的对应关系不同参考代码会有差异因为扇区编号和角度参考系的选择不同。我这里采用常见的定义sector3对应扇区Isector1对应扇区IIsector5对应扇区IIIsector4对应扇区IVsector6对应扇区Vsector2对应扇区VI。如果你的参考代码对应表不一样不用慌以你自己那套扇区定义为准后面查表跟着改就行。2.3 以I扇区为例推导作用时间X、Y、Z的由来这部分是很多人的坎也是热词里被反复搜的内容扇区判断完了两个非零电压矢量的作用时间到底怎么算那些X、Y、Z公共量又是怎么来的拿扇区I来说参考矢量Vref由V1和V2两个相邻矢量合成。设Vref ρ∠θ其中θ是Vref在扇区I内相对V1的角度范围0到60°。伏秒平衡写成Vref·Ts V1·T1 V2·T2V1 (2/3)Udc方向0°V2 (2/3)Udc方向60°。把等式两边分解到α、β轴Uα·Ts (2/3)Udc·T1 (2/3)Udc·cos60°·T2 (2/3)Udc·T1 (1/3)Udc·T2Uβ·Ts (2/3)Udc·sin60°·T2 (√3/3)Udc·T2从第二式直接得到T2 √3·Uβ·Ts / Udc代入第一式T1 (3·Uα - √3·Uβ)·Ts / (2·Udc)这两个公式就是扇区I里两个非零矢量的作用时间。如果想知道线性区调制上限令T1T2Ts化简后正好得到ρ的最大值为 Udc/√3而且是在θ30°时取到。这个结论后面过调制还要用。那么X、Y、Z公共量是什么思路是这样的其他5个扇区的推导过程完全一样只是把Vref投影到不同方向的坐标轴上。算完6个扇区后你会发现所有T1、T2表达式都能写成三个基础代数量的组合。这三个量就是X √3·Uβ·Ts / UdcY (3·Uα √3·Uβ)·Ts / (2·Udc)Z (-3·Uα √3·Uβ)·Ts / (2·Udc)有了这三个量6个扇区的T1、T2就不用重新推了直接查表。在扇区I里T1 -ZT2 X扇区II里T1 YT2 Z以此类推每个扇区都是X、Y、Z的正负号组合。为什么要这么设计因为标准SVPWM每个扇区要判断一次角度、算一次三角函数太慢。而X、Y、Z只依赖uα、uβ一次算完后面全是简单的查表和赋值。这在STM32F103这种72MHz的Cortex-M3上跑整个SVPWM加过调制处理也就几十条指令毫无压力。3. 过调制算法从“比例缩小”到“保持角”3.1 为什么T1T2超过Ts就说明过调制了线性SVPWM里T1和T2是作用在两个非零矢量上的时间T0是零矢量时间三者之和必须等于Ts。当参考电压矢量位于六边形内部时T1T2始终小于Ts剩下的时间给T0。当参考电压矢量的幅值往上涨T1T2越来越大零矢量时间越来越短。关键来了当参考电压矢量正好落在六边形边界上时T1T2恰好等于Ts。一旦参考电压越出六边形用伏秒平衡解出来的T1T2会大于Ts。这就是判断过调制的代数判据。为什么这个判据成立几何上可以严格推导。在扇区I里V1到V2那条边界线方程是 uα uβ/√3 2Udc/3。参考矢量幅值ρ、扇区内角度θ如果满足ρcosθ ρsinθ/√3 2Udc/3就说明它越界了。把刚才的T1、T2公式代进去这个条件正好等价于T1T2 Ts。所以代码里那句if (T1 T2 Ts) { ... }不是经验公式是从伏秒平衡严格推出来的边界条件。3.2 过调制I区等比例缩小法过调制算法有好多流派工程上最简单的是一种“限幅法”也叫比例缩小法。思路是如果T1T2超过Ts就按同一个比例把T1和T2同时缩小让它们的和恰好等于Ts零矢量时间T0置0。float Tsum T1 T2; if (Tsum 1.0f) { float scale 1.0f / Tsum; T1 * scale; T2 * scale; T0 0.0f; }注意这里的1.0f表示开关周期Ts代码里已经把时间归一化了。这个做法看起来简单粗暴但有一个很好的几何含义参考矢量越界后T1和T2等比例压缩等价于把实际输出电压矢量沿着原来的角度方向直接压回六边形边界。也就是说过调制I区的本质是“保持角度、砍幅值”。那砍到哪个幅值前面推导过的边界半径是ρ_boundary(θ) (2Udc/3) / (cosθ sinθ/√3)可以验证θ0°时边界半径等于2Udc/3就是V1顶点所在的半径θ30°时边界半径等于Udc/√3正好是内切圆半径。也就是说六边形边界在扇区中点和内切圆相切越往扇区中间去允许输出的最大幅值越小。比例缩小之后七段式SVPWM变成五段式因为T0被压缩成0了。这意味着PWM的占空比在某些时刻会到100%或者0%逆变器从“连续调制”进入了“边界连续切换”状态。电流波形也会从纯正弦逐渐出现畸变但这是过调制的正常现象不是代码写错了。3.3 过调制II区保持角法比例缩小法虽然简单但有个问题当参考电压幅值大到一定程度单纯砍幅值会让实际输出电压的基波分量跟不上参考。也就是说你算出来的T1、T2被压回边界后PWM波形的基波电压不再随参考电压线性增长出现了“饱和”倾向。这个饱和点是过调制I区和II区的分界工程上大致在0.606Udc附近不同文献取0.604到0.608都有取决于你用的算法和死区参数。要覆盖从0.606Udc到2Udc/π约0.637Udc这一整段工业上最常用的是保持角法英文叫hold angle method。保持角法的思路是在每个扇区里定义一个角度变量αh把扇区等分成三段。参考矢量相位角落在扇区起始的αh范围内时实际输出固定在扇区起始的顶点矢量上落在扇区末尾的αh范围内时输出固定在扇区末尾的顶点矢量上只有中间那段输出才沿六边形边界滑动跟踪参考。αh的取值范围是0到30°。当αh0时算法退化成纯边界跟踪就是过调制I区极限状态当αh30°时整个扇区内部都被保持角覆盖实际输出只包含6个非零顶点矢量这就是六拍阶梯波运行。六拍运行的基波幅值可以精确算出来六个非零矢量各占60°输出是典型的方波基波幅值是2Udc/π。所以保持角法完整覆盖了从0.606Udc到0.637Udc的整个区间。实现时不需要实时解方程提前离线算好一张“αh与调制比”的对应表存到Flash里运行时根据当前参考电压幅值查表得到αh再用αh判断当前扇区内参考相位角落在哪段决定输出哪个矢量。查表可以用线性插值精度完全够。下面是一个简化的核心逻辑float alpha_h lookup_alpha_h(m_ref); if (theta_in_sector alpha_h) { // 固定在扇区起始顶点矢量 set_sector_start_vertex(); } else if (theta_in_sector (60.0f - alpha_h)) { // 固定在扇区结束顶点矢量 set_sector_end_vertex(); } else { // 沿六边形边界滑动比例缩小法处理 limit_to_boundary(); }3.4 过调制I区和II区的选择建议如果你刚接触过调制我建议先只做过调制I区也就是比例缩小法。理由有两个一是实现简单改几行代码就行二是对大多数应用来说I区能覆盖从线性区上限到0.606Udc的绝大部分提升幅度已经能把母线电压利用率从0.577拉到0.606提升了约5%。这5%在很多场合够用了。只有当你确实需要逼近六拍运行、追求极致功率输出时再上保持角法。代价是谐波明显增加电机噪声变大调试工作量也上去了。我在实际项目里的经验是0.606到0.637这最后3个百分点换来的是电流THD从10%级别跳到30%级别风噪和铁损同步上涨。要不要这3%取决于你的应用和散热余量不要为了“算法完整”而盲目上II区。4. 过调制不是免费的代价、调试与排查4.1 低次谐波和电流波形畸变过调制的本质是用波形畸变换电压那么第一个要面对的问题就是谐波。具体来说SVPWM在线性区时只会在载波频率附近产生高频谐波这些很容易被电机电感滤掉一旦进入过调制输出波形里会出现成对的6k±1次低次谐波比如5次、7次、11次、13次谐波频率低、幅度大电感不是想滤就能滤掉的。这些谐波会让相电流明显失真转矩脉动跟着变大。轻载时可能不明显重载时电机会有“嗡嗡”的电磁噪声温升也更高。我在测试一款无人机电机时把过调制从I区上限直接推到II区深处满载电流THD从8%涨到35%电机表面温度十分钟内高了十几度。所以过调制和热设计要一起评估不能只盯着功率提升看。4.2 相电流采样窗口变短的大坑这个是很多人在过调制里栽跟头的地方尤其是用单电阻或双电阻采样重构相电流的方案。FOC电流采样通常依赖PWM波形的某个有效电平窗口。线性区时零矢量时间足够长采样窗口很充裕一旦进入过调制T0被压缩甚至归零意味着某些PWM状态持续的时间极短采样电阻上的有效电平窗口可能短到不足以完成一次ADC采样甚至整个窗口直接消失。表现是什么电流环反馈突然跳动id、iq波形上出现毛刺严重时电流环振荡系统直接保护停机。排查方式很简单在进入过调制后用示波器量采样电阻波形看低电平窗口的时间是否满足ADC采样要求。解决办法有这么几条一是限制过调制深度给T0保留至少0.5到1微秒的最小窗口二是把采样点配置成可切换的窗口短的时候换到另一相或另一个电平段采样三是干脆换三电阻采样方案每个相独立采样对过调制区间的容忍度会高很多。如果你的系统对成本敏感且一定要用单电阻采样那过调制区间的最大深度你肯定没法跑到顶这是硬件决定的算法救不了。4.3 死区效应对过调制影响的放大效应死区时间本来是为了防止桥臂直通但它本质上是对输出电压的一种误差注入。在线性区死区造成的电压误差还相对小到了过调制区由于整个PWM波形已经接近极端占空比死区时间在开关周期里的占比变得不可忽视输出电压误差会被明显放大。典型症状是相电流在过零点附近出现一段“停滞”的畸变俗称平台电流波形不再平滑。这个平台会加大转矩脉动严重时会让电流环出现低频振荡。我在调试一台伺服电机时过调制II区无论怎么调电流环参数都有持续的低频抖动最后定位到是死区效应加了死区补偿之后才消掉。所以我的建议是如果系统要长期工作在过调制区死区补偿不是可选项而是必选项。至少要把死区补偿功能打开别图省事跳过否则你可能浪费大量时间在调一个根本调不好的电流环参数上。4.4 调试时波形怎么选、怎么看过调制和不正常故障波形上要能区分开。最直观的是看相电压波形。用示波器探头测电机相线对母线中点的电压线性区时能看到SVPWM的马鞍形调制波过调制I区开始马鞍波的顶部会被“削平”过调制越深削平的部分越长到了过调制II区波形逐渐变成梯形再往深处就接近方波。电流波形方面线性区电流是漂亮的正弦过调制I区还能勉强维持正弦形态过零点的毛刺稍多过调制II区就明显非正弦了能直接看到波形顶部变平或带台阶。调试时建议同时看三相电流和母线电流如果进入过调制后三相电流出现严重不对称优先检查采样窗口和死区补偿而不是怀疑电机参数。转速和转矩方面要盯住额定工况下电机是否出现明显的转速波动和噪声增大。过调制区里如果转矩波动突然超过10%往往说明谐波电流已经反噬到了电磁转矩此时要么减小过调制深度要么加快电流环带宽但要注意稳定性要么在软件里加谐波抑制环节。5. FOC过调制实战我踩过的几个坑最后分享几个实际项目里踩过的坑都是常规课程和文档里不会写的东西希望对正在调FOC的人有帮助。第一扇区判断千万别用atan2。我知道很多人刚开始写SVPWM时图省事直接用atan2求出角度再除以60°判断扇区。这在仿真里完全没问题但到了STM32F103这类MCU的中断里一次atan2就是几十微秒占掉了PWM中断的很大一部分时间预算。用uα、uβ的三条直线判据乘法加法加比较就搞定了效率和实时性都高出几个量级。第二过调制的开启要平滑。如果电压指令在某一时刻突然从线性区跳到过调制深处电流冲击很大可能导致过流保护误动作。我的做法是在软件里把电流环输出电压限幅做成斜坡从线性区上限开始每毫秒往上加一点让过调制“渐进”进入。这样做还有一个好处你可以在线谱/示波器上看到系统进入过调制的工作点方便标定。第三过调制和弱磁控制必须一起调。只开过调制不加弱磁高速段电流环还是会饱和因为交轴电压需求太大只弱磁不过调制又白白浪费了电压余量。工程上两者往往是配合在一起的高速区先让电流环输出进弱磁电压指令继续往上顶到过调制区最终在两者交界处找到系统能稳定运行的平衡点。这个平衡点要靠实测标定不同电机、不同母线电压都不同别指望仿真一次就能拿到准确结果。第四无感FOC场景下过调制开启对反电动势观测器有影响。观测器通常用电压方程希望输入电压尽量干净。过调制引入的低次谐波会作为扰动进入观测器导致估算角度出现波动。我在一个无感风机项目里过调制推到II区后控制角度突然开始抖最终是把电压前馈信号加了一个中心频率在6倍工频的陷波器才把角度抖抑制住。如果你用的是滑模观测器或龙伯格观测器进入过调制区时重点观察角度误差和转速反馈的波动。第五改代码之前先在Simulink里把过调制算法跑通。PMSM、三相桥、FOC控制环路的仿真模型很成熟把比例缩小法和保持角法分别搭进去观察不同调制比下电流波形和母线电压利用率能帮你快速建立对过调制的定量认识。仿真还有个好处可以直接看到理想死区为0时的性能上限工程实现时再对照着评估死区、采样窗口等非理想因素带来的损失定位问题时思路会清晰很多。我做过的几个项目里电动工具和风机控制最后都稳定运行在过调制I区和II区的浅段很少有人敢真的干到完全六拍运行。六拍运行意味着系统完全放弃正弦调制转矩脉动大得惊人绝大多数应用都不接受。所以我的建议很明确先把比例缩小法和保持角法吃透然后根据实际系统的温升、噪声和振动指标在过调制区里找那个“够用且不烫”的工作点。这个工作点才是你项目真正的电压上限。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询