当前位置:   article > 正文

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

恒定电压法

目录

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。

  1. clear
  2. clc
  3. %-----------------------------------------------
  4. %-----------------------------------------------
  5. %pannel in series
  6. %first pannel
  7. S_1=1000;
  8. Tair_1=25;
  9. Sref=1000; %1000W/m^2
  10. Tref=25; %25degree celcius
  11. Uoc=44.2;
  12. Um=35.4;
  13. Isc=5.29;
  14. Im=4.95;
  15. a=0.00255;
  16. b=0.55;
  17. c=0.00285;
  18. T_1 = Tair_1 + 0.028*S_1;
  19. T_delta_1 = T_1 - Tref;
  20. S_delta_1 = S_1/Sref - 1;
  21. Isc_comp_1 = Isc*S_1/Sref*(1+a*T_delta_1);
  22. Uoc_comp_1 = Uoc*(1-c*T_delta_1)*log(e+b*S_delta_1);
  23. Im_comp_1 = Im*S_1/Sref*(1+a*T_delta_1);
  24. Um_comp_1 = Um*(1-c*T_delta_1)*log(e+b*S_delta_1);
  25. C2_1=(Um_comp_1/Uoc_comp_1-1)*(log(1-Im_comp_1/Isc_comp_1))^(-1);
  26. C1_1=(1-Im_comp_1/Isc_comp_1)*exp(-Um_comp_1/(C2_1*Uoc_comp_1));
  27. U_1=0:0.01:Uoc_comp_1;
  28. Iph_1=Isc_comp_1*(1-C1_1*(exp(U_1/(C2_1*Uoc_comp_1))-1));
  29. figure(1)
  30. plot(U_1,Iph_1,'r')
  31. xlabel('U/V')
  32. ylabel('I/A')
  33. title('U-I')
  34. figure(2)
  35. P_ss = U_1 .* Iph_1;
  36. plot(U_1,P_ss)
  37. xlabel('U/V')
  38. ylabel('P/W')
  39. 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曲线可见,可通过控制电压的方法让光伏电池达到最大功率点。算法的实现,依据了以下公式:

{dPdU>0:U=U+UdPdU=0:U=UmdPdU<0:U=UU

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

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

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

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

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

 

 

 

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

 

  1. //*********** Structure Definition ********//
  2. typedef struct {
  3. float32 Ipv;
  4. float32 Vpv;
  5. float32 DeltaPmin;
  6. float32 MaxVolt;
  7. float32 MinVolt;
  8. float32 Stepsize;
  9. float32 VmppOut;
  10. float32 DeltaP;
  11. float32 PanelPower;
  12. float32 PanelPower_Prev;
  13. int16 mppt_enable;
  14. int16 mppt_first;
  15. } MPPT_PNO_F;
  16. //*********** Structure Init Function ****//
  17. void MPPT_PNO_F_init(MPPT_PNO_F *v)
  18. {
  19. v->Ipv=0;
  20. v->Vpv=0;
  21. v->DeltaPmin=(0.00001);
  22. v->MaxVolt=(0.9);
  23. v->MinVolt=0;
  24. v->Stepsize=(0.002);
  25. v->VmppOut=0;
  26. v->DeltaP=0;
  27. v->PanelPower=0;
  28. v->PanelPower_Prev=0;
  29. v->mppt_enable=1;
  30. v->mppt_first=1;
  31. }
  32. //*********** Function Definition ********//
  33. void MPPT_PNO_F_FUNC(MPPT_PNO_F *v)
  34. {
  35. if (v->mppt_enable==1)
  36. {
  37. if (v->mppt_first == 1)
  38. {
  39. v->VmppOut= v->Vpv - (0.02);
  40. v->mppt_first=0;
  41. v->PanelPower_Prev=v->PanelPower;
  42. }
  43. else
  44. {
  45. v->PanelPower=(v->Vpv*v->Ipv);
  46. v->DeltaP=v->PanelPower-v->PanelPower_Prev;
  47. if (v->DeltaP > v->DeltaPmin)
  48. {
  49. v->VmppOut=v->Vpv+v->Stepsize;
  50. }
  51. else
  52. {
  53. if (v->DeltaP < -v->DeltaPmin)
  54. {
  55. v->Stepsize=-v->Stepsize;
  56. v->VmppOut=v->Vpv+v->Stepsize;
  57. }
  58. }
  59. v->PanelPower_Prev = v->PanelPower;
  60. }
  61. if(v->VmppOut < v->MinVolt) v->VmppOut = v->MinVolt;
  62. if(v->VmppOut > v->MaxVolt) v->VmppOut = v->MaxVolt;
  63. }
  64. }

 

 

 

4、电导增量算法

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

dPdU=I+UdIdU

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

{(dIdU=I/U)or((dU=0)and(dI=0)):U=U(dIdU>I/U)or((dU=0)and(dI>0)):U=U+U(dIdU<I/U)or((dU=0)and(dI<0)):U=UU

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

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

{(dIdU=I/U)or((dU=0)and(dI=0)):U=U(dIdU>I/U)or((dU=0)and(dI>0)):U=U+4U(dIdU<I/U)or((dU=0)and(dI<0)):U=UU

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

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

  1. //*********** Structure Definition ********//
  2. typedef struct {
  3. float32 Ipv;
  4. float32 Vpv;
  5. float32 IpvH;
  6. float32 IpvL;
  7. float32 VpvH;
  8. float32 VpvL;
  9. float32 MaxVolt;
  10. float32 MinVolt;
  11. float32 Stepsize;
  12. float32 VmppOut;
  13. // internal variables
  14. float32 Cond;
  15. float32 IncCond;
  16. float32 DeltaV;
  17. float32 DeltaI;
  18. float32 VpvOld;
  19. float32 IpvOld;
  20. float32 StepFirst;
  21. int16 mppt_enable;
  22. int16 mppt_first;
  23. } MPPT_INCC_F;
  24. typedef MPPT_INCC_F *mppt_incc_handle;
  25. //*********** Structure Init Function ****//
  26. void MPPT_INCC_F_init(MPPT_INCC_F *v)
  27. {
  28. v->Ipv=0;
  29. v->Vpv=0;
  30. v->IpvH=(1.65);
  31. v->IpvL=0;
  32. v->VpvH=0;
  33. v->VpvL=0;
  34. v->MaxVolt=0;
  35. v->MinVolt=0;
  36. v->Stepsize=0;
  37. v->VmppOut=0;
  38. v->Cond=0;
  39. v->IncCond=0;
  40. v->DeltaV=0;
  41. v->DeltaI=0;
  42. v->VpvOld=0;
  43. v->IpvOld=0;
  44. v->StepFirst=(0.02);
  45. v->mppt_enable=1;
  46. v->mppt_first=1;
  47. }
  48. //*********** Function Definition ********//
  49. void MPPT_INCC_F_FUNC(MPPT_INCC_F *v)
  50. {
  51. if (v->mppt_enable==1)
  52. { /*MPPT mode enable*/
  53. if (v->mppt_first == 1)
  54. {
  55. v->VmppOut= v->Vpv - v->StepFirst;
  56. v->VpvOld=v->Vpv;
  57. v->IpvOld=v->Ipv;
  58. v->mppt_first=0;
  59. }
  60. else
  61. {
  62. v->DeltaV = v->Vpv-v->VpvOld ; /* PV voltage change */
  63. v->DeltaI = v->Ipv-v->IpvOld ; /* PV current change */
  64. // if(v->DeltaV <v->VpvH && v->DeltaV >-v->VpvL ) /* Tolerence limits PV Voaltge Variation */
  65. // v->DeltaV= 0;
  66. // if(v->DeltaI <v->IpvH && v->DeltaI >-v->IpvL ) /* Tolerence limits PV current Variation */
  67. // v->DeltaI = 0;
  68. if(v->DeltaV == 0) /* DeltaV=0 */
  69. {
  70. if(v->DeltaI !=0 ) /* dI=0 operating at MPP */
  71. {
  72. if ( v->DeltaI > 0 ) /* climbing towards MPP */
  73. {v->VmppOut=v->Vpv+v->Stepsize;} /* Increment Vref */
  74. else
  75. {v->VmppOut=v->Vpv-v->Stepsize;} /* Decrement Vref */
  76. }
  77. }
  78. else
  79. {
  80. v->Cond = v->Ipv*__einvf32(v->Vpv); /*Cond =-(v->Ipv<<10)/v->Vpv;*/
  81. v->IncCond = v->DeltaI*__einvf32(v->DeltaV); /*IncCond =(DeltaI<<10)/DeltaV;*/
  82. if (v->IncCond != v->Cond) /* Operating at MPP */
  83. {
  84. if (v->IncCond > (-v->Cond)) /* left of MPP */
  85. {
  86. v->VmppOut=v->Vpv+v->Stepsize; /* change Vref */
  87. }
  88. else /* Right of MPP */
  89. {
  90. v->VmppOut=v->Vpv-v->Stepsize; /* change Vref */
  91. }
  92. }
  93. }
  94. v->VpvOld = v->Vpv;
  95. v->IpvOld = v->Ipv;
  96. }
  97. }
  98. }

 

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

 

 

5、系统实现方案

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

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

 

 

 

 

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

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

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号