光伏发电系统。 扰动观察法PO。 SVPWM调制。 电压电流双闭环三相并网。
prev_power = calculate_power(voltage) voltage += delta_v # 试探性调整电压 current_power = calculate_power(voltage) if current_power > prev_power: direction = 1 # 继续当前方向 else: direction = -1 # 调头这里delta_v的步长选择有讲究,就跟登山时跨步大小似的。步长太大容易在山顶附近来回蹦跶,太小了追踪速度又跟不上日照变化。实际工程里得做个变步长策略,类似这样:
// 自适应步长调整 if (fabs(power_delta) < 5) { // 功率变化小时 step *= 0.8; // 减小扰动幅度 } else { step = INITIAL_STEP; // 恢复初始步长 }搞定MPPT之后,得把直流电转成交流并网,这就轮到SVPWM出场了。这技术可比传统PWM聪明多了,像拼七巧板一样组合电压矢量。看这个关键判断扇区的代码:
% 计算参考矢量所在扇区 Vref_alpha = Vd*cos(theta) - Vq*sin(theta); Vref_beta = Vd*sin(theta) + Vq*cos(theta); sector = floor((atan2(Vref_beta, Vref_alpha) + pi/6)/(pi/3)) + 1);不过实际DSP里不会用浮点运算,通常用查表法优化。最近在调试时发现个坑——矢量作用时间超限时要做饱和处理,否则波形会畸变:
// 矢量作用时间限幅 t1 = (t1 > Tmax) ? Tmax : (t1 < 0 ? 0 : t1); t2 = (t2 > Tmax) ? Tmax : (t2 < 0 ? 0 : t2); t0 = Ts - t1 - t2; // 零矢量时间补偿最后说到电压电流双闭环,这玩意儿就像开手动挡汽车——电流环是离合器的微操,电压环把控油门。并网时最怕的是相位不同步,这里头的锁相环实现很关键:
# 软件锁相环核心部分 phase_error = grid_voltage_q / grid_voltage_d # q轴分量反映相位差 frequency += Kp * phase_error + Ki * integral_term phase_angle += frequency * Ts # 积分得到相位调试时发现前馈补偿能显著提升动态响应。比如在电流环里加入电网电压前馈:
// 带前馈的电流环输出 Vc_d = (Id_ref - Id_meas)*Kp + feedforward_voltage;实测波形显示,加入前馈后并网电流THD从3.2%降到了1.8%。不过要注意前馈量太大会引发振荡,得配合滤波器使用。
光伏发电系统。 扰动观察法PO。 SVPWM调制。 电压电流双闭环三相并网。
整个系统联调时最头疼的是参数整定。后来摸索出个土办法:先调电流内环,用阶跃响应看超调;电压外环先用小比例系数,慢慢往上加。记得那次调了三天参数,最后发现是PWM死区时间设错了,白折腾那么久——所以底层配置寄存器时一定要对着手册逐位确认。