
做电机控制的同学十有八九都有过这样的经历SVPWM程序明明算得好好的扇区、作用时间、比较值全对结果示波器一夹看到的相电压、线电压、端电压波形跟书上的示意图对不上。尤其“相电压”这个词在不同资料里叫法还不一样实测时点位接错波形立刻翻车。这篇文章用一台普通示波器、一块STM32F103的电机驱动板外加一台中性点引出的电机把SVPWM输出的端电压、线电压、真实相电压一一实测给你看再结合TI和ST官方笔记里关于SVPWM波形的那几页把“为什么长这样”讲清楚。无论你是刚接触FOC的初学者还是被波形困惑的调试老手看完应该能少走很多弯路。1. 先搞清楚三个电压端电压、相电压、线电压到底测哪两点1.1 三种电压的物理位置差一个参考点就差很多先把最容易被绕晕的地方说清楚。SVPWM是从逆变器开关状态衍生出来的调制方式电机端A、B、C三个点相对于不同参考点电压是完全不同的物理量。端电压A、B、C输出端相对于直流母线负极N的电压记作VaN、VbN、VcN。示波器普通探头夹在电机端地线夹在母线负端测出来的就是端电压。有些资料把端电压叫“相电压”严格说是“逆变器输出相对直流负极的相电压”。线电压A-B、B-C、C-A之间的电压也就是两个端电压的差值如Uab VaN - VbN。这个量可以通过示波器两个通道做数学减法得到也可以用差分探头直接跨接测量。相电压严格说指每相绕组上的电压。例如Y接电机里A相绕组电压是A端相对于中性点g的电压Va_g不能只夹一个探头直接测出来需要把中性点引出来做参考。很多教材和参考设计里把“相电压”定义成相对直流母线负端的电压尤其在“三相全桥逆变器”语境下TI早期笔记里经常出现“phase voltagephase to negative rail”的说法。而在电机绕组语境下相电压是相对中性点。两种定义差了一个共模电压SVPWM的共模电压又是不断跳变的所以你会发现不同图纸上说的“相电压”波形可能完全不一样。为了便于理解我把三个电压的测量点和典型波形特征整理成一张表电压名称测量参考点示波器接法SVPWM下典型波形端电压VaNA端对母线负极NCH1夹A端地夹N0/Vdc两电平方波脉宽按正弦规律变化线电压UabA端对B端差分探头跨接A-B或CH1-CH2Vdc/0/-Vdc三电平PWM脉冲平均值接近正弦相电压Va_gA端对电机中性点gCH1夹A端CH4夹中性点多电平台阶PWM平均值接近正弦峰值最大Vdc/√3这张表建议截图保存实测前先对照一下能避免大部分“接错点导致的困惑”。1.2 为什么SVPWM下三个电压长得完全不一样SVPWM总共只有8种开关组合6个非零电压矢量V1~V62个零矢量V0000和V7111。以扇区I为例一个中心对齐的载波周期内开关序列通常是000 → 100 → 110 → 111 → 110 → 100 → 000对应到六个开关管就是U相先开通V相随后开通W相在扇区I里保持低端导通。看端电压波形A、B、C三个输出点就是高低电平方块非0即Vdc只是每相的脉宽在不断变化。线电压是两个端电压相减。比如Uab VaN - VbN当A和B开关状态不同线电压跳变成Vdc或-Vdc当A和B状态相同线电压为0V。所以在完整电周期里线电压会看到“Vdc、0V、-Vdc”三种电平的PWM脉冲。这里有个很有意思的细节在扇区I的开关序列里A和B的状态其实不会出现一高一低的负压组合因此单个扇区内Uab只有Vdc和0两种状态等切换到其他扇区Uab才可能出现负电平。示波器上如果看到一个完整电周期内线电压呈现正、零、负三种脉冲说明扇区切换是正常的。相电压相对复杂。三相对称负载下电机中性点电位是Vng (VaN VbN VcN) / 3那么A相绕组上的真实电压就是Va_g VaN - Vng (2VaN - VbN - VcN) / 3用这个公式算一下就明白波形为什么是多电平了。在100状态VaNVdc、VbN0、VcN0那么Va_g2Vdc/3在110状态VaNVdc、VbNVdc、VcN0那么Va_gVdc/3在000和111状态Va_g0。所以一个载波周期内相电压出现了多个台阶不是简单两电平。这个“多电平台阶PWM”才是电机绕组上真正感受到的电压也是电流谐波和噪声的主要来源。2. 实测前的准备示波器、探头和接线别将就2.1 示波器和探头怎么选决定了波形是干净还是全是毛刺实测SVPWM至少需要100MHz带宽、1GS/s采样率的数字示波器入门级型号就够用。真正重要的是探头选择因为SVPWM输出是高压一侧的高频开关波形普通无源探头地线夹与示波器机箱地相连如果同时夹到不同相可能通过地线形成短路或者引入很大的地回路噪声。推荐的接法有三种用两个普通探头分别测A端和B端对母线负极N的电压地线夹都夹在母线负端再用示波器数学通道做差得到线电压。这个方式比较安全也方便同时观察端电压和线电压。使用高压差分探头直接跨接A-B两端测线电压这是最接近教科书波形的量法波形最干净。使用带隔离通道的示波器四通道彼此独立可以直接测不同点但普通共地示波器不行。探头补偿这一步千万别省。探头接到示波器自带的1kHz方波校准信号用微调电容调到上升沿平顶、无过冲、无下冲。SVPWM是硬开关波形电压跳变速度很快探头没校准的话高频开关边缘会看到奇怪的振铃你还会误以为是硬件问题。如果手头有两只不同型号或不同长度的探头做通道间减法时要格外留意。两只探头延迟不一定完全一致测端电压单看点问题不大但用CH1-CH2做线电压时开关瞬态附近会出现幅度很大的尖峰误差。尽量用同型号、同长度的探头。2.2 搭建一个可复现的SVPWM测试平台我自己用的组合是STM32F103C8最小系统板加IR2101驱动的三相全桥模块24V可调直流电源再加一台小功率表贴式PMSM电机。程序不复杂开环SVPWM就行关键是PWM频率、死区时间和中心对齐方式要配置正确。我习惯设置20kHz载波死区1.5μs中心对齐PWM。以STM32的72MHz主频为例20kHz中心对齐模式定时器ARR取1800死区时间寄存器按照72MHz计数折算到约108个时钟周期。这样配置出来的六路PWM频率准确上下管之间留有死区窗口不会出现直通短路。接线顺序要固定不然排查问题时会乱直流电源正极接驱动板直流母线正端电源负极接母线负端驱动板A相输出接电机A相B相接B相C相接C相CH1探头夹A相输出CH2夹B相输出CH3夹C相输出四个通道的地线夹全部接到直流母线负端电机中性点引出线接CH4用于后面测真实相电压触发源选CH1边沿下降沿触发电平设在Vdc/2附近。如果电机没有引出中性点可以用三只精度1%的1kΩ金属膜电阻搭一个星形负载三个端点分别接A、B、C公共点代替中性点。这个“虚拟中性点”和真实电机中性点有微小共模差异但用来理解SVPWM波形原理完全够用。3. 用示波器实测SVPWM波形的完整操作3.1 端电压波形实测先看基础方波再看包络第一步CH1探头夹在A相输出端地线夹母线负端电压档位根据母线电压选择。24V母线用10V/div时基先设20μs/div触发源CH1下降沿触发触发电平设在12V左右。屏幕上应该出现一串固定频率的方波约20kHz高电平约24V低电平接近0V。边沿应该很陡上升时间几十纳秒量级。用示波器的占空比测量功能观察你会发现占空比不是固定值而是随着电机转子角度缓慢变化。如果程序里输出的是开环SVPWM电机在转占空比会呈周期性扫描。这就是端电压正常的样子PWM方波本身没变变的是每周期的高电平宽度。想看基波包络千万别把示波器切到“Average”采集模式。Average只是滤除随机噪声对固定频率开关波形用处不大反而会把边沿细节抹平。正确做法是把时基放慢设置到1ms/div到5ms/div屏幕上看到的就是“脉冲宽度不断变化”的包络线。假如输出频率是50Hz一个电周期是20ms用5ms/div就能看到4个周期的包络非常直观。如果想抓SVPWM过零点附近的窄脉冲在20kHz载波、比较值接近0时脉宽可能只有几百纳秒。用普通自动触发很难看清楚建议使用示波器的单次触发或脉宽触发时基放到2μs/div把触发电平设高一点触发条件选“脉宽小于某个值”。这个操作能帮你验证MCU比较值是否真的按SVPWM规律更新到定时器里。3.2 线电压实测数学通道算出三电平脉冲CH2探头接到B相输出端地线同样夹母线负端。开启数学通道M1 C1 - C2这就是线电压Uab。时基放到50μs/div看整个载波周期。M1不再是0/24V两电平方波而是由Vdc、0、-Vdc构成的脉冲组合。为什么出现负电平因为当A端0V、B端24V时Uab 0 - 24 -24V线电压是差模量两个端电压一高一低自然就有正负。用两个普通探头做减法时务必确认两个探头都做过补偿地线夹都要接在母线负端。两个通道的垂直档位、耦合方式也要一致否则减出来的波形会有直流偏置误差。实测中我遇到过CH1用了10x探头、CH2忘记切到10x导致线电压幅值完全错误的情况操作前一定要检查通道设置。线电压的RMS值直接测出来往往和理论正弦有效值差很多因为示波器的RMS测的是包含开关纹波在内的全带宽电压不是基波有效值。想看符合教科书理论的正弦线电压可以在示波器上做一个低通滤波数学通道截止频率设为载波频率的十分之一左右比如2kHz滤波后波形就是线电压基波。在线性调制区间SVPWM线电压基波峰值理论上可以逼近母线电压Vdc这也是SVPWM母线利用率高于SPWM的直观证据。3.3 相电压实测把中性点引出来用数学通道验证把电机Y接中性点引线接到CH4CH1夹A相。设置数学通道M2 C1 - C4这就是真正的A相绕组电压。为了交叉验证再开一个数学通道M3 (2*C1 - C2 - C3)/3这个公式来自1.2节的推导理论上M2和M3波形应该一致只是M3会因为通道噪声叠加略差一点。实测看到的相电压不是两电平PWM而是由三相开关状态共同决定的多电平台阶脉冲。在扇区I的一个PWM周期内A相绕组电压会出现0V、约Vdc/3、约2Vdc/3等台阶整体看起来像阶梯状PWM。这是因为三相端电压同时跳变中性点电位也被一起调制相电压等于端电压减中性点电压自然就不再是单纯的0/Vdc方波了。如果把时基放到2ms/divM2波形表现为一组“占空比包络”包络线大致沿正弦变化。用低通滤波看滤除开关纹波后的平均相电压是一条光滑正弦线在线性调制区其峰值最大约Vdc/√3。很多人说SVPWM比SPWM多了15.47%的母线电压利用率指的就是这个最大相电压基波峰值直接通过电阻星形负载加示波器低通滤波可以验证。4. 结合TI/ST官方笔记解读SVPWM波形特征4.1 TI官方笔记里的开关顺序和“公共量”设计思路TI在经典的电机控制应用笔记里例如Field Orientated Control of 3-Phase AC-MotorsBPRA073以及后续TMS320系列DSP的SVPWM应用报告都会先放两张标准图一张是SVPWM门极开关顺序另一张是相电压、线电压的仿真波形。TI的习惯是先画出逆变器端电压phase-to-negative rail的0/Vdc方波再明确解释线电压是两相端电压之差、相电压是端电压减中性点电压。TI笔记里最有价值的推导是扇区判断和“公共量”的使用。SVPWM不是直接算三相占空比而是先得到αβ坐标系下的电压参考值再根据扇区选择两个相邻非零电压矢量计算每个矢量的作用时间T1、T2。为了方便代码实现T1、T2的计算被拆成X、Y、Z三个中间变量再按扇区查表变成Tcm1、Tcm2、Tcm3三个比较值。这三个比较值才是真正写入定时器比较寄存器的公共量。从示波器波形反推这个公共量也很简单端电压PWM边沿发生翻转的时刻就是定时器比较值更新的时刻。中心对齐模式下一个载波周期内同一相端电压有两个边沿一个在计数上升段一个在计数下降段两边对称。如果示波器上看到某一相脉宽明显不对称说明比较值更新方式或定时器配置有问题可能是用了边沿对齐而非中心对齐也可能更新事件发生在比较值变化后的错误时间点。TI笔记里反复提到的另一个点是死区。理论上SVPWM开关序列简化为000、100、110、111但实际上下管切换需要时间必须插入死区。用示波器看互补PWM例如TIM1_CH1和TIM1_CH1N在死区时间内两个管子都关断波形上会出现一个极短的低电平平台。很多人以为这是畸变其实是正常现象。若死区设置不当示波器上甚至能看到两个管子短暂同时导通这是很危险的。4.2 ST官方MC SDK对PWM波形和采样窗口的约定ST做电机控制最常用的是一套集成度很高的MC SDK配套的用户手册如UM1052对PWM时序解释得很细。ST默认使用中心对齐PWM三相互补输出带死区ADC采样时刻放在PWM计数器的下溢或中央位置目的就是避开开关噪声。ST官方笔记里的时序图把一个载波周期内比较值如何映射到六个MOSFET画得很清楚。对照示波器看端电压你会看到七段式SVPWM的对称结构000-100-110-111-110-100-000。由于中心对齐前后半周期是对称的PWM波形的中线正好对应计数器的顶点。如果示波器上看到波形半周期内不对称大概率是进入了非中心对齐模式或者比较值在PWM周期内被异步更新。ST手册里强调的电流采样窗口问题也可以通过端电压波形检查。FOC电流采样通常安排在零矢量期间也就是三个端电压同时为高111或同时为低000的窗口。用示波器测量三个端电压观察这个“三相同高”或“三相同低”的窗口宽度。如果死区过长或最低脉宽过小这个窗口会变得很窄ADC采样点落在非零矢量时间内电流采样就会不准闭环运行时会看到明显的电流波形毛刺。ST官方工具Motor Control Workbench里有一个Test功能可以给逆变器输出固定占空比用来验证功率级。这个功能对示波器实测特别友好因为它让PWM占空比固定不动方便你慢慢调节探头和触发条件。等固定占空比波形确认无误再回到FOC闭环模式观察动态占空比变化。5. 常见问题与避坑指南实测实录5.1 为什么量出来波形毛刺多、台阶乱我先说结论绝大多数毛刺不是电机驱动板的问题而是测量方式的问题。普通探头的地线夹就是一根很长的引线电感在PWM开关瞬态会感应出高频振铃看起来波形全是毛刺。排查顺序检查探头是否做过补偿没补偿的探头在高频段会严重失真。把探头地线做到尽量短最好用探头套筒里的接地弹簧直接接在母线负端不要飞一根长夹子线。示波器开启20MHz带宽限制这能滤掉一部分开关振铃高频分量对观察脉宽和包络没有影响。检查驱动板地线是否和电源地可靠连接母线电容是否靠近功率管未加高频瓷片电容时端电压波形容易叠加母线振铃。测量相电压时中性点引线不要飞很长。线越长感应的开关噪声越大套一个磁环会有改善。如果以上都做了还是毛刺多再怀疑功率电路。看振铃频率和开关边沿是否出现在同一时刻如果边沿之前波形干净、边沿之后振铃剧烈多半是母线回路寄生电感大需要在驱动板母线两端并联吸收电容。5.2 为什么触发不稳定、波形在屏幕上乱跑SVPWM的载波周期是固定的但一个载波周期内有很多边沿。如果你把触发源选在线电压M1或相电压M2上这些波形一个周期内翻转好几次触发点不固定屏幕就会乱跳。最稳妥的触发源是端电压CH1的下降沿。SVPWM端电压每周期只有一到两次明显翻转边沿稳定。如果程序工作电压很低占空比很窄边沿也能触发但触发电平要跟着调。可以用示波器的脉宽触发设置触发宽度等于载波周期比如20kHz对应50μs只触发宽度接近50μs的脉冲稳定性会好很多。还有一个容易忽略的功能是触发释抑Holdoff。把Holdoff设成略小于载波周期比如40μs强制触发点每个周期只捕捉一次可以防止一个周期内的多个边沿被重复触发。我自己实测下来SVPWM测量时这个设置比调各种滤波更管用。5.3 电压测量值和理论对不上问题出在哪整理了几个常见情况现象原因解决办法线电压RMS比理论正弦有效值高很多示波器RMS包含开关纹波不是基波使用低通滤波数学通道或功率分析仪测基波相电压基波峰值明显偏低死区吃掉有效输出电压低压母线时尤其明显检查死区时间是否过大适当降低载波频率端电压平均值不是预想的正弦或马鞍波SVPWM在过调制区会出现削顶确认调制指数是否超过1降低指令电压后再测线电压出现很大负尖峰两个探头延迟不一致或地线回路产生差模噪声换同型号探头用差分探头直接测量相电压波形完全不像多电平整定值不对可能测成了端电压确认CH4接的是中性点并用公式(2C1-C2-C3)/3交叉验证特别提醒一下死区的影响。24V母线、死区1.5μs、20kHz载波一个周期50μs死区占了约6%。在低母线电压测试时输出电压损失不可忽略实测值偏低非常正常。想精确验证SVPWM理论波形建议母线电压提高一些比如48V或60V死的相对占比会小一点。5.4 从波形反推SVPWM是否正确的三个速判方法方法一看三个端电压的脉宽包络。正常SVPWM单相占空比包络不是纯正弦而是马鞍形因为SVPWM在每相注入了一个零序分量。用示波器的占空比趋势图或调制域曲线能直接看到单相占空比中段凸起、两端平整这就是“马鞍波”。方法二看线电压是否三电平且有无净直流偏置。SVPWM是差模输出线电压在一个电周期内正负对称用测量功能看平均电压应该接近0V。如果平均值明显不是0说明存在直流偏置或探头零点不对。方法三看相电压滤波后的基波是否为正弦。把相电压做低通滤波滤波后必须是干净正弦不能看到三倍频凸起。因为零序共模分量已经在中性点被抵消真实绕组电压只剩基波。如果滤波后还有明显马鞍成分说明中性点参考接错了很可能用成了母线负端。我个人习惯上拿到SVPWM输出后先做三件事第一步用直流档量母线电压第二步看三个端电压是否都是20kHz中心对称方波第三步用数学通道看线电压是否三电平并且平均电压接近0。这三步正常再去谈相电压、电流采样和FOC调参才有意义。很多人一上来就把探头夹在两相之间看到三电平波形兴奋半天实际上可能连端电压都没确认出了问题很难定位。最后再分享一个小技巧。如果你手头电机没有引出中性点用三只1kΩ电阻搭虚拟中性点实测时电阻精度一致性非常重要。电阻值稍有偏差虚拟中性点电位就会偏离真实值测出来的相电压波形会叠加一个低频误差看着像调制失真。尽量用1%精度的金属膜电阻实测前可以用万用表挑三只阻值最接近的。这个方法虽然简单但用来验证SVPWM和零序注入原理效果完全不输给专门引出中性点的电机。