1. 这个项目到底在解决什么问题
并网装置做久了,对“电网电压跌落”这四个字特别敏感。不管你做的是光伏逆变器、储能PCS还是回馈式电子负载,前端只要并着公用电网,就绕不开这个问题:电网电压不是理想的三相正弦。尤其是不平衡跌落——典型场景是某条线路对地短路引起的单相或两相跌落——这时候电网电压里会同时出现正序分量和负序分量。逆变器如果还按正常工况那套正序控制去跑,输出电流立刻变成三相不对称,负序电流分量直接往下游灌,可能导致保护误动作、直流母线电压出现100Hz纹波,严重的时候模块直接炸掉。
这个项目的核心目标,说穿了就一句话:在电网电压出现不平衡跌落或者平衡跌落时,通过正负序分离控制,把负序电流消除掉,让并网电流始终保持三相对称。这里有两个工况要分开看:平衡跌落是三相电压同时下跌同样深度,不会产生负序电压,处理重点在低电压穿越和输出无功支撑;不平衡跌落会引入负序电压,处理重点在负序电流抑制,也就是标题里说的“正负序分离”。
1.1 两种跌落工况的本质区别
平衡跌落,比如三相同时跌到额定值的70%,其本质是电网电压矢量的幅值整体变小,频率和相位基本不变。站在αβ静止坐标系看,电压矢量还是在转,只是半径短了。这种工况下,逆变器面临的主要矛盾是“功率送不出去”:交流侧电压低了,要达到同样的功率就得拉大电流,很容易触发过流。所以平衡跌落的控制核心是限功率、发无功,维持直流母线电压稳定。
不平衡跌落则复杂得多。单相跌落时,三相电压幅值各不相等,用对称分量法拆开,会得到一组正序分量和一组负序分量。负序分量在αβ坐标系里是一个反向旋转的矢量,旋转速度同样是50Hz。这个负序电压加在并网电感两端,就会强行推动负序电流流过逆变器。如果控制环只盯着正序dq分量,对负序分量完全“视而不见”,那负序电流就是开环状态,大小只取决于电感阻抗——通常大得离谱,而且三相电流明显畸变不对称。
我对两类工况的看法是:平衡跌落是“电压不够用”的问题,不平衡跌落是“电压不干净”的问题。前者需要调整功率分配策略,后者需要先把电压里的“脏东西”分离出来,然后有针对性地堵住负序电流通路。
1.2 控制目标背后的工程取舍
很多刚接触这个方向的人会误以为,消除负序电流就是把负序电流指令设成零这么简单。实际上,消除负序电流是有代价的,代价就是瞬时功率不再恒定。
用瞬时功率理论看,不平衡电网电压下,逆变器输出的瞬时有功功率可以写成:
P(t) = P₀ + Pc₂·cos(2ωt) + Ps₂·sin(2ωt)
那个2ω项就是100Hz功率振荡。让负序电流等于零之后,负序电流本身不产生功率,但负序电压和正序电流的相互作用依然会产生100Hz功率脉动。这个脉动直接反映在直流母线电压上,表现为100Hz纹波。也就是说,负序电流消除得越干净,三相交流电流越对称,直流侧电压纹波反而可能越大。这是物理规律决定的,不是控制算法能绕过去的,必须在工程上接受这个折中。
明白这个取舍,你就知道为什么有些控制策略不追求负序电流为0,而是去追求“瞬时功率恒定”。那是另一种取舍:牺牲交流侧电流对称性,换取直流侧无纹波。这个项目明确要求维持三相电流对称,那控制目标就定死为负序电流指令等于零,后续所有环路设计都围绕这个目标展开。
2. 正负序分离:整个方案的基石
要做负序电流抑制,第一步永远是先拿到“负序分量”。正负序分离做不好,后面的控制全是空中楼阁。我实测下来,正负序分离的精度和动态速度,直接决定了负序电流抑制效果的上限。
2.1 正负序是怎么“混”在一起的
先把数学基础理清楚。三相不平衡电压经过Clarke变换到αβ静止坐标系:
v_αβ = v_α + j·v_β
这个矢量可以分解成正序旋转矢量和负序旋转矢量:
v_αβ = v_αβ⁺ + v_αβ⁻ = V⁺·e^(jωt) + V⁻·e^(-jωt)
正序矢量以角速度+ω旋转,负序矢量以角速度-ω旋转。在αβ坐标系里,两分量频率相同、转向相反,混合在一起变成椭圆形的李萨如轨迹。你直接用常规锁相环去锁,输出角度会带100Hz波动,锁出来的角度含混不清——这正是很多不平衡跌落控制失败的根源。
要拆开这两个分量,思路有两条线:一条线是在静止坐标系里做“延时相消”,利用正负序旋转方向相反的特性;另一条线是在同步旋转坐标系里做“滤波分离”,利用正负序变换到不同dq坐标系后的频率特征差异。
2.2 延时信号相消法的原理与实现
延时信号相消法,也就是常说的DSC(Delayed Signal Cancellation),是我个人用得最多、也最推荐入门掌握的方法。它的数学直觉很漂亮:把一个周期分成四份,把当前时刻的信号与延迟T/4后的信号做矢量加减。
在αβ坐标系中,正序分量旋转90°需要T/4时间,负序分量旋转-90°同样需要T/4时间。把当前值记为x(t),延迟T/4后的值记为x(t-T/4),那么:
正序分量提取: x_αβ⁺(t) = ½·[x_αβ(t) + j·x_αβ(t-T/4)]
负序分量提取: x_αβ⁻(t) = ½·[x_αβ(t) - j·x_αβ(t-T/4)]
为什么这么成立?因为对于正序分量,延迟90°等价于在原矢量上乘e^(-j·π/2),也就是-j;对于负序分量,延迟90°等价于乘e^(+j·π/2),也就是+j。代进去一算,前后两项恰好把同一个分量加成两倍、把另一个分量消成零。
展开成实部虚部,αβ两个轴的运算是这样的:
// 50Hz电网,采样率10kHz,T/4对应50个采样点 #define N_QUARTER 50 typedef struct { float buf_alpha[N_QUARTER]; float buf_beta[N_QUARTER]; int idx; } dsc_filter_t; void dsc_extract(dsc_filter_t *dsc, float v_alpha, float v_beta, float *v_alpha_p, float *v_beta_p, float *v_alpha_n, float *v_beta_n) { // 读缓存里的T/4前采样值 float alpha_delay = dsc->buf_alpha[dsc->idx]; float beta_delay = dsc->buf_beta[dsc->idx]; // 正序:0.5*[x(t) + j*x(t-T/4)] // j*x的实部是-beta_delay,虚部是+alpha_delay *v_alpha_p = 0.5f * (v_alpha - beta_delay); *v_beta_p = 0.5f * (v_beta + alpha_delay); // 负序:0.5*[x(t) - j*x(t-T/4)] *v_alpha_n = 0.5f * (v_alpha + beta_delay); *v_beta_n = 0.5f * (v_beta - alpha_delay); // 更新环形缓存 dsc->buf_alpha[dsc->idx] = v_alpha; dsc->buf_beta[dsc->idx] = v_beta; dsc->idx = (dsc->idx + 1) % N_QUARTER; }这段代码我在DSP上跑过很多遍,10kHz采样率下,50个点的环形缓存占不了多少内存,运算量也极小,中断里随手就能执行。注意缓存长度必须严格等于T/4对应的采样点数,电网频率偏移时要按实际频率动态调整,否则分离精度会下降。这个坑后面在常见问题里细说。
2.3 双同步旋转坐标系与陷波器方案
DSC不是唯一的分离手段。还有一条工程上非常成熟的路线:双同步旋转坐标系法。思路是同时构建两个旋转坐标系,一个以+ω正转,一个以-ω反转。正序电压变换到正转坐标系里是直流,变换到反转坐标系里就变成100Hz交流;负序分量则正好相反。
所以在正转dq坐标系里,用一个中心频率100Hz的陷波器滤掉负序分量,剩下的就是纯正序直流;在反转dq坐标系里同样处理,得到纯负序直流。典型陷波器传递函数:
H(s) = (s² + ωₙ²) / (s² + 2ζ·ωₙ·s + ωₙ²)
其中ωₙ = 2ω₀ = 200π rad/s,ζ取0.5到1之间。ζ太小则动态响应慢,ζ太大会在50Hz附近引入幅值衰减,需要折中。陷波器方案的优点是稳态精度高、对谐波有一定抑制能力,缺点是陷波器本身有暂态过程,跌落瞬间响应不如DSC直接。
我个人习惯:电压检测用DSC,电流控制用PR谐振调节器,PLL用带陷波的正序锁相环。这套组合动静态表现都很稳,而且每个环节单独出问题都好排查。
3. 不平衡跌落下的负序电流消除策略
正负序分离做出来之后,剩下的问题就是怎么把负序电流“按下去”。核心手段是双dq电流环结构,或者直接上静止坐标系PR控制器。两条路我都在工程里用过,各有利弊。
3.1 双dq电流环结构与控制逻辑
双dq电流环的基本思路是:正序电流和负序电流分别相对于各自同步旋转的dq坐标系进行控制。每个旋转坐标系下都有一套独立的PI调节器,正负序各两个轴,一共四个PI环。
以正序电流环为例,被控对象是并网电抗器(L或LCL),模型是:
L·di_d⁺/dt = v_d⁺ - R·i_d⁺ + ω·L·i_q⁺ L·di_q⁺/dt = v_q⁺ - R·i_q⁺ - ω·L·i_d⁺
PI输出经过解耦和电网电压前馈,生成调制波:
v_d_ref⁺ = Kp·(i_d_ref⁺ - i_d⁺) + Ki·∫(i_d_ref⁺ - i_d⁺)dt - ω·L·i_q⁺ + v_d⁺ v_q_ref⁺ = Kp·(i_q_ref⁺ - i_q⁺) + Ki·∫(i_q_ref⁺ - i_q⁺)dt + ω·L·i_d⁺ + v_q⁺
负序电流环的方程几乎一样,但有一个关键细节:负序dq坐标系以-ω旋转,交叉耦合项符号相反:
L·di_d⁻/dt = v_d⁻ - R·i_d⁻ - ω·L·i_q⁻ L·di_q⁻/dt = v_q⁻ - R·i_q⁻ + ω·L·i_d⁻
所以负序环的解耦项是:
v_d_ref⁻ = Kp·(i_d_ref⁻ - i_d⁻) + Ki·∫(i_d_ref⁻ - i_d⁻)dt + ω·L·i_q⁻ + v_d⁻ v_q_ref⁻ = Kp·(i_q_ref⁻ - i_q⁻) + Ki·∫(i_q_ref⁻ - i_q⁻)dt - ω·L·i_d⁻ + v_q⁻
这个符号问题我见过不止一个工程师栽过跟头。负序环解耦符号错了,轻则耦合振荡,重则负序电流越控越大,甚至发散。调试时如果发现负序电流纹波异常、环路有持续振荡,第一时间检查这里。
3.2 电流指令生成:负序指令强制置零
明确了双环结构,指令怎么给就很清楚了。既然项目要求“消除负序电流、维持三相电流对称”,那负序dq轴的电流参考值直接置零:
i_d_ref⁻ = 0 i_q_ref⁻ = 0
正序电流指令则按照系统运行需求来定。并网逆变器通常由直流母线电压外环输出正序d轴电流指令,无功功率环或自定义LVRT逻辑输出正序q轴电流指令。整流回馈工况下,有功方向反过来走,但控制结构一模一样——直流母线电压环依然是外环,电流环依然是核心内环,正负序分离和负序抑制完全通用。
这套做法的本质是:让逆变器在负序电压上主动输出一个与电网负序电压等幅同相的反向电动势,把负序电压在电感上产生的压降抵消掉,从而切断负序电流通路。光看方程可能觉得抽象,打个比方:负序电压是个“推手”,不断把负序电流往逆变器里推,负序电流环的工作就是生成一个恰好相反的力顶回去。推力和顶力相等,负序电流就是零。
3.3 功率振荡与直流母线电压的权衡
回到第1节说的那个取舍。负序电流为0之后,瞬时功率里仍然存在100Hz振荡分量,幅值大致正比于负序电压幅值和正序电流幅值的乘积。这样一来,直流母线电压会出现100Hz纹波。
纹波大小取决于母线电容容值和功率振荡幅值:
ΔV_dc ≈ P_oscillation / (2·ω·C_dc·V_dc)
比如30kW系统,负序电压跌落深度20%,100Hz功率振荡幅值可能有5kW上下,在V_dc=700V、C_dc=3mF时,纹波大约在±12V量级。如果这个纹波超过了后端设备容忍度,要么加大母线电容,要么调整控制目标——放弃“负序电流为零”,改成“瞬时功率恒定”,后者会注入一部分负序电流来抵消2ω功率项,代价是交流电流不再对称。
注意:有的方案试图同时做到“负序电流为零”和“直流母线无100Hz纹波”,这在物理上是不成立的。任何宣传这种效果的技术方案,要么牺牲了别的指标,要么只是在某个特定功率因数点上近似成立。项目选型时心里要有这本账。
4. 平衡跌落下的低电压穿越控制
不平衡跌落搞清楚之后,平衡跌落反而显得“单纯”,但它同样有自己的一套门道,而且在实际电网故障中发生频率不低,处理不好一样脱网。
4.1 平衡跌落的检测与正序PLL的配合
平衡跌落时,三相电压对称跌落,负序分量理论为零。用DSC或者陷波器分离出来的正序电压幅值直接反映跌落深度。这时PLL锁的是正序角度,由于不存在负序干扰,锁相角度干净稳定,电流环按正常正序dq控制走即可。
检测回路我建议做一个动态标定:正常运行电压幅值记为V_nom,跌落时实时计算的V⁺幅值与V_nom相除得到标幺跌落深度。标幺值要经过一阶低通滤波再做逻辑判断,避免跌落瞬间采样噪声导致误判。滤波时间常数取5~10ms比较合适,既要躲开干扰,又不能让保护动作太慢。
4.2 无功支撑电流指令计算
平衡跌落期间,并网导则普遍要求逆变器“不脱网、发无功”,具体就是根据电压跌落深度输出无功电流。主流导则的思路基本一致:跌落越深,越要优先发无功稳住电网电压。无功电流指令的通用写法:
i_q_ref = K·(1 - V_pu)·I_rated
其中V_pu是并网点正序电压标幺值,K的取值不同导则略有差异,一般在1.5到2之间。K=2的含义是电压跌落10个百分点,就要输出20%额定电流的无功电流,方向是超前(发出感性无功)。
举个例子:额定电流100A,电压跌落到0.85 p.u.,即跌落0.15,若K=2,则i_q_ref=2×0.15×100=30A。这个数字直接作为正序q轴电流指令,替代正常运行时的无功指令。
4.3 有功电流限幅与优先级
发无功的同时不能忽略过流风险。跌落导致交流电压降低,如果还维持原来的有功功率,并网电流必然超限。所以有功电流指令必须让位于无功电流指令:
i_d_ref_max = √(I_max² - i_q_ref²)
比如峰值电流限幅I_max=120A,iq_ref=30A,那么id_ref上限就是√(120²-30²)≈116A。有功电流实际值不能超过这个限幅,多余的能量要依靠直流母线电压外环自动退功率,或者由上层能量管理系统降低输入功率来消化。
我做平衡跌落调试时有个体会:有功退得不够快是LVRT失败的常见原因,不是无功发不出来,而是有功电流没有及时限幅,导致电流瞬时超限,逆变器自我保护跳闸。所以有功限幅逻辑必须嵌在电流指令生成环节,而不是放在逆变器保护出口——前面没拦住,后面保护动作就已经晚了。
5. 实操过程与关键参数
前面把原理捋完了,这部分给出一个可以直接参考的配置样例和调试过程。我以一套30kW并网发电/整流回馈两用装置为例,电网380V/50Hz。
5.1 系统参数与电流环设计
| 参数 | 数值 | 备注 |
|---|---|---|
| 额定功率 | 30kW | 逆变/整流双向 |
| 电网电压 | 380V / 50Hz | |
| 直流母线电压 | 700V | |
| 开关频率 | 10kHz | |
| 采样频率 | 10kHz | 与开关同步采样 |
| 并网电感L | 1.2mH | 0.1 p.u.左右 |
| 寄生电阻R | 0.05Ω | 电抗器铜阻 |
| 直流母线电容 | 3mF | 支撑100Hz纹波 |
| 额定电流峰值 | 64A | 10kHz采样下 |
电流环PI参数按典型Ⅰ型系统整定。忽略数字控制延时,电流环对象是L+R一阶惯性环节。我希望电流环带宽在600~800Hz,对应角频率约4000~5000rad/s。取带宽ω_c=5000rad/s,比例系数Kp≈ω_c·L≈5000×0.0012≈6,积分系数Ki按零点放在100Hz附近取≈6000。实际调试中考虑到DSP一拍延时和采样零阶保持器,我把Kp调到5.5、Ki调到5000,实测阶跃响应超调约20%,调节时间不足1ms,够用。
注意事项:Kp不是越大越好。开关频率10kHz,电流环带宽能做到1kHz已经很高了,超过太多会出现离散化引起的临界振荡。带LCL滤波器的系统还要避开LCL谐振峰,通常要加有源阻尼,这里用单L示意,LCL的阻尼策略是另一个话题,不展开。
5.2 跌落工况仿真与波形验证
在正式上强电平台之前,我习惯先用仿真做一遍全工况验证。仿真场景设两组:一组是不平衡跌落——A相电压跌到0.7p.u.,B、C相保持1.0p.u.,持续600ms;另一组是平衡跌落——三相同时跌到0.7p.u.,持续625ms,模拟典型故障清除时间。
仿真里的控制结构包括:带100Hz陷波的SRF-PLL锁正序角度、DSC正负序分离、正负序双电流环、负序指令置零、LVRT无功优先逻辑。运行结果的核心特征如下:
不平衡跌落投入负序抑制后,三相并网电流正弦度良好,A相电流幅值不再被负序分量拉偏,三相幅值基本一致。对比不投入负序抑制的对照组,负序电流从大约额定值25%降到3%以内,效果非常明显。代价是直流母线出现明显100Hz正弦纹波,峰峰值约20V,在3mF电容下处于可接受范围。
平衡跌落组则表现为三相电流同步增大(因为电压降了、功率短时内没变),无功电流按LVRT指令快速上升,有功电流被限幅器压住。直流母线电压在跌落瞬间有约30V短暂跃升,随后被电压环拉回。恢复瞬间电流有一个约1ms的冲击尖峰,通过指令斜坡软化后消失。
5.3 硬件在环与录波检查清单
硬件平台上的调试,我会按下面这个清单逐步推进:
- 先不带电网,用对拖平台或可编程交流源模拟电网电压,把正负序分离模块拉出来看波形。检查DSC分离出的负序分量在正常对称电压下是否接近零,允许几伏以内的残差。
- 上弱电给定,验证电流环跟随:正序环给定阶跃,看d/q轴电流响应;负序环同样给阶跃,确认负序电流能稳稳控制住,且没有与正序环发生耦合振荡。
- 用可编程电源注入不平衡电压,观察跌落瞬间负序电流的暂态过程。重点关注前5~10ms的动态偏差,DSC在这个窗口内有半个周期的过渡误差,负序电流会有短暂超调,超调量不大就可接受。
- 记录跌落期间直流母线电压纹波,与理论估算对比。如果纹波比预期大很多,检查是不是采样延时导致负序抑制相位滞后。
- 做一组不同跌落深度的扫描测试,确认负序电流抑制在20%~80%跌落深度范围内都稳定。
6. 常见问题与排查技巧实录
这部分写几个我实操中真实踩过、也帮别人排查过的典型问题,每一个背后都有具体的故障现象和结论,可以直接当成排障手册用。
6.1 跌落瞬间PLL角度抖动导致电流畸变
故障现象:不平衡跌落投入瞬间,三相电流出现明显的畸变尖峰,持续几十毫秒,之后恢复。
排查过程:抓PLL输出角度和正序dq电压波形,发现跌落瞬间θ存在明显摆动,dq电压分量并非纯直流,而是叠加了100Hz分量。根因是普通SRF-PLL在不平衡电压下跟踪的是“正序+负序”的合成矢量,角度自然带100Hz脉动。跌落瞬间负序分量突增,角度脉动加剧,电流环坐标变换跟着受扰。
解决办法:在PLL的dq测量值后加100Hz陷波器,或者改用带DSC预分离的正序锁相环。我最终用的是后者:先把电压经DSC提取正序分量,再送给SRF-PLL锁相。这样PLL看到的永远是纯正序直流,角度平稳,负序分量进不了锁相环。
6.2 负序电流消除不干净,残余量始终在5%以上
故障现象:负序电流指令已置零,但实测负序电流残余接近额定值5%~8%,怎么调PI都压不下去。
排查过程:先怀疑是负序环PI带宽不够,于是把负序环Kp调大,结果残余没有明显改善,反而出现了振荡。回头检查DSC分离出的负序电压,发现幅值和相位与理想值有偏差——电网频率只要偏差0.2Hz,T/4延时对应的缓存长度就不准了。
解决办法:按实际电网频率动态修正缓存长度,或者在过零检测或者PLL频率输出处取实时频率换算缓存点数。把这一处修正后,负序残余降到2%以内。
6.3 直流母线100Hz纹波偏大,后端设备报警
故障现象:控制效果正常,三相电流对称,但直流母线纹波超过了母线电容后端逆变器的耐受范围。
排查过程:计算功率振荡幅值,发现设计时低估了负序电压的深度。电网单相跌落深度达到50%时,负序电压约为0.167p.u.,与满载正序电流作用产生的100Hz功率振荡会超过10kW,对应700V、3mF电容的电压纹波达到接近50V峰峰值,确实太大。
解决办法:一是增大母线电容,例如把3mF提高到5~6mF;二是在容量受限时切换控制目标,注入适量负序电流来抵消部分功率振荡,把直流纹波压回允许范围,此时交流电流会轻微不平衡,但系统能维持运行。现实中很多储能PCS就是这么折中处理的。
6.4 平衡跌落恢复瞬间电流冲击
故障现象:故障清除、电网电压恢复瞬间,三相电流突然冲到限幅值,伴随轻微过流保护报警。
排查过程:恢复瞬间正序电压突增,电流环给定还在LVRT期间的高值,电压前馈项和PI积分器状态需要重新收敛,于是产生电流尖峰。
解决办法:在检测到电压恢复后,给电流参考值加一个5~10ms的斜坡过渡,同时把积分器清零或快速拉回正常工况初值。我还在控制逻辑里加了一个“工况切换状态机”,让电流指令在正常运行、LVRT、恢复三个状态之间平滑迁移,切换冲击被压到可以忽略的程度。这个状态机的价值在于它把所有边界情况都显式管理起来了,而不只是靠PI自身调节去扛。
6.5 正负序电流环互相耦合的排查心得
负序环投入后,发现正序d轴电流出现了同频率的小幅振荡,两个环之间“串味”。
这种现象多数出在坐标变换角度上:如果正序PLL角度和负序dq坐标系的旋转角度不是严格互补关系,或者说正负序坐标系的变换矩阵没有严格对齐,正负序电流就会被错误混叠。我的排查顺序是:先核对变换矩阵和旋转角度代码——正序角度用θ,负序角度用-θ,并保证两者差值的更新步调完全一致;再检查解耦项符号;最后查采样时序,确认正负序电流采样没有时间偏差。大多数时候问题出在前面两个,第三个问题往往只在采样频率和开关频率不同步时出现。
7. 一点落地经验
这个项目做完之后,我最大的体会是:不平衡跌落的控制难点不在那套花花绿绿的变换公式,而在工程细节的一致性。正负序分离方法再好,PLL角度带纹波就全白搭;负序环解耦符号错一个,PI再狠都控不住;DSC缓存长度差一个采样点,分离精度直接拉垮。每一项单独拿出来都不难,难的是把它们组合在一起的时候,任何一环出问题都会把其他地方的表现拖下水。
另外,调试顺序也很重要。先独立验证正负序分离准确,再验证PLL纯净,然后是单环电流控制,最后才做跌落工况的联合调试。跳步调试大概率会浪费大量时间在“相互推诿”的故障现象上——电流波形难看,你分不清是分离不干净还是电流环没调好还是锁相角度在抖。
最后分享一个小技巧:给控制代码里每个关键环节(PLL角度、正负序幅值、负序电流指令、直流母线纹波)预留一个调试DAC输出口,上硬件测试时用示波器实时盯着这些内部量。这比事后翻录波文件定位问题快得多,特别是排查跌落瞬间那种毫秒级的暂态过程时,能看到实时的内部控制量变化,故障原因基本一眼就能看出来。这个习惯我从第一个并网项目用到现在,省下来的调试时间足够把整套算法重新捋两遍。