光伏发电特性与建模

做光储充系统这么多年,我始终觉得光伏电池的建模是整个控制策略的基石。你想想看,连光伏板本身的脾气都没摸透,后面的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算法知识体系 光伏电池电气特性 I-V 曲线 P-V 曲线 短路电流 Isc 开路电压 Voc 最大功率点 MPP 填充因子 FF MPPT 最大功率点跟踪 扰动观察法 (P&O) 简单可靠,稳态振荡 电导增量法 (INC) 精度高,对采样要求高 选择建议:小功率用P&O,大功率用INC,光照多变场景优先INC

实战建议:如果你刚开始接触MPPT,先用扰动观察法跑通整个系统。等把光伏特性摸透了,再换成电导增量法优化效率。别一上来就搞复杂的,容易翻车。

专注资料整理