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。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。(点击找小助理领取)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3中的customRef创建一个自定义的 ref对象

customRef 创建一个自定义的 ref&#xff0c;并对其依赖项跟踪和更新触发进行显式控制 小案例: 自定义 ref 实现 debounce <template><div style"font-size: 14px;"><input v-model"text" placeholder"搜索关键字"/><…

渗透测试考核--两层内网 cs windows socks5

这里考核为渗透 这里是网络拓扑图 这里记录一下 两台外网 两台内网 首先拿到C段 nmap进行扫描 外网1 nmap -p 80 172.16.17.2/24 主机存活 一般都是web服务入手 所以我们指定80端口 然后去查找开放的 最后获取到2个ip Nmap scan report for 172.16.17.177 Host is u…

如何高效批量生成条形码?

条形码作为商品、库存和信息管理的基础工具&#xff0c;扮演着至关重要的角色。为了满足用户对于高效、专业、多样化的条形码生成需求&#xff0c;我们推出了一款专业高效的在线条形码生成工具。 网址&#xff1a;https://www.1txm.com/ 多样化条形码支持 易条形支持多种常见…

评价体系如何构建?

本文将针对权重计算的一些常见问题进行说明&#xff1a;如组合赋权法的综合权重值如何计算&#xff1f;多层级权重如何计算&#xff1f;用多种方法计算得到的权重如何合并为综合权重用于之后的分析&#xff1f;常见的不同权重计算方法的搭配方式&#xff1f; 一、九种权重计算…

nodejs之express学习(1)

安装 npm i express使用 // 导入 const express require(express) // 创建应用 const app express() // 创建路由 app.get(/home,(req,res)>{res.end("hello express") }) app.listen(3000,()>{console.log("服务已启动~") })路由的介绍 什么是…

5.27每日一题(判断函数在那个区间上有界:充分条件不是必要条件)

若f(x)在(a , b)上连续&#xff0c;且f(a0)&#xff0c;f&#xff08;b-0&#xff09;存在&#xff08;及函数的左右极限存在&#xff09;>f(x)在(a,b)上有界

神经网络:脑科学中功能MRI成像的应用及其一些相关概念

文章目录 一、MRI成像简介核磁共振成像&#xff08;MRI&#xff09;侵入式成像功能磁共振成像&#xff08;fMRI&#xff09;血氧水平依赖&#xff08;BOLD&#xff09;效应对比基线状态代理指标 二、fMRI具有延迟性及其解决方案原因解决方法 三、fMRI 数据处理1. 数据预处理2. …

【栈和队列(1)(逆波兰表达式)】

文章目录 前言什么是栈(Stack)栈方法栈的模拟实现链表也可以实现栈逆波兰表达式逆波兰表达式在栈中怎么使用 前言 什么是栈(Stack) 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0…

详解Tomcat下载安装以及IDEA配置Tomcat(2023最新)

目录 步骤一&#xff1a;首先确认自己是否已经安装JDK步骤二&#xff1a;下载安装Tomcat步骤三&#xff1a;Tomcat配置环境变量步骤四&#xff1a;验证Tomcat配置是否成功步骤五&#xff1a;为IDEA配置Tomcat 步骤一&#xff1a;首先确认自己是否已经安装JDK jdk各版本通用安装…

6、信息收集(1)

文章目录 一、DNS信息查询1、利用dig工具查询各类DNS的解析。2、使用DNS子域名爆破工具&#xff0c;针对子域名进行爆破&#xff0c;同时解析出对应的IP地址。3、利用多地Ping工具&#xff0c;查看域名真实IP。4、针对部分IP进行信息收集 二、DNS域传输实验原理方法一方法二 三…

javaEE -15( 13000字 JavaScript入门 - 2)

一&#xff1a;JavaScript(WebAPI) JS 分成三个大的部分 ECMAScript: 基础语法部分DOM API: 操作页面结构BOM API: 操作浏览器 WebAPI 就包含了 DOM BOM&#xff0c;这个是 W3C 组织规定的. (和制定 ECMAScript 标准的大佬们不是一伙人). 前面学的 JS 基础语法主要学的是 …

Unity-链接MySql5.7

链接MySql5.7 前言&#xff1a; 为什么不选择最新的MySQL8.0或者MySQL8.2呢&#xff0c;实际发现&#xff0c;如果使用这两个版本&#xff0c;虽然能够用同样的方法找到合适的dll&#xff0c;但是在编写代码的过程中往往会卡死&#xff0c;非常的影响效率&#xff0c;因此放弃…

python服装电商系统vue购物商城django-pycharm毕业设计项目推荐

系统面向的使用群体为商家和消费者&#xff0c;商家和消费者所承担的功能各不相同&#xff0c;所对象的权限也各不相同。对于消费者和商家设计的功能如下&#xff1a; 对于消费者设计了五大功能模块&#xff1a; &#xff08;1&#xff09; 商品信息&#xff1a;用户可在商品…

使用Echarts.js绘制多条折线图

一、页面效果 默认tab为不限&#xff0c;渲染多条折线&#xff1a; 切换tab&#xff0c;只渲染对应tab的一条折线&#xff1a; 二、功能描述 ​ 1、tab选中不限时&#xff0c;图表中同时渲染多条折线&#xff0c;对应多种类型的数据。 ​ 2、切换tab时&#xff0c;如果选中指…

Taro3+Vue3重构Mpvue小程序项目踩坑记

1、Taro小程序编译时报错&#xff1b; 原因:页面中存在小程序识别不了的标签&#xff1b;如div解决方法&#xff1a; 将div标签替换成小程序可识别的标签&#xff1b; 安装Taro中提供的插件:tarojs/plugin-html, 使其可被识别&#xff1b; 插件安装教程参考Taro官网&#xff1…

【工具】Zotero|使用Zotero向Word中插入引用文献(2023年)

版本&#xff1a;Word 2021&#xff0c;Zotero 6.0.30 前言&#xff1a;两年前我找网上插入文献的方式&#xff0c;网上的博客提示让我去官网下个插件然后才能装&#xff0c;非常麻烦&#xff0c;导致我对Zotero都产生了阴影。最近误打误撞发现Zotero自带了Word插件&#xff0c…

KMP算法【数据结构】

KMP算法 KMP算法是一种改进的字符串匹配算法 Next[j] k :一个用来存放子串返回位置的数组&#xff0c;回溯的位置用字母k来表示。其实就是从匹配失败位置&#xff0c;找到他前面的字符串的最大前后相等子串长度。默认第一个k值为-1(Next[0] -1),第二个k值为0(Next[1] 0),我…

SpringBoot使用动态Banner

SpringBoot使用动态Banner Spring Boot 2.0 提供了很多新特性&#xff0c;其中就有动态 Banner。 1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://w…

【Java Spring】SpringBoot 配置文件

1、Spring Boot配置文件的作用 配置文件的基本作用&#xff1a; 数据库连接信息&#xff08;包括用户名和密码的设置&#xff09;项目的启动端口第三方系统的调用密钥等信息用于发现和定位问题的普通日志和异常日志等 2、Spring Boot配置文件的格式 Spring Boot配置文件主要…

想成为网络安全工程师该如何学习?

一、网络安全应该怎么学&#xff1f; 1.计算机基础需要过关 这一步跟网安关系暂时不大&#xff0c;是进入it行业每个人都必须掌握的基础能力。 计算机网络计算机操作系统算法与数据架构数据库 Tips:不用非要钻研至非常精通&#xff0c;可以与学习其他课程同步进行。 2.渗透技…