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

相关文章

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte