ARTICLE DETAIL

资讯详情

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

PMSM无感FOC的SVPWM过调制策略优化与谐波抑制实战

PMSM无感FOC的SVPWM过调制策略优化与谐波抑制实战 搞电机控制的特别是做PMSM无感FOC的朋友对SVPWM肯定不会陌生。但说实话很多人在调试时把SVPWM当成一个固定的“黑盒”只在线性调制区里折腾一旦母线电压利用率不够、转矩出不来就开始怀疑电流环、怀疑观测器很少有人会想着从调制策略本身找突破口。我之前在做一个高速无感FOC项目时遇到了一个非常头疼的问题额定转速3500rpm母线电压48V带着负载跑起来之后等转速拉到2800rpm左右电压利用率就到了极限再往上加电流速度也起不来而且相电流波形开始出现明显的畸变噪声一下子变大。后来我用示波器抓了相电压和电流波形又对比了调制波和载波发现问题就出在调制策略上——我把SVPWM限制在线性调制区没有进入过调制区。后来我把过调制策略加上去又花了不少功夫处理谐波才把这个坎跨过去。这篇文章就围绕SVPWM过调制策略优化与谐波抑制把我在项目中实际用到的思路、算法原理、调试心得和踩过的坑完整地写出来。适合正在做PMSM无感FOC的开发者参考尤其是那些电压利用率受限、需要压榨峰值转矩和高速性能的场景。1. SVPWM的线性调制区与过调制区1.1 先从母线电压利用率说起要聊过调制就得先把母线电压利用率这个概念说透。SVPWM之所以比SPWM更受欢迎核心优势就是它在同样的直流母线电压下能输出更高的交流电压幅值。SPWM的相电压峰值最大能到Udc/2而SVPWM通过在两相静止坐标系中合成参考电压矢量把最大可控电压幅值推到了Udc/√3相当于线性区内电压利用率比SPWM提高了约15%。这个提升的原理简单说就是SVPWM在两相静止坐标系中不再是单纯的三相正弦调制而是在调制波中注入了零序分量等效地把正弦波的平顶“削掉”再拉伸从而让相电压基波幅值更大。但是这个Udc/√3不是无限可控的。它对应的是参考电压矢量的最大内切圆半径也就是SVPWM能在线性区不失真合成的极限。一旦你算出来的电压矢量幅值超过了这个圆问题就来了矢量可能落到了六边形区域里但此时已经没有足够的开关周期去精确合成它脉宽计算出来的时间可能会出现负时间或者总时间超过开关周期。在实际工程里线性区的电压利用率限制带来一个很直接的后果在母线电压固定的情况下电机能达到的最高转速和最大输出转矩都会受限。为了继续提升电压就必须让调制器进入过调制区——也就是让电压矢量超出内切圆逼近六边形的边界。我在项目中就是这种情况48V母线反电动势常数比较高的电机高速时需要的电压矢量幅值已经高于线性区上限。如果不进过调制区你就算把电流环调得再快、PI参数再激进电压指令也输出不出去速度就是上不去。1.2 线性调制区与过调制区的边界先给一个量化的界线。SVPWM在线性调制区的参考电压矢量的最大幅值等于母线电压与控制器增益之比用标幺值来说线性区最大调制度M_max 1.0对应电压矢量幅值Udc/√3。过调制区则是M从1.0往上走的区间。M的定义是参考电压矢量的幅值与Udc/√3的比值M Uref / (Udc/√3)当M1时电压矢量轨迹正好在内切圆上当M在1到1.10之间时参考矢量部分落入六边形外调制器需要对输出做修正当M继续增加到1.15左右时电压矢量轨迹接近六边形边界此时调制器输出接近方波。理论上M的极限是2/√3 ≈ 1.1547即完全方波运行对应输出电压基波幅值为2/π * Udc。从工程角度我建议把过调制区细分成两个阶段第一阶段M从1.0到约1.05这个区间谐波增加还不太明显适合大多数高速弱磁场景第二阶段M从1.05到1.15谐波显著增大必须配合谐波抑制手段否则电流畸变、噪声、发热都会上来。要注意的是进入过调制区之后电压矢量的相位和幅值都会发生失真。因为此时你的调制器已经不可能精确跟踪参考电压矢量必须在“保幅”和“保相”之间做取舍这也是下一节要展开的内容。2. 过调制算法从原理到实际实现2.1 两种典型思路最小相位误差与最小幅值误差过调制算法的核心是当参考电压矢量超出线性区时重新计算实际输出的电压矢量。这里有两条经典的思路最小相位误差原则和最小幅值误差原则。最小相位误差原则的思路是当参考电压矢量落到六边形外面时保持它的角度不变但把幅值缩小到六边形边界上。这样做的优点是输出电压的相位也就是角度始终跟随参考电流环的矢量角度不会出现突变更有利于维持力矩方向的稳定。缺点是实际幅值小于参考在深度过调制下会产生比较大的幅值误差。最小幅值误差原则的思路则相反让实际输出电压矢量的幅值尽量接近参考幅值允许相位偏离一些。常见做法是在参考矢量落入六边形外部的区域时把矢量限定到六边形边界上距离参考矢量最近的那个点这样幅值误差被最小化。但这个方案在深度过调制时相位跳变较大可能会引起电流相位突变进而影响转子位置的估算精度。在实际的无感FOC项目中我更倾向于优先保证角度也就是采用最小相位误差思路为主。因为无感FOC依赖反电动势或者磁链观测器来估算转子位置角度信息的连续性非常关键。如果你为了追那一丁点幅值而导致相位抖动观测器的角度估算会受到干扰严重时可能会出现高速失步。不过要注意如果最小相位误差做得太“粗暴”——直接简单地把矢量拉回六边形边界那输出波形是会出现严重削顶的谐波会大大增加。所以实际工程中很少用纯的两种原则而是用分段调制M较小时用最小相位误差保持线性度M较大时逐步过渡到最小幅值误差。这就是下面要说的单模式与双模式过调制。2.2 双模式过调制从过调制区到方波区的平滑过渡我在这类项目里最常用的是一种双模式过调制结构分成两个区间来处理。第一区间调制度M在1.0到某个阈值比如1.05之间采用过调制模式一在这个区间参考电压矢量只有一小部分“超出”六边形此时保持矢量的相位不变只调整幅值。实现时我会做一个“角度保持幅值截断”的处理计算参考矢量所在的扇区判断它对应的两个相邻基本矢量的作用时间之和是否超过开关周期。如果超过就把两个时间按比例缩放使得T1T2Tsw零矢量作用时间为0。第二区间调制度更高时进入过调制模式二这里有一步关键的操作是引入一个补偿角α。原理是当参考矢量在大部分扇区范围内都超出六边形时如果还强行保持相位输出幅值会严重偏低导致基波电压不足。此时需要让实际输出电压矢量在角度上产生一个“提前量”和“滞后量”用角度偏移来补偿幅值损失。具体来说模式二的实现思路是在参考矢量的角度θ处先判断它是否处于六边形内部。如果外部区域占比不大就直接把输出矢量锁定在六边形的边上参考矢量在外部时输出矢量的幅值等于六边形边界参考矢量在内部时输出幅值则做一定程度的“过冲”以保证平均基波幅值等于参考。这一段的代码调起来我最大的体会是过调制过渡点不能太陡。如果你在模式一和模式二之间直接切换电流波形上会出现很明显的阶跃轻则引起转矩脉动重则激发电流环振荡。我一般会在两种模式之间加一个基于调制度M的软切换系数让增益平滑过渡。2.3 扇区作用时间公共量的推导过程很多初学者在实现SVPWM时对扇区判断和相邻矢量作用时间的推导总是记不熟。这里我用一个“公共量”的思路来统一说明过调制实现时也需要用到它。标准的SVPWM算法在两相静止坐标系下输入Uα和Uβ。首先定义三个中间变量Vref1 Ubeta; Vref2 (sqrt3 / 2) * Ualpha - 0.5 * Ubeta; Vref3 -(sqrt3 / 2) * Ualpha - 0.5 * Ubeta;扇区判断就用这三个值的正负组合来确定若Vref1 0A1否则A0若Vref2 0B1否则B0若Vref3 0C1否则C0扇区N A 2B 4C这里N值对应的扇区可以查表获取。得到扇区后还是需要用三个临时变量计算两个相邻非零矢量的作用时间。以扇区判断后使用的公共量为例通常定义X (sqrt3 * Ubeta * Tsw) / Udc; Y (sqrt3 * Ubeta / 2 1.5 * Ualpha) * Tsw / Udc; Z (sqrt3 * Ubeta / 2 - 1.5 * Ualpha) * Tsw / Udc;然后根据不同扇区两个非零矢量的作用时间T1和T2分别取不同的X、Y、Z组合。比如扇区I取T1Z、T2Y扇区II取T1Y、T2-X扇区III取T1-Z、T2X以此类推。最后如果T1T2 Tsw就做等比例缩放t_sum T1 T2; T1 T1 / t_sum * Tsw; T2 T2 / t_sum * Tsw;之所以要在这个推导里先算出X、Y、Z这三个公共量是因为过调制实现中要继续使用同一套中间变量来判断是否“过限”以及做缩放处理。而在线性调制区T1T2必定小于等于Tsw当进入过调制区后T1T2直接超过Tsw这时第一步的处理和线性区是完全不同的。如果你把计算过程都拆散了过调制阶段就很难统一修正。3. 谐波产生的机理与抑制思路3.1 过调制为什么带来谐波过调制之所以会带来谐波根子上是因为输出电压波形不再是一个完美的正弦而是出现了“削顶”和“切角”。当参考电压矢量超出六边形边界时调制器输出的电压矢量在部分时间被限制在边界上这个边界的轨迹是折线而不是圆。折线轨迹对应到相电压上就会产生大量低次谐波主要是5次、7次、11次、13次这类6k±1次谐波。这会产生两个直接的坏处。第一个是电流畸变谐波电压作用于电机的定子电感会产生对应的谐波电流使三相电流波形不再是正弦。第二个是转矩脉动这些谐波电流和电机的永磁磁链相互作用会产生6k次频率的转矩脉动表现为转速波动、噪声增大、机械振动。在无感FOC中谐波还会污染反电动势的观测导致转子位置估算误差增大。我在项目里曾经用FFT分析过一次过调制状态下的相电流结果发现在M1.08时5次谐波电流的占比能到基波的8%左右7次谐波约5%。这个量级的谐波已经足以让电机发出明显的“呜呜”声同时母线电容的纹波电流也会变大导致电容发热。但过调制又必须用那就得想尽办法把这些谐波抑制住。这里我分成几个层面来讲。3.2 谐波注入与反馈控制抑制第一个层面是从算法层面进行谐波抑制。比较直接的手段是在电流环中增加特定次谐波抑制器。具体做法是在旋转坐标系下把5次和7次谐波分别转换到对应的谐波旋转坐标系中然后使用谐振控制器或者比例积分控制器进行调节。这里稍微展开一下。PMSM的5次负序谐波在同步旋转坐标系下表现为6倍频分量所以可以在d-q轴电流环里并联一个谐振频率在6ω_e的谐振控制器PR控制器。它的传递函数一般写成G_res(s) K_r * s / (s^2 (6ω_e)^2)这个谐振控制器的作用是在6ω_e频率处提供一个很高增益从而让电流环对这个频率的谐波误差产生足够的矫正能力。缺点是它对转速变化比较敏感ω_e变化时谐振频率要跟着变这对控制器的实时计算有一定要求。工程上也有人用多个并联谐振控制器的把6k±1次谐波一起压住但调试量会翻倍。第二个层面是从参考电压矢量生成端做谐波补偿。既然过调制带来的谐波有固定规律就可以在调制前端做预补偿在检测到调制度M超过阈值后计算出当前谐波畸变度然后利用谐波注入的方式来抵消一部分原有谐波。我实际用过一种方法是在αβ轴电压指令上叠加一个与6θ_e相关的谐波修正分量。简单说根据当前θ_e的位置计算出一个附加电压修正量注入到Uα和Uβ上。这样做的好处是不需要改动电流环结构计算量也不大缺点是模型依赖强当电机参数变化或者负载突变时补偿效果会变差。这里我也把两种方法放在一起对比方法优点缺点适用场景谐振控制器动态响应好自适应转速需要实时调节谐振频率调参复杂转速变化范围大、动态性能要求高的场合谐波注入预补偿结构简单计算量小依赖模型鲁棒性一般恒速或准恒速运行、成本敏感的场合3.3 死区补偿与电流采样精度的配合在过调制区死区效应会被显著放大。因为在过调制状态下一个开关周期内的有效脉宽变短而死区时间相对被“稀释”得更厉害。死区会造成输出电压的“丢失”从波形上看就像在换相处出现了一个小小的缺口这个缺口在过调制状态下会激发出额外的3次和5次谐波。解决死区误导通的常用方法是电流极性判断死区补偿。核心思路是根据三相电流的极性判断死区时间内续流二极管导通时的电压损失方向然后在PWM波中做时间补偿。假如A相电流为正死区时间内A相输出电压会被拉低那就在下一个周期的A相开通时刻上做一个提前校正把失去的电压补回来。但有一个细节电流极性判断一定要准确尤其是在电流过零点附近。如果电流极性判断错了死区补偿不仅没有抑制谐波反而会成为新的谐波源。工程上我会在电流过零点附近做一个滞环处理——电流绝对值小于某个阈值时暂时不补偿等电流方向稳定后再恢复补偿。另外电流采样精度在过调制状态下比线性区更关键。因为电流谐波本来就大如果采样分辨率不足或采样时刻不对谐波分量会被折叠成低频噪声进入电流环后很难滤除。我推荐的采样方式是在PWM周期中心点采样避开开关器件的开通和关断瞬态用两个PWM定时器触发ADC一个用于电流采样一个用于保护。采样电阻的布局也要注意尽量靠近下桥臂MOS的源极减少走线电感带来的毛刺。4. 仿真与实验验证4.1 仿真模型搭建要点做SVPWM过调制开发和谐波抑制先上仿真验证是必须的不然在实物上出了问题既怕炸板又难定位。我这里说几个仿真搭建的要点。首先是电机本体模型。PMSM在Simulink里面可以直接用内置的PMSM模块但要注意勾选“Enable flux weakening”相关的选项以及把反电动势波形设为理想正弦。如果你要分析谐波建议把反电动势设置成包含一定谐波成分的非理想模型否则仿真出来的谐波含量会远低于实际过调制谐波抑制的效果评估就不准。其次是逆变器模型。我建议不要直接用Simulink里理想的“Three-Phase Bridge”加纯电阻负载而要加入开关管压降、死区时间、管压降和体二极管特性。最简单的办法是用Simulink自带的IGBT模块设置好导通电阻、开关时间和死区时间这样仿真结果才更贴近实物。再次是SVPWM过调制算法模块。核心是调制度M的计算和参考电压矢量的限幅。仿真中要把M的值实时监控出来用于判断当前是处于线性区还是过调制区以及过调制深度。建议在模型中设置一个手动开关可以在运行中切换不同的过调制模式和是否启用谐波抑制方便对照。关于采样时间我也说一个注意点。控制周期用的载波频率如果是10kHz那PWM采样和电流采样步长至少要到1e-6秒否则开关瞬态都看不出来。如果仿真太慢可以只把SVPWM部分用较小步长观测器部分用较大步长。4.2 实验波形分析与调试仿真跑通之后真正的战场在实验台架。我先把过调制前后的波形变化说清楚。线性区运行时相电流波形接近标准正弦即使有小噪声FFT分析中5次和7次谐波占比一般在2%以下。M超过1后电流波形开始出现顶部削平的现象。这个削平的形状不是对称的而是和转子位置相关如果你用示波器看电流的过零部分你会发现过零附近有比较明显的“毛刺”这就是过调制带来的低次谐波。进入深度过调制区后波形就更难看了但有一个特征可以帮助你判断问题如果电流波形在一个电周期内出现6次明显的波动像水波纹一样那基本可以断定是6k次转矩脉动在电流上的反映。我调试时用得最多的工具是相电流FFT分析。通过示波器采集一段稳态电流数据导出CSV后用Matlab做FFT分析。重点关注5次、7次谐波和总谐波畸变THD。M1.08时没有谐波抑制前的THD大概在15%左右加上谐振控制器后THD能降到6%左右。这个提升从听感上说就是电机从“尖叫”变成“闷响”带载能力也会有改善。还有一个判断过调制是否有效工作的指标是看调制波和载波的关系。用示波器同时抓DSP的调制波输出通常是MCU里DAC输出的Ualpha或Ubeta和PWM波过调制状态下调制波会出现上下削顶。如果你看到削顶非常剧烈说明M已经很高要注意电流环是否还能维持稳定。4.3 无感FOC下的特殊性做无感FOC的人对过调制可能更警惕因为调制方式的改变会直接影响反电动势观测器的输入。无感FOC常用的滑模观测器或者磁链观测器都是基于电压和电流来重构反电动势的。你给观测器的电压指令值如果和实际输出电压不一致观测器估算出来的反电动势就会有误差。过调制区正好是电压指令和实际输出偏差最大的区域。所以做无感FOC过调制必须额外考虑观测器的电压补偿。我的做法是在实际输出电压矢量的计算中不仅使用电流环输出的指令电压还要把过调制阶段的“限幅处理”做成一个实时的等效电压输出。简单来说就是当电压矢量被缩放或者限幅时把缩放后的实际电压值重新反馈给观测器而不是用原来的电压参考。这样做的原因是反电动势观测器的数学模型里电机的定子电压方程用的是实际施加到电机端的电压。如果你给观测器的电压大了估算出的反电动势和磁链会偏大进而导致转子位置角度超前反之则滞后。角度一旦出现偏差电流环的d-q轴解耦就不准确了最终表现为带载时电流增大、转矩反而下降严重时失步。另外高速无感FOC场景下过调制往往是在弱磁控制区发生的。弱磁情况下d轴电流为负电压矢量幅值本来就大此时如果过调制算法引入的谐波过大可能会让弱磁控制器的输出饱和导致电流环发散。我建议在弱磁环和过调制之间加一个协调逻辑当调制度M超过阈值并继续增大时优先约束弱磁环的输出幅度避免把电压指令推到过调制极限而丧失可控性。5. 常见问题与排查技巧5.1 过调制切换时的电流畸变与振荡在实际调试中最容易遇到的问题是在进入和退出过调制区的瞬间电流出现异常畸变甚至振荡。这个问题我之前排查了很久最终定位到三个原因。第一个原因是切换点不在一个完整的PWM周期边界上。过调制模式由一个M值判定切换而M值每几个控制周期才更新一次若恰好在电流过零附近切换电流环会有一次明显的扰动。解决办法是给M值加一个一阶低通滤波或者做滞环切换让M进入过调制区的阈值和退出的阈值不一样比如进入时M1.02退出时M0.98。第二个原因是过调制开始时的电压矢量跳变。线性区和过调制区的输出在切换瞬间可能会有一个幅值上的跳变。解决思路是让过调制算法在M1.0附近的一段区间内输出与线性区基本一致也就是算法要连续。我实现时会在线性区输出和过调制输出之间对M在1.0到1.02区间做线性插值。第三个原因是电流环的PI参数在过调制区不合适。过调制区的等效被控对象和线性区并不同线性区PI调得太激进过调制时很容易激发振荡。如果排除了算法问题还是振荡可以检查一下电流环带宽适当降低PI的proportional gain或者在过调制区域切换到一组降低带宽的PI参数。5.2 几个容易被忽略的细节这里分享几个我在项目中踩过坑后的独家经验。第一过调制算法中扇区边界处的处理一定要小心。电压矢量刚好跨在扇区边界上时T1或T2可能等于0这时候做过调制限幅逻辑要特别注意除零的情况。我建议在代码里对T1T2做下限保护比如如果t_sum小于某个极小值就直接设为零矢量输出。第二FOC的电流采样在一个PWM周期内通常只采一次但过调制状态下PWM脉宽变化很剧烈。如果采样点恰好落在PWM比较值变更导致的毛刺附近采样到的电流可能被干扰。我的经验是把ADC采样时间窗口稍微缩短一些宁愿牺牲一点点采样窗口长度也要避开死区前后的振铃。另外也可以采用在PWM周期的两个中心点各采样一次取平均值的方案对高频噪声有更好的抑制。第三谐波抑制的谐振控制器不要盲目的把增益调高。增益太大时谐振控制器在6倍频处增益很高但相位裕度也会下降很多。我调试时通常先把Kr从小往大加观察电流FFT中6倍频分量的变化当效果不再改善时就停在这个值再增加已经没有意义还可能带来噪声放大。第四过调制区域的死区补偿要额外关注。线性区死区补偿不准最多是电流波形有一点平顶过调制区死区补偿不准可能直接导致母线电压利用率下降而且谐波会成倍增加。建议在过调制区域把死区补偿量的计算从电压时间形式改为占空比形式这样和PWM的缩放逻辑能够保持同步。实操总结做PMSM无感FOC这几年我越来越觉得SVPWM过调制不是一个可以“以后再优化”的锦上添花功能而是高速高功率密度应用场景下的刚需。母线电压是死的电机的反电动势是物理定律决定的只有把调制这一环节利用到极致才能让整个驱动系统在有限电压下释放出最大性能。谐波抑制同样不能只靠事后修修补补。要从算法底层设计时就把抑制思路放进去比如用谐振控制器做反馈抑制用电压重构保持观测器精度再用死区补偿和采样优化把底噪降下来。这三板斧缺一不可。如果说有什么体会最值得分享那就是过调制算法的触发和退出一定要平滑电压反馈一定要真实谐波抑制一定要在实验波形上看到FFT改善才算数。不要被“过调制”这个名字吓到它本身很稳定真正让你翻车的往往是周围配套的细节——采样噪声、死区补偿、PI参数切换、观测器电压重构这些才是藏在冰山下面的坑。按照这套思路做下来我的项目在最后阶段转速从2800rpm拉到了额定以上带载能力也恢复到了预期相电流THD控制在可控范围内。这个结果不是靠单点突破而是整个调制链路一起优化的结果。希望我的这些经验和踩坑记录能帮你少走些弯路。
返回列表