当前位置:文档之家› 【最新版】太阳能热水器水位控制系统设计毕业设计

【最新版】太阳能热水器水位控制系统设计毕业设计

毕业论文

太阳能热水器水位控制系统设计

摘要

本设计主要设计了一个基于单片机的太阳能热水器水位控制系统。设计以单片机为核心,配合电阻型4档水位传感器、8255A扩展键盘和显示器件、以及电磁阀、报警等外围器件,从而完成对太阳能热水器容器内的水位测量及控制;时间显示;缺水时自动上水;水满报警;手动上水等功能。

本文主要进行时钟电路、电源电路、键盘输入电路、传感器电路、显示电路的设计,以及硬件选择和系统软件设计。本文在已有的太阳能热水器的技术的基础上,采用单片机对热水器水位控制,通过合理的选择和设计,提高了水位传感器的控制水平,改善了热水器的实际使用功能,从而使太阳能热水器水位控制达到了较为理想的效果。

关键词:太阳能热水器,水位控制,单片机,传感器

Abstract

This article mainly designed a monolithic integrated circuits, the control system of the solar water keyboard and the demonstration component, the solenoid valve, warning,and other periphery component, thus completes to the water level measure and demonstrate; the time demonstrate; lack of water automatically upstream, the water overflow warn,manual water function and so on.

This article mainly for clock circuit, power supply circuits, the keyboard to enter the circuit, sensor circuit, display of the circuit design,and .This article in the given solar water the basis of a monolithic integrated circuits to control through the water , and improve the control of the sensor and improved the actual use to make solar water (void)

{

uchar recode;

if((KPORT&0X0F)!=0X0F) 若有键按下 {

delay(2); 延时抖动

if((KPORT&0XF0)!=0X0F) 若有键按下

{

recode=KPORT;记录键值

return(recode); 返回键值

}

}

return(0);返回0

}

根据读取的值,键盘处理程序进行相应动作,键盘数据处理程序不再叙述。

第六章传感器电路

6.1工作原理

当水位处于低水位的时候,传感器的低水位探测线被+5V的电源导通进入稳压电路经过处理在稳压电路的输出端有一个高电平,送入单片机的P1.0口,另一个稳压电路输出的高电平进入单片机的P1.1口单片机经过分析,在P1.2口输出一低电平,驱动红灯亮,P1.5出来一个信号使光电耦合器GDOUHE导通,这样继电器闭合,使水泵加水;当水位处于正常范围内时,水泵加水,在P1.3引脚出来一个低电平,使绿灯亮;当水位在高水位区时,传感器的两根探测线均被导通,均被+5V的电源导通,送入单片机,单片机经过分析,在P1.4引脚出来一个低电平,使黄灯亮,在P1.5端出来一个高电平不能使光电耦合器导通,这样继电器不能闭合,水泵不能加水;当三灯闪烁表示系统出现故障。

6.2单片机控制结构图

图6-1 单片机控制结构图

采用单片机AT89C2051作为我们的控制芯片,主要工作过程是当水箱的水在低水位时,水位探测传感器送给单片机一个高电平,然后单片机驱动水泵加水和显示系统使红灯变亮;当水位在正常范围内时,水泵加水,绿灯亮,;当水位在高水位时,单片机不能驱动水泵加水,黄灯亮。

6.3传感器电路组成的原理图

本系统由水位探测传感电路、电源电路、稳压电路、单片机系统、光报警显示电路、继电器控制水泵加水电路、以及水位模型组成。传感器电路组成的电气原理图如图6-2所示:

RST 1(RXD)P3.02(TXD)P3.13XTAL24XTAL15

(INT0)P3.26

(INT1)P3.3

7(T0)P3.48(T1)P3.59

GND 10

VCC 20P1.719P1.618

P1.517P1.416P1.315

P1.2

14P1.1(AIN1)13P1.0(AIN0)12P3.7

11

U1AT89C2051

Q5NPN

Q4NPN

R13100K

R12100

R112K

P1.1

+5V

P1.1

Q5NPN

Q4NPN

R6100K

R5100

R42K

P1.0

+5V

D6DIODE

D5

DIODE

123

K2

CON3

+5V

R21K

R31K

+5V

R11K

C3

10uF SW-PB Y1

12MHZ C233pF

C133pF

+5V

D10

YELLOW D9

GREED

D8

RED

R161K

R141K

R151K

