浙江传媒学院温度控制器的设计与制作分析.docx
- 文档编号:28005183
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:23
- 大小:423.96KB
浙江传媒学院温度控制器的设计与制作分析.docx
《浙江传媒学院温度控制器的设计与制作分析.docx》由会员分享,可在线阅读,更多相关《浙江传媒学院温度控制器的设计与制作分析.docx(23页珍藏版)》请在冰豆网上搜索。
浙江传媒学院温度控制器的设计与制作分析
浙江传媒学院
课程设计(实训)报告
学院__浙江传媒学院_专业电子科学与技术
班级_11电科2班_学号110706226____
姓名_徐建新____课题温度控制器的设计与制作
指导教师黄暑娟____报告成绩______________
日期:
2013年11月17日
目录
1引言3
1.1设计意义……………………………………………………………………3
1.2设计目的与要求3
2.3本组成员所做的工作3
2设计方案论证3
2.1各部分方案比较与选择……………………………………………………3
2.2总体设计方案4
2.3系统组成及框图4
3硬件电路设计5
3.1温度测量电路设计5
3.2控制器电路设计6
3.3报警器电路设计6
3.4键盘电路设计7
3.5液晶显示电路………………………………………………………………7
4软件设计7
4.1主程序8
5系统调试8
5.1硬件调试…………………………………………………………………8
5.2软件调试……………………………………………………………………8
6结果及分析8
7心得体会9
8参考文献9
9附录……………………………………………………………………………9
附录A原理图…………………………………………………………………10
附录B源代码…………………………………………………………………11
附录C作品实物图……………………………………………………………18
1引言
1.1设计意义
温度与人们的生活息息相关,随着经济社会的不断发展,对温度的检测也显得越来越重要。
在现代农业上,温度对大规模化的农作物生产起到了关键作用,直接影响了农作物的生长和生产。
因此掌握温度的变化显得尤其重要,而传统的温度计需要人工的实时监测,浪费时间人力等显然已经不能适用了。
在现代工业上,温度对机器的影响也不容忽视,当温度过高时稍有不慎轻则造成设备的故障,重则造成人员伤亡。
特别是针对一些高危设备,人工的温度检测不仅麻烦,容易造成误差,而且对于检测人员又有一定的危险性。
于是对温度实时监控就显得至关重要了。
本设计以温度传感器DS18B20为测温元件,AT89S52单片机为核心,读取温度信息并写入控制信息:
在液晶显示屏上显示温度,设置温度的上下限。
我们可以针对不同的应用环境设置不同需求的温度上下限,当被测物体温度超过上限或低于下限温度时,蜂鸣器响动报警。
本温度计的设计与传统的温度计相比,不仅可以减少了人力的温度检测,而且具有测量准确、体积小、寿命长等优点。
1.2设计目的与要求
利用DS18B20设计一个温度控制器,可以显示环境温度,超温报警。
主要子程序
●温度转换及读取子程序
●温度计算子程序
●温度显示子程序
1.3本组成员所做的工作
资料搜集:
陈礼杭,刘娇芳
方案原理论证:
羡盼盼,刘娇芳
硬件制作:
徐建新(组长)
软件设计:
徐建新,羡盼盼,刘娇芳
调试:
陈礼杭
2设计方案论证
2.1各部分方案比较与选择
2.1.1温度控制电路选择
此系统所需要的工作量较小,采用8位机足以满足本系统的要求,故选用AT89S52单片机作为本系统的CPU。
2.1.2温度传感器的选择
方案一:
采用热敏电阻,热敏电阻精度、重复性、可靠性较差,对于检测1摄氏度的信号是不适用的,也不能满足测量范围。
在温度测量系统中,也常采用单片温度传感器,比如AD590,LM35等。
但这些芯片输出的都是模拟信号,必须经过A/D转换后才能送给计算机,这样就使测温系统的硬件结构较复杂。
另外,这种测温系统难以实现多点测温,也要用到复杂的算法,一定程度上也增加了软件实现的难度。
方案二:
采用单总线数字温度传感器DS18B20测量温度,直接输出数字信号。
便于单片机处理及控制,节省硬件电路。
且该芯片的物理化学性很稳定,此元件线形性能好,在0—100摄氏度时,最大线形偏差小于1摄氏度。
DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89C51构成的温度装置,它直接输出温度的数字信号到微控制器。
每只DS18B20具有一个独有的不可修改的64位序列号,根据序列号可访问不同的器件。
这样一条总线上可挂接多个DS18B20传感器,实现多点温度测量,轻松的组建传感网络。
综上分析,我们选用第二种方案。
2.1.3键盘电路
方案一:
采用串行输入,每个键位占用一个I/O口,4个按键一共要占用4个I/O口,当有键按下的时候,直接对单片机的I/O进行操作。
方案二:
采用并行输入,总共4个按键。
4个按键的输入口为P3,当有键按下的时候,通过分别对各行各列进行扫描并查表得出键值。
比较两个方案,采用方案二的方法。
这样可以有效的减少对单片机I/O口的占用,使单片机有更多的I/O口来实现其他的功能。
使单片机的设计更加灵活有效。
2.1.4显示电路选择
方案一:
通过单片机的I/O接上拉电阻直接输出驱动数码管,可以通过I/O的输出值来改变数码管的显示字形,由74138来分别选通8个数码管,一共需要11个I/O口。
方案二:
采用1602液晶显示
比较以上两个方案,方案一所要花费的I/O口较多,对于单片机系统是一个很大的浪费。
方案二液晶显示平稳、省电、美观,更容易实现题目要求,对后续的园艺通兼容性高,故选用方案二。
2.2总体设计方案
以温度传感器DS18B20为测温元件,测温范围为1℃-100℃,误差小于0.01℃,AT89S52单片机为核心,读取温度信息并写入控制信息,通过并行键盘输入设置温度的上下限,在1602液晶显示屏上显示温度,以及温度上下限,当被测物体温度超过上限或低于下限温度时,蜂鸣器响动报警。
2.3系统组成及框图
AT89S52
单片机
DS18B20
温度传感
1602
液晶显示
键盘输入
报警系统
3硬件电路设计
本系统包含温度采集模块、液晶显示模块、键盘输入模块、单片机控制模块、报警模块等5个主要模块
3.1温度测量电路设计
DQ=P3^6
采用DS18B20数字温度传感器测量温度,DS18B20与单片机是单线双向通信
硬件图如下:
DS18B20数字温度传感器测温范围为-55~+125℃,在-10~85℃范围内,精度为±0.5℃。
每一个DS18B20芯片的ROM中存放了一个64位ID号:
前8位是产品类型编号,随后48位是该器件的自身序号,最后8位是前面56位的循环冗余校验码。
因此,一条总线上可以同时挂接多个DS18B20,实现多点测温系统。
另外用户还可根据实际情况设定非易失性温度报警上下限值TH和TL。
DS18B20检测到温度值经转换为数字量后,自动存入存储器中,并与设定值TH或TL进行比较,当测量温度超出给定范围时,就输出报警信号,并自动识别是高温超限还是低温超限。
DS18B20的6个功能指令:
(1)温度转换指令(44H)。
这个命令用于启动温度转换,无实质的数据要求。
如果微控制器在该命令之后输出读操作命令,那么DS18B20将使DQ端为低电平,表示DS18B20正忙于温度转换,不能响应该命令。
(2)写便笺式存储器(4EH)。
写便笺式存储器从TH存储单元开始,三个字节的数据将被定位在2到4号便笺式存储器单元。
所有的三个字节必须在复位钳写入便笺式存储器。
(3)读便笺式存储器(BEH)。
该指令读取便笺式存储器的内容,读出的数据将从Byte0(存储器的0号单元)开始直到第9字节(CRC校验字)被读走。
但如果不想读完所有字节,微控制器可以再任何时候输出复位信号中断其传输。
(4)复制便笺式存储器指令(48H)。
把2、3、4号存储单元的内容存储到非易失性SRAM中去。
复制期间,如果有读指令,DS18B20将把DQ置为低电平,直到转换结束,把DQ置为高电平。
(5)回读SRAM(B8H)。
将存储在SRAM中的温度报警上下限、分别率配置的内容写回相应的便笺式存储器。
(6)读电源配置结构指令(B4H)。
主控制设备发出该指令后在输出读时序,器件即会送出所使用的电源信息:
0为寄生电源,1为外接电源。
DS18B20的ROM指令共有5条,每一个工作周期只能发一条,ROM指令分别是读ROM数据、指定匹配芯片、跳跃ROM、芯片搜索、报警芯片搜索。
在进行DS18B20操作时一般有以下步骤:
(1)初始化DS18B20。
(2)ROM指令操作。
(3)便笺式存储器功能指令操作。
(4)处理或数据传送。
每一次DS18B20的操作都必须满足以上步骤,若是缺少或顺序混乱,期间将不会返回值。
3.2控制器电路设计
微处理器是控制系统的核心部件。
具有控制功能强,体积小,功耗小等一系列的优点,它在工业控制、智能仪表、节能技术改造、通讯系统、信号处理及家用电器产品中都得到了广泛的应用。
本设计采用AT89S52作为微处理器。
硬件图如下:
3.3报警器电路设计
FM=P3^7
硬件电路如下:
3.4键盘电路设计
电路按键开关:
开关按键实现复位、选择、温度加、温度减
按键
S1(Key0)
S2(Key1))
S3(Key2)
S4(Key3)
功能
复位
选择
温度加
温度减
连接I/O口
P3^2
P3^3
P3^4
P3^5
硬件电路如下:
3.5液晶显示电路
RS=P2^0;RW=P2^1;EN=P2^2
硬件电路如下:
4软件设计
4.1主程序
5系统调试
5.1硬件调试
使用万用表检测是否有虚短虚断现象
5.2软件调试
使用keil软件,
6结果及分析
(1)在焊接完所有元器件后,要注意检查电路,看是否有焊错、漏焊、或者虚焊等。
在程序调试的时候,因为板子上有一个电阻虚焊了,以至于无法点亮l1602液晶屏。
后来反复检查才找到原因。
(2)焊接的时候因为焊接技术不是很熟练,在焊接完后,发现整体元器件不协调,焊点不圆滑,走线也很乱,看上去不美观
(3)在对蜂鸣器频率更改时,由于延迟时间太短时的频率太小,人耳而听不到声音,后将延迟的一微秒改为一毫秒便解决了问题
7心得体会
通过时间周的学习,我对单片机的运用了解更加深入了。
由于暑假我有参加电子设计的培训,所以硬件制作方面比如画图制版相对比较熟练了,但在焊接电路方面还有待改进。
软件设计是我们这次学习的重点,在实践周前两天我对温度控制与设计的编程工作还一头雾水,后来通过不停的查阅资料以及我们组成员的共同努力终于在星期四下午把它顺利编写出来,其间有遇到很多问题,比如如何达到显示温度的高精度,如何设置温度上下限,尤其在蜂鸣器频率方面花的时间最多,我们本来打算让蜂鸣器实现音乐报警,可由于时间有限最终未能实现,因此我们要在编程方面勤加练习,才能更好的运用单片机。
8参考文献
[1]张毅刚.《单片机原理及应用》.北京,高等教育出版社,2010年
[2]蔡美琴.《MCS-51系列单片机系统及其应用》.北京,高等教育出版社,2004年
[3]魏立峰,王宝兴.《单片机原理与应用技术》,北京大学出版社,2007,21-24.
[4]杨素行.《模拟电子技术基础简明教程》,高等教育出版社,2004,514-529.
9附录
附录A原理图
附录B源代码
#include
#include"1602.h"
#include"18b20.h"
#definekey_portP3//定义键盘的输入为P3口
sbitFM=P3^7;
uinttemprd;
ucharTMAX=25,TMIN=15;//设置温度上下限的初始值
ucharW_s=0;
ucharstage=0;
ucharu_con=0;
uchartable1[13]="Temp:
.`C";
uchartable2[16]="MAX:
`MIN:
`";
voidkey_delay(void)
{
uchari,j;
for(i=0;i<10;i++)
for(j=0;j<200;j++);
}
voidDelay(uintnum)//延时1微秒
{
while(num--);
}
voiddelay_ms(uintn)//延时1毫秒
{
uchari;
while(n--)
{
for(i=0;i<121;i++)
;
}
}
voiddisplay(void)
{
table1[5]=temprd/1000+48;
table1[6]=temprd/100%10+48;
table1[8]=temprd/10%10+48;
table1[9]=temprd%10+48;
table1[12]=0;
dis_str(1,0,table1);
table2[4]=TMAX/10+48;
table2[5]=TMAX%10+48;
table2[12]=TMIN/10+48;
table2[13]=TMIN%10+48;
if(stage==1)
{
table2[7]='<';
}
elseif(stage==2)
{
table2[7]='';
table2[15]='<';
}
dis_str(2,0,table2);
if(W_s)
{
dis_str(1,12,"Warn");
}
else
{
dis_str(1,12,"Safe");
}
}
voidkeysearch(void)
{
staticucharkey_s=1;
if(key_s&&((key_port&0x3c)!
=0x3c))
{
key_delay();
key_s=0;
switch(key_port&0x3c)
{
case0x2c:
if(stage==1)TMAX++;if(TMAX>60)TMAX=60;
elseif(stage==2)TMIN++;if(TMIN>TMAX-1)TMIN=TMAX-1;break;//温度加
case0x1c:
if(stage==1)TMAX--;if(TMAX elseif(stage==2)TMIN--;if(TMIN<1)TMIN=1;break;//温度减 case0x34: stage++;if(stage>=3){stage=0;table2[15]='';}break;//选择 case0x38: u_con=1;break;//复位 default: break; } } elseif((key_port&0x3c)==0x3c) key_s=1; } voidmain(void) {unsignedchari; lcd_init(); dis_str(1,0,table1); dis_str(2,0,table2); while (1) { temprd=Readtemp(); if(! stage) { if((temprd>(TMAX*100)||temprd<(TMIN*100))) { if(! u_con) { W_s=1; for(i=0;i<200;i++)//循环两百次 { delay_ms(500); FM=0; delay_ms(200); FM=1; delay_ms(200); FM=0; delay_ms(200); FM=1; delay_ms(500); FM=0; delay_ms(200); FM=1; } FM=1; Delay(500);/* *NAME: 1602.H *WRITER: Viter *INTR: 8linesLCD1602module *TIME: 2012.08.17 * */ #include #definelcd_dataP0 #defineucharunsignedchar #defineuintunsignedint sbitRS=P2^0; sbitRW=P2^1; sbitEN=P2^2; voidlcd_delay(uchari)//延时 { ucharj; for(;i>0;i--) { for(j=0;j<121;j++); } } /* voidcheck_busy(void) { do { EN=0; RS=0; RW=1; lcd_data=0xff; EN=1; }while(lcd_data&0x80) } */ voidwrite_com(ucharcom)//向液晶屏写指令 { RS=0; lcd_data=com; //lcd_delay(5); EN=1; lcd_delay(3); EN=0; } voidwrite_data(ucharx)//向液晶屏写数据 { RS=1; lcd_data=x; //lcd_delay(5); EN=1; lcd_delay(3); EN=0; } voidlcd_init(void)//液晶屏初始化 { RW=0; EN=0; write_com(0x38);//8线显示模式,双行,5*7。 //write_com(0x38); write_com(0x0c);//开显示,无光标,光标不闪烁。 //write_com(0x07);//开显示,有光标,光标闪烁。 write_com(0x06);//输入模式,写入新数据光标右移,屏幕不动。 //write_com(0x07);//输入模式,写入数据光标右移,屏幕右移。 write_com(0x01);//清屏。 lcd_delay(200); } voidaddress(uchara,ucharb) { if(a==1) write_com(0x80+b); else write_com(0x80+0x40+b); } voiddis_str(uchara,ucharb,ucharshuzu[])//显示数组 { chari=0; address(a,b); while(shuzu[i]! ='\0') { write_data(shuzu[i]); i++; lcd_delay(5); } lcd_delay(100); } /* voiddis_ch(chara,charb,ucharx)//显示数字和单个字符 { address(a,b); if(x>=0&&x<=9)write_data(x+0x30); elsewrite_data(x); } */ #include /*定义DS18B20数据线*/ sbitDS=P3^6; voidtmpDelay(intnum)//延时函数 { //unsignedchari; while(num--); //for(i=0;i<2;i++); } voidInit_DS18B20(void)//初始化ds1820 { unsignedcharx=0; DS=1;//DS复位 tmpDelay(8);//稍做延时 DS=0;//单片机将DS拉低 tmpDelay(80);//精确延时大于480us DS=1;//拉高总线 tmpDelay(14); x=DS;//稍做延时后如果x=0则初始化成功x=1则初始化失败 tmpDelay(20); }unsignedcharReadOneChar(void)//读一个字节 {unsignedchari=0; unsignedchardat=0; for(i=8;i>0;i--) { DS=0;//给脉冲信号 dat>>=1; DS=1;//给脉冲信号 if(DS) dat|=0x80; tmpDelay(4); } return(dat); } voidWriteOneChar(unsignedchardat)//写一个字节 { unsignedchari=0; for(i=8;i>0;i--) { DS=0; DS=dat&0x01; tmpDelay(5); DS=1; dat>>=1; } } unsignedintReadtemp(void)//读取温度 { unsignedchara=0; unsignedcharb=0; unsignedintt=0; floattt=0; Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0x44);//启动温度转换 Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0xBE);//读取温度寄存器 a=ReadOneChar();//连续读两个字节数据//读低8位 b=ReadOneChar();//读高8位 t=b; t<<=8; t=t|a;//两字节合成一个整型变量。 tt=t*0.0625;//得到真实十进制温度值,因为DS18B20可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度 t=tt*100+0.5;//放大百倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。 return(t); } 附录C作品实物图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浙江 传媒 学院 温度 控制器 设计 制作 分析