游泳池水温控制系统.docx
- 文档编号:9791681
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:23
- 大小:714.38KB
游泳池水温控制系统.docx
《游泳池水温控制系统.docx》由会员分享,可在线阅读,更多相关《游泳池水温控制系统.docx(23页珍藏版)》请在冰豆网上搜索。
游泳池水温控制系统
游泳池水温控制系统--
游泳池水温控制系统设计
专业:
自动化
学号:
姓名:
日期:
2016/5/23
游泳池水温控制系统设计
摘要
本游泳池恒温控制系统选用AT89C51单片机作为控制器,利用PID和PWM技术实现对游泳池的水温控制。
该控制系统主要由CPU主控制模块、主电源模块、键盘处理模块、温度采集模块、继电器控制模块及LED显示模块构成。
DS18B20用来采集温度信号,其体积小,精度高,适用电压宽,抗干扰能力强。
继电器控制两台电机的转动,分别对应控制热水阀和冷水阀,从而,实现水温的实时控制。
最后,采用共阳极数码管LG5641A动态显示水温。
关键词:
AT89C51单片机;PID;DS18B20;恒温
第1章绪论
1.1选题的背景与意义
1.1.1温度控制系统设计的背景、发展历史及意义
随着社会的发展,科技的进步,以及测温仪器在各个领域的应用,智能化已是现代温度控制系统发展的主流方向。
特别是近年来,温度控制系统已应用到人们生活的各个方面,但温度控制一直是一个未开发的领域,却又是与人们息息相关的一个实际问题。
针对这种实际情况,设计一个温度控制系统,具有广泛的应用前景与实际意义。
单片机在电子产品中的应用已经越来越广泛,在很多的电子产品中也用到了温度检测和温度控制。
随着温度控制器应用范围的日益广泛和多样,各种适用于不同场合的智能温度控制器应运而生。
近年来,人类的生产和生活方式发生了巨大的变化,产生这一变化的重要原因就是计算机技术的飞速发展。
第一台计算机诞生至今仅仅几十年的时间,计算机的性能已经大大提高,价格不断的下降,从而使之可以迅速而广泛地应用于人类的生产和生活的各个领域。
然而游泳池的温度控制的发展无疑得益于计算机技术的发展。
1.1.2本设计的应用及意义
本设计以保质、节能、安全和方便为基准设计了一个游泳池保温控制器,根据需要进行相应的数据分析和处理,由此完成对游泳池水温的采样和控制。
通过本设计掌握使用高级语言对单片机编程技术以及一线总线制在单片机方面的应用及用单片机进行对继电器的控制,从而控制大功率的加热设备,提高实际工作技能。
本设计以单片机为核心的温度采集与控制系统的研发与应用,在很大程度上提高了生产、生活中对游泳池温度的控制水平。
1.1.3游泳池保温控制系统完成的功能
本文设计一个游泳池恒温自动控制系统,游泳池中的水温可以在一定范围内由人工设定,并能在环境温度降低时实现自动调节,以保持与设定的温度一致。
利用单片机AT89C51实现水温的智能控制,采用数字温度传感器读出水温,并在此基础上将水温调节到键盘设定的温度,并通过数码管显示器实现当前温度的实时显示。
第2章系统总体设计
2.1方案的选择
2.1.1方案一
采用运放等模拟电路搭建一个控制器,用模拟方式实现PID控制,对于纯粹的水温控制,这是足够的。
但是附加显示、温度设定等功能,还要附加许多电路,稍显麻烦。
同样,使用逻辑电路也可实现控制功能,但总体的电路设计和制作比较烦琐。
2.1.2方案二
单片机为控制核心的控制系统,尤其对温度控制,它可达到核心的控制作用,并且可方便实现数码显示、键盘设定及利用PID算法来控制PWM波形的产生,进而控制继电器的通断,最终实现游泳池的恒温控制,
其所测结果精度也大大的得到了提高,利用PID算法来控制PWM波形的产生,并有效地控制数字脉冲的输出宽度,使固态继电器得到有效和有序的逻辑控制,不会使固态继电器产生误动作。
论证选择方案三
2.2系统总体设计(要求有框图)
此方案是以单片机为控制核心的控制系统,尤其对温度控制,它可达到核心的控制作用,并且可方便实现数码显示、键盘设定及利用PID算法来控制PWM波形的产生,进而控制继电器的通断,最终实现游泳池的恒温控制,其所测结果精度也大大的得到了提高,利用PID算法来控制PWM波形的产生,并有效地控制数字脉冲的输出宽度,使固态继电器得到有效和有序的逻辑控制,不会使固态继电器产生误动作。
单片机可以将数字温度传感器采集到的实际水温温度值直接用数码管显示,还能用键盘输入设定值,其系统框图如图2-1所示。
图2-1PID控制系统框图
第3章硬件设计
3.1硬件选型
3.1.1CPU主控模块的选型
CPU主控制模块采用AT89C51单片机,把数字温度传感器采集到的温度信号与原预先设定值进行比较,然后根据其差值通过PID调节进行整定,控制继电器的通断,进而控制冷水还是热水电机的转动,能用键盘输入数据以及温度信号的实时显示。
主电源模块采用整流桥进行AC-DC电源变换,电容用470uf5v,0.1uf,100uf5v的构成稳压谐波调节电路,稳压器采用三端稳压集成电路LM7805。
由于单片机供电电压5V故继电器采用5V-SPDTOMRON继电器即可满足设计要求。
3.1.2温度采集元件的选型
温度采集采用DS18B20温度传感器。
DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。
DALLAS 半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。
温度测量范围为-55~+125 摄氏度,可编程为9位~12 位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM 中,掉电后依然保存。
3.2硬件电路设计(按模块)
3.2.1主电源电路
图3-1主电源电路
为防止电源之间的相互干扰,需对电路进行独立供电,本系统采用双电源输出一个正常之用,一个应急备用。
因此电源电路设计输出两路为+5V的稳压电源,同时主电路的开关元件为固态继电器,其直流侧的供电电源可选择为+5V。
由于固态继电器内部带有光耦,其直流侧与交流侧相互隔离,因此其直流侧的供电电源可与数字电路的+5V电源共用,另外DS18B20也用+5V的稳压电源供电,另外一个+5V的稳压电源用来备用,当遇到系统断电时可以把那个备用的稳压电源来应急,这样就给系统增加了一道应急保险。
本装置的直流稳压电源采用通常的桥式全波整流、电容滤波、三端固定输出的集成稳压器件进行设计。
系统的供电电源电路如图2所示。
3.2.2按键输入电路
在按键模块电路中有4个按键,温度设定范围是24℃到29℃,可通过温度上限加一减一按钮改变设定温度上限,温度下限加一减一按钮改变温度下限。
电路如图3-2。
图3-2按键输入电路
3.2.3继电器模块
图3-3继电器模块
图3-3是一个控制电机的电路图,单片机通过P3.1和P3.4口的输出控制继电器的开合并进行通讯,其中P3.1口的输出控制继电器RL1的开合进而控制COLDWATER电机的转动,决定向游泳池中加入冷水来降温;P3.4口的输出控制继电器RL2的开合进而控制HOTWATER电机的转动,决定向游泳池中加入热水来升温。
3.2.4显示模块
本电路采用共阳极数码管LG5641A进行动态显示,用P2.0~P2.7口作为位选控制,P0.0~P0.7口传输要显示的数据,数据线和位选线直接接AT89C51单片机的I/O口即可,因为I/O口输出电流很小并且加上了上拉电阻,这样可以对LED进行驱动,它的电压值足以驱动LED。
本设计就是采用动态显示电路,其电路如图3-4所示。
图3-4显示模块
第4章软件设计
4.1系统流程(流程图)
系统的软件主要是采用C语言,对单片机进行变成实现各项功能。
主程序对模块进行初始化,而后调用读温度、处理温度、显示、键盘等模块。
用的是循环查询方式,来显示和控制温度,主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值并负责调用各子程序,其程序流程如图4.1系统程序流程图。
图4-1系统程序流程图
4.2各部分程序流程图
4.2.1计算温度子程序
读出温度子程序的主要功能包括初始化,判断DS18B20是否存在,若存在则进行一系列的读操,作若不存在则返回。
其程序流程图如图4.2所示。
图4-2读程序流程图
4.2.2按键处理子程序
按键处理子程序主要是负责参数的设置,主程序每循环一次都要对按键进行扫描,判断是否有输入键按下则进行一系列的按键输入操作。
其程序流程框图如图4-3所示。
图4-3程序流转程序图
4.2.3计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图4-4所示。
图4-4计算温度子程序图
第5章仿真结果
5.1仿真介绍
因本系统是利用单片机进行系统控制,所以需采用单片机仿真工具Proteus进行仿真Proteus软件具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,Proteus为使用者建立了完备的电子设计开发环境,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真,是一款非常优秀的单片机仿真软件。
可以使用Keilc51和Proteus进行联调,使调试和仿真更为方便。
5.2水温控制系统仿真效果
5.2.1水温低于下限值
设定温度下限值为24℃,在水温24℃及以下时,发光二极管闪烁报警,继电器RL2接通,HOTWATER电机转动,向游泳池中加入热水升温,仿真图如图5-1所示。
图5-1水温低于设定温度下限值
5.2.2水温处于正常值
温度介于上下限之间,发光二极管不闪烁,两个电机都停止转动,不进行任何动作,仿真图如图5-2所示。
图5-2水温处于正常值
5.2.3水温高于上限值
设定温度上限为29℃,水温为29℃及以上时,达到温度上限值,发光二极管闪烁,继电器RL1接通,COLDWATER电机转动,向游泳池中加入冷水降温,仿真图如图5-3所示。
图5-3水温高于设定温度上限值
结 论(心得体会)
本文设计的游泳池恒温自动控制系统,是以单片机为控制核心的恒温系统。
该系统利用数字温度传感器,将采样到的温度信号输入到单片机,再由单片机根据测量温度与设定温度的差值和PID算法生成控制信号,控制固态继电器的通断。
整个系统结构紧凑、所用芯片少、控制精度高、响应速度快,体积小,成本低。
在键盘、显示电路上都采用了串行方式,减小了单片机口线的使用,减小了成本开支。
虽然在主电源电路未采用流行的开关稳压电源,但经济实惠,性能稳定。
参考文献
[1]催东剑.多点恒温自动控制系统设计[J].电工技术,2003,(7).
[2]吴炳胜,王桂梅.80C51单片机原理与应用[M].北京:
冶金工业出版社,
[3]蔡自兴.智能控制[M].北京:
电子工业出版社,2004
[4]汪孝国,王婉丽.高精度PID温度控制器[J].电子与自动化,2001
[5]肖亮,陶学恒.新型的智能化液位温度测量系统[J].仪表技术与传感器,2005,(8).
[6]诸静.模糊控制原理与应用[M].北京:
机械工业出版社,1995.
[7]耿长清.单片机应用技术[M].北京:
化学工业出版社,2002
[8]赵晶.PROTEL高级应用[M]:
人发邮电出版社,2002.12:
224-226
[9]夏红,赏星耀.PID参数自整定方法综述[J].浙江科技学院学报,2003,(4).
[10]于海生等.微型计算机控制系统[M].清华大学出版社,1998.
附 录
硬件电路总图
软件程序
sbit TMDAT =P1^0;
void DS1820_DelayCount (unsigned char Coun)
{
data unsigned char Count;
Count=Coun;
while(Count>0) Count--;
Count=Coun;
while(Count>0) Count--; } //复位DS18B20
void DS1820_Reset(void)
{
TMDAT=0;
DS1820_DelayCount(412);
TMDAT=1;
DS1820_DelayCount(16); } //等待DS18B20应答
unsigned char DS1820_Answer(void)
{
data unsigned int i;
data unsigned char j;
while(TMDAT)
{ i--; if (i==0)
return(aban_return);
}
i=0xffff; j=3;
while(~TMDAT)
{ i--; if (i==0) if(j==0)
return(aban_return);
else
{ j--;
i=0xffff; }
}
DS1820_DelayCount(16);
return(done_return); } //等待DS18B20应答 //读取位
bit DS1820_Readbit(void)
{
data int i=0;
bit dat;
TMDAT=0;i++;i++;i++;i++;
TMDAT=1;i++;i++;i++;i++;i++;i++;i++;i++;
dat = TMDAT; //
DS1820_DelayCount(8);
DS1820_DelayCount(32);
return dat; } //读取字节
unsigned char DS1820_Readbyte(void)
{
data unsigned char i,j,dat=0;
for(i=1;i<=8;i++)
{
j=DS1820_Readbit();
dat=(j<<7)|(dat>>1); }
return dat; } //写一个字节
void DS1820_Writebyte(unsigned char dat)
{
data signed char i=0;
data unsigned char j;
bit testb;
for(j=1;j<=8;j++)
{ testb=dat & 0x01;
dat = dat>>1;
if(testb)
{
TMDAT=0;
i++;i++;i++;i++;i++;i++;i++;i++; TMDAT=1; //DS1820_DelayCount(8); DS1820_DelayCount(32); } else {
TMDAT=0;
//DS1820_DelayCount(8);
DS1820_DelayCount(32); TMDAT=1;
i++;i++;i++;i++;i++;i++;i++;i++; } } }
//读操作开始
unsigned char DS1820_StartTem(void) {
EA=0;
DS1820_Reset();
if(DS1820_Answer()==aban_return) { EA=Ea;
return(aban_return); }
// DS1820_Delayms
(1); DS1820_Delayms(4); DS1820_Writebyte(0xcc); // DS1820_Writebyte(0x55); // for(i=0;i<8;i++)
//DS1820_Writebyte(DS1820_temp[i]); DS1820_Writebyte(0x44); EA=Ea;
return(done_return); }
//读所有传感器
int DS1820_ReadTem(void) {
data unsigned char a,b; data int y3; data float y4; data unsigned char i; EA=0;
DS1820_Reset();
if(DS1820_Answer()==aban_return) { EA=Ea; return(0xffff); }
DS1820_Delayms(4);
DS1820_Writebyte(0xcc); //跳过匹配传感器
//DS1820_Writebyte(0x55);
// for(i=0;i<8;i++)
//DS1820_Writebyte(run_inf.system_index.DS1820_temp[i]);
DS1820_Writebyte(0xbe); //读取温度 for(i=0;i<9;i++) { run_inf.system_index.DS1820_temp[i]=DS1820_Readbyte(); }
if(CRC(9)!
=0)
{
EA=1;
return(0xffff); }//计算CRC
a = run_inf.system_index.DS1820_temp[0]; b = run_inf.system_index.DS1820_temp[1]; DS1820_Reset();
y3 = (b<< 8)|a; y4=y3; y4=(y4*25)/4; EA=1;
return((int)(y4)); }
2.DS1602驱动程序
sbit rtc_sc=P3^4;
sbit rtc_io=P3^5;
sbit rst_1302=P3^6;
bdata unsigned char temp;
sbit temp_0 = temp^0;
sbit temp_7 = temp^7;
/************************************************************** DS1302驱动程序开始
**************************************************************/ //功能:
往DS1302写入1Byte数据
void v_RTInputByte(unsigned char ucDa) {
unsigned char i; temp = ucDa; for(i=8; i>0; i--) {
rtc_io = temp_0; /*相当于汇编中的 RRC */ rtc_sc = 1; rtc_sc = 0; temp = temp >> 1; } }
//功能:
从DS1602读取1Byte数据 unsigned char uc_RTOutputByte(void) {
unsigned char i; rtc_io=1;
for(i=8; i>0; i--) {
temp = temp >>1; /*相当于汇编中的 RRC */ temp_7 = rtc_io;
rtc_sc = 1; rtc_sc = 0; }
return(temp); }
//功能:
往DS1602写入数据
void write1302(unsigned char ucAddr,unsigned char ucDa) {
bit ea; ea=EA; EA=0;
rtc_rs_port&=(~rtc_rs_bit); rtc_sc = 0;
rtc_rs_port|=rtc_rs_bit;
v_RTInputByte(ucAddr); /* 地址,命令 */ v_RTInputByte(ucDa); /* 写1Byte数据*/ rtc_sc = 1;
rtc_rs_port&=(~rtc_rs_bit); EA = ea; }
//功能:
读取DS1602某地址的数据
unsigned char read1302(unsigned char ucAddr) {
unsigned char ucDa; bit ea; ea=EA;
EA=0;
rtc_rs_port&=(~rtc_rs_bit); rtc_sc = 0;
rtc_rs_port|=rtc_rs_bit;
v_RTInputByte(ucAddr); /* 地址,命令 */ ucDa = uc_RTOutputByte(); /* 读1Byte数据 */ rtc_sc = 1;
rtc_rs_port&=(~rtc_rs_bit); EA = ea; return(ucDa); }
//功能:
设置初始时间
void Set1302(pTime_S time_temp) {
unsigned char i= 0x80;
write1302(0x8e,0x00); /* 控制命令,WP=0,写操作*/ write1302(i,time_temp->sec); i +=2;
write1302(i,time_temp->min); i +=2;
write1302(i,time_temp->hou); i +=2;
write1302(i,time_temp->day); i +=2;
write1302(i,time_temp->mon); i +=2;
write1302(i,0x02); i +=2;
write1302(i,time_temp->yea);
i +=2;
write1302(0x8e,0x80); /* 控制命令,WP=1,写保护*/ }
//功能:
读取DS1302当前时间 void get1302(void) {
unsigned char i,time_bcd_temp[6]; unsigned char ucAddr = 0x81; for (i=0;i<7;i++) {
time_bcd_temp[i] = read1302(ucAddr);/*格式为:
秒 分 时 日 月 星期 年 */ ucAddr += 2; }
sec=time_bcd_temp[0]; min=time_bcd_temp[1]; hou=time_bcd_temp[2]; day=time_bcd
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 游泳池 水温 控制系统