基于单片机的太阳能电池控制器的设计Word下载.docx
《基于单片机的太阳能电池控制器的设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的太阳能电池控制器的设计Word下载.docx(51页珍藏版)》请在冰豆网上搜索。
太阳光没有地域的限制无论陆地或海洋,无论高山或岛屿,都处处皆有,可直接开发和利用,且勿须开采和运输。
它同以往其他电源发电原理完全不同,具有以下特点:
1.无枯竭危险;
2.干净无公害;
3.不受资源分布地域的限制;
4.可在用电处就近发电;
5.能源质量高;
6.获取能源花费的时间短。
正是由于以上特点,美国在经历上世纪80年代能源危机后,就一直致力于开发太阳能发电技术,到现在为止该项技术在美国,德国,瑞士和日本等国的技术发展和推动下,已变得极为成熟。
在我国国内市场,已经有很多对此类控制器开发研制的技术厂商和科研院所,因此从某一方面来讲,我国已完完全全进入太阳能全面发展的时代。
图1.1太阳能电池板给直流系统供电的系统结构框图
图1.2本次设计中所采用的系统结构框图
1.3题目设计目标及功能要求
在本次设计中抓药要设计出一种智能型的太阳能电池控制器,对功能具体要求如下:
1电池长时间发电,电压较低时要停止放电。
2蓄电池电压高于其所能承受的电压时,要停止对其充电。
3通过电压采样检测,对不同的蓄电池不同充电状态,采用不同的充电方案。
4对于整套充放电系统要设置可手动关停的按钮,以达到对系统更为智能的设计。
5通过设置时间,从而根据光照情况对蓄电池进行自动的关停。
6可对线路进行过流,短路保护
本次设计中将以ATMEL系列中的AT89S51单片机为控制中心,软硬件的结合,利用分压电路对蓄电池,太阳能电池的电压、电流进行采样。
再经过A/D转换采样数据输入到单片机中进行处理。
单片机输出经光耦驱动MOSFET管来控制外接电路开启关闭。
该系统可以实现控制蓄电池的最优充放电,当蓄电池电压在14.4V+0.5时,太阳能电池停止对蓄电池充电,当蓄电池电压在10.9V+0.5时,蓄电池停止对负载放电;
负载电流检测电路可进行过流保护及负载功率检测.。
1.4题目设计所需要的环境
对于本次设计的关键核心在于,如何对硬件电路进行设计,和单片机程序如何设计。
现行的硬件电路设计和单片机汇编语言设计的主要工具为proteus和keiluVision2,proteus对数字电路的设计有着优越的性能,它有着庞大的元件库,而且元件库中拥有大量的微处理器芯片,另一方面,keil对汇编语言进行编译成功后可产生能与proteus进行联机调试的“HEX”文件。
故在本次设计中采用proteus和keil这两款软件分别对软硬件进行设计和仿真。
在接下来的各个章节中,我们就将对独立式光伏发电系统中的控制器部分,通过proteus和keil对其进行软硬件的设计,并对其进行仿真。
2总体设计
系统设计的流程图如下
Y
N
Y
图2.1系统设计的流程图
由流程图可知,对于整个充放电过程主要分为以下4个阶段:
Vbat≤10.8V时,电池停止放电,而且当有结束按键输入时要结束整个程序,当无啊、结束按键输入时,程序转而对蓄电池进行快充
10.8V<Vbat<12V时,对电池进行快速充电
12V<Vbat<14.5时,对电池进行浮充
Vbat=14.5V时,对电池停止充电
执行以上各阶段程序后,程序要继续进入电压检测阶段,进而根据充电情况对充放电方案重新进行选择。
由流程图可以看出没有对充放电进行专门的设置,而是通过单片机比较经过A/D转换过的采样电压的大小来对冲电或放电进行管理的,当电压值大于14.5V时单片机发出信号,使得充放电电路停止充电,,当然此时可以放电回路,可以放电,也可以出断开状态;
当电压值小于10.8V时,首先要断开放电回路,然后再通过一个外置于单片机的手动开关,若此时用户想要控制器停止工作,则按下按钮,此时单片机就会进入停止工作状态,,若想让单片机继续进行充放电工作状态,则无需按下按钮,系统会自动进入快充状态,之后后继续进入下一个电压采集转换,以及方案选择的循环中,直至用户需要停止系统工作按下按钮。
2.1硬件总体设计
图2.1硬件总体设计图
2.2程序总体设计
ORG0000H
LJMPSTART
ORG0003H
LJMPEXTERN_INT
ORG000BH
LJMPTIMER0_INT
START:
MOVSP,#050H;
设置堆栈
MOVR0,#030H;
设置A/D存储单元初始地址
MOVIE,#0FFH;
打开所有中断
MOVDPTR,#0FEF8H;
采集通道首地址,只使用一路A/D就可以
MOVR0,#40H
MOV@R0,#00H;
清除方案选择
MOVR0,#40H
清楚方案选择触发位
MOVR1,#042H
清除定时计数器
LCALLTIMER1_INT
LOOP:
MOVR0,#30H;
30H是A/D转换的地址,将数据和几个值进行比较,确定方案
MOVA,@R0
SUBBA,#99H;
当电压很小的时候,采用第1种方案,想引脚PWM发送占空比为10%的信号
JCPROCESS_01
SUBBA,#0AAH
JCPROCESS_02;
很小的时候,采用第2种方案,想引脚PWM发送占空比为20%的信号
SUBBA,#0CDH
JCPROCESS_03;
电压很小的时候,采用第3种方案,想引脚PWM发送占空比为50%的信号
MOVA,#04H;
当电压超出的时候,采用第4种方案,向引脚PWM发送占空比为0%的信号
LJMPPROCESS_04
CLEAR_FLAG:
MOVR0,#40H;
清除方案选择位
MOV@R0,#00H
MOVR0,#41H;
清除触发位
LJMPLOOP
PROCESS_01:
MOVR1,#040H;
MOV@R1,#01H;
;
选择方案1
PROCESS_01_NEXT:
CLRP2.4;
将和PWM连接的管脚置低,此时停止充电
MOVR1,#01H;
MOVR0,#01H
PROCESS_01_01:
DJNZR1,PROCESS_01_01
DJNZR0,PROCESS_01_01;
空跑16*256*2个周期
CLRP2.4;
将和PWM连接的管脚置低
MOVR1,#01H
PROCESS_01_02:
DJNZR1,PROCESS_01_02
DJNZR0,PROCESS_01_02;
空跑16*256*2*9个周期
MOVR1,#041H;
当方案改变标志位到来的时候,清楚标志并且重新进行判断
CJNE@R1,#00H,CLEAR_FLAG
SJMPPROCESS_01_NEXT
PROCESS_02:
MOVR1,#040H
MOV@R1,#02H;
选择方案2
PROCESS_02_NEXT:
SETBP2.4;
将和PWM连接的管脚置高,选择浮充
PROCESS_02_01:
DJNZR1,PROCESS_02_01
DJNZR0,PROCESS_02_01;
将和PWM连接的管脚置低
PROCESS_02_02:
DJNZR1,PROCESS_02_02
DJNZR0,PROCESS_02_02;
空跑16*256*2*8个周期
当方案改变标志位到来的时候,清除标志并且重新进行判断
SJMPPROCESS_02_NEXT
PROCESS_03:
MOV@R1,#03H;
选择方案3
PROCESS_03_NEXT:
将和PWM连接的管脚置高,选择快充
PROCESS_03_01:
DJNZR1,PROCESS_03_01
DJNZR0,PROCESS_03_01;
空跑16*256*2*2个周期
PROCESS_03_02:
DJNZR1,PROCESS_03_02
DJNZR0,PROCESS_03_02;
空跑16*256*2*7个周期
SJMPPROCESS_03_NEXT
PROCESS_04:
停止放电
CLRP2.1
MOVR1,#040H
MOV@R1,#04H;
选择方案4
MOVR1,#041H
SJMPPROCESS_04
TIMER1_INT:
ANLTMOD,#0FH;
设置定时器T1为方式2
ORLTMOD,#10H
MOVTMOD,#21H;
定时器T0工作在方式1
MOVPCON,#080H
CLRTR1;
禁止定时器T1
SETBEA
SETBET1
SETBET0
SETBPT0;
定时器T0中断优于串口中断
CLRTF1
MOVTL0,#00H
MOVTH0,#01FH;
定时器T0中断发生时间为62.5ms
SETBTR0;
使能定时器T0
CLRTF0
RET;
-------------------------------------------------
进入定时器中断,每500ms设置1次标志位
TIMER0_INT:
PUSHACC;
累加器入栈
PUSHPSW;
程序状态字入栈
MOVPSW,#18H;
切换寄存器区域
CLRTF0;
清除定时器TF0
CLRTR0;
禁止定时器T0
定时器T0中断发生时间为6
清除溢出中断位
INC@R1;
增加计数器的值,到8为止,这样达到500ms
CJNE@R1,#08H,TIMER0_READY
MOV@R1,#00H;
清除计数器的值
设置标志位,每500ms重新选择方案
MOV@R1,#01H
TIMER0_READY:
SETBTR0;
POPPSW;
程序状态字出栈
POPACC;
累加器出栈
RETI
---------------------------------------------------
进入外部中断,每进入一次读取ADC的值
--------------------------------------------------
EXTERN_INT:
累加器压栈
程序状态字压栈
MOVPSW,#010H;
A/D转换器首地址
MOVXA,@DPTR;
读入A/D的值
MOVR1,#030H;
存储A/D转换器的数据的地址
MOV@R1,A;
将A/D的值读入该地址
END
3硬件设计
3.1电压采集电路
3.1.1电压采样电路
如图2.5所示,电压采集电路使用两个串联的电阻,大小比例为4:
1,然后并联在需要检测的电压两端,从两个电阻中间采集电压。
由分压公式得出采集的电压为VR1R21/5电池充满电时电压大概为14.5V,计算出采集到的电压为2.9VA/D转换芯片的ADC0809的值为94H
图3.1电压采集电路
假设蓄电池电压为U,则根据欧姆定律
R=
和串联电路的分压特性,可得
=
.U=
U=
U
通过采样对蓄电池电压进行采样后,模数转换的芯片输入端所处理的电压范围缩小至0~3V,大大增强了数模转换的可行性
3.1.2ADC0809模数转换芯片
AT89S51单片机没有内置的A/D转换模块,因此采集的电压需要经A/D转换才可接入单片机。
在本次设计中,我们采用ADC0809对采样电压进行数模转换,
ADC0809为八位逐次比较式A/D转换芯片,具有8路模拟输入通道和8位数字输出通道,其工作频率为640kHz(理论上≤1kHz)。
该芯片采用脉冲启动方式:
只要给其控制端加一个符合要求的脉冲信号即可启动该芯片进行模数转换(通常用
和地址译码的输出经过一定的逻辑电路进行控制,对于本次设计,只需把符合要求的电平加到启动控制端即可可是转换)。
ADC0809芯片内部逻辑与引脚图
IN7
..
..DB7
IN0.
.
.
ADDA.
ADDB.
ADDCDB6
ALE
(a)
(b)
图3.2ADC0809芯片的内部逻辑结构与引脚图
(a)内部逻辑图(b)引脚图
ADC0809输入通道地址选择表
表3.1ADC0809输入通道地址选通表
ADDCADDBADDA
选通的通道
000
001
010
011
100
101
110
111
IN0
IN1
IN2
IN3
IN4
IN5
IN6
ADC0809工作转换时序
START
A.B.C
IN
OE
EOC
D0~D7
图3.3ADC0809工作时序图
3.1.374LS373锁存器
74LS373是一种带输出三态门的8D锁存器,其结构如下图所示
8D锁存器三态门
IN1~IN8
OUT1~OUT8
图3.474LS373结构示意图
1D~8D为8个输入端
1Q~8Q为8个输出端
G为数据锁存控制端:
当G为“1”时,锁存器输出端同输入端;
当G由“1”变0时,数据输入锁存器中。
为输出允许端:
当
为“0”时,三态门打开;
为“1”时,三态门关闭,输出呈高阻状态。
在51单片机系统中,常采用74LS373做为地址锁存器使用,其连接方法如下图所示。
ALE
图3.574LS373用作地址锁存器
3.2单片机及其外围电路
3.2.1单片机功能引脚介绍
本设计使用51些列单片机,51系列单片机是8051系列的简称,是指MCS-51系列单片机和其他公司的8051派生品。
MCS-51系列单片机最早是由intel公司推出的通用型单片机,MCS-51系列单片机产品可分为两大系列:
51子系列和52子系列。
51子系列的基本产品是8031,,8051和87c51三种机型,分别与这三种机型兼容的低功耗CMOS器件产品是80C31,80C51和87C51。
它们的指令系统和芯片引脚完全兼容,它们之间的差别仅在于片内有无ROM或EPROM
图3.651单片机引脚图
51单片机引脚功能:
MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图:
lP0.0~P0.7P0口8位双向口线(在引脚的39~32号端子)。
lP1.0~P1.7P1口8位双向口线(在引脚的1~8号端子)。
lP2.0~P2.7P2口8位双向口线(在引脚的21~28号端子)。
lP3.0~P3.7P2口8位双向口线(在引脚的10~17号端子)。
P0口有三个功能:
1、外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口)
2、外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口)
3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。
RST复位信号:
当输入的信号连续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作。
XTAL1和XTAL2外接晶振引脚。
当使用芯片内部时钟时,此二引脚用于外接石英晶体和微调电容;
当使用外部时钟时,用于接外部时钟脉冲信号。
VCC:
电源+5V输入
VSS:
GND接地。
3.2.2单片机外围电路
8051单片机单片机及其外围电路包括上电复位电路,晶振如图11所示,
图3.7单片机外围电路图
3.3充放电电路
3.3.1MOSFET
MOSFET为金属—氧化层—体-场效晶体管,简称金氧半场效晶体管(Metal-Oxide-SemiconductorField-EffectTransistor,MOSFET)是一种可以广泛使用在模拟电路与数字电路的场效晶体管(field-effecttransistor)。
MOSFET依照其“通道”的极性不同,可分为n-type与p-type的MOSFET,通常又称为NMOSFET与PMOSFET,其他简称尚包括NMOSFET、PMO