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

article/2025/10/22 23:02:46

目录

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 celciusUoc=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 variablesfloat32  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


http://chatgpt.dhexx.cn/article/bPrFHnUJ.shtml

相关文章

嵌入式怎么入门,嵌入式应该先学习什么

嵌入式到底是什么&#xff0c;很多对这个概念都很迷糊&#xff0c;许多人都认为这是工程师的代名词。 嵌入式工程师可以说是目前涵盖面最广、最火的职业之一&#xff0c;那么到底什么是嵌入式呢&#xff1f; 狭义上嵌入式系统由硬件和软件组成&#xff0e;是能够独立进行运作的…

嵌入式通用学习路线整理

大家好&#xff0c;我是小麦。 从事嵌入式相关行业&#xff0c;差不多快有10年时间了&#xff0c;走过很多弯路&#xff0c;踩过很多坑。 很多人会问&#xff0c;嵌入式真的没有前途吗&#xff1f;这个我其实也无法回答。用发展的眼光来看&#xff0c;万物都有周期。 这个和嵌入…

嵌入式学习(一)嵌入式c语言

第一章.c数据类型及语句 1.01 第一个c程序的编写 下载好VScode并配置好环境&#xff0c;可以开始进行第一个c程序的编写。 #include <stdio.h>int main(int argc,char *argv[]) {printf("Hello World!\n");return 0 ; } 需要注意的几点&#xff1a; 1.#inclu…

嵌入式学习难吗?

首先来说&#xff0c;学习任何一门技术都有它难的地方。如果说嵌入式学习难&#xff0c;那它就难在于嵌入式知识比较综合&#xff0c;比如C语言、数据结构、通信原理、单片机、数字电路、 arm体系、驱动开发、系统移植、Lora&#xff0c;NB-IOT等&#xff0c;大学里开过很多课都…

嵌入式学习(一)—— 初步认识

嵌入式学习&#xff08;一&#xff09;—— 初步认识 一、认识嵌入式二、嵌入式学习内容1.C语言学习2. 模拟电路&#xff0c;数字电路基础- 模拟电路- 数字电路 3. 硬件知识掌握4. 裸机开发5. 认识使用外设模块6. OS学习7.Linux开发板学习8.应用层学习9. PCB学习 三、推荐网站及…

嵌入式学习笔记

ARM &#xff1a;Advanced RISC Machine RISC&#xff1a;精简指令集 EMCU&#xff1a;Embedded Micro Controller Unit 嵌入式微控制器 EMPU &#xff1a;Embedded Micro Processor Unit 嵌入式微处理器 EDSP &#xff1a;Embedded Digital SIgnal Process 嵌入式数字信号处理…

嵌入式之学习路线

入门必看&#xff1a;https://www.xianjichina.com/news/details_69907.html IC设计&#xff0c;FPGA&#xff0c;射频&#xff0c;EMC&#xff0c;电气工程 ******嵌入式开发的相关硬件基础&#xff1a;对于软件工程专业的学生&#xff0c;从事嵌入式软件开发&#xff0c;像…

嵌入式学习路线,强烈推荐!!!

最近有小伙伴在微信私信我&#xff0c;如何学习嵌入式。一直想写一篇学习路线的文章&#xff0c;由于各种原因拖到了现在。 下面就如何学习嵌入式说下我个人的看法。 01 什么是嵌入式&#xff1f; 嵌入式即嵌入式系统&#xff0c;IEEE&#xff08;美国电气和电子工程师协会&am…

嵌入式学习笔记——概述

嵌入式系统概述 前言“嵌入式系统”概念1.是个啥&#xff1f;2.可以干啥&#xff1f;3.有哪些入坑方向&#xff1f;4.入坑后可以有多少薪资&#xff1f; 单片机1.什么是单片机&#xff1f;2.架构简介3.基于ARM架构的单片机结构简介 总结M4系列目录 前言 断更很长时间了&#x…

【超全面】Linux嵌入式干货学习系列教程

文章目录 一、前言二、Linux基础篇三、数据结构与算法基础三、Linux应用篇四、Linux网络篇五、ARM篇六、Linux系统移植篇七、Linux驱动篇八、Linux特别篇九、Linux项目篇 一、前言 博主学习Linux也有几个月了&#xff0c;在这里为广大朋友整理出嵌入式linux的学习知识&#xff…

