求MPPT(太阳能最大功率点跟踪)扰动法算法的完整源程序,最好是基于avr编程的。

求MPPT(太阳能最大功率点跟踪)扰动法算法的完整源程序,最好是基于avr编程的。,第1张

*关于频率和占空比的确定,对于6M晶振,假定PWM输出频率为1KHZ,这样可以设定占空比可从(1-100)%变化,即0.01ms*100=1ms。周期用T1定时,输出高电平用T1定时。 *

#include <REGX51.H>

#define uchar unsigned char

#define V_TH1 0XFE

#define V_TL1 0X0C

#define V_TMOD 0X11

void init_sys(void) /*系统初始化函数*/

unsigned char ZL,ZH

void main (void)

{

init_sys()

while(1)

{

Unsigned Int temp

int16 zkb=50;

Temp =2^16-5*zkb

ZH = temp/256

ZL = temp%256

K()

}

}

void init_sys(void) /*系统初始化函数*/

{

TMOD=V_TMOD /*定时器初化*/

TH0=ZH

TL0=ZL

TH1 = V_TH1

TL1= V_TL1

TR1 = 1

ET1 = 1

ET0=1 /*允许T0中断

EA=1 /*CPU开中断

}

Void k(int16 vk,ik)

{ static int16 prek

pk=vk*ik

prek=0

vk=0

if(prvpk==pk)

{

return

}

else

{

if(pk>prepk)

{ prek=pk

if(vk>prevk)

{

zkb++

prevk=vk

prepk=pk

}

else

{

zkb--

prevk=vk

prepk=pk

}

}

else

{

if(vk>prevk)

{

zkb++

prevk=vk

prepk=pk

}

else

{

zkb--

prevk=vk

prepk=pk

}

}

/*中断函数*/

void timer0(void) interrupt 1

{

P2_2=! P2_2

TR0 = 0

}

Void timer1(void) interrupt 2

{

TH1 = V_TH1 /*恢复定时器T0初始值*/

TL1 = V_TL1

P2_2=! P2_2

TH0=ZH /*恢复定时器T0初始值*/

TL0=ZL

TR0 = 1

}

MPPT技术已成研究热点,其控制方法多样,控制效果不尽相同,实现过程也大有区别。根据文[123],可将各种控制方法分为间接近似控制法、直接采样控制法以及人工智能控制法3大类。间接控制法主要有曲线拟合法、查表法等直接采样控制法主要有干扰观测法、电导增量法等人工智能控制法主要有模糊控制法、神经网络控制法等。

目前主要文献均针对某一特定方法进行研究,缺乏对各种控制方法实际应用效果的系统化比较研究,采用实际控制平台进行实用性研究的则更少。

本文根据方法分类,选取最具代表性的干扰观测法、电导增量法、模糊控制法作为研究对象,分别建立控制模型,采用MATLAB/Simulink对系统主电路及控制系统进行整体仿真,并在实验平台上对各种方法分别进行实验研究。

1各典型控制方法实现原理

1.1干扰观测法的实现

干扰观测法的原理是先让光伏阵列工作在某一参考电压下,检测输出功率,在此工作电压基础上加一正向电压扰动量,检测输出功率变化。若输出功率增加,表明光伏阵列最大功率点电压高于当前工作点,需继续增加正向扰动若所测输出功率降低,则最大功率点电压低于当前工作点,需反向扰动工作点电压[425]。

1.2电导增量法的实现

电导增量法通过比较光伏阵列的电导增量和瞬间电导来改变控制信号。由光伏阵列特性曲线可知最大功率点处满足电导条件:

其中,VPV和IPV分别为光伏阵列输出的电压和电流,PPV为光伏阵列输出的瞬时功率。根据判定结果调整参考电压即可实现控制。

1.3模糊控制法的实现

定义输出偏差E及其变化率CE作为模糊控制器的输入,将控制系统所需要的控制变化量以微分dD的形式从模糊控制器输出。若当前采样和上次采样数值分别用n和n-1来表示,则可定义模糊控制器输入变量ec(n)及其变化率Δec(n)的函数表达式为:

定义模糊控制规则为:若当前正向调节控制PWM占空比使输出功率增加,则继续正方向调整,反之则反方向调节,调节幅度由具体的模糊规则表和隶属度函数经模糊控制器输出决定。定义模糊集合:ZO=零PS=正小PB=正大NB=负大NS=负小。定义模糊函数F(ec(n),Δec(n))的输入输出隶属度函数 E、CE、dD如图1所示。

对模糊控制器输出dD进行积分运算,即得控制所需的占空比D,输出作用于主电路开关器件。

2系统仿真

根据MPPT的控制方法,建立由光伏电池通过Buck电路对蓄电池进行最大功率充电的主电路模型,采用MATLAB/Simulink进行仿真,模型中包括光伏电池模块、主电路模块和控制模块,其电气主电路模型如图2所示。

图1隶属度函数E、CE和dD定义

图2MATLAB/Simulink平台的电气主电路模型

控制部分根据传感器采样获得数据分别采用上述不同控制方法进行MPPT控制,最后输出开关器件的控制信号。仿真中,光伏电池模型额定功率为 300W,在0.025、0.03、0.035s不同时刻改变光照强度PU分别为700、800、900、1000W/m2,温度参数定为25℃。为便于比较,采样频率统一为5kHz,干扰观测法和电导增量法的电压参考值单步变化量均为0.1V,模糊控制则由控制算法自身判定。

干扰观测法控制的MPPT仿真输出曲线如图3所示,图3a为光伏电池PV输出的电压、电流曲线,图3b为最大功率点跟踪效果图,系统从光照强度为700W/m2曲线右侧启动,显示在光照强度剧烈变化下的跟踪过程。

仿真中,图3a电流波形上升沿较陡,说明能快速准确地进行MPPT跟踪图3a输出电压电流振荡明显,说明在最大功率附近反复调整图3b反映出MPPT运行点左右摆动较大。

图3干扰观测法控制下的MPPT仿真输出曲线

同理,电导增量法控制的MPPT仿真输出曲线如图4所示。

图4电导增量法控制下的MPPT仿真输出曲线

仿真中,图4a上升沿陡、超调量较小,体现系统动态响应较好图4b中MPPT运行点较为稳定,摆动幅度小,说明系统MPPT跟踪效果较为理想,动稳态精度均较高。模糊控制法MPPT仿真输出曲线如图5所示。

图5模糊控制法控制下的MPPT仿真输出曲线

仿真中,图5a电压电流波形输出均较平稳,说明系统稳态性能较好图5a中电流输出超调衰减较慢,体现动态响应不够灵活的缺点图5b体现MPPT运行点较为稳定。

3系统实验

实验平台由300W光伏阵列、蓄电池组、LEM霍尔电压电流传感器等组成。系统由传感器采样经调理电路转换后由TMS320F2812DSP根据采样数据和控制算法最终输出PWM控制脉冲控制开关器件,从而实现整个系统的控制。

实验中采用遮盖部分光伏电池并迅速移开的办法产生光照变化效果,测试各种方法在光照强度变化下的跟踪效果。

实验波形如图6所示。

图 6a波形上升沿和下降沿变化迅速,体现出干扰观测法跟踪速度较快的特点,但上升沿和下降沿均出现电流毛刺,为光照强度剧烈变化时出现的误判断引起,且稳态运行时输出电流波动范围较大图6b上升沿和下降沿均较为平滑,体现动态响应快、跟踪精度高的优点图6c中,当光照突然增大,电流增加迅速,但超调较大,说明动态响应精度不够,系统调节速度较慢,但电流波形波动较小,最后仍能回到初始值,说明稳态精度理想。

图6各种控制方法对应的MPPT实验波形

本系统所用组件开路电压85V左右,额定光照下最大功率点电压为72V左右,实验控制和经验值完全一致。

43种MPPT方法比较

对以上仿真和实验进行分析可以发现,干扰观测法能快速准确进行MPPT控制,但在最大功率点附近振荡运行,稳态输出波形有一定波动扰动步长设定无法兼顾跟踪精度和响应速度,选择不当甚至会出现电压失控现象,需进行多次尝试才能选定最佳步长在光照强度剧烈变化时会出现误判断。

电导增量法控制效果较理想,最大功率点附近较平稳,在光照强度变化剧烈的条件下也能快速跟踪,跟踪中无明显毛刺现象。但其算法实现时需要反复微分运算,计算量大,需要高速运算控制器,且对传感器精度要求较高,否则控制效果也不理想,出现扰动和振荡。本实验采用的控制器和传感器性能较高满足实验要求,故此问题未突显。

以模糊控制为代表的智能控制技术不需要精确研究光伏电池的具体特性和系统参数,系统控制设计灵活,稳态精度较高,控制系统鲁棒性强。但模糊控制在光伏系统MPPT控制应用中存在动态响应较慢、适应能力有限、特定条件下易振荡等固有问题模糊控制算法复杂,其模糊推理和解模糊过程需要完成大量浮点运算,控制系统实时性难以满足,实际应用中实现困难,采用 TMS320F2812定点DSP难以实现较高控制频率,高性能控制需要更高性能的控制器,如TMS320F28335、TMS320VC33等浮点运算控制器,但系统成本较高。

#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 minimum PWM, Stop here

{

pwm = lowerbound

continue

}

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

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12092955.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存