+5V

D4

D2

C50.1uF C60.1uF

C70.01uF

123J1CON3

Vin 1

G N D

2

Vout

3U27805

Vin 1

G N D

2

Vout

3U17812

C41000uF

U3

GDOUHE

JUMP RELAY-SPDT

V1VSIN

D3

D1GND

5V 12V 123K1CON3

R91K

R82K

R72K

R1010K D7

Q3NPN

+5V

+5V

Q012Q19Q28Q3

11

MS16MS27MR12MR23

CLK014

CLK1U2

7490

C1

47uF

C4

0.1uF

TRIG

6

CVolt

3

R 4

X D C C

14

5

DIS

1THR

2

G N D

7

U3A NE556

R210K

R110k

R44.7k

R6

1k

R51k

R310k

+5V

+5V

C3

0.01uF

A

1

B 2

Y 3

UIA 7432

C2

0.01uF

U407-02-01

P1.6

RESET

图6-2 传感器电路组成的电气原理图

工作原理:当水位处于低水位的时候,传感器的低水位探测线被+5V 的电源导通进入稳压电路经过处理在稳压电路的输出端有一个高电平,送入单片机的P1.0口,另一个稳压电路输出的高电平进入单片机的P1.1口单片机经过分析,在P1.2口输出一低电平,驱动红灯亮,P1.5出来一个信号使光电耦合器GDOUHE 导通,这样继电器闭合,使水泵加水;当水位处于正常范围内时,水泵加水,在P1.3引脚出来一个低电平,使绿灯亮;当水位在高水位区时,传感器的两根探测线均被导通,均被+5V 的电源导通,送入单片机,单片机经过分析,在P1.4引脚出来一个低电平,使黄灯亮,在P1.5端出来一个高电平不能使光电耦合器导通,这样继电器不能闭合,水泵不能加水;当三灯闪烁表示系统出现故障。

第七章其他硬件电路设计

上水、电加热、报警电路属于大功率驱动电路,需用开关控制外部电源的关断。水位显示是简单的三极管驱动电路。电源电路微单片机的主电路及部分驱动开关提供电源。本章对这些综合介绍。

7.1上水控制电路

由单片机P1.1口的输出来控制上水电磁阀。单片机P1.1口通过一个2.2K的电阻接9013三极管的基极,9013的集电极通过一个单刀继电器接正12V电源,9013射极接地。当P1.1输出低电平时,三极管截止,几乎没有电流通过三极管的基极到射极、集电极到射极,即,所以此时流过继电器的电流几乎为0,继电器打不开。当P1.1口输出高电平时,三极管9013导通,有较大的饱和电流流过继电器,使其吸合、关闭,从而开启电磁阀。

7.2电加热控制电路

电加热的继电器采用双开关继电器,一个开关控制电加热器的火线,另一个控制零线。当P1.0输出低电平时,三极管不导通,继电器无电流通过,开关不开启,电加热器不工作。当P1.0输出高电平时,三极管导通,继电器有较大电流通过,开关闭合,电加热器开始工作。。

7.3 报警控制电路

报警输出三极管的集电极接蜂鸣器,蜂鸣器的另一端接正5伏电源。有P1.2口控制报警电路,当水位超标时P1.2口输出高电平报警,不报警时将P1.2口置低电平。

7.4 水位显示电路

水位显示电路由P2.0-P2.4口来控制,其中P2.4口输出高低电平控制水位的显示与否,P2.0-P2.3口输出高低电平控制二极管的亮灭来显示水位。

1234

4

321E A/VP 31

X119X218RE S E T 9RD 17W R 16

INT 012

INT 113T 014T 115P 10/T 1P 11/T 2P 123P 134P 145P 156P 167P 178P 0039P 0138P 0237P 0336P 0435P 0534P 0633P 0732P 2021P 2122P 2223P 2324P 2425P 2526P 2627P 27

28

P S E N

29

AL E /P 30T XD 11RXD 10U189C52

Q3

9013

R122.2k

R14

2.2k

R132.2k

L S 1S P E AKE R

D2

IN4001

D1

IN4001

12JP 1

HE ADE R 2

J2

P L UG AC F E M AL E

K1

RE L AY-DP S T

K2RE L AY-S P S T

+12

+12DE

Y1

12M HZ

C5

CAP

C6

CAP

+5

电加热插座

R52k R62k R72k R82k

