5KW非隔离性光伏逆变器Boost电路及基于DSP的MPPT控制
|
|
- 更新日期:2015-01-06
- 浏览次数:1474 下载次数:0
|
|
详细介绍
1.1.1 能源现状
随着全球工业化进程的进一步深化,对于能源的消耗也在日益增加,而传统能源,像煤炭、石油、天然气储量有限,随着时间的推移,这些能源正在被加速消耗,全球正面临能源危机的挑战。这些传统能源中近40%的用于发电,近两个世纪来,发电主要是采用燃烧煤炭的方法,近半个世纪来,核电得到了很大发展,但核电存在着相当的安全隐患,发展可再生能源是解决世界能源问题的必由之路。
太阳光能具有储量大、清洁无污染的优势,如果得到很好的开发,必将对现有的能源格局产生深刻的影响。同时太阳能发电在近10多年中得到了快速的发展,当今世界各国都采取了措施,出台相关政策鼓励发展新能源行业,以应对日益严峻的能源危机。光伏发电以其独特的优势在不久的未来必将得到飞跃式的发展。
1.1.2 太阳能光伏发电
太阳能是取之不尽的可再生能源,据估算,一年内到达地球表面的太阳能折合成标准煤月亿吨,是目前世界主要能源探明储量的一万倍,而且分布广泛,并且可就地去用。太阳能发电又分为光伏发电、光化学发电、光感应发电和生物发电。光伏发电是利用光伏电池这种半导体器件吸收太阳光辐射能,使之转化成电能的直接发电形式。光伏发电时当今太阳能发电的主流。与常规发电和其他绿色发电技术相比,太阳能光伏发电又一下的优势:
(1)无污染、安全、无噪声,不破坏环境的可持续发展的绿色能源,同时太阳能是取之不尽的可再生能源,可利用量巨大;
(2)资源丰富,太阳能无处不在,应用范围广,基本不受地域限制;
(3)应用灵活,既可以独立于电网运行,也可以与电网并行运行;
(4)可作为电力用户供电可靠或提高电能质量的不停电电源;
(5)就地可取,无需运输。
由于太阳能存在上述的优势,光伏发电在世界范围内得到高度重视,并且随着各国鼓励、补贴政策的出台,光伏发电正在一很高的速度迅猛发展。从长远来
看,光伏发电将一分散的发电电源进入电力市场,以小型、户用性作为主要发展模式,并取代部分常规能源;从近期来看,光伏发电可作为常规能源的补充,解决部分特殊领域的用电问题,比如通信、信号电源,以及边远地区民用生活用电需求,不论从环境保护及能源战略上都有重大的意义。
1.1.3 太阳能光伏发电的发展现状
世界太阳能发电发展现状:尽管太阳能并网发电在一定程度上产生了经济效益,但是由于各个方面的限制,像太阳能电池技术的局限,价格偏高,在相当长的一段时间内没有能够大规模的进入电力市场。进入20世纪90年代末期,尤其是21世纪以来,能源危机的进一步深化以及环境的恶化,太阳能发电得到了越来越多的重视,世界各国纷纷出台各项政策法规支持它的发展。
德国1999年1月实施“十万屋顶计划”,2000年装机容量超过40MW,欧盟可再生能源白皮书以及相伴随的“起飞行动”中计划到2010年装机容量达到4.7GW。日本政府1997年宣布“七万屋顶计划”,总容量超过280MW,美国1997年6月宣布实施“百万屋顶太阳能计划”,到2010年超过3000MW容量的太阳能并网发电系统。澳大利亚政府指出到2010年全国光伏发电装机容量大0.75GW。在发展中国家里,印度的光伏产业是发展比较迅速的,目前又80多家公司从事太阳能光伏产品的生产,1988年到2002年安装发电容量150MW。太阳能并网发电的。太阳能并网发电的大规模实施也带来了电池成本的降低,更能促进光伏发电的发展。
我国的光伏发电发展概况:自1990年以来,我国太阳能发电市场增长率仅17%左右,远远低于世界同期30%-40%的年平均增长率。但是随着我国经济的告诉发展,能源紧张和环境污染问题的日益严峻,国家已经开始对太阳能发电给予了足够的重视,出台了相关的法规支持太阳能发电相关产业的发展,截止2003年底,我国光伏发电装机容量为55MW。在2004年国家发改委起草的《中国可再生资源开发战略规划》中指出:到2010年我国太阳能光伏发电装机容量达到450MW,到2020年达到1000MW。但是总体上与国外发达国家相比,我国的太阳能发电技术及其产业还有很大差距,主要存在一些问题是:技术水平低,硅材料紧缺,生产规模小,成本价格高,专用材料的国产化程度不高,尤其是我国在相关的核心技术方面还是十分的不成熟,大容量的并网发电装置绝大部分依赖于进口所以研究开发具有自主知识产权的并网发电技术刻不容缓。
1.2 本课题的研究意义和任务
太阳能光伏发电是当前利用新能源的主要方式之一,光伏并网发电是光伏发电的发展趋势。光伏并网发电的主要问题是提高系统中太阳能电池阵列的工作效率和整个系统的工作稳定性,实现并网发电系统输出的交流正弦电流与电网电压同频同相。最大功率点跟踪MPPT(maximum power point tracking)是太阳能光伏发电系统中的重要技术,它能充分提高光伏阵列的整体效率。在确定的外部条件下,随着负载的变化,太阳能电池的输出功率也会变化,但始终存在一个最大功率点。当工作环境变化时,特别是日光照度和结温变化时,太阳能电池的输出特性也随之变化,且太阳能电池输出特性的变化非常复杂。目前太阳能光伏发电系统转换效率较低且价格昂贵,因此,使用最大功率点跟踪技术提高太阳能电池的利用效率,充分利用太阳能电池的转换能量,是光伏发电领域研究的一个重要方向。
本课题主要任务:
(1)对Boost升压电路进行设计与性能优化;
(2)完成DC变换器环节实现光伏最大功率跟踪硬件电路设计,分析其实现最大功率跟踪控制的理论依;
(3)研究实现基于DSP光伏最大功率跟踪的算法,及其控制流程图;
(4)选择适合的最大功率跟踪算法,编写软件程序实现光伏电池的最大功率输出,尽可能提高光伏发电系统的效率。
2单相光伏并网发电系统基本原理
太阳能光伏发电技术根据负载的不同分为离网型和并网型两种,早期的光伏发电技术受制于太阳能电池组件成本因素,主要以小功率离网型为主,满足边远地区无电网居民用电问题。随着光伏电池转换效率的提高和成本的下降,光伏发电电站的建设成本也随之下降,将电能回馈到电网成为必要,光伏并网发电得到快速发展。本章主要介绍单相光伏并网发电系统的基本原理和组成结构。
2.1 单相光伏并网发电系统结构组成
单相光伏并网发电系统的功能是将太阳能电池阵列输出的直流电变换为交流电,经过交流滤波后把正弦波交流电送入电网。并网DC/AC逆变器是光伏并网发电系统的核心部件之一,主要采用电压源型电流控制。为满足电压源型电流控制并网逆变器的固有交直流变化比关系,即直流侧电压要高于交流侧电压,在光伏电池阵列输出电压较低的系统中,在DC/AC逆变电路前增加一个Boost(升压)电路进行电压匹配。光伏并网发电系统采用双闭环控制实现并网电流与电网电压同频同相的跟踪,并稳定全桥逆变电路的直流母线电压。图1是基于DSP信号处理的单相光伏并网发电系统框图。
2.2 主要部分工作原理
DC-DC变换器和DC-AC逆变器是单相光伏并网发电系统的关键部分,它们的设计直接关系到单相光伏并网发电系统性能和效率。
2.2.1 DC-DC变换器
调节DC-DC变换器的PWM波占空比使负载与光伏电池匹配,即可实现最大功率输出,同时升高电压。DC-DC变换器有多种拓扑结构形式,从其转换效率角度考虑,各种拓扑结构形式中,Buck和Boost电路转换效率是最高。Buck电路为降压型变换器,系统工作在最大功率输出状态时,光伏电池的最大功率点输出电压必须高于交流侧的峰值电压,因此限制了光伏电池的配置,所以光伏并网发电系统的最大功率跟踪很少采用Buck电路,而在独立光伏发电系统的最大功率跟踪中应用较多,因为在独立光伏发电系统中蓄电池的电压一般都低于光伏电池最大功率点输出电压。在并网发电系统的最大功率跟踪应用最多的是Boost电路,Boost电路如图2.2所示。
图2.2 Boost电路
本文也将主要对此部分展开研究,并采用Boost电路实现光伏最大功率跟踪,设计出硬件电路和软件程序。
2.2.2 DC-AC逆变器
DC-AC逆变器的主要作用是将直流电转换成正弦波的交流电,使其输出与电网电压同相和同频的正弦波电流。
DC-AC逆变器的主电路采用电压型全桥逆变电路,电压型全桥逆变电路如图2.3所示,V1、V2、V3、V4为IGBT开关管,VD1、VD2、VD3、VD4为反并联二极管,C为直流侧滤波电容。它共有4个桥臂,把桥臂1和4作为一对,桥臂2和3作为另一对,成对的两个桥臂的开关管同时的导通或关断,即可将输入端的直流电变换成交流电。为使其变换成正弦交流电,通常采用SPWM波信号控制开关管,SPWM波可分为:单极性SPWM波形如图2.4所示;双极性SPWM波形如图2.5所示。
图2.3 电压型全桥逆变电路
图2.4 单极性SPWM波形 图2.5 双极性SPWM波形
由于单相光伏并网发电系统是将光伏电池的直流电转化成正弦交流电,进而向电网输送电能,所以DC-AC逆变器是一个有源逆变系统。DC-AC逆变器的输出控制模式有两种:电压型控制模式和电流型控制模式[5]。DC-AC逆变器控制的目标是:控制逆变电路输出的交流电为稳定的、高品质的正弦波,并与电网电压同相和同频,因此选用其输出电流作为被控制量[6]。
3 光伏电池的特性
光伏效应是指在两种不同材料的公共结被光子辐射照射后,便在这两种材料之间产生了电动势,光伏电池大多由半导体硅制成,硅晶体中掺入其他杂质,如硼、磷等,因此光伏电池就能将光能直接转换成电能。
3.1 光伏电池的等效电路模型
为了方便描述光伏电池的工作状态,通常用等效电路来描述光伏电池,光伏电池等效电路如图3.1所示。
图3.1 光伏电池等效电路
在理想状况下,其等效串联电阻Rs很小,而等效并联电阻Rsh很大,一般对单晶硅或者多晶硅光伏电池来说,在一般的工程应用中,它们都可以忽略不计。
光伏电池的输出I-U特性方程式(3.1):
(3.1)
式中:I1为光生电流(此值正比于入射光照强度);I0为二极管反向饱和电流(对光伏电池单元而言,其数量级为10-4A);q是电子电荷,为1.6×10-19;I为光伏电池输出电流;U为光伏电池输出电压;Rs为光伏电池的串联电阻(小于1Ω);Rsh为光伏电池的并联电阻(数量级为KΩ);k为波耳兹曼常数,为1.38×10-23J/K;n为P-N结的理想因子,当温度T=300K时,取值2.8;T为绝对温度。
光伏电池的输出功率为式(3.2):
(3.2)
由公式(3.1)和(3.2)可得I-U和P-U关系曲线,光伏电池输出特性曲线如图3.2所示:
图3.2 光伏电池输出特性曲线
其中,Isc为短路电流,即光伏电池在一定条件下的最大输出电流;Uoc为开路电压,即光伏电池在一定条件下最大输出电压;Pm为光伏电池在一定条件下最大输出功率,Pm=Im×Um,Im为最大功率点电流,Um为最大功率点电压。
根据外界环境改变日照强度或大气温度等条件,可以得到温度一定时日照强度对输出特性的影响和日照一定时温度对输出特性的影响;日照强度对输出特性影响如图3.3所示,温度对输出特性影响如图3.4所示。
图3.3 日照强度对输出特性影响 图3.4温度对输出特性影响
由图3.3和图3.4知,光照强度对短路电流Isc影响较大;温度对开路电压Uoc影响较大。
最大功率点跟踪MPPT(maximum power point tracking)是太阳能光伏发电系统中的重要技术,它能充分提高光伏阵列的整体效率。在确定的外部条件下,随着负载的变化,太阳能电池的输出功率也会变化,但始终存在一个最大功率点。当工作环境变化时,特别是日光照度和结温变化时,太阳能电池的输出特性也随之变化,且太阳能电池输出特性的变化非常复杂。目前太阳能光伏发电系统转换效率较低且价格昂贵,因此,使用最大功率点跟踪技术提高太阳能电池的利用效率,充分利用太阳能电池的转换能量,应是光伏系统研究的一个重要方向。
4 硬件电路设计
本部分将根据光伏电池的输出特性,设计硬件电路实现光伏最大功率跟踪,主回路选用Boost升压斩波电路,主控芯片选用DSP TMS320F2812实现对系统的控制;限于采用光伏电池的输出功率和电压的限制。
4.1 Boost电路工作原理
Boost升压斩波电路原理图如图4.1所示。
图4.1 Boost升压斩波电路原理图
假设电路中的电感L值很大(IL连续),电容C值也很大。当V导通时,电源Ui向电感L充电,充电电流基本稳定在IL,同时电容上的电压向负载R供电,因为C很大,基本保持输出电压U0为恒值;当V关断时,电源Ui和L共同向电容C充电,并向负载R提供能量;若V导通时间为Ton,关断时间为Toff,当电路稳定工作时,在一个周期T内电感L获得的能量和释放的能量相等,可得式(4.1):
(4.1)
化简得式(4.2):
(4.2)
若导通占空比为 ,则得式(4.3):
(4.3)
因为0<D<1,所以输出电压高于输入电压,故称为升压斩波电路。升压斩波电路之所以能使输出电压高于电源电压,关键有两个原因:一是L储能之后具有电压泵生的作用,二是电容C可将输出电压保持住。以上分析中,认为V处于通态期间因电容C的作用使得输出电压 不变,但是实际上C值不可能为无穷大,在此阶段其向负载放电, 必然会有所下降,故实际输出电压会略低于上式所得结果,不过在电容C足够大时误差很小,基本上可以忽略。
升压斩波电路目前的典型应用,一是用于直流电机传动,二是用作单相功率因数矫正(Power tor Correction)电路,三是用于其它交直流电源中。
Boost电路有两种工作状态:电感L较大时,电流纹波较小,输入电流是连续的;电感L较小时,输入电流是脉动的,处于不连续状态;Boost电路工作波形如图4.2所示。
图4.2 Boost电路工作波形
4.2 Boost电路实现光伏最大功率跟踪的理论依据
由图3.2可知,光伏电池的输出存在功率最大点,在一定的环境下,光伏电池能否工作在最大功率点上取决于所带的负载大小,光伏电池的工作点示意图如图4.3所示。
图4.3 光伏电池的工作点示意图
图4.3中直线表示负载电阻的I-U特性,曲线表示光伏电池的I-U特性,二者的交点为光伏电池的工作点。由电路最大功率传输定理知,当二者匹配时,光伏电池就能工作在最大功率点上,否则,便处于失配状态,光伏电池产生的电能就不能被充分利用。
外界环境的变化是人无法改变的,光照和温度也是不断地变化,所以光伏电池的输出特性也随之变化,要使光伏电池实时工作在最大功率点上,必须实时调整其所接的负载大小与之匹配。光伏发电系统中的DC-DC变换器就可通过调节PWM波占空比,即可实现负载始终与光伏电池匹配,实现光伏最大功率跟踪。
为方便理论分析,以直流电压源与电阻串联来简化等效光伏电池,简化等效电路如图4.4(a)所示。
图4.4简化等效电路
由式(4.3)可知,Boost电路为升压电路,因此可以等效成一个变比为n的变压器,可得式(4.4):
,0<D<1 (4.4)
若把Boost电路和负载RL整体看成一个负载RL’,进而可以等效成图4.4(b)所
示电路。根据戴维宁定理和理想变压器特性[13],可得式(4.5):
,0<D<1 (4.5)
根据电路最大功率传输定理,当光伏电池的内阻与外界负载的的电阻匹配时,负载电阻获得最大功率。在理想情况下Boost电路不消耗功率,因此负载电阻可获得最大功率。可以调节PWM波占空比D,使等效负载RL’的大小在0至RL范围内变化,从而可使等效负载RL’与光伏电池的内阻匹配,使光伏电池工作在最大功率点上,始终输出最大功率。
4.3 Boost电路主要器件选择
4.3.1 电感L
Boost电路工作在电感电流连续时,从图4.2(a)中可知电感纹波电流△IL:
(4.6)
电感L:
(4.7)
本设计中Ui的范围为8V―20V,最大电流为1A,最小占空比D为0.1,T为 ms,有资料可知电感的纹波电流一般为其平均电流的10%至20%,所以可得电感L最小值为:
(4.8)
考虑到实际电路中留有一定的裕量,故取L=300μH。
4.3.2 电容C
Boost电路中的输出电容C既保证输出电压稳定,具有滤波作用,又起到储存能量的作用,所以在本设计中选用电容C=880μF。
4.3.3 功率开关管V和二极管D
Boost电路中的功率开关管选用N通道增强型MOSFET管IRF840,其适用于工作在高频状态下的DC-DC变换器,最大工作电压和电流分别是500V和8A,完全满足本设计要求。
二极管D选用IN5401,其最大峰值反向电压为100V,最大通过电流为3A,可满足本设计要求。
4.4 控制电路
DSP 控制电路
4.5 驱动电路
本设计中选用MOSFET管IRF840的驱动芯片为TC4420,TC4420为高速功率MOSFET驱动器,输入电源电压范围:4.5V至18V,峰值输出电流:6A,MOSFET驱动电路如图4.7所示。
图4.7 MOSFET驱动电路
图4.7中的PWM波信号由DSP TMS320F2812单片机的OC1A产生,经快速光耦6N137隔离后进入TC4420的管脚2,然后由管脚6和7输出驱动信号。快速光耦起到保护单片机的作用,使单片机与主回路电气 隔离;同时选用快速光耦使PWM波信号在高频状态下的最终输出波形不失真。
4.6 缓冲电路
开关电源的主元件大都有寄生电感与电容,寄生电容Cp一般都与开关元件或二极管并联, 而寄生电感L通常与其串联。由于这些寄生电容与电感的作用, 开关元件在通断工作时, 往往会产生较大的电压浪涌与电流浪涌。
开关的通断与二极管反向恢复时都要产生较大电流浪涌与电压浪涌。而抑制开关接通时电流浪涌的最有效方法是采用零电压开关电路。另一方面, 开关断开的电压浪涌与二极管反向恢复的电压浪涌可能会损坏半导体元件, 同时也是产生噪声的原因。为此, 开关断开时, 就需要采用吸收电路。二极管反向恢复时, 电压浪涌产生机理与开关断开时相同, 因此, 这种吸收电路也适用于二极管电路。本文介绍了RC、RCD、LC等吸收电路, 这些吸收电路的基本工作原理就是在开关断开时为开关提供旁路, 以吸收蓄积在寄生电感中的能量, 并使开关电压被钳位, 从而抑制浪涌电流。
下图所示是一个RC吸收网络的电路图。它是电阻Rs与电容Cs串联的一种电路, 同时与开关并联连接的结构。若开关断开, 蓄积在寄生电感中的能量对开关的寄生电容充电的同时, 也会通过吸收电阻对吸收电容充电。
下图所示是一个RC吸收网络的电路图。它是电阻Rs与电容Cs串联的一种电路, 同时与开关并联连接的结构。若开关断开, 蓄积在寄生电感中的能量对开关的寄生电容充电的同时, 也会通过吸收电阻对吸收电容充电。这样, 由于吸收电阻的作用, 其阻抗将变大, 那么, 吸收电容也就等效地增加了开关的并联电容的容量, 从而抑制开关断开的电压浪涌。而在开关接通时, 吸收电容又通过开关放电, 此时, 其放电电流将被吸收电阻所限制。
电阻值与电容值的大小对电路造成的影响:
实验过程中遇到了一个问题,MOS管总是被烧坏,在低压、小电流的情况下,情况比较良好,基本无尖峰电压。但是在高压、大电流(130V输入,380V输出)情况吸下,用示波器观察MOS管两端的电压发现,D-S之间存在很高的尖峰电压,这是导致MOS管损坏的原因,波形如下:
有图可知此时尖峰电压达到了171.85V,MOS管在这种情况下存在被击穿的危险。
当取RC中R=10C=20nf欧姆大功率,140V输入,380输出:
有图可知,MOS管在关断的过程中发生了震荡,究其原因:由于电阻存在一定的等效电感,与电容C发生LC震荡,因此应使用质量较好的无感电阻。
经过改进之后,在同样的电压、电流、负载、功率等级下选定RC参数如下,C=0.47nF,R=25欧姆:下图是在Ui=140V,Uo=380V,I=15A 情况下的电压电流的波形,发现波形比较标准,没有太大的尖峰电压或是尖峰电流,所以所选RC原件参数比较合理。
下面看一下MOS管D-C两端的电压:
放大后的波形如下:
由上图观察可知,在满足系统功率等级的情况下,所选RC吸收电路的参数符合产品的要求,能够在规定的电压、电流、功率、规定的开关频率下,使尖峰电压在允许的范围之内,是选用开关管的时候有了更大的余量,是产品更加的可靠,同时选用合适的管子降低了成本。
1.RC电容C偏大
电容端电压上升很慢,因此导致MOS管电压上升较慢,导致MOS管关断至次级导通的间隔时间过长,变压器能量传递过程较慢,相当一部分初级励磁电感能量消耗在RC电路上;另一方面电容过大,电容在一个开关周期所存储的能量很多,这些能量必须通过电阻释放,这就导致了电容所消耗掉的能量过多导致开关电源效率降低,同时电阻因为消耗太多能量而发热,因此对其需要进行散热,并且要增加其功率等级,增加了成本 。
2.RC电容C特别大(导致电压无法上升至次级反射电压)
电容电压很小,电压峰值小于次级的反射电压,因此次级不能导通,导致初级能量全部消耗在RC电路中的电阻上,因此次级电压下降后达成新的平衡,理论计算无效了,输出电压降低。
3.RC电阻电容乘积R×C偏小
电压上冲后,电容上储存的能量很小,因此电压很快下降至次级反射电压,电阻将消耗初级励磁电感能量,直至MOS管开通后,电阻才缓慢释放电容能量,由于RC较小,因此可能出现震荡,就像没有加RC电路一样。
4.RC电阻电容乘积R×C合理,C偏小
如果参数选择合理,MOS管开通前,电容上的电压接近次级反射电压,此时电容能量泄放完毕,缺点是此时电压尖峰比较高,电容和MOS管应力都很大。
实验波形如下所示:
4.7 检测采样电路
为保护单片机不受主回路的干扰,在它们之间进行电气隔离,本设计的检测采样电路中选用了线性光耦HCPL7800。HCPL7800结构简图如图4.9所示:
图4.9 HCPL7800结构简图
HCPL7800工作带宽85KHz, 工作电压:VDD1 = +5V,VDD2 = +5V;最大输入电压:
U(Vin+-Vin-) = 200mV, 电压增益:8。
4.7.1 电压采样电路
电压采样电路如图4.10所示:
图4.10 电压采样电路
由图4.10知,光伏电池输出电压UPV经分压电阻后进入HCPL7800的输入端,再经HCPL7800的光隔和放大后输出,最后经差分放大电路放大后送入Atmega128单片机的AD0,由此可得式(4.9)、(4.10)、(4.11)。
(4.9)
(4.10)
(4.11)
所以 。
4.7.2 电流采样电路
电流采样电路如图4.11所示:
图4.11 电流采样电路
由图4.11知,光伏电池输出的电流IPV经采样电阻Rs采样后进入HCPL7800的输入端,再经HCPL7800的光隔和放大后输出,最后经差分放大电路放大后送入单片机的AD0,由此可得式(4.12)、(4.13)、(4.14)。
(4.12)
(4.13)
(4.14)
所以 。
5 软件设计
所有光伏系统都希望光伏电池阵列在同样光照、温度的条件下输出尽可能多的电能,这也就在理论上和实践上提出了太阳电池阵列的最大功率点跟踪(MPPT-Maximum Power Point Tracking)问题。太阳能光伏应用的日益普及、太阳能电池的高度非线性和价格仍相对昂贵更加速了人们对这一问题的研究。
由光伏电池的测量曲线可知,光伏电池的输出特性随着外界环境和负载的变化而变化,但光伏电池总存在一个最大功率点。本设计中硬件主电路采用Boost电路实现外接负载与光伏电池匹配,输出最大功率。如何调节PWM波的占空比来控制Boost电路是本部分研究的重点。
5.1 光伏最大功率跟踪控制方法
光伏最大功率跟踪控制过程实质上是一个自寻优过程,通过控制光伏电池的输出电压来控制最大功率的输出。光伏电池输出功率特性曲线如图5.1所示,由此可知,当光伏电池工作在Um右侧时,光伏电池输出的功率随其输出的电压增大而减小;当光伏电池工作在Um左侧时,光伏电池输出的功率随其输出电压的增大而增大。光伏最大功率跟踪就是不断采集光伏电池的输出电压、电流和计算功率,以此来判断光伏电池的工作区域,然后根据特定的算法寻找到最大功率点。
图5.1 光伏电池输出功率特性曲线
最大功率跟踪算法流程图如图5.2所示,其控制过程是:先使光伏电池以一个电压初始值输出,测量并计算其功率,然后在电压初始值的基础上加一个电压扰动,测量并计算此刻的功率,比较前后两次的功率值大小,如果功率增大了,则继续给相同的电压扰动方向,如果功率减小了,则改变电压扰动方向,此法称 为扰动观察法。
图5.2 最大功率跟踪算法流程图
5.2 光伏最大功率跟踪算法的实现
上一节介绍了光伏最大功率跟踪的控制流程,本节将编写程序代码在单片机控制的实际电路中实现光伏最大功率跟踪。在调试程序过程中发现,如果扰动过于频繁就会影响硬件电路的正常工作,由于外界环境变化缓慢,因此采用定时的方法进行扰动。具体的单片机控制程序流程图如图5.3、图5.4所示。
单片机控制主程序流程图如图5.3所示,主要是实时采集并转换光伏电池的输出电压、电流,用于计算功率和液晶显示,同时为最大功率跟踪算法提供数据。本程序设计的是对采样信号进行N=10次转换,再去掉最大和最小值后计算平均值,这样保证了采集数据的精确度。
图5.3 单片机控制主程序流程图
单片机控制最大功率跟踪算法程序流程图如图5.4所示,此部分程序是在单片机定时器中断中实现的,定时器定时为1ms。开始时初始化Ug的值,使光伏电池以此电压给定值输出。当定时时间到时产生中断标志,单片机转向定时器中断服务函数,temp_cont值不断加1,当其加到1000时,定时1s钟到,加一次扰动并做出判断,相当于在一定时间内改变一次电压给定值,然后再判断输出功率的改变。在1s中的时间内,每50ms判断一次输出电压UPV与给定电压Ug的大小,以此来调节PWM波占空比,使光伏电池以给定电压Ug的值稳定输出。
图5.4 单片机控制最大功率跟踪算法程序流程图
5.3 系统调试实验及分析
完成系统硬件电路焊接和软件设计后,开始系统的综合调试。
将系统连接好后,开始系统调试实验。Boost电路中的电感起到了关键作用,在调试过程发现,自己制作的电感由于没有仪器测量,无法确定其值,因此导致电感值过小,电路无法正常工作,电感两端电压不稳定波形如图5.5所示;增加电感匝数直到电路能正常工作,最终确定电感匝数为69匝,电感的绕线采0.5mm漆包线双股并绕。
图5.5 电感电压不稳定波形
实验结果如下:光伏电池输出电压波形如图5.6所示。
图5.6 光伏电池输出电压波形
由图5.6可知系统开始工作时,光伏电池输出电压为开路电压,然后输出电压慢
慢下降,直到光伏电池工作在最大功率点上,这时输出电压基本稳定。由图5.6可以看出,刚开始工作时的开路电压为19.6V;据资料可知,光伏电池的最大功率点的输出电压一般为开路电压的70%-76%左右;本系统工作稳定后的输出电压为14.4V,基本能工作在最大功率点上。
在系统调试过程中发现,电压扰动的步长对光伏电池输出电压的稳定影响较大,电压步长分别是ΔUPV=0.2V、ΔUPV=0.5V、ΔUPV=1.0V时,光伏电池输出电压波形如图5.7、图5.8、图5.9所示。
图5.7 ΔUPV=0.2V输出电压波形
图5.8 ΔUPV=0.5V输出电压波形
图5.9 ΔUPV=1.0V输出电压波形
由以上三图可知,电压扰动步长越大光伏电池输出电压的波动越大,因此选择合适的电压扰动步长至关重要,本设计中最终选择ΔUPV=0.2V。
光伏电池输出电压稳定时,单片机输出PWM波形如图5.10所示、MOSFET管两端电压波形如图5.11所示和电感两端电压波形如图5.12所示。
图5.10 单片机输出PWM波形
由图5.10知单片机输出的PWM信号的频率为16Hz,峰值电压为4.6V。
图5.11 MOSFET管两端电压波形
图5.12 电感两端电压波形
由图5.11、图5.12知MOSFET管两端电压和电感两端电压波形稳定,处于正常工作状态,且波形频率为16kHz,与单片机的PWM信号频率相同。
结 论
本设计是基于单片机PWM控制的光伏最大功率跟踪设计,硬件电路和软件设计是在小功率和低电压条件下设计,但是只需更改电路参数便可工作于大功率和高电压下。设计过程中对光伏电池的输出特性做了具体分析和实验测量,得出了输出特性曲线,并与理想条件下的特性相似;硬件电路采用Boost升压斩波电路,对其工作原理做了具体分析,并设计和计算了主要器件的参数,自己绕制了符合本电路的电感,系统调试时电路能正常工作;软件设计部分主要提出了光伏最大功率跟踪的控制算法—扰动观察法,并利用单片机控制实现,编写了C语言程序代码,程序代码能够有效地实现光伏最大功率跟踪控制。系统综合调试结果基本能达到预期效果。
本设计基本完成了课题任务和要求,但是系统还存在着缺陷,如:电感设计不够准确,系统中的发热器件的散热不够,长时间工作温度会较高等;软件算法也需进一步改进,提高最大功率跟踪的精度和效率。
参 考 文 献
[1] 赵争鸣,刘建政,孙晓英等.太阳能光伏发电及其应用[M].北京:科学出版社,2005
[2] 王长贵.新能源和可再生能源的现状和展望[C].太阳能光伏产业发展论坛论文集,2003,9:4~17
[3] 林安中,王斯成.国内外太阳电池和光伏发电的进展与前景[J].太阳能学报,1999(特刊),68~74
[4] 张占松.开关电源的原理与设计[M].北京:电子工业出版社, 2004:19-27
[5] 翁炳文.光伏发电系统关键技术的研究[D].杭州:浙江大学,2008
[6] 张洪亮.并网型单相光伏逆变器的研究[D].济南:山东大学,2007
[7] 姜奇荣,张春朋,李虹.风能与太阳能发电系统-设计、分析与运行[M].北京:机械工业出版社,2008:142-157
[8] Koutroulis E Kalaitzakis K,Voulgaris N C.Development of a Microcont roller-based
Photovoltaic Maximum Power Point Tracking Control System[J].IEEE Trans Power
Electronics,2001,16(1):46-54
[9] 马兆彪.太阳能光伏并网发电系统的分析与研究[D].无锡:江南大学,2008
[10] 王兆安.电力电子技术[M].北京:机械工业出版社 ,2009:103-106
[11] 谭浩强.C程序设计[M].北京:清华大学出版社,2005
[12] 曲学基,曲敬铠,于明扬.逆变技术基础与应用[M].北京:电子工业出版社,2007 [13] 邱关源.电路(第五版)[M].北京:高等教育出版社,2008:90-99
[14] 华成英,童诗白.模拟电子技术基础(第四版)[M]. 北京:高等教育出版社,2006
[15] 欧阳名三,余世杰,沈玉梁.一种太阳能电池MPPT控制器实现测试方法的研究[J]. 电子测量与仪器学报,Vol.18,No2,2004.5
[16] J. M. A. Myrzik, M. Calais. String and Module Integrated Inverters for Single-Phase Grid Connected Photovoltaic Systems - A Review[J].IEEE Bologna Power Tech Conference, June 2th-26th,2003
[17] 马潮. AVR单片机嵌入式系统原理与应用实践[M].北京:北京航空航天大学出版社,2007
[18] Nicola Femia,Member,Giovanni Petrone,Giovanni Spagnuolo,Massimo Vitelli.Optimization of perturb and Observe Maximum Power Point Tracking Method[J] .IEEE TRANSACTIONS ON POWER ELECTRONICS,VOL.20,NO.4,JULY 2005.PP,963-973
致 谢
通过这三个月的毕业设计,是我无论在思想上还是在学习上都有很大的进步。首先,感谢郑刚老师无微不至的关怀和谆谆教导,在郑老师的鼓励和帮助下,使我能在三个月的时间里,顺利完成自己的课题研究,使我学到了很多知识。这三个月,是我大学四年之中,最有意义和最充实的美好时光。在郑老师帮助下,我对光伏电池的特性和其发电原理有了更深刻的了解,再次感谢郑老师为我提供的学习的机会!
再次我要感谢学校、学院和各位老师。大学四年来,我认识了很多老师,与老师相处的过程中,我无论是专业知识还是个人品质都收获了很多,这是今天的我,自信的走向社会原因。学院为我们毕业设计创造了良好的环境和合理的安排,使我成功完成了设计,在此真诚的感谢。
最后要感谢在实验室的共同学习的同学,以及在山东奥太电气有限公司的同事和领导,为我提供了那么好的实验条件和环境,并在紧张的学习中给了我无私帮助。
附录A 硬件电路总图
附录图1:DSP最小系统及保护电路
附录图2:AD调理电路及通信电路
附录B 程序代码
#include "DSP281x_Device.h" //DSP TMS320F2812头文件
#include "DSP281x_Examples.h"
#include"1602.h" //1602液晶头文件
#define uchar unsigned char
#define uint unsigned int
#define D OCR1A // 定义占空比
#define N 10 //定义AD采样次数
uchar adc_0[]={"U:00.0V"}; //电压显示
uchar adc_1[]={"I:0.000A"}; //电流显示
uchar P[]={"P:00.00W"}; //功率显示
uint adc_l0,adc_h0,adc_U,adcU[N],adc_l1,adc_h1,adc_I,adcI[N],temp;
//pv_P当前功率;old_P上次功率;pv_U当前电压;old_U上次电压
long uint pv_P=0,old_P=0,pv_U=0,old_U=0,U=0,pv_I=0,I=0;
static uint Volt_given,old_Volt; //电压给定
static uint temp_cont,temp_cont0,temp_cont1;
static uchar mppt_flag; //标志位
void PWM_init(void); //PWM初始化函数
void MPPT(void); //最大功率跟踪函数
void display(void); //液晶显示函数
void timer0(void); //T/C0 初始化函数
void main() //主函数
{
uchar i,j,k;
InitSysCtrl(); //Step1.初始化系统控制寄存器(PLL、看门狗、使能外设时钟)
GpioDirRegs.GPADIR.all=0ff; //初始化端口
GpioMuxRegs.GPAMUX.all=0ff;
GpioDatRegs.GPADAT.all=000;
GpioDirRegs.GPCDIR.all=0ff;
GpioMuxRegs.GPCMUX.all=0ff;
GpioDatRegs.GPCDAT.all=000;
GpioDirRegs.GPBDIR.all =0ff;
GpioDirRegs.GPBDDIR.all =0ff;
GpioDatRegs.GPDDAT.all =000;
GpioDirRegs.GPFDIR.all =000;
GpioDatRegs.GPFDAT.all =000;
GpioDirRegs.GPGDIR.all =0ff;
GpioDatRegs.GPGDAT.all =000;
DINT; //禁止CPU中断
InitPieCtrl(); //PIE控制寄存器为默认状态
//PIE寄存器的默认状态为PIE所有中断都被禁止,且标志位都清零
IER=00000;//禁止CPU中断并清除所有的CPU中断标志位
InitPieVectorTable(); //初始化PIE向量表
EINT; //使能全局CPU中断,使能全局中断INTM
IFR=00000;
LcdInit();
Writecha(1,0,7,adc_0);
Writecha(1,8,8,adc_1);
Writecha(2,3,8,P);
GpioDatRegs.GPCDAT.all |=(1<<6);
PWM_init(); //初始化PWM
timer0(); //初始化T/C0
EINT; //全局中断使能
while(1)
{
for(j=0;j<N;j++)
{
ADCSRA=000; //关闭ADC
ADMUX=000; //AREF 为参考源 选ADC0通道PF0端口
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADFR)|007; //128分频,连续转换
s_ms(500); //延时很重要,给出转换的时间
adc_l0=ADCL; //取AD转换结果
adc_h0=ADCH;
adc_U=adc_h0<<8|adc_l0;
adcU[j]=adc_U;
} //电压转换结束
//对adcU[]中的值从小到大排列
for(i=0;i<N-1;i++)
{
for(j=0;j<N-1-i;j++)
{
if(adcU[j]>adcU[j+1])
{
temp = adcU[j];
adcU[j] = adcU[j+1];
adcU[j+1] = temp;
}
}
}
for(k=1;k<N-1;k++) //去最大 最小 相当于滤波
U +=adcU[k];
U = U/(N-2);
U = U*450; //修正
U = U/1024;
pv_U = 51*U; //取电池板电压值
pv_U = pv_U/100;
for(i=0;i<N;i++)
{
ADCSRA=000; //关闭ADC
ADMUX=001; //AREF 为参考源 选ADC1通道PF1端口
ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADFR)|007;
s_ms(500);
adc_l1=ADCL;
adc_h1=ADCH;
adc_I=adc_h1<<8|adc_l1;
adcI[i]=adc_I;
}
//对adcI中的值从小到大排列
for(i=0;i<N-1;i++)
{
for(j=0;j<N-1-i;j++)
{
if(adcI[j]>adcI[j+1])
{
temp = adcI[j];
adcI[j] = adcI[j+1];
adcI[j+1] = temp;
}
}
}
for(k=1;k<N-1;k++) //去最大 最小 相当于滤波
I +=adcI[k]; //将adcI求和
I = I/(N-2);
I = I*455; //修正
I = I/1024;
pv_I = 100*I; //取电池板电流值
pv_I = pv_I/55;
display(); //调用显示子函数
}
} //主函数结束
#pragma interrupt_handler timer0_ovf_isr:17
void timer0_ovf_isr(void)
{
MPPT( ); //调用最大功率跟踪函数
}
//初始化T/C0
void timer0(void) //定时1ms
{
TCCR0 = 003; //普通模式 32分频
TIMSK = 001; //中断使能
}
void MPPT(void)
{
static signed int delt_volt = 0; // 电压扰动方向
if(pv_U>0) //光伏电池有电压输出时才执行
{
if(mppt_flag==0) //第一次来,加大功率输出
{
temp_cont1++;
if(temp_cont1==100)
{
temp_cont1=0;
D ++;
}
if(pv_P>100) //当光伏电池输出1W的功率时执行
{
mppt_flag = 1;
pv_P = (pv_U*pv_I)/100; //计算当前功率
Volt_given = pv_U-5; //增加一次电压扰动
old_Volt = Volt_given; //记录当前电压给定
old_U = pv_U; //记录当前电压
old_P = pv_P; //记录当前功率
delt_volt = -5;
}
} // end of if(mppt_flag==0)
else
{
if(pv_U>0)
{
temp_cont++;
if(temp_cont==1000) //每 1 s调整一次电压给定
{
temp_cont = 0;
pv_P = (pv_U*pv_I)/100; //实时计算当前功率
if(pv_P>old_P) //功率增大了
{
if(delt_volt>0)
{
delt_volt = 2;
old_Volt = Volt_given; //记录当前电压给定
Volt_given = old_Volt+delt_volt;//以一定步长增加电压
}
else //此次电压小于上次电压
{
delt_volt = -2;
old_Volt = Volt_given; //记录当前电压给定
Volt_given = old_Volt+delt_volt; //以一定步长减小电压
}
old_P = pv_P; //记录当前功率
}
else //功率减小了
{
if(delt_volt>0)
{
delt_volt = -2;
old_Volt = Volt_given; //记录当前电压给定
Volt_given = old_Volt+delt_volt; //以一定步长减小电压
}
else //此次电压小于上次电压
{
delt_volt = 2;
old_Volt = Volt_given; //记录当前电压给定
Volt_given = old_Volt+delt_volt;//以一定步长增加电压
}
old_P = pv_P; //记录当前功率
}
}
}
}
}
if(pv_U>0)
{
temp_cont0++;
if(temp_cont0==50)
{
temp_cont0=0;
if(pv_U>Volt_given) //是某一时刻稳定电压
{
D ++; //增加占空比
if(D == 500) //占空比限定
{
D = 500;
}
}
else
{
D --; //减小占空比
if(D = =10) //占空比限定
{
D = 10;
}
}
}
}
}
void PWM_init(void)
{
TCCR1A=082; //0B1000,0010
TCCR1B=009; //0B0000,1001
D= 10; //PWM 占空比
}
void display(void) // 液晶显示函数
{
uchar ten_1,ten_2,ten_3,ten_4;
//显示电压值
ten_3=(pv_U)/100;
ten_2=(pv_U-(ten_3*100))/10;
ten_1=pv_U-(ten_3*100)-ten_2*10;
ten_1+=030;
ten_2+=030;
ten_3+=030;
WriteNum(1,2,(ten_3));
WriteNum(1,3,(ten_2));
WriteNum(1,5,(ten_1));
//显示电流值
ten_4=(pv_I)/1000;
ten_3=(pv_I-ten_4*1000)/100;
ten_2=(pv_I-(ten_4*1000)-(ten_3*100))/10;
ten_1=pv_I-(ten_4*1000)-(ten_3*100)-ten_2*10;
ten_1+=030;
ten_2+=030;
ten_3+=030;
ten_4+=030;
WriteNum(1,10,(ten_4));
WriteNum(1,12,(ten_3));
WriteNum(1,13,(ten_2));
WriteNum(1,14,(ten_1));
//显示功率
pv_P = pv_U*pv_I; //计算当前功率
pv_P = pv_P/100;
ten_4=(pv_P)/1000;
ten_3=(pv_P-ten_4*1000)/100;
ten_2=(pv_P-(ten_4*1000)-(ten_3*100))/10;
ten_1=pv_P-(ten_4*1000)-(ten_3*100)-ten_2*10;
ten_1+=030;
ten_2+=030;
ten_3+=030;
ten_4+=030;
WriteNum(2,5,(ten_4));
WriteNum(2,6,(ten_3));
WriteNum(2,8,(ten_2));
WriteNum(2,9,(ten_1));
}
void writedata(uchar data) //写数据
{
busy();
s_ms(500);
GpioDatRegs.GPCDAT.all |=(1<<RS); //RS=1
s_ms(500);
GpioDatRegs.GPCDAT.all &=~(1<<RW); //RW=0
s_ms(500);
GpioDatRegs.GPCDAT.all |=(1<<EN); //EN=1
s_ms(500);
GpioDatRegs.GPADAT.all = data; //输出数据
s_ms(500);
GpioDatRegs.GPCDAT.all &=~(1<<EN); //EN=0
s_ms(500);
}
uchar readdata(void) //读数据
{
uchar temp;
busy();
s_ms(500);
GpioDatRegs.GPCDAT.all |=(1<<RS); //RS=1
s_ms(500);
GpioDatRegs.GPCDAT.all |=(1<<RW); //RW=1
s_ms(500);
GpioDatRegs.GPCDAT.all |=(1<<EN); //EN=1
s_ms(500);
GpioDatRegs.GPADIR.all =000; //A端口变输入
s_ms(500);
temp = PINA; //读A端口
s_ms(500);
GpioDatRegs.GPADIR.all =0ff; //A端口变输出
s_ms(500);
GpioDatRegs.GPCDAT.all &=~(1<<EN); //EN=0
s_ms(500);
return temp;
}
void WriteCGRAM(uint num, const uint *pBuffer)
{
uint i,t;
writecom(040);
GpioDatRegs.GPCDAT.all |=(1<<RS);
GpioDatRegs.GPCDAT.all &=~(1<<RW);
for(i=num;i!=0;i--)
{
t = *pBuffer;
GpioDatRegs.GPCDAT.all |=(1<<EN);
GpioDatRegs.GPADAT.all = t;
GpioDatRegs.GPCDAT.all &=~(1<<EN);
pBuffer++;
}
}
void WriteMenu(const uchar *pBuffer)
{
uchar i,t;
writecom(080); //数据地址
GpioDatRegs.GPCDAT.all |=(1<<RS);
GpioDatRegs.GPCDAT.all &=~(1<<RW);
s_ms(50);
for(i=0;i<16;i++)
{
t = *pBuffer;
GpioDatRegs.GPADAT.all = t;
GpioDatRegs.GPCDAT.all |=(1<<EN);
s_ms(50);
GpioDatRegs.GPCDAT.all &=~(1<<EN);
pBuffer++;
}
writecom(0C0);
GpioDatRegs.GPCDAT.all |=(1<<RS);
GpioDatRegs.GPCDAT.all &=~(1<<RW);
s_ms(50);
for(i=0;i<16;i++)
{
t = *pBuffer;
GpioDatRegs.GPADAT.all = t;
GpioDatRegs.GPCDAT.all |=(1<<EN);
s_ms(50);
GpioDatRegs.GPCDAT.all &=~(1<<EN);
pBuffer++;
}
}
void WriteNum(uchar row,uchar col,uchar num)
{
if (row == 1) row = 080 + col;
else row = 0C0 + col;
writecom(row);
GpioDatRegs.GPCDAT.all |=(1<<RS);
s_ms(500);
GpioDatRegs.GPCDAT.all &=~(1<<RW);
s_ms(500);
GpioDatRegs.GPADAT.all = num;
s_ms(500);
GpioDatRegs.GPCDAT.all |=(1<<EN);
s_ms(500);
GpioDatRegs.GPCDAT.all &=~(1<<EN);
s_ms(500);
}
void Writecha(uchar row,uchar col,uint num,uchar *pBuffer)
{
uchar i,t;
if (row == 1) row = 080 + col;
else row = 0C0 + col;
writecom(row);
GpioDatRegs.GPCDAT.all |=(1<<RS);
s_ms(500);
GpioDatRegs.GPCDAT.all &=~(1<<RW);
s_ms(500);
for(i=num;i!=0;i--)
{
t = *pBuffer;
s_ms(500);
GpioDatRegs.GPADAT.all = t;
s_ms(500);
GpioDatRegs.GPCDAT.all |=(1<<EN);
s_ms(500);
GpioDatRegs.GPCDAT.all &=~(1<<EN);
s_ms(500);
pBuffer++
[ 图书馆搜索 ]
[ 加入收藏 ]
[ 告诉好友 ]
[ 打印本文 ]
[ 违规举报 ]
[ 关闭窗口 ]