ARTICLE DETAIL

资讯详情

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

SVPWM过调制深度解析:从马鞍波到羊角波的波形演变与仿真排雷

SVPWM过调制深度解析:从马鞍波到羊角波的波形演变与仿真排雷 做电机FOC或者逆变器仿真的朋友应该都见过示波器上那条形状独特的调制波——一次普通转矩输出下SVPWM产生的相电压调制波是中间凹、两头翘的“马鞍波”不少教程会告诉你这是SVPWM的典型特征可当你把调制比继续往上推想让直流母线电压利用率再高一点时马鞍波的波峰开始变形慢慢冒出一对尖尖的“羊角”这就是SVPWM从线性区一点点滑入过调制区的直观表现。这篇内容想把这套进阶过程讲透重点放在扇区判断和时间分配这两个核心环节上说清楚为什么会从马鞍波变成羊角波、过调制I区和II区到底在哪条边界上、算法分别改了什么最后给出一套能在Simulink或嵌入式环境里直接复现的仿真模型和排雷笔记。适合已经能把基础SVPWM转起来、但还想搞懂波形背后逻辑以及准备把过调制用进弱磁高速控制或高电压利用率场合的朋友。1. 先看波形马鞍波与羊角波到底差在哪1.1 马鞍波不是“三次谐波正弦”而是母线电压利用率的故事很多初学者第一次看到SVPWM调制波时都会冒出同一个问题正弦波叠加三次谐波不是也能得到类似马鞍形的波形吗这两个到底是不是一回事严格说SVPWM的调制波等于三相正弦波叠加了一个“零序分量”这个零序分量并不是单一的三次谐波而是由三相电压瞬时值决定的动态分量经常写成Vz -(Vmax Vmin) / 2其中Vmax和Vmin是当前时刻三相参考电压的最大值和最小值。把这个零序分量加到三相正弦波上波峰被压平一些、波谷被抬起来一些整体看上去就像一匹马鞍。这个“压峰抬谷”的效果才是SVPWM比SPWM多利用约15.47%母线电压的本质原因——同样一块直流母线SPWM能输出的相电压基波峰值只有Udc/2而SVPWM在线性区极限能达到Udc/√3约等于0.577Udc。搞懂这一点很重要因为后面讲马鞍波变成羊角波本质上都是在讲“零序分量和参考电压幅度之间的拉锯战”。马鞍波形态越标准说明调制器还稳稳工作在线性区一旦波形顶部的曲率出现突变说明参考矢量已经越过了线性区边界开始撞击六边形边界了。1.2 羊角波出现的位置过调制区里的波形形变“羊角波”这个词虽然不像“马鞍波”那么教科书但在很多SVPWM进阶资料和电机控制调试现场里流传很广指的就是过调制算法介入之后调制波在波峰附近被“掀”起来形成的一对尖角。仿真平台上把调制比从1.0慢慢拉到1.15这个过程会看得非常清楚先是马鞍波的顶稍微探出内切圆然后在扇区边界附近出现局部变尖接着波峰两侧渐渐像羊角一样朝天翘起再往后翘起的部分越来越多、最终融成方波那样的平顶。这里要明确“过调制I区和II区分别在哪里”。惯用的调制比定义是M |Vref| / (Udc/√3)线性区是M ≤ 1参考矢量完全落在六边形内切圆以内I区大约覆盖1.0 M ≤ 1.04这一阶段参考矢量虽然越过了内切圆、但还没真正大面积超出六边形边界算法上通过“保持相角、压缩幅值”来逼近可实现的边界II区大约覆盖1.04 M ≤ 1.155这阶段参考矢量已经砸出六边形边界光压幅值已经不够必须对相角做修正输出波形逐渐从羊角过渡成六拍阶梯波。说白了I区是在六边形“墙”内贴着墙走II区是直接把参考矢量按到墙上直到最后干脆只在六个墙角的顶点之间跳变。理解了这两个“面积”的物理含义后面看算法实现就不会觉得奇怪了。2. 扇区判断从三相电压排序到符号查表2.1 最直观的做法三相电压大小排序定扇区SVPWM的第一步永远是判断参考电压矢量Vref落在哪个60°扇区。扇区判断的方法不止一种最容易理解的是直接看三相参考电压Va、Vb、Vc的大小关系。以逆时针从0°到60°为扇区1、60°到120°为扇区2的定义方式来看各扇区对应的“谁最大、谁最小”关系如下扇区角度范围最大值相最小值相10° ~ 60°AC260° ~ 120°BC3120° ~ 180°BA4180° ~ 240°CA5240° ~ 300°CB6300° ~ 360°AB这个表用仿真验证非常快给定一个旋转角度把三相正弦表达式算出来再比较大小即可。它的优点是直观逻辑清晰调试时用Scope抓出Va/Vb/Vc曲线对照着这三条曲线的交点就能判断扇区是否出问题。缺点是判断“哪个最大、哪个最小”在嵌入式里要写好几层比较而且边界处容易出现抖动通常还要加滞回。2.2 工程上更常用的Uα/Uβ符号判断加查表实际项目里更常见的是利用Uα、Uβ直接做符号判断避免复杂的排序。做法是先构造三个中间变量U1 UβU2 (√3/2)Uα - (1/2)UβU3 -(√3/2)Uα - (1/2)Uβ令N的每一位表示对应变量是否大于零N (U1 0 ? 1 : 0) (U2 0 ? 2 : 0) (U3 0 ? 4 : 0)得到N之后查表。我手推验证过一组自洽的映射关系N的值对应扇区311253446526这套映射可以拿几个特殊角度验证比如θ30°时N3对应扇区1θ90°时N1对应扇区2θ210°时N4对应扇区4逻辑是自洽的。需要特别提醒的是网上很多代码的N和扇区映射表各不相同有的是N3对应扇区2有的是N1对应扇区1只要你把表做对、和后面的T1/T2查表保持一致就行不存在“唯一正确”的表。2.3 过调制之后扇区判断还需要改吗直接给结论不需要单独为过调制设计一套扇区判断逻辑。原因在于扇区判断的对象始终是“当前指令对应的参考矢量”。线性区时参考矢量未经修正扇区判断的就是原始参考角过调制I区算法保持相角不变扇区判断自然也不变过调制II区算法确实会对参考角做调整但这个调整发生在上游送到扇区判断模块的已经是修正后的参考矢量。换句话说扇区判断模块从头到尾不知道外面是否在过调制它只负责回答“当前有效参考矢量在哪个60°范围”。真正需要响应过调制状态的是后面的时间分配和饱和处理逻辑。有些仿真平台在进入II区后会发现扇区号在边界处跳变、PWM占空比突变这不是扇区判断本身的问题而是II区的角度修正表在扇区边界处不连续导致的后面第5节会专门讲。这里先记住扇区判断是“纯几何”的过调制改变的是送给它的输入而不是它的算法。3. 时间分配相邻矢量、零矢量与七段式/五段式3.1 相邻矢量作用时间的本质是解一个“伏秒平衡”方程知道参考矢量在哪个扇区之后核心任务变成计算两个相邻非零矢量各作用多久。原理一句话就能说清在一个PWM周期Ts内用两个相邻基本矢量和一个零矢量在时间平均意义上合成出想要的参考矢量。用初中学的“两端时间×矢量的叠加”来理解就是伏秒平衡T1·V1 T2·V2 T0·V0 Ts·Vref其中V1和V2是当前扇区的两个相邻基本电压矢量T1、T2是它们的作用时间T0是零矢量作用时间且T1T2T0Ts。最普遍的计算方式是把参考矢量转到当前扇区的局部角度θsθs等于Vref相对扇区起始边的夹角范围0°到60°然后套经典公式T1 √3 · Ts · |Vref| · sin(60° - θs) / UdcT2 √3 · Ts · |Vref| · sin(θs) / Udc这个公式可以自己验算一下θs0°时参考矢量正好在扇区起始基本矢量方向上T1Ts、T20θs60°时参考矢量正好在另一个基本矢量方向上T2Ts、T10θs30°时T1T2两边对半非常符合直觉。工程代码里一般不做三角函数而是用X、Y、Z查表法替代把Uα、Uβ带进X/Y/Z公式再按照扇区查T1和T2。虽然写法看着完全不一样但数学本质就是上面这个伏秒平衡方程只是把sin和cos展开成了加减乘除。3.2 七段式与五段式零矢量的站岗方式决定开关损耗算出T1和T2之后剩下的T0时间要分配给零矢量。这个分配方式直接引出两种常见的PWM实现策略七段式和五段式。七段式把T0分成四段一个PWM周期内开关序列是0矢量起始、非零矢量、非零矢量、另一个0矢量、再回到前一个非零矢量、再回到起始0矢量总共七段所以叫七段式。以扇区1为例序列为000 → 100 → 110 → 111 → 110 → 100 → 000比较寄存器的通带表达式为Ta T0 / 4Tb Ta T1 / 2Tc Tb T2 / 2然后按扇区把Ta、Tb、Tc映射到三相比较值。这样做的好处是波形对称、谐波质量好但代价是每相每个周期都要开关两次开关损耗偏高。五段式则不平均分配两个零矢量而是只用一个零矢量让其中一相在整个PWM周期内保持不变的开关状态也就是“钳位”在某电平。这样每个周期内开关次数从六次降到四次开关损耗大概能降三分之一但代价是电流纹波和THD明显变大。表面对比如下策略每个周期的开关次数零矢量使用谐波/THD开关损耗适用场景七段式6V0和V7都使用较低较高对电流谐波敏感、开关频率足够高五段式4只用V0或V7较高较低低成本驱动器、重载发热受限场合做仿真时直接观察PWM波形就能分辨两者七段式的桥臂在周期内会来回动作两次五段式则有一段明显“躺平”不动作的区间。两种模式在FOC软件里通常做成一个参数用户根据自己的硬件平台取舍。3.3 T0 0 的那一刻饱和与进入过调制的信号实际代码里算完T1、T2之后第一件事不是算占空比而是检查T0。T0 Ts - T1 - T2只要T0 ≥ 0说明参考矢量还在当前扇区的可合成范围内一切照常一旦T0 0说明相邻两个非零矢量即使占满整个Ts也追不上参考矢量了这时候就出现了“饱和”。饱和就是进入过调制区域的前兆也是驱动系统能否平滑提升电压利用率的关键信号。很多初级实现不做T0判断直接在T0为负数时拿来算占空比结果比较值超出载波范围输出波形立刻乱掉。正确做法是在这一步根据调制比大小分流小过调制就走I区限幅算法再深一点就走II区角度修正这也是下一节的入口。4. 过调制I区保持角度、压缩幅值4.1 内切圆/六边形边界与调制比的第一个分水岭要理解I区算法得先把自己从“参考矢量”视角切换到“可达区域”视角。在αβ静止坐标系里SVPWM能直接合成的最大瞬时电压矢量落在六边形的边界上六边形内切圆的半径是Udc/√3对应调制比M1六边形外接圆的半径是2Udc/3对应调制比M2√3/3≈1.155这也是六拍方波的理论极限。所以SVPWM的工作范围看起来就是三层嵌套内切圆以内随便跑跑不出去的就是线性区从内切圆到六边形边界这一段是I区的主要活动地带六边形边界以外到外接圆之间则是II区的领地。实际控制中电机电流环输出的dq电压指令经过做事后规划很可能落在这些区域边界外于是就需要过调制算法“打圆场”。I区的适用范围大约是M从1到1.04左右。很多资料写1.043有的写1.05差异来自具体控制策略和补偿目标不必死磕数字只要知道它是一个“贴着内切圆向内切圆外围扩展”的过渡带就行。4.2 I区算法的核心让参考矢量“滑”到边界上I区最经典的算法思路叫“最小相角误差法”翻译成人话就是方向绝不改多远都得跑。做法分两步。第一步仍然按照正常流程计算T1和T2然后判断T0是否小于0。如果T0 0说明参考矢量超出了当前扇区两个基本矢量能够覆盖的范围。第二步保持角度不变把T1和T2按比例压缩到总时间刚好等于TsT1 T1 · Ts / (T1 T2)T2 T2 · Ts / (T1 T2)T0 0这样处理后实际输出矢量从原来够不到的参考点被“拖”回到六边形边界上方向却还指着原来的角度。可以想象成有根绳子拴在一个方向固定的柱子上拉不到就去不了只能沿着柱子方向最近的位置停下来。这个“最近位置”就是参考方向与六边形边界的交点。但这里有个隐藏问题只做限幅的话M超过1之后输出电压基波幅值并不会随M线性上升而是出现明显的非线性。原因是限幅后的波形已经不再是纯正弦型基波含量低于参考值。因此工程上比较讲究的做法会在限幅之前乘一个与M相关的增益补偿系数K(M)让限幅后的基波等于期望值。这个系数通常通过仿真或推导做成一张查找表在线性插值。如果做的是低成本简单平台也可以不补但动态响应会变差尤其是弱磁电流环PI容易因为实际电压和指令电压差太远而积分饱和。4.3 为什么I区波形开始出现“羊角”I区算法带来的直接后果就是调制波外形变化。理解这个变化要看比较寄存器的实际波形而不只是理论调制波。在线性区比较寄存器的包络线就是平滑的马鞍形因为它本质上等于三相正弦波加零序分量。到了I区当参考矢量方向接近扇区中央时T0肯定小于0T1/T2被压缩到满占空比这相桥臂会在一段时间内保持“持续开通”或“持续关断”。这段平台期在调制波上表现为波峰顶部发平而在两个相邻平台之间为了让基波尽量逼近参考调制波又会以很快的斜率往另一个方向压下去于是波形边缘被拉出一条锐利的尖角。多个扇区交界处叠加起来就成了“羊角”的样子。所以说羊角波并不是算法刻意做出来的而是“限幅”和“补偿”共同作用下的自然产物。你在仿真里看到羊角越明显说明限幅深度越大也说明离I区边界越近。5. 过调制II区角度修正与方波极限5.1 当压缩幅值不再够用II区需要修正角度如果M继续往上推进入II区最简单限幅策略就不行了吗为什么不能继续“保持角度、压缩幅值”原因在于一旦参考矢量的方向在扇区中央附近它已经大幅跑到六边形墙外面即使把幅值压到墙上输出矢量的平均轨迹也不足以支撑更高的基波电压。此时压缩幅值会让输出“卡脖子”——不管M怎么加输出基波都不再增长等于白忙活。II区的任务是把最后这段从1.04到1.155的电压增长率“挤”出来而挤出来的手段只能是动角度。II区的经典实现可以理解为“沿墙走墙角歇”的组合。具体说输出矢量的轨迹不再是一个连续缩放的边界点而是分成两种状态一部分时间让矢量沿六边形边界的某一段滑动另一部分时间把矢量锁在六边形的某个顶点不动。M越大锁在顶点的比例越高。这个“锁顶点”的动作在时域波形上的体现就是相电压脉冲进一步展宽直到M达到极限值2√3/3时三相桥臂完全退化成180°导电的六拍方波顶点停留比例变成100%。5.2 从羊角波到六拍阶梯波电压利用率还能涨多少II区过程里羊角波会一步步“坍塌”成方波。调制波顶部的两只尖角慢慢融合成平顶PWM脉冲的高电平时间在波峰附近几乎整个周期都是持续输出对应线电压出现典型的六拍阶梯波形状。很多书上的“六拍阶梯波”也叫方波逆变波形就是SVPWM过调制到极限的产物。电压利用率数字可以从这个角度对比线性区极限时相电压基波峰值约为0.577Udc六拍阶梯波极限时相电压基波峰值约为0.637Udc相当于在线性区基础上再提升约15.5%。这个数字在电机驱动里意义很大对于同一台永磁同步电机在电压受限的弱磁区电压利用率提升15%意味着理论最高转速也能在同样弱磁电流下相应延展约15%。这正是过调制在主驱电机、电动工具高转速工况里被广泛使用的原因。但它不是免费的午餐。II区在整个周期内都处于深度非线性状态输出电压谐波和电流THD显著增大转矩脉动也会变明显。实际工程里绝大多数FOC策略只在高速区或瞬态允许使用过调制平稳的低速/高动态场合尽量留在线性区否则光靠电流环很难压住这种高谐波电流。6. Simulink/嵌入式仿真复现笔记搭建与排雷6.1 一个能看清调制波的仿真结构想看清马鞍波到羊角波的完整变化建议先搭一个“纯算法模型”不急着接功率管。仿真结构大致是生成角度θ计算Uα Vref·cosθUβ Vref·sinθ用第2节的公式做扇区判断计算局部角θs用T1/T2公式计算作用时间做T0判断T0 ≥ 0走线性区T0 0走I区压缩或II区修正计算Ta、Tb、Tc并映射到三相比较寄存器把三相比较值和三角载波比较生成PWM把比较寄存器值本身接到示波器观察马鞍波/羊角波。这里尤其推荐把“比较寄存器值”当信号源接到Scope观察。因为SVPWM的调制波通常不是直接产生一个模拟电压而是等单片机PWM比较值更新后形成的包络线。直接看比较值省去搭功率桥的麻烦还能很清晰地看到马鞍、羊角、方波三个阶段的形变。如果只做纯算法验证模型里不需要死区、也不必纠结功率器件模型但等算法验证完毕、需要看电流波形时再接入三相逆变器和RL负载这种分层做法能最大程度减少变量。6.2 仿真中容易踩的坑这几条是我在实际调试中碰到过、也在不同群里看别人反复问过的问题提前排掉能省很多时间。扇区映射表前后不一致。N值和扇区号映射错PWM序列按错误的顺序跳变现象是电流波形在扇区边界处出现明显尖刺。排查方法很简单用固定点给定一个角度比如θ30°手动算一遍期望扇区再对照代码里实际输出的扇区号。载波模式搞错。七段式SVPWM必须配合中心对齐的三角载波也就是定时器up-down模式。如果用锯齿波up-only开关序列不再对称“七段”变成“不规则段”谐波特性全变了。不少新手把PWM频率理解成定时器计数频率导致Ts差了整整一倍。忽略T00就继续算占空比。这是最经典的过调制坑会直接让比较值超过载波范围输出占空比饱和到0或100%波形完全失真。做仿真第一件事就是加T0判断节点。死区时间没加。算法仿真可以不加但接功率桥后不加死区上下桥臂直通会烧管子。过调制I区波峰附近的最小脉宽很可能小于死区时间这时即使加了死区这一相脉冲也可能被死区吃掉电流波形会出现一个奇怪的坑不要误判成算法问题。仿真步长太大。比较值和三角载波的边沿是高频信号步长太大时会丢失PWM边沿细节导致谐波分析完全失真。固定步长建议至少取载波周期的1/100以下比如20kHz载波用1e-7秒量级的步长。6.3 从波形判读仿真是对是错仿真跑起来后要判断SVPWM模型对不对不用急着上仪器先看几个关键信号线性区M0.8左右时三相比较值连成的包络线应该是标准的马鞍波两个波峰之间有一个明显的凹陷。如果包络是纯正弦说明零序注入没生效大概率扇区或时间计算错误。M1时相电压基波峰值应该接近Udc/√3。可以用FFT模块看基波幅值明显低于这个值说明母线电压利用率没榨出来。M拉到1.05左右调制波顶部应该出现羊角状的尖峰同时PWM脉冲在波峰附近出现接近100%占空比的平台。M继续到1.15波形应该逐渐趋近六拍阶梯波一相内很长时间保持高电平或低电平开关动作次数明显减少。另外建议同时观察扇区号、T0、T1、T2四条信号。正常情况下扇区号是0到5的阶梯波T1和T2在扇区内平滑变化T0在过调制前始终保持正值、过调制后出现负数再被限幅。把这些信号和调制波对照着看哪一环出错很快就能定位。最后说一个我自己的亲身体验。早期做弱磁调试时曾在过调制II区用了一张线性插值的角度修正表结果M接近1.15时相电流在扇区边界处总是轻微抖动示波器看电流波形有很细微的台阶。后来把修正表改成5点样条插值同时在扇区边界处加了滞回抖动立刻消失。这让我意识到过调制II区虽然数学上看只是角度在变但对连续性的敏感度比线性区高得多哪怕微小的查表跳变都会被电流环放大。如果你的项目正准备上过调制建议把这张角度修正表的连续性当作和扇区判断表一样重要的避坑点来处理多花一点时间在查表平滑上绝对值回票价。
返回列表