L 0RE S 2L 1RE S 2L 2RE S 2L 3RE S 2

DC

DE

R9

2.2k

DA

DB

+5

DE

DA DB DC DD 上水电磁阀

接220V 交流电

Q1

9013

Q2

9013

Q39013

图7-1 主要驱动电路电路图

结论

本课题设计了一个以单片机为核心配合其他外围电路的太阳能热水器智能控制系统,完成了对太阳能热水器容器内的水位测量、时间显示;缺水时自动上水,水溢报警;手动上水、参数设定等功能。

1.完成了太阳能热水器水位的测量和显示电路与电源电路的设计

2.通过对水位、水温的测量监控,实现了自动上水、水溢报警、智能加热等功能。

3.完成了用8255A扩展键盘和显示电路的设计,实现了温度时间共六位动态显示,和4个独立键盘输入。

4.完成了时钟电路设计,为系统提供了准确的时间显示,显示时、分。

并为定时加热提供了时间参考,从而完成自动电加热。

5.用键盘实现了手动上水、电加热、参数设置等功能。

参考文献

[1] 范延滨,王正彦. 太阳能热水器控制器中测量模型. 电子测量技术,2004,3.

[2] 唐德礼,鲍连升. 太阳能热水器水温水位控制器. 十堰职业技术学院学报,2002,15(4).

[6] 欧阳乔. 时钟芯片DS1302的原理及其Proteus仿真设计.计算机与信息技术,2006,6 .

[8] Lattice Date Book. LATTICE SEMICON DATEBOOK CORPORATION. 1994.

[9]马敏,孙寅聪,张炜宇.太阳能热水器控制器的设计.河南科学.2003(02)

[10]王俊杰.基于89C51单片机的太阳能热水器智能控制器的设计.郑州轻工业学院学报(自然科学版).2005(08)

[11]张榜英.基于AT89S52单片机的太阳能热水器控制系统设计.吉首大学学报(自然科学版).2110(2)

[12]曹明善.基于单片机的高塔水位控制系统设计.管理工程师.2010.5

致谢

在这两个多月的毕业设计里,我不仅仅把大学里学的东西重新复习了一遍,更重要的是把自己从老师从课本里所了解的东西应用到实践应用中,提高了自己的能力。在做毕业设计的过程中,我查阅了图书馆的资料,也通过上网提高了自己查阅资料的能力。

毕业设计是对大学所学知识的综合运用,也是理论走向实践的第一步,这对以后继续深造或者走向工作岗位都将产生深远的意义,更重要的是为以后的理论和实践的综合发展奠定了一定的基础。这次毕业设计中,最开始我不知所措,然而随着我不断的学习我也慢慢的适应了论文的设计。

设计中我得到了张老师的指导,他严谨的作风及对我的严格要求给我留下很深的印象,使我受益匪浅,论文写作中,每周都得到张老师的指点,在我学习期间他不仅传授了我做学问的秘诀,还传授了做人的准则。这些都将使我终生受益。我再次为张老师的付出表示感谢。

鉴于我现在所具备知识水平有限,难免存在一些错误和漏洞,恳请老师指正不足。

在此,再次向老师、学校表示忠心的感谢。

附录

附录:主程序流程图和程序

开始

初始化

键盘扫描

键盘处理

读温度

读水位

读时间

显示

太阳能热水器智能控制系统程序:

定义头文件和各个输入管脚以及变量声明

#include

void DS1302(void);

void int0_int(void);

void int1_int(void);

*定义调用存储单元*

*显示缓冲区(依次为高位低位)*

uchar BUFFER[3]={0,0,0};

uchar WTLV;水位值

uchar TMP;水温值

uchar WTLVSET;水位设定值

uchar TMPSET;水温设定值

*数码管显示编码"0"-"9","A","-"*

uchar code TABLE[]={0x7B,0x30,0xEA,0xF8,0xB1,0xD9,0xDB,0x70,0xFB,0xF9,0xF3,0x80}; main()

{

inital();初始化中断、定时器、IO口

kbscan();键盘扫描

key();键盘处理

TmRead();读取温度

LvRead();读取水位

DS1302();读取时间

display();显示

}

void inital()

