MPPT算法(恒定电压、扰动观察、电导增量)介绍与实现过程

MPPT算法(恒定电压、扰动观察、电导增量)介绍与实现过程目录 1 太阳能板的特性曲线 2 固定电压法 3 MPPT P amp O 算法 4 电导增量算法 5 系统实现方案 1 太阳能板的特性曲线 太阳能板也叫光伏电池 是通过光电效应 把光能转换为电能的设备 先介绍太阳能板的特性 太阳能的额定参数是在地面光伏组件标准测试条件 STC 条件下测量得到的

大家好,我是讯享网,很高兴认识大家。

目录

1、太阳能板的特性曲线

2、固定电压法

3、MPPT-P&O算法

4、电导增量算法

5、系统实现方案


1、太阳能板的特性曲线

太阳能板也叫光伏电池。是通过光电效应,把光能转换为电能的设备。

先介绍太阳能板的特性。太阳能的额定参数是在地面光伏组件标准测试条件(STC)条件下测量得到的。

STC有三个条件:第一、光线通过大气的实际距离为大气垂直厚度的1.5倍。第二、指标准测试太阳电池的光线的辐照度为1000W/m2。第三、在25ºC的温度下工作。

STC条件会影响光伏电池的开路电压和短路电流。有补偿公式。以下是用Matlab或者Octave绘制光伏电池特性曲线的代码。其中额定值可以通过规格书查找得到,这里影响曲线的可以修改的参数有:1、到达太阳能板表面的太阳辐射为Sref;2、太阳能板工作温度为25摄氏度。开路电压Uoc,短路电流Isc,最大功率时电压Um,最大功率时电流Im。a、b、c都是经验值,经过补偿后就可得到修正后的开路电压Uoc_comp和短路电流Isc_comp。

clear clc %----------------------------------------------- %----------------------------------------------- %pannel in series %first pannel S_1=1000; Tair_1=25; Sref=1000; %1000W/m^2 Tref=25; %25degree celcius Uoc=44.2; Um=35.4; Isc=5.29; Im=4.95; a=0.00255; b=0.55; c=0.00285; T_1 = Tair_1 + 0.028*S_1; T_delta_1 = T_1 - Tref; S_delta_1 = S_1/Sref - 1; Isc_comp_1 = Isc*S_1/Sref*(1+a*T_delta_1); Uoc_comp_1 = Uoc*(1-c*T_delta_1)*log(e+b*S_delta_1); Im_comp_1 = Im*S_1/Sref*(1+a*T_delta_1); Um_comp_1 = Um*(1-c*T_delta_1)*log(e+b*S_delta_1); C2_1=(Um_comp_1/Uoc_comp_1-1)*(log(1-Im_comp_1/Isc_comp_1))^(-1); C1_1=(1-Im_comp_1/Isc_comp_1)*exp(-Um_comp_1/(C2_1*Uoc_comp_1)); U_1=0:0.01:Uoc_comp_1; Iph_1=Isc_comp_1*(1-C1_1*(exp(U_1/(C2_1*Uoc_comp_1))-1)); figure(1) plot(U_1,Iph_1,'r') xlabel('U/V') ylabel('I/A') title('U-I') figure(2) P_ss = U_1 .* Iph_1; plot(U_1,P_ss) xlabel('U/V') ylabel('P/W') title('U-W')

讯享网
单个光伏电池的特性曲线

讯享网
(a) 电压-电流特性曲线 (b) 电压-功率特性曲线

曲线上,每一个点都是光伏电池的工作点。即,光伏电池在正常工作时,假如不是外部因素的改变,得到光伏电池的工作电压,即可在曲线中获得光伏电池的电流、功率。

从电压-功率特性曲线可看出,在当前的环境条件下,太阳能板的最大输出功率为曲线的峰值。这是太阳能板达到最大的能量转换效率。由于能量守恒,太阳能板获得的光能为其输出的电能加上发热量。因此需要通过控制太阳能板的工作电压或者工作电流,让太阳能板工作在最大功率点。这种算法叫最大功率点跟踪(Maximum Power Point Tracking)

2、固定电压法

 根据经验,单节太阳能板的最大功率点,都在开路电压Uoc的0.78倍附近。在仿真代码中,先是固定温度为25℃,更改光照,得到了一组曲线。而后,固定光照,更改工作温度得到了另一组曲线。

下图中,光伏电池工作在25℃,光照分别是1000W/m2(橙色)、800W/m2(红色)、600W/m2(蓝色)。

工作温度25℃,光照变化时的光伏特性曲线
(a) 电压-电流特性曲线 (b) 电压-功率特性曲线