嵌入式软件学习路线(入门)

大家不要只收藏不关注啊&#xff0c;哪怕点个赞都行哇。&#x1f62d; 嵌入式学习路线 嵌入式体系框架C语言的入门学习C语言的进阶学习单片机的入门学习linux的入门学习VxWorks的入门学习上位机的入门学习 刚工作两年&#xff0c;推荐的学习路线只做一家之言&#xff0c;如果…

嵌入式学习基础路线

博主来填坑了 博主终于硕士毕业拿到双证去公司报道了&#xff0c;趁空闲的时间来更新下嵌入式软件开发的学习路线。 嵌入式的学习 嵌入式总的来说就分两条路线&#xff1a;1&#xff09;走MCU的软件开发的路线&#xff1b;2&#xff09;走Linux的软件开发路线。 当然除了软…

嵌入式操作系统(嵌入式学习)

嵌入式操作系统 嵌入式操作系统是什么&#xff1f;嵌入式操作系统有哪些&#xff1f;常用的嵌入式操作系统及其特点对初学者的建议 嵌入式操作系统是什么&#xff1f; 嵌入式操作系统是一种专门设计和优化用于嵌入式系统的操作系统。它是在资源受限的嵌入式设备上运行的操作系…

嵌入式入门学习的必要步骤

很多新手在入门嵌入式的时候&#xff0c;经常会有很多问题&#xff0c;这也都是想要多多去了解嵌入式&#xff0c;也害怕自己浪费了时间还没有学会嵌入式&#xff0c;掌握到好方法学习嵌入式&#xff0c;那么就会事半功倍&#xff0c;下面一起来看看嵌入式入门学习的必要步骤是…

嵌入式系统学习

Lecture11-12 主要学习 ➢ 总线基础 ➢ UART协议 ➢ I2C协议 ➢ SPI协议 1.总线的基础 protocol 协议 总线只是一组导线的集合&#xff0c;在嵌入式板上的所有其他主要组件&#xff08;包括I/O子系统、内存子系统和主处理器&#xff09;之间传输各种数据信号、地址和控制…

嵌入式要学习哪些内容?

嵌入式要学习哪些内容&#xff1f; 嵌入式概括一下就是写程序&#xff0c;用软件控制硬件。嵌入式的学习应该是自上而下的。 1.语言先行 首先是写代码&#xff0c;写用户的应用程序。每种语言的使用目的是不同的&#xff0c;我们嵌入式选择的语言是C语言。 所以首先要学习C语言…

【嵌入式】超详细的嵌入式路径学习精选合集,建议收藏

超详细的嵌入式路径学习精选合集&#xff0c;纯干货&#xff0c;建议收藏&#xff01; 本合集归类汇总了嵌入式开发技术相关的学习路径、知识与经验总结&#xff0c;以及一些源码、资料分享等。将其分类列出目录&#xff0c;一来为了避免有些知识长时间不用&#xff0c;会很容…

【毕业季|进击的技术er】作为一名职场人,精心总结的嵌入式学习路线图

活动地址&#xff1a;毕业季进击的技术er 文章目录 0、作者介绍1、前言2、嵌入式基础必备知识2.1、学习内容2.2、学习建议2.3、学习资料 3、嵌入式入门篇——51单片机3.1、学习内容3.2、学习建议3.3、学习资料 4、STM32进阶篇4.1、学习内容4.2、学习建议4.3、学习资料 5、小而美…

【单片机/嵌入式】最完整学习路线

一.什么是单片机&#xff1f;什么是嵌入式&#xff1f;它们之间的区别与联系。 关于这个问题我在网上寻找到了相关文章解释得很详细&#xff0c;不了解的同学可以参考一下这篇文章&#xff1a;到底什么是嵌入式&#xff1f;什么是单片机&#xff1f; - 知乎 二.学习路线 一个人…

STM32理论 —— 看门狗

文章目录 1. 简述2. 独立看门狗 IWDG2.1 IWDG 相关寄存器2.1.1 键值寄存器IWDG_KR2.1.2 预分频寄存器IWDG_PR与重装载寄存器IWDG_RLR 2.2 核心代码 1. 简述 STM32 内部自带了 2 个看门狗&#xff1a;独立看门狗&#xff08;IWDG&#xff09;和窗口看门狗&#xff08;WWDG&#…