光伏发电特性与建模
做光储充系统这么多年,我始终觉得光伏电池的建模是整个控制策略的基石。你想想看,连光伏板本身的脾气都没摸透,后面的MPPT、储能调度根本无从谈起。今天咱们就好好聊聊光伏电池的电气特性,以及MPPT那些事儿。
光伏电池的电气特性
光伏电池说白了就是一个大面积的PN结。光照进来,电子空穴对产生,就有了电流。但它的输出可不是线性的,这就引出了两条最重要的曲线——I-V曲线和P-V曲线。
I-V曲线
我习惯把I-V曲线理解为光伏电池的「身份证」。横轴是电压,纵轴是电流。你注意看,在电压较低时,电流基本恒定,像个恒流源。但电压一旦超过某个拐点,电流就急剧下降,直到开路。
这条曲线有三个关键点:
- 短路电流Isc:电压为0时的电流,主要跟光照强度有关
- 开路电压Voc:电流为0时的电压,受温度影响很大
- 最大功率点:就是曲线上P=U×I最大的那个点
我在项目现场调试时遇到过一个问题:两块标称参数完全一样的光伏板,串在一起后总功率反而下降了。后来一查,原来是其中一块被局部遮挡了,I-V曲线严重失配。嗯,这就是典型的「热斑效应」——所以现在我做设计时,旁路二极管是必加的。
P-V曲线
P-V曲线更有意思。它是从I-V曲线算出来的,横轴还是电压,纵轴变成功率。这条曲线像个单峰的山丘——功率从0开始,先上升,到某个电压值达到顶峰,然后下降回0。
为什么会这样?
因为功率P=U×I。电压低时电流大但电压小,乘积不大;电压高时电压大但电流小,乘积也不大。只有在那个「黄金点」上,乘积才最大。这个点就是最大功率点(MPP)。
重要结论:光伏电池不是恒压源也不是恒流源,它是一个非线性电源。最大功率点会随着光照和温度的变化而移动。这就是为什么我们需要MPPT。
MPPT最大功率点跟踪原理
MPPT,全称Maximum Power Point Tracking。说白了就是让光伏板始终工作在P-V曲线的山顶上。
你想想看,光照一变,山顶的位置就变了。MPPT算法要做的就是:不管环境怎么变,都能快速找到新的山顶,并且稳定在那里。
我刚开始做光伏逆变器时,总觉得MPPT就是个简单的爬山问题。后来在西北一个电站调试,遇到多云天气,光照忽明忽暗,MPPT算法直接懵了——功率来回震荡,效率反而比固定电压法还低。那次教训让我明白:MPPT不仅要「找得准」,还要「稳得住」。
常见MPPT算法对比
目前工程上最常用的就两种:扰动观察法和电导增量法。我分别说说。
扰动观察法(P&O)
这个算法很直观:给电压加一个小扰动,看看功率怎么变。如果功率增加了,说明方向对了,继续朝这个方向扰动;如果功率减小了,就反方向扰动。
伪代码大概是这样的:
// 扰动观察法伪代码
float V_old, P_old;
float V_new, P_new;
float delta_V = 0.5; // 扰动步长
while(1) {
V_new = 读取当前电压();
P_new = V_new * 读取当前电流();
if (P_new > P_old) {
// 功率增加,继续同方向扰动
if (V_new > V_old) {
V_ref = V_ref + delta_V;
} else {
V_ref = V_ref - delta_V;
}
} else {
// 功率减小,反方向扰动
if (V_new > V_old) {
V_ref = V_ref - delta_V;
} else {
V_ref = V_ref + delta_V;
}
}
V_old = V_new;
P_old = P_new;
delay(采样周期);
}
优点很明显:实现简单,参数少。缺点也很致命:稳态时会在最大功率点附近来回振荡,而且光照突变时容易误判方向。
我的经验:扰动观察法适合光照变化缓慢的场景,比如屋顶光伏。步长选大了振荡大,选小了跟踪慢。我一般取开路电压的1%~2%作为步长,效果还不错。
电导增量法(INC)
电导增量法比扰动观察法「聪明」一点。它利用P-V曲线在最大功率点处斜率为0的特性——也就是dP/dV=0。
推导一下:P=VI,两边对V求导:
dP/dV = I + V × dI/dV
令dP/dV=0,得到:
dI/dV = -I/V
所以判断逻辑就是:
- 如果dI/dV > -I/V,说明在最大功率点左边,需要增加电压
- 如果dI/dV < -I/V,说明在最大功率点右边,需要减小电压
- 如果dI/dV = -I/V,恭喜,找到最大功率点了
伪代码:
// 电导增量法伪代码
float V, I;
float dV, dI;
float V_old, I_old;
while(1) {
V = 读取当前电压();
I = 读取当前电流();
dV = V - V_old;
dI = I - I_old;
if (dV == 0) {
if (dI == 0) {
// 稳定状态,保持
continue;
} else if (dI > 0) {
V_ref = V_ref + delta_V;
} else {
V_ref = V_ref - delta_V;
}
} else {
float inc = dI / dV + I / V;
if (inc > 0) {
V_ref = V_ref + delta_V;
} else if (inc < 0) {
V_ref = V_ref - delta_V;
} else {
// 找到MPP,保持
}
}
V_old = V;
I_old = I;
delay(采样周期);
}
注意:电导增量法对采样精度要求很高。我曾经在一个项目中用了12位的ADC,结果dI/dV计算出来全是噪声,根本没法用。后来换成16位ADC,配合滑动平均滤波,才算稳定下来。
两种算法对比
| 对比项 | 扰动观察法 | 电导增量法 |
|---|---|---|
| 实现复杂度 | 简单 | 中等 |
| 稳态振荡 | 有 | 较小 |
| 光照突变响应 | 可能误判 | 较好 |
| 采样精度要求 | 低 | 高 |
| 适用场景 | 光照稳定、成本敏感 | 光照多变、效率优先 |
我个人习惯是:小功率系统(几百瓦以内)用扰动观察法,简单可靠;大功率系统(几十千瓦以上)用电导增量法,效率能高个1%~2%。别小看这1%~2%,在大型电站里,一年下来就是几十万度电的差距。
仿真验证
纸上谈兵没意思,我建议你在仿真环境里跑一跑。用MATLAB/Simulink搭个光伏模型,光照用阶跃信号模拟,看看两种算法的跟踪速度和稳态精度。
仿真时要注意几点:
- 光伏模型参数要跟实际组件匹配,别用理想模型
- 采样频率要合理,一般取开关频率的1/10左右
- 加入噪声模拟,看看算法的鲁棒性
我曾经在仿真里发现一个有趣的现象:当光照从1000W/m²突然降到200W/m²时,扰动观察法会先往反方向跑,然后才折回来。这就是所谓的「误判」——因为功率变化到底是扰动引起的还是光照变化引起的,算法分不清。电导增量法就好很多,因为它同时考虑了电压和电流的变化率。
核心总结:光伏电池的I-V和P-V曲线是理解MPPT的基础。扰动观察法简单但粗糙,电导增量法精细但挑剔。选哪种,取决于你的应用场景和成本预算。没有最好的算法,只有最合适的算法。
实战建议:如果你刚开始接触MPPT,先用扰动观察法跑通整个系统。等把光伏特性摸透了,再换成电导增量法优化效率。别一上来就搞复杂的,容易翻车。