{

P1_0= P1_1= P1_2=K0=0;初始化外部驱动口

DS1302_Init();

EA=1;开外部中断

IT0=1;外部中断下降沿触发

EX0=1;允许外部中断0

Hig=1;P1.3输出高电平

TMOD=0x11;定时器工作于方式1

TH1=0X8A;定时器1赋初值

TL1=0XD0;

ET1=1;定时器1开定时中断

TR1=1;开启定时器1

CCOM=0X80;初始化8255A,送控制字,工作方式0

}

uchar kbscan(void)

{

uchar recode;

if((KPORT&0X0F)!=0X0F) 若有键按下{

delay(2); 延时抖动

if((KPORT&0X0F)!=0X0F)

{

recode=KPORT;

return(recode);

}

}

else

return(0);

}

void key(void)

{

uchar key;

key=kbscan();

delay(2);

if(key==0x01)

{

P1_1=1;上水

}

if(key==0x02) 设置水位

{

if(WTLVSET==4)

WTLVSET=0;

else

WTLVSET+=WTLVSET;

BUFFER[0]=WTLVSET;显示设置水位

display();

}

if(key==0x04)电加热

{

P1_0=1;

}

if(key==0x08)设置温度

{

if(TMPSET>=80)

TMPSET=30;

else

TMPSET=TMPSET+10;增加十度

BUFFER[0]=TMPSET; 显示设置水温

display();

}

}

void timer1_svr() interrupt 1

{

TH1=0X8A;重新给定时器1赋值

TL1=0XD0;

Hig=!Hig;充放电变换

if(Hig)充电开始时启动定时器0

{

TL0=TH0=0X00;定时器0赋初值0

TR0=1;启动定时器0

}

}

void int0_int(void) interrupt 0外部中断0,测水位{

EX0=0;

EX1=1;

TR0=0;

buf[0]=TL0;

buf[1]=TH0;

}

void int1_int(void) interrupt 2外部中断1,测水温{

EX1=0;

EX0=1;

TR0=0;

buf[2]=TL0;

buf[3]=TH0;

}

void TmRead()水温值处理

{

uint val;

val=buf[3]*256+buf[2];

if(val<7549)

TMP=97-int(val*81000);

else

if(val<20000)

TMP=50-int(val1000);

else

TMP=30-int(val*510000);

}

void LvRead()水位值处理

{

if(buf[1]>60)

{

WTLV=1;

L3=0;L2=1;L1=1;L0=1;

}

else if(buf[1]>45)

{

WTLV=2;

L3=1;L2=0;L1=1;L0=1;

}

else if(buf[1]>36)

{

WTLV=3;

L3=1;L2=1;L1=0;L0=1;

}

else

{

WTLV=4;

L3=1;L2=1;L1=1;L0=0;

}

}

void WtTmCr()水位、水温控制

{

if(WTLV==4)

P1_1=0;

if(WTLV==1)

P1_1=1;

if(TMP>=TMPSET)

P1_0=0;

if(TMP

}

void DS1302_Init(void)初始化DS1302

{

DS1302_Write(DS1302_CONTROL_Reg,0x00);关闭写保护

DS1302_Write(DS1302_SEC_Reg,0x80);暂停

DS1302_Write(DS1302_CHARGER_Reg,0xa9);涓流充电

DS1302_Write(DS1302_YEAR_Reg,0x04); 年

DS1302_Write(DS1302_MONTH_Reg,0x12); 月

DS1302_Write(DS1302_DATE_Reg,0x09); 日

DS1302_Write(DS1302_DAY_Reg,0x04); 周

DS1302_Write(DS1302_HR_Reg,0x10); 时

DS1302_Write(DS1302_MIN_Reg,0x25); 分

DS1302_Write(DS1302_SEC_Reg,0x00); 秒

DS1302_Write(DS1302_CONTROL_Reg,0x80);打开写保护

}

void ReadTime(void)读取时间

{

uchar dat;

dat=DS1302_Read(DS1302_YEAR_Reg);年

year0=dat&0x0f;

year1=dat>>4;

dat=DS1302_Read(DS1302_MONTH_Reg);月

month=dat;

dat=DS1302_Read(DS1302_DATE_Reg);日

date=dat;

dat=DS1302_Read(DS1302_DAY_Reg);周

day=dat;

dat=DS1302_Read(DS1302_HR_Reg);时

hour=dat;

dat=DS1302_Read(DS1302_MIN_Reg);分

minute=dat;

dat=DS1302_Read(DS1302_SEC_Reg);秒

second=dat

相关主题
文本预览
相关文档 最新文档