赞
踩
目录
太阳能板也叫光伏电池。是通过光电效应,把光能转换为电能的设备。
先介绍太阳能板的特性。太阳能的额定参数是在地面光伏组件标准测试条件(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)
根据经验,单节太阳能板的最大功率点,都在开路电压Uoc的0.78倍附近。在仿真代码中,先是固定温度为25℃,更改光照,得到了一组曲线。而后,固定光照,更改工作温度得到了另一组曲线。
下图中,光伏电池工作在25℃,光照分别是1000W/m2(橙色)、800W/m2(红色)、600W/m2(蓝色)。
(a) 电压-电流特性曲线 | (b) 电压-功率特性曲线 |
下图中,光照设定为1000W/m2,工作温度分别是25℃(蓝色)、45℃(红色)、65℃(橙色)。
(a) 电压-电流特性曲线 | (b) 电压-功率特性曲线 |
上面曲线可知,就算开路电压改变,最大功率点的电压除以曲线的开路电压,结果都是比较接近0.78的。
P&O中文名字是扰动-观察法。
从P-V曲线可见,可通过控制电压的方法让光伏电池达到最大功率点。算法的实现,依据了以下公式:
当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;
- }
- }
电池输出功率是
将其带入上面P&O的公式,经过变形可得:
如此看来,也不必计算功率了。
而变步长算法,可由下式表达:
变步长方法,作用是:当工作点在最大功率点左边,需要增加工作电压,逼近最大功率点。由于斜率较低,可以多增加步长,加快“爬坡”速度。
在这里贴上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;
- }
- }
- }
代码比我自己编的容易看懂,而且在调用时,让代码更加整洁了。
下图是实现最大功率点跟踪MPPT(Maximum Power Point Tracking)算法的一个例子。
光伏电池通过降压DCDC主电路为负载供电。DCDC的作用是可以精确控制输出电压。直流系统的负载一般都是阻性负载。有时候可能是电阻串电池的形式。那么负载电流是和负载电压密切相关的,即电压越大、电流越大。而开关电源DCDC的转换效率较高,一般大于70%。因此可通过控制输出电压,改变输出功率,也同时改变了输入功率,即改变了光伏电池的输出功率。
参考软件:TI的controlSuite里面的Solar Lib
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。