下图中,光照设定为1000W/m2,工作温度分别是25℃(蓝色)、45℃(红色)、65℃(橙色)。

光照恒定,工作温度变化时候的光伏特性曲线
(a) 电压-电流特性曲线 (b) 电压-功率特性曲线

上面曲线可知,就算开路电压改变,最大功率点的电压除以曲线的开路电压,结果都是比较接近0.78的。

3、MPPT-P&O算法

P&O中文名字是扰动-观察法。

从P-V曲线可见,可通过控制电压的方法让光伏电池达到最大功率点。算法的实现,依据了以下公式:

\left\{\begin{matrix} \frac{dP}{dU}>0:U=U + \bigtriangleup U \\ \frac{dP}{dU}=0:U=U_m \\ \frac{dP}{dU}<0:U=U - \bigtriangleup U \end{matrix}\right.

当dP>dU时,工作点在最大功率点左边,需要增加工作电压。

当dP<dU时,工作点在最大功率点右边,需要减少工作电压。

当dP=dU时,达到最大功率点。

以下两个流程图摘自《独立式光伏发电系统最大功率点跟踪算法研究_张淼》。

从P-V曲线可知,在最大功率点左边,斜率较小。改变固定的电压,功率改变较小。而最大功率点右边,斜率较大。因此可以算法上,在最大功率点左边,选择一个较大的电压步长;而在最大功率点右边,选择一个较小的电压步长。可加快跟踪效果。

 

 

 

实现方法代码全摘自TI的ControlSuite之中的Solar Lib(安装好controlSuite后,路径是ti\controlSUITE\libs\app_libs\solar\v1.2\float\):

 

讯享网 //* Structure Definition // typedef struct { float32 Ipv; float32 Vpv; float32 DeltaPmin; float32 MaxVolt; float32 MinVolt; float32 Stepsize; float32 VmppOut; float32 DeltaP; float32 PanelPower; float32 PanelPower_Prev; int16 mppt_enable; int16 mppt_first; } MPPT_PNO_F; //* Structure Init Function // void MPPT_PNO_F_init(MPPT_PNO_F *v) { v->Ipv=0; v->Vpv=0; v->DeltaPmin=(0.00001); v->MaxVolt=(0.9); v->MinVolt=0; v->Stepsize=(0.002); v->VmppOut=0; v->DeltaP=0; v->PanelPower=0; v->PanelPower_Prev=0; v->mppt_enable=1; v->mppt_first=1; } //* Function Definition // void MPPT_PNO_F_FUNC(MPPT_PNO_F *v) { if (v->mppt_enable==1) { if (v->mppt_first == 1) { v->VmppOut= v->Vpv - (0.02); v->mppt_first=0; v->PanelPower_Prev=v->PanelPower; } else { v->PanelPower=(v->Vpv*v->Ipv); v->DeltaP=v->PanelPower-v->PanelPower_Prev; if (v->DeltaP > v->DeltaPmin) { v->VmppOut=v->Vpv+v->Stepsize; } else { if (v->DeltaP < -v->DeltaPmin) { v->Stepsize=-v->Stepsize; v->VmppOut=v->Vpv+v->Stepsize; } } v->PanelPower_Prev = v->PanelPower; } if(v->VmppOut < v->MinVolt) v->VmppOut = v->MinVolt; if(v->VmppOut > v->MaxVolt) v->VmppOut = v->MaxVolt; } } 

 

 

 

4、电导增量算法

电池输出功率是P=UI,对U求导,可得到:

\frac{dP}{dU}=I+U\frac{dI}{dU}

将其带入上面P&O的公式,经过变形可得:

\left\{\begin{matrix} \left ( \frac{dI}{dU}=-I/U \right )or \left ( \left ( dU=0\right ) and\left ( dI=0\right ) \right ):& U= U\\ \left ( \frac{dI}{dU}>-I/U \right )or \left ( \left ( dU=0\right ) and\left ( dI>0\right ) \right ):& U= U + \bigtriangleup U\\ \left ( \frac{dI}{dU}<-I/U \right )or \left ( \left ( dU=0\right ) and\left ( dI<0\right ) \right ):& U= U - \bigtriangleup U\\ \end{matrix}\right.

如此看来,也不必计算功率了。

而变步长算法,可由下式表达:

\left\{\begin{matrix} \left ( \frac{dI}{dU}=-I/U \right )or \left ( \left ( dU=0\right ) and\left ( dI=0\right ) \right ):& U= U\\ \left ( \frac{dI}{dU}>-I/U \right )or \left ( \left ( dU=0\right ) and\left ( dI>0\right ) \right ):& U= U + 4\bigtriangleup U\\ \left ( \frac{dI}{dU}<-I/U \right )or \left ( \left ( dU=0\right ) and\left ( dI<0\right ) \right ):& U= U - \bigtriangleup U\\ \end{matrix}\right.

变步长方法,作用是:当工作点在最大功率点左边,需要增加工作电压,逼近最大功率点。由于斜率较低,可以多增加步长,加快“爬坡”速度。

在这里贴上TI的工程师编的算法:

 //* Structure Definition // typedef struct { float32 Ipv; float32 Vpv; float32 IpvH; float32 IpvL; float32 VpvH; float32 VpvL; float32 MaxVolt; float32 MinVolt; float32 Stepsize; float32 VmppOut; // internal variables float32 Cond; float32 IncCond; float32 DeltaV; float32 DeltaI; float32 VpvOld; float32 IpvOld; float32 StepFirst; int16 mppt_enable; int16 mppt_first; } MPPT_INCC_F; typedef MPPT_INCC_F *mppt_incc_handle; //* Structure Init Function // void MPPT_INCC_F_init(MPPT_INCC_F *v) { v->Ipv=0; v->Vpv=0; v->IpvH=(1.65); v->IpvL=0; v->VpvH=0; v->VpvL=0; v->MaxVolt=0; v->MinVolt=0; v->Stepsize=0; v->VmppOut=0; v->Cond=0; v->IncCond=0; v->DeltaV=0; v->DeltaI=0; v->VpvOld=0; v->IpvOld=0; v->StepFirst=(0.02); v->mppt_enable=1; v->mppt_first=1; } //* Function Definition // void MPPT_INCC_F_FUNC(MPPT_INCC_F *v) { if (v->mppt_enable==1) { /*MPPT mode enable*/ if (v->mppt_first == 1) { v->VmppOut= v->Vpv - v->StepFirst; v->VpvOld=v->Vpv; v->IpvOld=v->Ipv; v->mppt_first=0; } else { v->DeltaV = v->Vpv-v->VpvOld ; /* PV voltage change */ v->DeltaI = v->Ipv-v->IpvOld ; /* PV current change */ // if(v->DeltaV <v->VpvH && v->DeltaV >-v->VpvL ) /* Tolerence limits PV Voaltge Variation */ // v->DeltaV= 0; // if(v->DeltaI <v->IpvH && v->DeltaI >-v->IpvL ) /* Tolerence limits PV current Variation */ // v->DeltaI = 0; if(v->DeltaV == 0) /* DeltaV=0 */ { if(v->DeltaI !=0 ) /* dI=0 operating at MPP */ { if ( v->DeltaI > 0 ) /* climbing towards MPP */ {v->VmppOut=v->Vpv+v->Stepsize;} /* Increment Vref */ else {v->VmppOut=v->Vpv-v->Stepsize;} /* Decrement Vref */ } } else { v->Cond = v->Ipv*__einvf32(v->Vpv); /*Cond =-(v->Ipv<<10)/v->Vpv;*/ v->IncCond = v->DeltaI*__einvf32(v->DeltaV); /*IncCond =(DeltaI<<10)/DeltaV;*/ if (v->IncCond != v->Cond) /* Operating at MPP */ { if (v->IncCond > (-v->Cond)) /* left of MPP */ { v->VmppOut=v->Vpv+v->Stepsize; /* change Vref */ } else /* Right of MPP */ { v->VmppOut=v->Vpv-v->Stepsize; /* change Vref */ } } } v->VpvOld = v->Vpv; v->IpvOld = v->Ipv; } } } 

 

代码比我自己编的容易看懂,而且在调用时,让代码更加整洁了。

 

 

5、系统实现方案

下图是实现最大功率点跟踪MPPT(Maximum Power Point Tracking)算法的一个例子。

光伏电池通过降压DCDC主电路为负载供电。DCDC的作用是可以精确控制输出电压。直流系统的负载一般都是阻性负载。有时候可能是电阻串电池的形式。那么负载电流是和负载电压密切相关的,即电压越大、电流越大。而开关电源DCDC的转换效率较高,一般大于70%。因此可通过控制输出电压,改变输出功率,也同时改变了输入功率,即改变了光伏电池的输出功率。

 

 

 

 

参考文档:独立式光伏发电系统最大功率点跟踪算法研究_张森

参考软件:TI的controlSuite里面的Solar Lib

小讯
上一篇 2025-03-07 22:21
下一篇 2025-03-06 07:58

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/69381.html