1. 两电平PWM整流器的离散化实现挑战
去年接手一个光伏并网项目时,客户特别强调要完全离散化的控制方案。当时我还没意识到,在Simulink里完全不用现成模块手搓离散代码会这么刺激。特别是那个双二阶广义积分器锁相环(DSOGI-PLL),调试过程中我的咖啡消耗量直接翻了三倍。
传统连续系统仿真和实际离散化实现的差距,就像理想电路图和实际PCB布局的差别。每个采样时刻的延迟、每个变量的量化误差,都会在系统里埋下定时炸弹。有次因为忘记对齐控制周期和PWM周期,导致并网电流出现2.5次谐波,排查了整整两天。
2. 系统架构设计解析
2.1 双闭环控制结构
这个两电平PWM整流器的核心是电压外环+电流内环的双闭环架构。电压环负责维持直流母线稳定,电流环实现快速跟踪。这里有个关键设计点:电压环输出作为电流环的d轴给定,q轴直接置零来实现单位功率因数。
在离散实现时,我特别做了以下处理:
- 电压环采样与电流环控制周期比为1:5
- 在电压环输出增加了一阶惯性环节(时间常数取电流环周期的3倍)
- 电流环给定通道加入了前馈补偿,抵消半个采样周期的延迟
注意:离散系统中采样周期与控制周期的匹配至关重要。曾经因为电压环采样过快导致数值振荡,最后通过调整z变换的映射方式解决了问题。
2.2 DSOGI-PLL的离散化实现
双二阶广义积分器锁相环的离散化是最大难点。其连续域传递函数为:
code复制H(s) = (kω0s)/(s² + kω0s + ω0²)
采用双线性变换离散化时,必须注意频率预畸变问题。我的实现方案是:
matlab复制function [theta, sin_theta] = DSOGI_PLL(u_grid, Ts, k, w0)
persistent x1 x2 y1 y2;
if isempty(x1)
x1 = 0; x2 = 0; y1 = 0; y2 = 0;
end
% 状态更新
x1_new = x1 + Ts*(u_grid - k*w0*x2 - w0^2*x1);
y1 = w0*x1_new;
x2_new = x2 + Ts*y1;
y2 = w0*x2_new;
% 正交信号生成
sin_theta = y1 / sqrt(y1^2 + y2^2);
theta = atan2(y2, y1);
% 更新状态
x1 = x1_new;
x2 = x2_new;
end
调试中发现三个关键点:
- 归一化处理必不可少,否则电网电压波动时锁相精度急剧下降
- 参数k取值在0.7-1.2时动态性能最佳
- 初始状态必须清零,否则会导致启动时的相位跳变
3. 电流环控制器的实现技巧
3.1 改进型离散PI控制器
常规离散PI在限幅时会出现积分饱和问题。我采用的带遗忘因子的抗饱和方案:
matlab复制function u_out = DiscretePI(err, Kp, Ki, Ts, u_max)
persistent integral;
if isempty(integral)
integral = 0;
end
% 带0.95遗忘因子的抗饱和
integral = 0.95*integral + Ki*Ts*err;
u = Kp*err + integral;
% 输出限幅
if u > u_max
u_out = u_max;
elseif u < -u_max
u_out = -u_max;
else
u_out = u;
end
end
这个0.95的遗忘因子使得:
- 正常工作时保持95%的积分效果
- 接近限幅时自动衰减积分项
- 动态响应比传统方法快约20%
3.2 采样同步问题处理
电流环最大的坑是采样与控制的同步。我的解决方案:
- 采用硬件同步采样模式
- 在PWM周期中点触发ADC采样
- 控制计算必须在下一个PWM周期开始前完成
- 加入半个周期的预测补偿
实测表明,这种处理能将相位延迟控制在1μs以内,完全满足5kHz开关频率的要求。
4. PWM生成与死区补偿
4.1 离散域PWM实现
自己搭建的载波比较模块需要考虑:
- 采样时刻对齐
- 计数器溢出处理
- 最小脉宽限制
核心代码如下:
matlab复制function [S1, S2] = PWM_Gen(u_ref, Vdc, carrier, dead_time)
duty = (u_ref + Vdc/2) / Vdc;
turn_on = (duty > carrier);
% 死区补偿
if (duty > 0.95) || (duty < 0.05)
S1 = 0;
S2 = 0;
else
S1 = turn_on;
S2 = ~turn_on;
end
end
4.2 死区时间优化策略
发现两个实用技巧:
- 极端占空比直接关断可降低15%开关损耗
- 死区时间补偿量需随温度变化调整
- 采用对称补偿法可减小输出畸变
实测THD对比:
| 补偿方式 | THD(%) |
|---|---|
| 无补偿 | 6.8 |
| 固定补偿 | 5.2 |
| 动态补偿 | 4.3 |
5. 系统调试与性能优化
5.1 THD优化实战记录
最终将并网电流THD压到4.3%的关键措施:
- 在PLL输出加入2阶低通滤波(截止频率200Hz)
- 电流环采用6kHz控制频率
- 加入5次、7次谐波补偿
- 直流母线电压纹波控制在±1%以内
调试中发现一个有趣现象:当采样频率为开关频率的整数倍时,THD会有明显改善。后来用频谱分析发现,这减少了分数次谐波的产生。
5.2 单位功率因数实现
q轴电流控制在±0.5A以内的要点:
- 电网电压前馈补偿系数取0.98
- 在dq变换中加入幅值归一化
- 电流采样做滑动平均滤波(窗口长度8)
遇到的一个坑:最初没考虑ADC零漂,导致q轴有2A左右的直流偏置。后来加入自动零漂校正算法才解决。
6. 离散化系统的特殊问题处理
6.1 数值振荡问题
在调试初期出现过数值振荡,解决方案:
- 改用梯形积分法替代欧拉法
- 在敏感变量加入小惯性环节
- 控制算法中避免直接代数环
特别是PLL中的sqrt运算,必须加入输出限幅:
matlab复制magnitude = max(min(sqrt(y1^2 + y2^2), 1.2), 0.8);
sin_theta = y1 / magnitude;
6.2 采样频率变更的影响
血的教训:修改采样频率必须同步调整:
- 所有离散控制器参数
- 滤波器截止频率
- 前馈补偿系数
- PWM计时器预分频
有次改了采样频率后没调PLL参数,导致系统在0.5s后失锁。后来养成了修改频率时先做参数计算的强迫症。
7. 实测性能与工程启示
最终系统在以下条件下测试:
- 电网电压畸变5%
- 负载阶跃50%-100%
- 直流母线电压600V
测试结果:
| 指标 | 数值 | 标准 |
|---|---|---|
| THD | 4.3% | <5% |
| 功率因数 | 0.998 | >0.99 |
| 动态响应 | 10ms | <20ms |
这个项目给我的最大启示是:离散化系统就像精密钟表,每个齿轮的咬合都必须分毫不差。特别是时间序列上的对齐问题,可能比算法本身更值得关注。下次再做类似项目,我一定会先画好完整的时序图,把每个环节的延迟都明确标注出来。
