三相PWM整流器在工业直流电源、充电桩、并网变流器里几乎都是标配环节。但电网入口处从来不是理想电压源——电压跌落、谐波污染、三相不平衡,这些网侧扰动一旦进来,直流母线马上起纹波,电流环跟踪跑偏,严重时保护系统直接误动。我前一阵在Simulink里搭了一套基于扰动观测器(DOB)的抗网侧扰动整流方案,从原理推导、Q滤波器整定到模型搭建和工况仿真从头到尾过了一遍,效果很直观:同等扰动下电流THD和直流电压波动都明显下降,而且不像传统方案那样需要针对每个扰动频率单独做陷波器。这篇就把它拆开讲清楚:DOB为什么能抗网侧扰动、Q滤波器怎么选、Simulink里怎么搭、仿真对比怎么做,以及我踩过的几个坑。
适合谁看?在做并网变流器仿真的学生、搞电源硬件预研的工程师,以及想把“抗扰动”做成量化数据的同学都可以参考。我的原则是把原理说人话,但该给的公式也不省,毕竟后面建模完全要靠它们。
1. 为什么整流器需要扰动观测器——从工程痛点说起
1.1 网侧扰动的典型场景与影响
先说一个常见的工程场景。你在做一个三相PWM整流器的预研,设计指标是直流侧电压纹波不超过1%,交流侧电流THD小于5%,电网适应范围包括正常工业电网和弱电网。仿真模型搭好了,纯理想电源下跑得很好,双闭环PI控制,稳压稳流样样达标。但只要把输入换成“稍微脏一点”的电网,问题全冒出来了。
网侧扰动大致可以分为几类。第一是电压跌落,比如电网侧发生短路故障或者大电机启动的瞬间,某相甚至三相电压短时降到正常值的50%到80%,持续时间可能只有几个周波。整流器的电流环依赖电压前馈来维持功率平衡,电压一塌,直流母线跟不上,负载侧就会看到明显的电压凹坑。第二是谐波,配电网上密集的非线性负载会在公共连接点叠加大量的5次、7次谐波电压,畸变率动辄5%以上。整流器在谐波电压下会出现电流波形畸变,THD超标,还会产生额外的转矩脉动或直流侧纹波。第三是三相不平衡,单相负载分配不均匀、某些线路故障未排除,都会导致负序分量出现。负序分量在整流器中会产生2倍工频的功率脉动,反映到直流侧就是100Hz纹波,抵消不掉就会一直挂在输出上。
这些扰动单独来看都“不算严重”,但叠在一起以后,常规双闭环PI控制器的表现就很被动。我在仿真里故意把三种扰动合入同一工况后,直流电压纹波率直接冲到3%以上,电流THD也远超指标。如果只是调PI参数硬压,结果是电流环带宽上去以后,采样噪声和开关谐波又被放大了,整个系统变得神经质。这就是我转向DOB的契机。
1.2 传统双闭环PI为什么不够用
双闭环PI控制(外环稳压、内环稳流)对于理想电网下的整流器确实够用。它的逻辑是:先把三相电流转换到dq同步旋转坐标系下,然后利用PI调节器让d轴电流跟踪有功指令、q轴电流跟踪无功指令。稳态精度不错,动态响应也能通过调参数改善。但问题在于,PI调节的本质是“看到误差再去纠正”,它是一个被动跟踪机制,扰动信号进来以后,必须先形成偏差、再由积分环节积累修正量,这个过程天然存在滞后。
为了把扰动压下去,你会想到增大PI增益。但电流环和电压环的增益受稳定裕度限制,调得越高,相位裕量越小,系统越容易出现振荡甚至发散。我在调试中就遇到过这种情况:把电流环的积分系数提高了一倍,理论上应该能压住低频扰动,结果实际仿真里高频分量反而被放大,电流波形出现了明显的抖动。
也有工程师会用电网电压前馈来抵消扰动,这个思路是对的,但实现上有个硬前提:你必须能准确、实时地测得电网电压的基波和主要谐波分量,并且知道当前工况下系统参数没有漂移。现实是采样噪声、滤波延迟、参数老化都会让前馈精度打折,一旦前馈和实际扰动对不齐,不但不补益,反而会引入新的误差。
DOB的思路和这些都不同。它不去“猜”扰动含有什么频率成分,也不要求你为每个谐波单独建一组前馈通道,而是用一个反向模型把扰动“估出来”,再直接把它从控制信号里扣掉。这个做法对未知扰动、未建模动态、参数漂移都有统一的处理框架,用在网侧扰动抑制上非常顺手。
2. DOB的原理与设计——怎么“看穿”扰动
2.1 扰动观测器的数学本质
扰动观测器的名字看着唬人,核心思想其实不难。打个比方:你走夜路被人从背后推了一把,身体先歪了,想保持平衡,与其把全身肌肉绷紧顶住“不知道往哪来的力”,不如先感觉一下是谁、从哪个方向、用了多大劲推的,然后再有针对性地调整重心。DOB干的就是后面这件事。
在控制系统里,我们把被控对象写成标称模型Pₙ(s),实际对象由于参数误差、外部扰动等,输出可以等效为:
Y(s) = Pₙ(s) · [U(s) + D(s)]
这里面D(s)就是“总等效扰动”,它把外部扰动和模型误差全都折算到输入端。那么如果我们知道Y和U,就可以反解出D:
D̂(s) = Q(s) · [Pₙ⁻¹(s) · Y(s) − U(s)]
这里Q(s)是低通滤波器。为什么非要有它?因为Pₙ⁻¹(s)往往含有纯微分项,直接做会导致高频噪声被无限放大,而且系统不因果,物理上不可实现。Q(s)的任务就是把高频段滤掉,让扰动估计只保留到我们关心的频带。
得到D̂之后,补偿方式很简单:把控制指令减去这个估计值,即
U(s) = U_ref(s) − D̂(s)
低频段Q(s)≈1时,D̂≈D,补偿几乎把扰动完全抵消;高频段Q(s)滚降,扰动估计逐渐失效,但此时本来就不该硬补偿,否则会把噪声引入系统。
具体到三相PWM整流器的电流环,以d轴为例,电压方程是:
L · di_d/dt = e_d − v_d − R · i_d + ωL · i_q
其中e_d是电网电压的d轴分量,可以看作外部扰动;v_d是整流器桥臂输出电压,也就是可控量;ωLi_q是dq耦合项。如果我们把电流环对象定义成:
G(s) = 1 / (Ls + R)
那么DOB作用在电流环上的逻辑就非常清晰:电网电压波动e_d、耦合项ωLi_q以及任何参数偏差,都会折叠成总扰动D,DOB估计它并补偿到v_d指令上。这样一来,即使电网电压突然跌落或者含谐波,电流环看到的“等效对象”仍然是那个干净的标称模型,PI控制器的带宽和增益就可以保持原来设计值,不需要为了抗扰动而把参数调得“很拼命”。
2.2 Q滤波器参数怎么整定
Q滤波器是整个DOB要设计的核心参数,它决定了扰动观测器的带宽和稳定性。工程上最常用的是二阶低通:
Q(s) = 1 / (τs + 1)²
其中τ的选取是关键。这里有几个原则供参考。
第一,Q滤波器带宽必须覆盖主要扰动频率。对于50Hz电网的整流器,谐波扰动主要集中在250Hz(5次)、350Hz(7次),不平衡产生的则是100Hz(2倍频)脉动。DOB要想压住这些分量,Q的截止频率至少要超过350Hz,实际工程中我习惯于取500Hz到1kHz,给扰动抑制留出足够余量。
第二,Q滤波器带宽越高,扰动抑制能力越强,但会放大测量噪声,也会减小稳定裕度。带宽过高时,DOB补偿回路和电流环本体出现相位叠加,系统容易高频振荡。我做过一组扫参,τ从0.1ms拉到2ms,扰动抑制效果和噪声放大程度呈现明显的跷跷板关系。τ=0.5ms左右时,Q带宽约1kHz,网侧扰动压得住,电流采样噪声也没有被明显放大,这是我推荐的经验起点。
第三,考虑到电流环本身的开环带宽,DOB带宽不宜超过电流环带宽太多。否则DOB在高频段的相位滞后会被电流环“放大”,导致控制信号抖振。以电流环开环穿越频率300Hz为例,DOB带宽落在800Hz到1.2kHz是比较安全的区间。
损耗电阻R和滤波电感L的参数也直接影响逆模型的准确度。我做仿真时,先把L和R精确到实际器件标称值的±5%以内,再参与DOB设计。如果L标称5mH而实际是4.5mH,DOB的抑制效果会明显打折扣,这个后面在问题排查里再展开。
3. Simulink建模实操——从双闭环到DOB插孔
3.1 主电路参数与整体控制结构
在Simulink里建模,第一步是搭主电路。我的习惯是:电网侧用Three-Phase Programmable Voltage Source(可编程三相电压源),然后接三相滤波电感L和交流侧等效电阻R,再到三相整流桥(PWM整流器),直流侧输出接电容和负载电阻。交流侧加了浪涌吸收支路,只是为了避免仿真初期数值过冲,实际参数可以再优化。
我这次用的参数如下表:
| 项目 | 数值 |
|---|---|
| 电网线电压 | 380V / 50Hz |
| 交流侧电感L | 5mH |
| 交流侧电阻R | 0.1Ω |
| 直流侧电容C | 2200μF |
| 直流侧负载 | 10Ω |
| 直流电压参考值 | 650V |
| 开关频率 | 10kHz |
| 仿真步长 | 固定步长 1e-6 s |
控制部分采用经典的双闭环结构:外环是直流电压PI调节器,输出作为d轴电流指令;内环是dq轴电流PI调节器,输出经过反Park变换后生成三相调制波,再进入PWM发生器。PLL用Simulink自带的锁相环模块,从电网电压里提取相位信息。
DOB不在这个结构上改什么,它只是“插”在电流环上:把电流环的PI输出当作U_ref,把实测电流当作Y,DOB输出一个补偿量D̂,从U_ref里减掉,再把修正后的指令送给前馈解耦和PWM调制。这样相当于在原有控制环路外面加了一条并联的“扰动抵消回路”,原有环路不改变。
3.2 DOB模块的搭建细节
DOB在Simulink里其实只需要几个基础模块:加法器、传递函数块、单位增益块。我建议把整个DOB封装成一个子系统,方便在不同轴电流上复用。
以d轴DOB为例,内部结构为:
- 输入1是d轴电流实测值i_d;
- 输入2是电流环PI输出的电压指令u_d_ref;
- 输出是补偿量d_hat。
DOB内部按如下算式搭建:先计算u_d_ref_norm = u_d_ref(不加其他变换),再建立两个传递函数支路:
支路A:i_d经过 H1(s) = (Ls + R) · Q(s),其中Q(s) = 1/(τs+1)²; 支路B:u_d_ref经过 H2(s) = Q(s);
然后把支路A的输出去减支路B的输出,得到d_hat。
为什么要拆成两条支路?这正是DOB里“逆模型”的工程化处理。理论上d_hat = Q(s)·[G⁻¹(s)·i_d − u_ref],其中G⁻¹(s)=Ls+R是纯微分形式,不能直接搭传函,所以我把Q和G⁻¹乘在一起构成一个可实现的有理传函H1(s) = (Ls+R)/(τs+1)²,再用H2(s) = Q(s)单独对u_ref滤波。两部分相减,既保持数学等价,又避免了单独微分环节带来的数值爆炸。
具体到模块参数,我设L=5mH,R=0.1Ω,τ=0.5ms,则H1(s)的分子是0.005s+0.1,分母是(0.0005s+1)² = 2.5e-7s² + 0.001s + 1。在Simulink的Transfer Fcn模块里,Numerator写[0.005 0.1],Denominator写[2.5e-7 0.001 1]。H2(s)的Numerator写[1],Denominator写[2.5e-7 0.001 1]。两个模块的输出接到加法器,负号给H2支路即可。
这里要重点提醒:H1(s)分子里的微分成分对高频噪声非常敏感。如果仿真步长太大(比如50微秒),d轴电流里的采样开关毛刺会被放大成尖锐的脉冲,表现为DOB输出抖振。我后来把仿真步长收紧到1微秒,这个问题大幅缓解。如果你用的是离散仿真器,别忘了在DOB输入端加一个截止频率略高于Q带宽的离散滤波器,把采样噪声先削一轮。
3.3 网侧扰动工况怎么模拟
搭建好了主电路和控制环,下一步就是给电网“下药”。Simulink的可编程电压源模块原生支持谐波、幅值变化和不平衡设置,不需要额外搭复杂电路。
我做扰动注入的配置是:
- 谐波工况:在电压源里勾选Harmonics,加入5次谐波含量4%、7次谐波含量2%,维持整个仿真周期。
- 电压跌落工况:设置一个时间事件,0.6s到0.8s期间A相电压幅值降为0.5pu,其余两相不变。
- 三相不平衡工况:设置B相电压幅值降为0.8pu,同时保持相位关系不变,模拟单相重载造成的不平衡。
为了让三种扰动可以单独观察,我没有把它们放在同一段仿真里,而是分别设置了三种仿真场景,方便后面做对比分析。如果你要把三种扰动叠在一起考核极限性能,也可以,但在分析“抬升了多少”时要格外小心,因为不同扰动的相互耦合很难剥离。
另外建议在扰动开始前和结束后的时间点都标记好数据窗。我习惯把数据采样窗口设定为1.8s到2.2s,避开初始启动暂态,只评估稳态扰动下的表现。
4. 仿真结果对比——有DOB和没有DOB差多少
4.1 谐波污染下的电流THD
先看谐波工况。电网电压加入5次4%、7次2%谐波以后,没有DOB的系统交流侧电流波形已经能看出明显的削顶和毛刺。我截取2.0s到2.1s的电流数据做FFT分析,THD大约是4.8%左右,恰好卡在过不了5%指标线边缘。
加入DOB之后,同一数据窗口的THD降到了1.5%左右。最直观的变化发生在5次和7次谐波分量上:没有DOB时5次谐波占2.4%、7次占1.1%,开DOB之后分别压到0.6%和0.4%。原因不难理解:这两个频率都在DOB带宽的覆盖范围内,扰动被估计出来后直接以反向补偿的形式抵消掉了。
这里有一点值得琢磨:DOB并没有针对5次或7次谐波做任何专门的频率识别,它只是把“估出来的总扰动”补偿回去,顺带把这两个主要谐波压了下去。这就是“广义补偿”的好处——不需要知道扰动是什么,只要它落在带宽内就能消。对比传统做法里专门加5/7次陷波器或者谐波前馈的方案,DOB的工程量小了不少,而且不会因为电网频率偏移导致陷波器失谐。
4.2 电压跌落与三相不平衡下的表现
电压跌落工况下,DOB的收益更明显。0.6s时A相电压跌到0.5pu,持续0.2s。没有DOB时,直流电压出现了一个宽度大约0.15s的深坑,最大跌落幅度接近12%,恢复时间约0.5s。把DOB打开以后,同样工况直流电压最大跌落幅度缩小到3%以内,恢复时间也缩短到0.1s左右。机理在于:跌落瞬间,电网电压突变被DOB快速估计出来,电流环在一到两个采样周期内就把补偿加进去,桥臂电压瞬时调整,维持了功率传输的连续性,直流电容没怎么“饿着”。
三相不平衡工况下的对比也很有意思。B相幅值降到0.8pu以后,没有DOB时直流母线出现了明显的100Hz纹波,纹波峰峰值约为平均值的3.2%。开启DOB后,纹波峰峰值降到0.9%左右。100Hz正好是不平衡比产生的负序分量在dq轴上的表现频率,它在DOB带宽之前,所以能被有效估计和补偿。不过要提醒一句,DOB只是把电流环层面的扰动抵消了,如果直流侧本身的功率脉动源自负载突变,那就属于另一类问题,别指望DOB全包。
三个场景的结果汇总:
| 工况 | 指标 | 无DOB | 有DOB |
|---|---|---|---|
| 谐波污染 | 电流THD | 4.8% | 1.5% |
| 电压跌落 | 直流电压最大跌幅 | 12% | 3% |
| 电压跌落 | 恢复时间 | 0.5s | 0.1s |
| 三相不平衡 | 直流母线100Hz纹波峰峰值 | 3.2% | 0.9% |
单看数字就知道,DOB对网侧扰动的抑制是整体性的,不是只对某一种故障有效。这也是我最后决定把DOB作为基准控制方案来用的原因。
5. 常见问题与调试心得
5.1 观测器发散或振荡
最开始搭DOB时,我遇到了最典型的问题:模型一开DOB,电流波形直接“炸了”,高频振铃铺满整个波形,直流电压也跟着抖。排查后发现是Q滤波器带宽取得太高,我把τ设成0.1ms,Q带宽接近3kHz,远超电流环的承受能力。DOB补偿在高频段相位滞后过大,跟电流环形成正反馈,系统自然就不稳定。
解决办法分两步。第一步是降带宽,把τ往回调到0.5ms左右,振荡幅度立刻变小;第二步是看DOB输出波形是否有高频毛刺,如果有,就在DOB输入端加一个低通滤波,或在反馈路径中插入一个单位延迟环节来打散代数环。这个“放个小延迟”的办法在离散仿真里很常用,代价是可以忽略不计的控制延迟,换来的是数值稳定性。
还有一种振荡来源是电流采样信号本身含有过大噪声。DOB的逆模型包含微分项,对噪声放大器,一旦采样噪声进去,DOB输出全是毛刺。这时不是继续调τ,而是先把测量信号filter干净,比如在电流反馈通道加一个二阶级联低通,截止频率设为开关频率的一半(5kHz),就可以把高频噪声消掉。
5.2 参数失配带来的隐患
DOB的补偿效果严重依赖标称模型的准确性。我在仿真中故意把模型里的L设置成实际值的80%(4mH代替5mH),再看DOB的扰动补偿效果,谐波THD就从1.5%回升到2.8%左右,电压跌落下的直流电压跌幅也扩大了一倍。这说明DOB并不是“开挂”:模型越准,补偿越狠;模型偏了,补偿就打折扣。
实际工程里L的标称值往往和真实值有偏差,尤其是磁芯电感会随电流饱和变化。如果你发现DOB效果不佳,先别急着调Q,检查一下L和R是否和实际模型对得上。有一种做法是做一个离线辨识,在Simulink里给对象加一个小幅阶跃,采集电流响应,拟合出实际L和R,再回填到DOB模块里。我试过这个流程后,THD又压回了1.6%附近,比凭感觉乱调参数靠谱得多。
另外,电阻R的温漂影响一般没有L那么致命,但如果你做的是高精度仿真,也可以把R设计成可参数变量,方便做敏感性分析。我在模型里用Mask封装了L、R、τ三个参数,改参数时不用动内部传函,直接改Mask里的数值就行,这个习惯强烈建议保留。
5.3 Simulink建模中的几个坑
第一个坑是代数环。DOB的标准块图里,补偿量d_hat反馈到控制输入端,而控制输入又参与d_hat的计算,这个循环如果直接连线,Simulink会报代数环警告。我的做法是DOB反馈支路不取u_ref而是取修正前的参考值u_aref,再在反馈路径上加一个小惯性环节,破坏闭环的瞬时依赖关系。仿真结果里我对比过,加上这个处理以后,低频扰动补偿效果几乎不受影响。
第二个坑是仿真步长。我一开始跑的是可变步长,DOB在高频段的表现时好时坏,波形看起来也不干净。换成固定步长1微秒以后,结果稳定很多,尤其在谐波工况下,电流波形的FFT分析不再出现莫名其妙的边频分量。
第三个坑和PI参数配合有关。DOB补偿虽强,但不是说原系统的PI参数可以乱来。开DOB后电流环的等效特性变了,如果原来的PI带宽已经接近稳定边界,DOB的加入可能把系统推过去。我建议开DOB前后都做一次闭环波特图分析,确保穿越频率和相位裕量满足要求。我的经验是DOB参数保持不变时,把电流环PI增益略微下调5%到10%,整体稳定性反而更好,扰动抑制能力几乎无损。
第四个坑是单位问题。Simulink里不同模块的单位提示未必一致,尤其是可编程电压源的幅值设置,默认的PEAK值还是RMS值一定看仔细。我曾在三相电压源里把幅值单位理解错,导致整个仿真基准电压差了根号3倍,DOB却照着错的信号“认真补偿”,结果自然是越补越乱。做这种抗扰动仿真,第一步必须核对所有模块单位的换算关系,别等波形不对了再一头扎进控制参数里找原因。
结尾
这套DOB方案最终帮我省了很多逐频率设计陷波器的功夫。实际仿真中我的体会是,DOB更像一个“兜底型”的扰动抑制层:它不需要你提前分析电网的扰动谱,只要模型参数基本准确、Q带宽选取合理,就能把未建模的、未知的、突发的外部扰动统一压制下来。对整流器这种强耦合、强非线性、还要面对复杂电网工况的对象来说,这个特质特别值钱。
最后再分享一个小技巧:DOB的Q滤波器和电流环的PI参数其实是两个可以独立整定的层次,优先把DOB调稳,再回头微调PI,会比两个参数一起动容易得多。这个思路在后续做LCL并网逆变器、微电网变流器时一样适用。希望这篇能帮你在Simulink里少走几步弯路。