MPPT工作流程及算法和硬件的选择

2023-11-29 22:45

本文主要是介绍MPPT工作流程及算法和硬件的选择,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MPPT算法选择

目前,MPPT算法有开路电压比率(离线)、短路电流比率(离线)、观察调节(在线)、极限追踪控制法(在线)。

在光伏控制系统中,因为日照、温度等条件的变化,光伏电池的输出功率也是在不断变化的,为保证使得光伏电池的输出功率保持在最大点,需要调整光伏电池输出电压(日照强度发生变化时,短路电流变化大,开路电压受影响小;环境温度发生变化时,短路电流受影响小,开路电压变化大)。另外,光伏电池的输出电压和电流也和负载有很大关系,负载大,输出电压大,输出电流小;负载小,输出电压小,输出电流大。光伏电池的MPP中的电压是指光伏电池的输出电压。

开路电压比率法——这可以说是非常经典也相当古老的方法了,又名“固定电压法”。简单来说,算法基于最大功率电压和开路电压的线性关系式 ,系数 取值由设计师决定,一般介于0.71到0.78之间,大多数设定为0.76。

MPPT在追踪时,首先开路DC端来测量开路电压,然后通过算法来计算最大功率电压并且定位最大功率点。MPPT会保持在该功率点一段时间,然后重复开路测算并且重新定位。

固定电压法的最大优点就是制作便宜并且应用简单。相反,缺点也十分明显:精确值和追踪效率较低。尽管固定电压法被称之为“追踪”算法,事实上它依然是在整个工作循环中的一个计算设定值而非即时追踪值。

其次,此方法完全且单纯依赖于组串的开路电压值而放弃了对于工作电流的追踪。当局部阴影出现在阵列时,实际最大功率点和MPPT设定功率点就会出现相当大的偏差,偏差范围取决于阴影遮盖程度。最后,每次机器进行开路电压测量时,太阳能系统是无法输出功率的,随着时间和次数累计此算法会造成一定量的能量流失。总体来说,差评。

短路电流比率法——和固定电压法的算法相似,可以表述为 , 是一个变量系数,通常变化范围在0.78至0.92。

和固定电压法不同的是,短路电流比率法要求在转换器内置一个高频开关来测量短路电流。比较推荐的是在组串和DC link的电容之间安装一个FET(field-effect transistor)。由于电流受到光照强度的影响非常大,通常机器还需要一个DSP(digital signal processor)来保证IV曲线的全扫描和数据的准确度。这也让短路电流比率法设计更加复杂且难以应用。差评。

观察调节法——站在巨人肩头发展出来的算法你敢不服?目前,P&O依然应用在世界各大主流的逆变器中也是最广泛的被应用的算法,没有之一。

相比于ESC,P&O可以在更短的时间内追踪时触碰更大的区域,扫描更多地数据。这进一步提高了P&O的追踪效率和准确率。由于它在短时间内可以处理大量的数据,这也一定程度抵制了突变光照强度对于追踪精确度的影响。

缺点的话,由于它扫描的范围较大,会一定程度的导致输出功率缺乏稳定性,但是抖动程度基本都在±4%以内。所以我还要给它32个赞!P&O还有一个姐妹版本,还是“爬山”逻辑,但是并入了“试错”法(trial and error)。处理器会根据下一刻追踪点的移动趋势,比较功率的正增量或负增量。如果功率持续增加,处理器将会继续同方向移动追踪点,不停比较直到功率达到峰值。

极限追踪控制法——该算法第一次提出在19世纪20年代,也是目前全球最流行的“观测调节法”(Perturb and Observe)的前身。算法的创新点是引入了向量在P-V曲线中。处理器根据电压的增量或减量来比较对应的功率增减量,进而确定追踪功率点的移动方向。具体判定方法请参照图二,一目了然。

ESC算法的巨大成功是相比于之前的固定电压法,通过渐进向量引入了“爬山法”的概念,进而开启了动态追踪的算法。

ESC极大地拓宽了MPPT对于DC端输入能量的捕捉,显著地提高了追踪效率。由于ESC对于后代MPPT算法的影响深远,导致它的短板也一并被继承下来并至今“祸害”众多一线品牌的逆变器。ESC对于陡然变化的光照反应强烈,举个通俗例子,MPPT正专注的比较着功率和电压的变量,“嗯,正向移动的电压同步伴随着功率的增加,明显最大功率点还在正向(右边),那我继续向右移动”。

此时云层挡住了阳光,稍稍影响了输入的直流功率,使之略微下降,“慢着!正向移动的电压竟然导致功率减小了!我肯定错过了最大功率点,快掉头!”

于是,追踪点就离它的归宿越来越远的地方飘去。。。我在实验室模拟测试时,亲眼看到最多达到70%左右的偏差。基于ESC这种一级(first stage)追踪的设计理念,这种现象,无解。但是欣赏它对后世的正面影响以及理念创新,还是好评!

综合考虑,MPPT的算法采用极限追踪控制法来进行软件实现,即采集PN侧电压、流向PN侧的电流数据,计算  和 判断 与 的关系, 大于 ,此时应按 减小PN侧的目标电压;若 小于 ,此时应按 增加PN侧的目标电压。

MPPT硬件选择

MPPT的实现是通过调节光伏电池输出电压来实现的,若光伏电池输出电压直接连接到DC/AC的PN侧,那么光伏电池输出电压波动就会直接影响PN侧电压,最好是在光伏电池和DC/AC之间加一个中间环节,通过这个中间环节来调整输入电压,保持输出电压稳定,增加或减小输出电流。这个功能一般有BUCK、BOOST、BUCK-BOOST、CUK电路和开关电路可以选择,但BUCK电路是连续向负载供电、间接从电源取电;BOOST电路时间接向负载供电、连续从电源取电,为保证光伏电池板的发电效率得到较好使用,一般选择BOOST电路来实现MPPT。

选择BOOST电路来实现MPPT算法,其结构拓扑如下图。

考虑成本问题,再加上光伏电池输出的所有最大功率点对应的输出电压差别不是很大,MPPT不使用DC/DC电路来实现,在现有的DC/AC平台上进行实现。

MPPT程序实现

变流器的工作流程为:

启动——预充电——PN侧抬压——接入光伏电池——输出(MPPT)。

可以确定,MPPT的作用是在电压环上作用,并且是在变流器进入工作状态后开始工作。

采用现有的DC/AC平台来实现MPPT,存在两个问题:控制步长(时间间隔)问题、扰动步长 问题、判断精度问题。

控制步长问题——PN侧电压在MPPT过程中会产生一定的波动,但因为对于光伏电池来说(结合下面两图),其最大功率点对应的电压大致都在一个不大的范围内,并且都接近开路电压,所以,对于在DC/AC上实现MPPT,要考虑多长时间对PN侧目标电压进行一次更新。目前State Manage函数是0.1ms进入一次,可以考虑MPPT的控制步长为0.2~0.5ms,步长暂定为0.3ms。

相同光照、不同温度

相同温度,不同光照

扰动步长问题——考虑在变流器进入工作状态后,其PN侧电压为较稳定的值,即使光照强度、环境温度发生变化,光伏电池的最大功率点电压的变动范围不会很大。根据其采集回来的PN侧电压和光伏电池输出电流,并计算和前一时刻的功率差值 ,根据电导增量法进行判断,然后在目标跟踪电压上增加或减小一定的步长 。因为在光伏电池开始工作后,PN侧电压不是从0开始的,而是在光伏电池最大功率点对应电压附近,所以 的值会比较小,K值的设置通过调试程序获得,K暂定为5。

判断精度问题——由导纳法的工作流程图(下图)可以知道,在流程中存在 、 与0的关系的判断,程序中总是会存在误差,并且检测中也会存在,如果以0为判断准值,考虑实际应用中的误差因素,用一个小的阀值来替代0。阀值暂定为0.1V和0.1A。

