十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

三相离网逆变器比例谐振控制:原理、实现与工程坑位

三相离网逆变器比例谐振控制:原理、实现与工程坑位 三年前我调试第一台三相逆变器的离网样机时带阻性负载波形还算干净一旦接上整流桥负载输出电压的三、五、七次谐波立刻冒出来THD直接冲到6%以上。当时系统里用的是传统PI控制在dq旋转坐标系下来回调参效果始终不理想。后来把控制策略换成静止坐标系下的PR控制也就是比例谐振控制不到一周就把电压THD压回了2%以内。这篇博文就把PR控制从原理推导、离散化实现到三相离网双闭环架构和工程坑位完整梳理一遍给正在做三相逆变器离网控制的朋友一份可以直接落地的参考。1. 为什么离网电压控制最终走向PR——PI的两个绕不过去的坎1.1 离网控制不只是“稳住电压”它要“守住正弦波”三相逆变器离网运行本质上是把一个直流母线电压转换成一个频率、幅值都受控的三相正弦交流源。听起来简单但负载一变问题就来了电阻性负载还好整流桥、开关电源这类非线性负载会从输出端抽取大量谐波电流这些电流流过LC滤波器的电感直接在电容上产生谐波压降导致输出电压波形畸变。这里的核心矛盾是逆变器输出的不是“直流电压”而是一个随时间正弦变化的电压。控制目标不只是让平均电压落在某个值上而是让每一个时刻的输出电压都紧贴正弦给定。这比直流稳压难得多因为系统跟踪的不再是一个常数而是一个周期性时变信号。1.2 PI在静止坐标系下的稳态误差正弦信号上的“力不从心”很多初学者会想PI控制不是有积分项吗积分项不是能消除稳态误差吗理论上确实如此但仅限于直流给定。PI控制器中的积分项对直流误差是无限增益可正弦误差每一拍都在变化积分器刚累积一点修正量误差方向就变了最终结果就是永远消不掉的那部分稳态误差。从内模原理看更清楚闭环系统要无静差跟踪某个信号控制器里必须包含该信号的“生成模型”。PI里包含的是阶跃信号的模型即积分器1/s所以它能无静差跟踪直流而正弦信号50Hz生成模型是s²ω0²PI里根本没有这个东西自然谈不上无静差跟踪。实测中PI控制三相逆变器空载时电压还行一带线性负载输出电压就会出现幅值跌落和相位偏移这就是跟踪误差的直观体现。1.3 旋转坐标系PI的代价坐标变换、交叉耦合和控制延迟既然静止坐标系下PI搞不定正弦跟踪传统思路是绕开问题把三相静止坐标变换到dq旋转坐标系50Hz正弦量在dq轴下变成直流分量PI控制就能用了。这条路确实走得通并网逆变器里大量使用但代价不低需要锁相环或角度发生器实时计算sin/cos增加运算量。d轴和q轴之间存在交叉耦合电流环设计时要加入解耦项。坐标变换本身带来一拍延迟再加上滤波延迟相位裕度进一步被压缩。两个轴参数的对称性依赖角度精度角度一偏控制性能就变差。也就是说旋转坐标系PI是用“坐标变换的复杂度”去换“控制器本身的简单性”。而PR控制走的是另一条路不换坐标系了直接在静止坐标系里做正弦跟踪——控制器内部内置一个50Hz正弦信号的生成模型天生就能对该频率点提供极高增益。2. 谐振项的本质在50Hz处造一台“直流积分器”2.1 理想PR控制器一个比例项加一个谐振项PR控制器的传递函数标准形式是G(s) Kp Kr * s / (s² ω0²)其中Kp是比例项负责动态响应谐振项Kr*s/(s²ω0²)是核心。看这个谐振项的频率特性在ωω0时分母s²ω0²趋近于0整个分式增益趋向无穷大——这意味着控制器在基波频率点拥有和直流积分器一样“无穷大”的增益。这也解释了为什么PR控制器在静止坐标系下能无静差跟踪正弦给定它把直流积分器搬到了50Hz上。对应内模原理控制器内部包含了被跟踪信号的模型闭环系统对该信号就拥有零稳态误差的能力。对于三相逆变器离网控制这套逻辑完全成立因为离网逆变器的输出电压频率由自己决定谐振频率就是系统本身的输出基波频率不需要实时跟踪外部频率配合度极高。2.2 理想谐振器的问题频带太窄一偏就失效理想PR控制器里谐振项在ω0处增益无穷大但带宽几乎是零——只要实际频率偏离ω0一点点增益迅速跌落。问题是实际系统中存在频率偏移离网模式下负载突变可能带来瞬间频率波动数字控制中采样偏差、死区效应也会引入微小的频率漂移。工程上不会直接用理想形式而是改用非理想准比例谐振控制器G(s) Kp Kr * (2*ωc*s) / (s² 2*ωc*s ω0²)这里引入了ωc用来展宽谐振点的带宽。ωc取2~5 rad/s时对应带宽约0.3~0.8Hz既能覆盖工程上的频率偏移又不至于让谐振增益分散太多。实测中ωc取5 rad/s是我比较常用的值——抗频偏和稳态精度之间的平衡点很好。2.3 数学本质旋转坐标系PI就是静止坐标系PR一个早年让我印象深刻的结论是旋转坐标系下的PI控制数学上等价于静止坐标系下的PR控制。推导思路大致是dq同步旋转坐标系下的PI控制器输出经过反Park变换送到αβ静止坐标系再考虑Clark变换的映射关系折算到单一坐标系后控制器的等效传递函数恰好就是理想PR的形式G(s) Kp Ki * s / (s² ω0²)换句话说那些年在dq坐标系下辛辛苦苦做的坐标变换、角度计算、解耦控制本质上是绕了一大圈去实现一个静止坐标系下更简洁的控制器。这并不是说旋转坐标系PI没有价值——它在并网、不平衡控制等场景仍有不可替代的位置——但对三相离网电压控制而言PR用更少的运算、更清晰的逻辑拿到了同样的稳态精度和更快的动态响应。2.4 谐波补偿器多个谐振点并联专治非线性负载回到开头那个整流桥负载场景畸变波形里主要包含5次、7次、11次、13次谐波对应300Hz、350Hz、550Hz、650Hz。PR控制器有个天然优势可以在同一个控制器里并联多个谐振项每个谐振项对准一个需要抑制的谐波频率G(s) Kp Kr1 * (2*ωc1*s) / (s² 2*ωc1*s ω0²) Kr5 * (2*ωc5*s) / (s² 2*ωc5*s (5*ω0)²) Kr7 * (2*ωc7*s) / (s² 2*ωc7*s (7*ω0)²) ...每个谐波点的控制器都会对该频率成分形成高增益强迫输出电压在该频率处趋近于零误差。相当于在反馈回路里为5次、7次、11次谐波各放了一个“窄带积分器”让这些频率的扰动在闭合回路里被主动压制。5次和7次两个谐振点通常都能把THD压下来一大截11次和13次按需加即可——谐振器加得越多相位裕度损失越大这一点后面细说。3. 离散化与代码落地一份立即可用的PR控制器实现3.1 离散化方法对比为什么我只推荐双线性变换数字控制器里必须把连续域传递函数离散化。常见的离散化方法有前向欧拉、后向欧拉、双线性变换Tustin实际效果差异巨大离散化方法映射关系谐振频率保真度稳定性工程评价前向欧拉s(z-1)/Ts偏移明显可能失稳基本不用后向欧拉s(z-1)/(z*Ts)偏移明显稳定但精度差少用双线性变换s2(z-1)/(Ts(z1))基本无偏移极点映射正确推荐前向欧拉对谐振点的高增益频率会偏移离散化后极点还可能跑到单位圆外导致控制器本身不稳定后向欧拉虽然稳定但把连续域的谐振频率压低了。双线性变换把s平面的左半平面映射到z平面单位圆内极点位置准确谐振频率几乎不变。对50Hz这样的低频谐振点双线性变换在10kHz采样率下的精度完全够用。3.2 系数推导与实例计算10kHz采样、50Hz谐振以采样频率10kHzTs100μs、谐振频率50Hzω0314.159rad/s、带宽ωc5rad/s为例用双线性变换对非理想谐振项做离散化代入s2(z-1)/(Ts(z1))令A2/Ts20000整理后得到H(z) b0 * (1 - z⁻²) / (1 a1*z⁻¹ a2*z⁻²)其中b0 2*ωc*A / (A² 2*ωc*A ω0²) a1 2*(ω0² - A²) / (A² 2*ωc*A ω0²) a2 (A² - 2*ωc*A ω0²) / (A² 2*ωc*A ω0²)代入具体数值A20000A²4e82ωcA2520000200000ω0²314.159²≈98696分母4e820000098696≈400298696结果约等于b0≈0.0005 a1≈-1.998 a2≈0.999对应的差分方程为y[n] 1.998*y[n-1] - 0.999*y[n-2] 0.0005*(e[n] - e[n-2])注意a1接近-2、a2接近1这是谐振器离散化后的典型形态——它本质上是一个高Q值的数字振荡器对50Hz信号几乎没有衰减对其他频率信号则大幅抑制。实际实现时建议使用float甚至double因为b0非常小系数精度不够会产生明显误差。3.3 C语言实现比例支路直通谐振支路单独跑工程实现上我把比例项和谐振项拆开计算比例项输出直接等于Kp乘以误差谐振项用上面的差分方程单独跑。这样结构清晰也方便事后对谐振状态做限幅和抗饱和处理。typedef struct { float b0, a1, a2; // 离散化系数 float x1, x2; // 输入历史 e[n-1], e[n-2] float y1, y2; // 谐振输出历史 y[n-1], y[n-2] float kp, kr; // 比例增益和谐振增益 float out; // 控制器总输出 } PR_Controller; void PR_Init(PR_Controller *pr, float kp, float kr, float omega0, float omegac, float Ts) { float A 2.0f / Ts; float den A*A 2.0f*omegac*A omega0*omega0; pr-b0 2.0f*omegac*A / den; pr-a1 2.0f*(omega0*omega0 - A*A) / den; pr-a2 (A*A - 2.0f*omegac*A omega0*omega0) / den; pr-kp kp; pr-kr kr; pr-x1 pr-x2 0.0f; pr-y1 pr-y2 0.0f; pr-out 0.0f; } float PR_Update(PR_Controller *pr, float err) { // 谐振项差分方程 float y -pr-a1*pr-y1 - pr-a2*pr-y2 pr-b0*(err - pr-x2); // 更新历史状态 pr-x2 pr-x1; pr-x1 err; pr-y2 pr-y1; pr-y1 y; // 比例项直接叠加 pr-out pr-kp*err pr-kr*y; return pr-out; }在DSP或MCU的中断服务函数里每个采样周期调用一次PR_Update即可。上面这套代码我直接搬到过28335和STM32F407上跑逻辑完全一样只是注意ADC采样触发的时序要稳定采样间隔抖动会直接影响谐振项的品质。3.4 离散化之外的细节相位延迟与计算时序数字控制还有一个绕不开的问题——一拍延迟。从ADC采样到PWM更新输出中间存在至少一个采样周期的计算延迟这会在谐振频率附近引入额外相位滞后。对50Hz基波来说10kHz采样时一拍对应1.8度影响不大但对5次、7次谐波补偿器延迟分别是9度和12.6度累积起来会吃掉不少相位裕度。工程处理上我会在配置多个谐波补偿器时格外克制能不用就不加加了以后必须关注相位。一个稳妥的做法是让ADC采样点落在PWM载波的波峰或波谷此时电感电流纹波刚好过零采样值比较干净控制器在载波中断里算完下一周期更新占空比把整条链路的延迟固定下来。延迟是可控的但必须是确定性的否则PR控制器的相位特性很难校准。4. 三相离网控制的完整架构双闭环、坐标变换与参数整定顺序4.1 αβ坐标系下的两套独立PR不需要旋转坐标系三相离网逆变器的电压电流双闭环在αβ静止坐标系下实现时结构非常清爽对三相电压和电流做Clark变换把abc三相映射到αβ两相然后α轴和β轴各自独立跑一套PR控制器。两个轴的控制器一模一样参数完全相同不需要任何旋转角度、不需要交叉解耦。整体控制链路是Va Vb Vc采样 → Clark变换 → Vα Vβ → 电压PR控制器αβ各一个 → 电流内环αβ各一个一般用P或PI → 反Clark变换 → 三相占空比 → SVPWM或SPWM驱动Clark变换公式等幅值变换Vα (2/3)*(Va - 0.5*Vb - 0.5*Vc) Vβ (2/3)*(√3/2)*(Vb - Vc)三个输出变量被缩减为两个独立的控制通道每个通道就是一个单相PR控制问题设计难度直线下降。这也是我后来把方案从dq PI切换成αβ PR的根本原因——与其在同一个回路里硬处理三个变量不如把它拆成两个独立的单变量系统来设计。4.2 电压外环电流内环角色的明确分工离网控制在LC滤波后需要同时兼顾两个目标输出电压波形质量和动态性能。我把控制结构设计成双闭环电压外环对输出电压Vα、Vβ做PR控制输出作为电流内环的给定值。电压环是“管精度”的PR的谐振项保证稳态无静差谐波补偿器抑制非线性负载带来的波形畸变。电流内环对电感电流做比例控制P控制即可输出直接作为调制波。电流环是“管动态”的它把LC滤波器变成一个受控电流源让电压环面对的是一个线性化的电容对象同时也天然具备了限流能力。为什么电流内环用P控制就够了因为电流环的给定就是电压环的PR输出它本身就是正弦量PI也无法对这个正弦给定做到无静差跟踪这正是PR存在的意义。但电流环带宽通常比电压环高5~10倍比例控制带来的稳态误差在这么宽的带宽下已经被压制到工程可接受的范围。更重要的是电流环需要的是快速响应加入积分器反而会拖慢动态。4.3 参数整定顺序先电流环后电压环再上谐波补偿按环路带宽从高到低逐层整定是双闭环系统最合适的调参路径电流内环P参数断开电压环直接把电流环作为单位反馈。电流环被控对象近似为滤波电感L上的电压方程P参数大致可以这样估算Kp_i ≈ L * ωbw / Kpwm其中ωbw是期望电流环带宽工程上取开关频率的1/10~1/20即500Hz~1kHz。以L3mH、开关频率10kHz、期望带宽1kHz、Kpwm1为例Kp_i ≈ 0.003 * 2π * 1000 ≈ 18.85先取20左右起步观察电感电流波形逐步加大到动态响应满意而噪声可接受为止。电压环PR参数电压环被控对象在电流环闭合后近似为电容C的积分对象。Kp_v先按期望电压带宽粗估Kp_v ≈ C * ωbw_v取C30μF、电压环带宽500HzKp_v≈0.094。然后Kr从500开始往上加观察50Hz处跟踪误差和空载振荡情况。Kr越大稳态误差越小但太大容易在谐振点附近引入振荡实测中Kr在5000~20000之间比较常见。谐波补偿器逐个加先加5次谐振稳态波形改善后再加7次。每次增加后都要重新测试带载波形和动态响应确保相位裕度没有被过度消耗。4.4 带载实测从空载到非线性负载的表现我在实验室用一台30kW三相离网样机做过对比开关频率10kHzLC滤波器L3mH、C30μF母线电压600V输出线电压380V/50Hz。记录大致趋势如下空载PI和PR都能把电压稳住波形都接近正弦THD低。此时主要衡量的是LC滤波器的衰减特性控制器差异不明显。纯阻性负载PI出现轻微电压幅值跌落50Hz处跟踪误差导致相位偏移THD在3%左右PR的THD可到1%以内幅值和相位都跟得很紧。整流桥非线性负载PI控制下波形峰顶明显变平5次和7次谐波突出THD超过6%PR加上5次、7次谐波补偿后THD回落到1.5%以内波形已经接近纯正弦。负载突变从10%加载到100%PR控制下的电压跌落更小恢复时间约2~3个基波周期PI由于积分器响应慢恢复时间明显更长。这些实测数据说明一个工程施工中的朴素结论在静止坐标系下解决正弦跟踪问题比在旋转坐标系下反复打补丁要干净得多。5. 离网PR控制的工程坑与对策5.1 启动冲击与谐振项状态复位第一个要处理的隐患PR控制器的谐振项本质上是正弦积分器启动瞬间误差通常不为零如果谐振状态直接从这个误差开始积累输出会出现很大幅值的振荡严重时直接触发过流保护。处理办法有两个建议叠加使用输出电压给定从零开始斜坡上升软启动给谐振项一个缓慢建立的过程。启动阶段把PR控制器的历史状态量y1、y2、x1、x2清零让谐振器从一个干净的状态开始运转。我在样机上加了软启动之后启动瞬间的最大冲击电流从额定电流的120%降到了40%以内。很多PR控制器“看起来工作不稳定”其实是启动逻辑没做好。5.2 高频段的相位陷阱谐振谐波补偿器不是越多越好每个谐振项在谐振频率附近都会带来接近90度的相位滞后多个谐振器叠加以后高频段的相位被不断压低。当补偿器数量太多时在开关频率附近甚至可能出现整体相位穿越-180度的情况导致系统在某一个高频处开始啸叫或振荡此时被控对象本身的LC谐振峰空载时约531Hz会进一步加剧问题。应对手段按优先级排列谐振补偿器数量严格控制先满足5次、7次这些主要谐波源11次、13次视实测THD再定。电流内环的P参数不要贪大给电压环留下足够的稳定裕度。如果LC谐振峰确实压不住加入电容电流有源阻尼或并联阻尼电阻不要指望靠调PR解决。5.3 频率偏移时的带宽预留ωc不是随便取的离网模式下逆变器输出频率由自身给定决定理论上不存在大范围频率偏移。但负载突变瞬间、以及异步电机类负载的启动过程输出电压频率会出现短时波动。如果ωc取得太小比如1rad/s频率稍微偏一下就出了谐振带宽控制器增益骤降波形会瞬间劣化。工程经验值ωc取3~10 rad/s对应0.5~1.6Hz带宽既不损失太多稳态精度又能容忍短时频偏。我用的5 rad/s就是这个区间的中间值实测对负载突变时的波形维持效果不错。5.4 限幅饱和与抗饱和数字实现里最容易漏掉的一环PR控制器的输出最终要进PWM调制器必须有上下限幅。问题是谐振项的积分状态在输出饱和时还在继续累积等误差反向时状态量已经积到很大控制器输出要过很久才能从饱和区走出来——这也就是经典的windup现象。我的做法是抗饱和跟踪控制器输出经过限幅后记下实际输出与计算输出的差值。如果谐振项状态正在向饱和方向累积则把限幅差值叠加到谐振项输出上让谐振状态“往回拉”。实现上可以在PR_Update里加一段也可以用工程上更简单的方案饱和时将谐振项的历史状态冻结不更新或者对谐振状态做单独限幅比如钳位到输出限幅值的1.5倍。三种方案我都试过效果最稳定的是“计算输出与实际输出差值反馈回谐振状态”的方式参数不需要反复调。另外提醒一句谐振项状态千万不要在运行中随意清零。有人把抗饱和做成“饱和了就清零”结果每一次过饱和都会给输出一个阶跃冲击比不抗饱和还糟。正确处理是在饱和期间依然让谐振项按真实误差跟踪只是给它的积分路径加一个由限幅差值构成的“泄放通道”让状态量缓慢退出饱和区域。最后说一个调试技巧我在项目里习惯在控制器结构体中额外保存一个调试变量pr-y就是谐振项每一拍的实时状态。示波器观察这个变量可以直观看到谐振器是否在正常“工作”——谐振项输出应该是与误差同频的正弦波且幅值相对稳定。如果看到y的波形剧烈抖摆、或者被限幅顶死成平顶就能立刻判断出是启动没处理好、参数过激、还是抗饱和逻辑出了问题。三相逆变器离网控制的整体思路其实很一致把复杂的三相系统通过Clark变换拆成两套独立的单相控制通道再用PR控制器分别在αβ轴上完成正弦无静差跟踪最后用谐波补偿器压制非线性负载的特定频次畸变。这套方案我从样机阶段一直用到现在稳定性和可维护性都比当年调dq PI方案时省心太多。如果你也在和离网逆变器的正弦跟踪、谐波畸变较劲按这个路线走一遍应该能少走不少弯路。
返回列表