太阳能热水器的控制器的设计.docx
- 文档编号:8932273
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:26
- 大小:358.47KB
太阳能热水器的控制器的设计.docx
《太阳能热水器的控制器的设计.docx》由会员分享,可在线阅读,更多相关《太阳能热水器的控制器的设计.docx(26页珍藏版)》请在冰点文库上搜索。
太阳能热水器的控制器的设计
太阳能热水器的通用控制器研制
武汉工程大学刘增华李伟
1、系统功能与指标
1.1功能特点
具有目前产品的一般功能:
1)设巻上限水位:
设苣水位上限,可选择50%~99%之间(我们选取80%),并且在使用中,不得自动上水。
2)设置水箱水温:
设巻电加热的温度上限,可选择0迫~80弋(我们选取60°C),自动加热。
3)水位指示:
LED五段显示。
4)水温指示:
LCD液晶数字显示。
5)自动上水:
为防止空晒,当水位低于10%时,系统强制上水:
当水位低于30%时,提示报警,若没有使用,启动自动上水,若使用,则报警提示先上水,再使用。
6)辅助加热:
当出现阴雨天气,水温达不到要求,启动辅助电加热,电加热温度上限设置为60°Co
同时还具有新加功能:
1)智能模式:
检测淋浴水温,自动调节凉水的流量,自动调节,使水温保持在设泄温度的2。
<2范围内,并保持有足够的流量。
1.2技术指标
1)设程上限水位:
设巻水位上限,可选择50%-99%之间(我们选取80%),并且在使用中,不得自动上水。
2)设苣水箱水温:
设苣电加热的温度上限,可选择60°C,自动加热。
3)水位指示:
分段显示(5段显示)。
4)水温指示:
数字显示(精度为1度)。
5)自动上水:
为防1上空晒,当水位低于30%时,提示报警,若没有使用,启动自动上水。
若使用,则报警提示先上水,再使用。
6)智能模式:
检测淋浴水温,自动调节热水、凉水的流量,自动调肖,使水温保持在设定温度的2£范围内,并保持有足够的流量。
2、系统结构设计
2.1系统的工作原理
太阳能热水器辅助控制系统结构如图1所示。
在太阳能热水器的储水箱内增加一个电加器,采用220V市电加热,由辅助控制系统的继电器控制通断电,用来在温度达不到要求的时候进行辅助加热来保证热水温度。
水位、水温探测器从保温储水箱顶部安装在水箱中,通过电缆线接入用户室内控制器。
流量控制阀用通过步进电机来精确控制冷水即自来水的流量,来保证热水与冷水混合后的温度达到用户的要求。
当水位不足报警时,通过电磁阀启动上水,上水的过程中,不允许淋浴,且放水电磁阀关闭。
当需要淋浴时,放水电磁阀打开,通过自动控制冷水电磁阀的开度来保证冷水与热水混合后的温度与用户设左值基本一致(水温保持在设定温度的2°C范羽内),淋浴过程中,系统禁止上水和辅助加热。
当淋浴完后按下”淋浴完键“,系统停止放水并且电机要复位。
系统的总体结构图如下。
2.2控制系统与电路结构组成
控制系统采用FPGA内部构建Core8051单片机来控制水温水位等,其内部接线图如图2所示。
整个系统采用FusionStartKit开发平台,嵌入8051内核为核心,对水温、水位等参数进行智能检测和显示,读取电磁阀的状态,经键盘操作和单片机内部运算比较,控制相应得执行机构进行通、断电及报警提示,其控制系统组成如图3。
FusionStartKit
4567•••・
1111pPPP
图2FPGA内部Core8051引脚分配图
图3太阳能热水器控制系统的组成
Core8051的P0口作液晶的数据口,P2.0-P2.2为液晶的使能控制口,P2.3-P2.5分别接步进电机驱动器CP-.il/d-,FREE-,CP为脉冲信号输入端:
U/D为电机正、反转控制端;FREE为电机脱机控制端,通过不断的对淋浴水温进行智能检测和显示,经单片机内部运算与设宦温度进行比较,控制输入步进电机的脉冲信号及正反转状态,来调右流量控制阀的开度,从而来保证喷头水温与用户设立水温的相一致。
P2.6接数字温度传感器dsl82O,用来检测水箱温度并通过芯片及单片机内部处理后显示在液晶上,P2.7也接温度传感器用来检测淋浴喷头的水温。
如果水箱温度不足时(达设置水温下限),则加热继电器动作,启动辅助加热装置,当水温达加热温度上限时加热继电器断开,辅助加热装置关闭。
水位用5段led灯显示,如果水位不足则报警蜂鸣器响,若没使用则上水继电器动作,电磁阀开通,自动上水至水位上限后关闭。
3、单元电路设计
3.1水位检测
图4由555龙时器构成的液位测量电图
水位检测原理如下:
由两块铝板组成电容构成介质变化型电容传感器,电容大小为:
I
式中:
g为介质,S为对应的面积,I为长度。
假设电容器为两平极结构,作绝缘处理后的电容器两极间浸入不同的界质中,由于电容器中的介质相对介电系数不同,电容量是不同的,即检测电容传感器在水位变化导致电容器的电容C变化情况。
电容传感器处在大气中、浸入水中不同深度,其电容量的变化,可反映出水位的变化。
在大气中相对介电常数为1,电容传感器的电容量为C1,在水中相对介电常数更大,达到80,电容传感器的电容量将随着浸入深度加大而变大。
由于上下两部分的介质不同,则总电容有两个电容并联组成:
设铝板总高度为H,液位髙度为h,则上下两部的介质分别为空气和水。
厂»]bh
C,=£—=!
•
Cl
C2
1IH_h
C.=^-=80>—=80^
・/h
式中:
空气的介电常数为1,b为铝板的宽度。
本传感器采用NE555制作为脉冲波发生器,输出的频率反映液位的变化,根据实际测试:
Cmin=°l"八°叭=22庐
取中心工作频率为lKHz,确左电阻值。
当水箱里无水时(水位最低),最小。
将水位划分为五段:
0.1-0.2nK0.2-0.3m.、0.3-0.4m、
0.4・0.5m、0.5-0.6m,分别对应于显示灯LED1.LED2、LED3、LED4.LED5。
当水位发生变化引起电容的变化,经多谐振荡器输出周期性方波的频率f也随之发生变化[f=1.43/(Rl+2R2)C],根据单片机的计数器TO扑捉到的时钟的个数,再经单片机内部比较处理来决左点亮的LED灯。
譬如当水位处于hl位段时,输出的频率满足点亮LED1的条件,则LED1亮,指示水位位于0.1-0.2m处,由此来实现水位的显示。
LED灯显示采用动态扫描方式,即在某一时刻,只有一个灯被点亮。
当水位低于h2时,启动蜂鸣器报警,提示需加水,若无人使用则自动启动加水。
实验表明,为能很好的满足电路的要求,R1用可调电阻,R2应选取阻值较大一点的电阻,这里我们选R2=8.1KQ.R1阻值范用为0-30KQ。
3.2温度检测
对水温信号的检测采用一线式数字温度传感器DS1820,它以9位数字量的形式反映器件的温度值。
通过使用连接到VDD引脚的外部电源来向ds1820供电,如图5所示,这种方法的优点是在I/O线上不要求强的上拉,总线上主机不需向上连接便在温度变换期间使线保持髙电平。
这就允许在变换时间内其它数据在单线上传送。
OS1820
OS1820
图5温度传感器接线图
3.3步进电机控制电路的设计
为了能调控水温,需要节流阀控制冷水的流量,由于商品化的电动阀价格太髙,本方案选用节流阀+步进电机的组合控制。
步进电机,选用的二相四拍步进,步距角为1.8°。
同时,采用BY-2HB03M的驱动器来驱动,控制二相四拍步进电机的步进及正反转。
通过单片机控制步进电机即可控制肖流阀,达到控制淋浴水温的目的。
步进电机控制电路连接图如图6所示。
图6步进电机控制连线图
3.4光电隔离与辅助加热电路设计
下图7为太阳能热水器辅助加热电路设计,当室外光照不足(阴天,雨天)时,对水箱的水提前加热是非常有必要的,而这一电路恰好能完成该功能。
工作原理为:
当Core8051的P1.2口输岀高电平时,三极管T1导通,使得继电器线圈通电闭合,电阻丝Rl'-RV发热,从而完成加热任务。
图7辅助加热电路图
3.5继电器驱动电路
电路如图8所示,三极管Q为NPN驱动三极笛.工作在开关状态;二极管D为继电器线圈在由吸合变为断开时提供续流,以免产生髙压,从而保护三极管Q。
图8继电器驱动电路
因为硬件设讣中要用到两个电磁阀,淋浴时的放水电磁阀和向水箱上水的电磁阀,故需要两个继电器来控制。
4、控制器的软件设计
控制器软件设计采用模块化结构,包括主程序,键盘扫描子程序,显示子程序,步进电机控制程序,液位比较子程序及温度计算子程序。
系统主程序主要完成水箱及喷头温度和水位的检测,温度的设宜,水位不足报警,自动上水及一些初始化功能。
系统主程序流程图如图8所示。
5、测试结果
该控制器的设计主要采用Actel公司Fusion系列60万门的AFS600芯片,通过嵌入8051内核来实现,充分利用该平台提供的资源,来完成本次设计任务。
该控制器与市而上的太阳能控制器比较,主要解决了两大主要问题:
1•水温的控制调节问题。
该控制器采用精确度很髙且跟随性很好的步进电机在很短的时间内进行精确自动调节淋浴水温,保证设定水温与实际水温误差在2°C,并且水温从低向设定水温自动调节,杜绝因水温调节过高而发生烫伤事件。
2.自动上水问题。
该控制器能实现完成自动上水过程,当检测水位低于水位下限时,先检测热水器是否处于使用状态,若使用中则报警并提示上水再使用,此过程中由于水位留有余量,用户仍然可以继续完成淋浴;若没使用,则启动自动上水至设左的水位上限。
此外,由于增加了一个温度传感器用来检测淋浴水温,使得控制器更加智能化。
致谢
本次设计制作历时5个月,在本次设计的过程中,在对Fusion开发平台熟悉的过程中得到广州周立功刘银华经理及武汉周立功陈光华工程师的细心帮助:
在对硬件搭建及软件编程的过程中得到沈浩研究生的大力帮助:
在整个设讣过程中得到了熊俊俏老师的鼎力相助和悉心指导,在此一并表示深深地感谢!
//太阳能热水湍智能控制系统程序:
//定义头文件和各个输入管脚以及变址声明
^include
#include
#include
ftinclude
ffdefineuintunsignedint//定义变址类型名
^defineucharunsignedchar
严定义8255a字符型字位口*/
^defineDIGPORTXBYTE[0xlFFF]//PA口地址.位选码地址
^defineWORDPORTXBYTE[0X3FFF]//PB口地址,断选码地址
^defineCCOMXBYTE[0X7FFFF]//控制字寄存器地址转defineKPORTXBYTE[0X5FFF]//PC口,键盘扫描地址
//DS13O2_RST=1//定义DS1302时钟芯片引脚操作
^defineSet_DS1302_RSTDS1302_RST=1
//DS1302_RST=0
^defineClr_DS1302_RSTDS2302_RST=0
//DS1302SDA=1
^defineSet_DS1302_SDADS1302_SDA=1
//DS1302_SDA=0
^defineClr_DS1302_SDADS1302_SDA=0
//DS1302-SCLK=1
ftdefineSet_DS1302_SCLKDS1302_SCLK=1
//DS1302_SCLK=0
^defineClr_DS1302_SCLKDS1302_SCLK=0
〃定义读时何控制字
^defineDS1302_SEC_Reg0x80
ffdefineDS2302_NIN_Reg0x82
ffdefineDS1302_HR_Reg0x84
^defineDS1302_DATE_Reg0x86
^defineDS1302_MONTH_Reg0x88
^defineDS2302_DAY_Reg0x8a
存defineDS1302_YEAR_Reg0x8c
存defineDS2302_CONTROL_Reg0x8e
井defineDS1302_CHARGER_Reg0x90
井defineDS2302_CLKBURST_Reg0xbe
//全局变址
〃为了方便,我把个位和十位分开了
ucharyearl=0x88;
ucharyear0=0x88;
ucharmonth=0x88;
uchardate=0x88;
ucharday=0x88;
ucharhour=0x88;
ucharminute=0x88;
ucharsecond=0x88;
严定义Pl口各管脚左/
sbitL0=P2A0;
sbitL1=P2A1;
sbitL2=P2A2;
sbitL3=P2A3;
sbitK0=P2A4;
sbitP1_0=P1A0;
sbitP1_1=P1A1;
sbitP1_2=P1A2;
sbitHig=PlA4;
sbitDS1302_SDA=P1A5;//定义DS1302时钟引脚与収片机引脚的连接
sbitDS1302_SCLK=P1A6;
sbitDS1302_RST=P1A7;
严声明调用函数■/
voidinital(void);
voidtimerl_svr(void);
voiddisplay(void);
voiddelay(ucharj);
voidDS1302_Write(ucharreg^uchardat);
ucharDS1302_Read(ucharreg);
voidDS1302_Init(void);
voidReadTime(void);
voidWtTmCr();
voidLvRead();
voidTmRead();
voidkey(void);
ucharkbscan(void);
voidDS1302(void);
voidint0_int(void);
voidintl_int(void);
严定义调用存储取元車/
严显示缓冲区(依次为高位低位〉*/
ucharBUFFER[3]={0,0,0};
ucharWTLV;//水位值
ucharTMP;//水温值
ucharWTLVSET;//水位设定值
ucharTMPSET;//水温设定值
ucharbuf[4]={0>0J0,0};
严数码管显示编码
code
uchar
TABLE[卜{0x7B»ex3乞exEA"xF8卫xBl»0xD9卫xDB卫x760xFB2xF9»0xF冇0x80};
main()
{
inital();//初始化中断、定时器、I/O口
kbscan();//键盘扫描
key();//键盘处理
TmRead();//读取温度
LvRead();//读取水位
DS1302();//读取时间
display();//显示
}
P1_0=Pl_l=P1_2=K0=0;//初始化外部驱动口DS1302_Init();
EA=1:
〃开外部中断
ITO=1;//外部中断下降沿触发
EX0=1;//允许外部中断0
Hig=l;P1.3输出高电平
TMOD=0xll;定时湍匸作于方式2
TH1=OX8A;//定时器2赋初值
TL1=0XD0;
ET1=1;定时器1开定时中断
匸作方式0
〃若有惟按下
〃延时抖动
TR1=1;//开启定时器1CCOM=0X8O;//初始化8255A,送控制字,
}
ucharkbscan(void)
{
ucharrecode;
if((KPORT&0X0F)!
«0X0F)
{
delay
(2);
if((KPORT&0X0F)!
=0X0F)
{
recode=KPORT;return(recode);
}
}
else
return(0);
}
voidkey(void)
ucharkey;key=kbscan();
delay
(2);
if(key==0x01)
if(key==Ox02)//设宜水位
if(WTLVSET==4)
WTLVSET=0;
else
WTLVSET+=WTLVSET;
BUFFER[0]=WTLVSET;//^示设迓水位display();
}
if(key==0x94)//电加热
{
P1_0=1;
}
if(key==0x08)//设宜温度
{
if(TMPSET>=80)
TMPSET=30;
else
TMPSET=TMPSET+10;//増加十度BUFFER[0]=TMPSET;显示设置水温display();
}
}
voidtimerl_svr()interrupt1
{
TH1=0X8A;//重新给定时器1賦值
TL1=0XD0;
Hig=!
Hig;//充放电变换
if(Hig)//充电开始时启动定时器O
{
TL0=TH0=0X00;〃定时器0賦初值0
TR0=1;//启动定时器0
}
}
voidint0_int(void)interrupt0〃外部中断0.测水位
{
EX0=0;
EXU;
TR0=0;
buf[0]=TL0;
buf[l]=TH0;
}
voidintl_int(void)interrupt2//外部中断鸡测水温{
EX1=0;
EX0=1;
TR0=0;
buf[2]=TL0;
buf[3]=TH0;
}
voidTmRead()//水富值处理
{
uintval;
val=buf[3]*256+buf[2];
if(val<7549)
TMP=97-int(val*8/lO00);
else
if(val<20009)
TMP=50-int(val/1000);
else
TMP=30-int(val*5/10000);
}
voidLvRead()//水位值处理
{
if(buf[l]>60)
{
WTLV=1;//
L3=0;L2=1;L1=1;L0=1;
}
elseif(buf[1]>45)
{
WTLV=2;
L3=1;L2=0;L1=1;L0=1;
}
elseif(buf[1]>36)
{
WTLV=3;
L3=1;L2=1;L1=0;LO=1;
else
WTLV=4;
L3=1;L2=1;L1=1;L0=0;
}
}voidWtTmCr()//水位、水温控制
{
if(WTLV==4)
P1_1=0;if(WTLV==l)
Pl_l=l;if(TMP>=TMPSET)
if(TMP P1_0=1; }voiddisplay(void) uchari; uchardelay; uchardisp; 〃显示缓冲区首址 〃显示延时 //显示内容 uchardigit; 〃定义数码管显示位 digit=0x0209; if(BUFFER[i]>100)disp=BUFFER[i]%10+10;//显示高位elsedisp=BUFFER[i]%10; DIGPORT=digit; WORDPORT=TABLE[disp];for(delay=0;delay=200;delay++);digit=digit»l;//^示低位disp=BUFFER[i]/10; DIGPORT=digit; WORDPORT=TABLE[disp]; for(delay=0;delay=200;delay++);digit=digit>>l; voiddelay(ucharj)〃延时程序 { uchara,b; for(a=0;a for(b=0;b<2O0;b++) J } voidDS1302()//时间程序 { ReadTime(); BUFFER[l]=second; BUFFER[2]=hour; } voidDS1302_Write(ucharreg丿uchardat)//写入时间{ uchari; Clr_DS1302_RST; _nop_(); _nop_(); Clr_DS23O2_SCLK; _nop_(); _nop_(); Set_DS2302_RST; _nop_(); _nop_(); for(i=8;i>0;i--) { if(reg&0x01)Set_DS2302_SDA; elseClr_DS2302_SDA; _nop_(); _nop_(); Set_DS23O2_SCLK; _nop_(); _nop_(); Clr_DS1302_SCLK; _nop_(); _nop_(); reg>>=l; } for(i=8;i>0;i--)if(dat&0x01)Set_DS1302_SDA;elseClr_DS1302_SDA; _nop_(); _nop_(); Set_DS1302_SCLK; _nop_(); _nop_(); Clr_DS1302_SCLK; _nop_(); _nop_(); dat>>=l; } Clr_DSH02_RST; _nop_(); _nop_(); } ucharDS1302_Read(ucharreg)//读取时间 { uchardat=0^i; Clr_DS1302_RST; _nop_(); _nop_(); Clr_DS2302_SCLK; _nop_(); _nop_(); Set_DS[沖2_RST; _nop_(); _nop_(); for(i=8;i>0;i--) { if(reg&0x01)Set_DS1302_SDA; elseClr_DS2302_SDA; _nop_(); _nop_(); Set_DS2302_SCLK; _nop_(); _nop_(); Clr_DS1302_SCLK; _nop_(); _nop_(); reg>>=l; for(i=8;i>0;i--) { dat>>=l; if(DS1302_SDA)dat|=0x80; Set_DS1302-SCLK; _nop_(); _nop_(); Clr_DS1302_SCLK; _nop_(); _nop_(); } Clr_DS2302_RST; _nop_(); _nop_();return(dat); voidDS1302_Init(void)//初始化DS1302 { DS1302_Write(DS1302-CONTROL_RegJ0x00);//关闭写保护DS1302J«Jrite(DS1302_SEC_Reg,0x80);//暂停DSl302J«Jrite(DSl302_CHARGER_RegJ0xa9);//if1流充电DS1302_Write(DS1302-YEAR_Reg,0x04);//年DS1302JJrite(DS1302_MONTH_Reg,0x12);〃丿JDS1302Jdrite(DS1302_DATE_RegJ0x09);//日DS1302JJrite(DS1302_DAY_Re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 太阳能热水器 控制器 设计