MPPT算法C程序实现

#include "16F877.h"

#device ADC = 8 // 一个8位寄存器ADC模式

#fuses HS, NOWDT, PUT, NOPROTECT, BROWNOUT, NODEBUG, NOLVP // High-Speed 20MHz, No Watchdog, No Protection, Brownout Protection,

#use delay(clock=20000000) // 20MHz Crystal

//int is defined as 8-bit unsigned integer using CCS compiler

void main (void)

{

signed int direction;

int delta;

int pwm;

int upperbound;

int lowerbound;

float power;

float powerold;

float voltage;

float voltagedrop;

float voltagedifference;

float currentma;

float measuredvoltage;

float measuredvoltagedrop;

direction = 1; // Set initial direction to positive

delta = 1; // Amount by which to adjust the PWM - 7-bit resolution so duty step of 2%

pwm = 26; // Initial position of the PWM - 50% Duty Cycle with 7-bit resolution.

upperbound = 49; // Upper bound of the PWM %

lowerbound = 1; // Lower bound of the PWM %

power = 0; // Initial Value of Power

setup_adc(ADC_CLOCK_DIV_32); // ADC clock

setup_adc_ports(ALL_ANALOG); // Set all inputs to analog

output_low(PIN_C1); // Set CCP1 output low

setup_ccp1(ccp_pwm); // setup pin CCP1 (RC2) to do PWM

setup_timer_2(T2_DIV_BY_1,12,1); // 384.615kHz

while (1)

{

//delay_ms(1000) // Wait 1 Second

set_adc_channel(0); // Select RA0

//delay_ms(20); // Wait to Read ADC

measuredvoltage = read_adc(); // Read the voltage input from ADC channel 0

set_adc_channel(1); // Select RA1

//delay_ms(20); // Wait to Read ADC

measuredvoltagedrop = read_adc(); // Read the Voltage dropped across the R from ADC channel 1

voltage = measuredvoltage/51; // Measured Voltage is 51 steps per Volt at a Reference Voltage of 5V

voltagedrop = measuredvoltagedrop/51;

voltagedifference = voltage - voltagedrop;

currentma = voltagedifference; // Calculating Current using 1K Resistance

powerold = power; // Calculate the Power from the inputs

power = voltage * currentma;

pwm = pwm + direction*delta; // Adjust Pulse Width Modulation Value by Delta value

if (power < powerold) // If at top of curve, change direction

{

direction = -direction;

continue;

}

if (pwm > upperbound) // If at maximum PWM, Stop here

{

pwm = upperbound;

continue;

}

if (pwm < lowerbound) // If at mi

nimum PWM, Stop here

{

pwm = lowerbound;

continue;

}

set_pwm1_duty(pwm); // Set PWM Mark-Space Radio to approx 50%

}

}

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。(点击找小助理领取)

这篇关于MPPT工作流程及算法和硬件的选择的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/434613

相关文章

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Spring AI ectorStore的使用流程

《SpringAIectorStore的使用流程》SpringAI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中发挥着至关重要的作用,本文给大家介... 目录一、VectorStore的基本概念二、VectorStore的核心接口三、VectorStore的

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

kotlin中的模块化结构组件及工作原理

《kotlin中的模块化结构组件及工作原理》本文介绍了Kotlin中模块化结构组件,包括ViewModel、LiveData、Room和Navigation的工作原理和基础使用,本文通过实例代码给大家... 目录ViewModel 工作原理LiveData 工作原理Room 工作原理Navigation 工

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

在VSCode中本地运行DeepSeek的流程步骤

《在VSCode中本地运行DeepSeek的流程步骤》本文详细介绍了如何在本地VSCode中安装和配置Ollama和CodeGPT,以使用DeepSeek进行AI编码辅助,无需依赖云服务,需要的朋友可... 目录步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT安装Ollama下载Olla

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo