《课程设计基于单片机的温度检测系统设计.doc》由会员分享,可在线阅读,更多相关《课程设计基于单片机的温度检测系统设计.doc(24页珍藏版)》请在三一办公上搜索。
1、温度检测系统设计 报告学校:桂林电子科技大学学院:机电工程学院专业:电气工程及其自动化组员: 摘要本系统利用单片机控制的温度检测系统的原理:由单片机89c51系列控制数模转换芯片,计算由pt100热电阻传感器模拟量电压转换为数字量,转换为温度显示;并且给出了系统构成、电路原理及程序设计。本系统可以通过键盘设置温度上下限,语音报警,语音报温,温度检测范围为0300度之间,并自带有数字时钟,可以通过键盘修改时间参数等; 为提高精度,在数据处理时利用了0.1级标准电阻箱对系统和pt100进行了误差对比校正。在温度的校准中使用了ds18b20跟本系统温度对比调整,减少了本系统误差和提高了测温的精度;此
2、系统具有易控制、工作可靠、方便使用、流程清晰等优点。关键字:温度检测;单片机控制;语音报温;pt100热电阻传感器;AD转换;超限报警;12864显示;数字时钟;一、方案、元件的选择比较根据题目的要求,我们把本系统分为几个基本模块,针对每个模块我们有以下的设计方案:1、温度传感器目前使用接触式比较多,主要有热电式传感器,把温度变化转换为电阻变化的叫热电阻传感器,把温度变化转换为热电势变换的叫热电偶传感器。方案1:热电阻传感器具有高温系数,高电阻率,物理特性稳定,良好的线性输出等优点,常用的有pt100和pt100等方案2:热电偶传感器具有结构简单,测量范围广,热惯性小,准确度高,输出信号远的优
3、点,但价格较高;方案3:数字传感器,比如18b20等,还有一些温度传感器芯片。考虑到题目的要求和综合价格及电路的要求,我们使用了方案1,采用线性度较好的热电阻传感器pt100,该传感器的测温范围是-200到450摄氏度;完全符合要求,而且还可以拓展设计电路的测温范围。这里我们供选择的有2线制,3线制和4线制,经过比较我们决定使用4线制的pt100传感器,4线制较2线和3线,误差更小,测量效果更好。2、A/D转换器 在一般的电路中,我们常用a/d将模拟量转换成数字量。对于a/d而言,最重的无外乎是转化的速度和转换的精度,由于题目的要求是分辨率0.1,因此使用12位以上的ad能很好的达到要求;对于
4、速度,题目的要求并不高,一般的12位ad都能达到要求;方案1:常用的12位串口连接式ad有tlc2543等,串口的连接使其能和单片机的连接更方便,可以节省更多的I/O口。方案2:使用并口连接方式的ad,如ad574等,ad是并口连接的,因此使用不是很方便。在比较价格和性能及设计的方便性,我们选用方案1,串口连接的tlc2543作为数模转换芯片。该芯片具有11路的输入通道的12位开关电容逐次逼近模数转换器,具有采样保持功能;在整个的转换过程具有较小的转换误差,而且使用方便,连接线更少。3主控电路目前单片机主要有8位机,16位机,32位机,虽然32位机在目前许多领域有广泛的应用,但是8位机和16位
5、机仍是占据主导地位的,比较价格和性能我们选用了 89c51系列的8位单片机,51单片机对于此温度检查系统的要求完全可以满足。3、 数据显示电路通常显示使用到数码管和液晶显示两种。方案1:数码管具有低耗,采用LED数码管显示,这个方案需要几个发光二极管配合,虽然也可基本实现所需功能,且显示不直观。方案2:采用1602液晶显示器显示数据,此方案电路功耗小,并可直观的显示各类数据,便于人机交流。但是显示范围有限,不利于拓展其他功能的显示。方案3:采用12864液晶显示数据,不仅可以直观的显示各种数据,而且可以使用12864的串口连接方式,加上电源线和地线,总共也就4根线,十分的方便,而且完全可以供拓
6、展其他的显示用。因此我们选择方案3,用12864液晶作为显示。4、语音报温模块方案1:采用音乐芯片,此方案中芯片音乐已被固化,不能自由的烧录没有一定的自由空间,当需要不同的音乐时和播报语音较难实现,不方便以后的更换方案2:采用isd1420语音芯片,此种芯片可以对不同的声音进行录音播放,录放次数可反复数十万次,方便实用,也方便日后的使用自由选择度比较好,但其录音时间只有20秒,根据使用不同的地址控制脚可以选择播录的起始时间,使用方便,编程也相对简单很多。方案3:采用isd1460语音芯片,1460和1420相差无几,就是录放的时间变为60秒。综合我们要用的语音芯片的作用只是用做报时和报警,因此
7、我们选择了方案2,isd1420不仅外围电路简单而且录放的音质较好,价格也不贵,20秒的录放时间完全够用了。二、系统的具体设计与实现根据设计要求,本系统可由图一所示部分组成。检测电路单片机主控电路数据显示电路键盘控制电路A/D转换被测温度语音播报电路图一本系统通过单片机处理被测电路通过ad转换模块转换得到的温度值,通过LCD12864显示和语音播报被测的温度值,键盘可以通过单片机设置温度的上下限和利用单片机定时中断编写的数字钟的时、分、秒的调整。三、硬件设计1电源部分由于我们设计的电路需要使用正负电源而且需要较稳定的电压值,因此电源部分不能直接使用电池或者变压器作为输入。电路设计如下图二:图二
8、使用7805和7905,稳压出稳定的+5和-5的电压源,左边六角元件为自锁开关,为方便开关电源所设计。(其他都为接口插针)2.恒流源的设计因为我们使用的pt100热电阻温度传感器,因此恒定的电流非常重要,只有恒定的电流才能在微小的电阻变化下,电压也随电阻的变化而变化。 恒流源设计如下图三:图三经过试验后我们决定使用运放制作恒流源,效果比恒流的一些芯片更好,比如LM334;使用LM3362.5,使1.5k电阻上的电压为(5-2.5)V; 下图是我们测试恒流效果的实验由上图我们可以知道,随着电阻的均匀增大,pt100(实验中是用电阻箱代替)上的电压也是均与的增加,基本成线性,所以恒流源的设计是成功
9、的。3、放大电路设计这里我们采用两级放大,首级采用输入阻抗高的仪用运算放大器,如ad620,ad620输入偏置电流低,较高的精度,它的内部是三运放结构,具有很好的放大效果;二级我们采用的是op07运算放大器,前置偏置电路; 放大电路设计如下图四:图四4.A/D转换电路设计由于我们使用的是tlc2543,因此它的外围电路比较简单,但是在它的13,14脚需要提供一个稳定的电压,一般为电源电压,但是我们考虑到,电路中电压的损耗,因此我们使用的基准电压为4.5V。电路设计如下图五:图五J0为插针,是为了方便与单片机连接而使用的,14脚是基准电压脚,需要稳定的电压,我们使用LM3365,给其提供稳定的电
10、压。5、 单片机电路设计单片机我们使用的是8位的89c51系列,外围电路设计如下图六:图六与单片机连接的键盘电路,单片机的I/O口为P2.0到P2.3;如下图七:图七与单片机连接的蜂鸣器设计如下图八: 图八;6、 液晶显示电路设计我们使用的是lcd12864的串口通信,因此连线比较少,使用也比较方便,设计连线下图九:注意:我们在使用的之前已经把LCD12864的PSB管脚和地相接,把PSB拉为低电位;RS管脚接VCC,使其拉为高电位,这样才能使用LCD12864的串口通信;或者我们可以使用软件(单片机)把其电位拉高和拉低;图九7、 语音模块电路设计语音外围电路设计如下图十:图十四、 温度和A/
11、D转换数字量之间的关系我们使用ds18b20和我们设计的温度检测系统进行校正,ad的转换数字量与温度相对应的关系,我们通过记录大量的数据,再通过软件拟合得到温度和数字量的关系。如下图十一:.图十一由图我们可以知道,温度变化和我们所做的温度检测系统电路基本成线性。我们拟合得到温度与数字量的关系为(y为温度)(x为数字量)y=0.0822x-0.2378;在单片机处理数据的时候,我们使用中值法进行数据的删选滤波,我们先测8个大组的数据,8大组里又有10小组,在得到的10小组数据中进行排序,再取中间的值,得到的8组中间值,相加后再除以8,这样数据的准确性更高,避免了数据的突变情况。五、 结束语通过在
12、热水及冰水中的实验,与ds18b20及温度计的比较和校准,我们所设计的温度检测系统,基本达到了题目设计的要求;发挥部分也完成了键盘的扫描,拓展了温度检测范围:0200;能够设置上下限温度范围和超限报警功能;语音播报温度和语音报警;通过这次制作温度检测系统的过程,使我们更加清楚了制作的过程,从检测电路开始,通过对传感器,和ad及主控电路及语音芯片的选择和电路设计、程序的编写,我们都是通过不断的实验,来选取最为合适的方案,最终作品基本符合了比赛的要求。经过这次的参赛,深深地感受到这样的比赛对我们基础知识的考验,很多地方都是平时我们碰到的很基础的问题,但如果处理不好,就会影响我们最终的结果。在比赛中
13、,还要注重团队合作精神,我们团队的合作能力还是比较理想的,大家都能一致地致力于设计和制作。从另一方面,也考验了我们吃苦耐劳的能力,也许一块芯片你会调上好几天,这时我们要有坚持的毅力,更要有吃苦的精神。经过比赛,我们都收获了很多,感谢比赛带给我们的收获。六、 附录软件的设计系统软件完成对各测量数据采集和处理,实现c51单片机对tlc2543、语音芯片和lcd12864的显示控制及键盘扫描控制,包括对数据显示、温度上下限设定及报警调整等模块的控制。部分C程序如下:/*lcd管脚定义*sbit clk=P25;sbit sid=P26;/*TLC2543管脚定义*sbit D_CLK=P34;sbi
14、t D_IN=P35;sbit D_OUT=P36;sbit D_CS=P37;/*/-uchar top_temp,bottom_temp;/12864写显示的数字void write_figue_1(uchar y_add , uchar x_add , uint figer) /写数字 uchar d4,i,j,z;z=0;delay_ms(1); lcd_pos(y_add , x_add); d3=figer%10; d2=figer%100/10; d1=figer%1000/100; d0=figer/1000; for(i=0;i4;i+) if(di!=0)break; if
15、(4=i)i-; if(i=3)write_char(0x30); for(j=i;j4;j+) write_char(dj|0x30); if(j=2) write_char(.); /lcd的初始化void lcd_init() delay_ms(1); send_cmd(0x30); send_cmd(0x0C);/0000,1100 整体显示,游标off,游标位置off send_cmd(0x01);/0000,0001 清DDRAM send_cmd(0x02);/0000,0010 DDRAM地址归位 send_cmd(0x80);/1000,0000 设定DDRAM 7位地址00
16、0,0000到地址计数器A/*/-/*TLC2543驱动函数*uint Read_tlc2543(uchar con_way) uint dat; uchar i; dat=0; D_CS=0; D_CLK=0; con_way=4; for(i=0;i12;i+) con_way=1;D_IN=0;dat=1;if(D_OUT) dat=dat|0x01; D_CLK=1; D_CLK=0; D_CS=1; return dat;uint Read_temp() uint temp,dq;dq=Read_tlc2543(0);temp=(0.0822*dq-0.2378)*10;/实际测得值
17、数据拟合得到的函数return temp;/*键盘扫描省略*/*ISD1420函数*void speak_temp(uint temp_t)int digit0,digit1,digit2;digit2=temp_t/100;/十位digit1=temp_t%100/10;/个位digit0=temp_t % 10;/小数位if(digit2=0&digit1=0)/只有小数值speak_isd1420(speak_world0);delay_ms(1000);speak_isd1420(speak_world11);delay_ms(1000);speak_isd1420(speak_wor
18、lddigit0);delay_ms(1000);speak_isd1420(speak_world12);/播度else if(digit2=0)/只有个位和小数位 speak_isd1420(speak_worlddigit1);delay_ms(1000);speak_isd1420(speak_world11);delay_ms(1000);speak_isd1420(speak_worlddigit0);delay_ms(1000);speak_isd1420(speak_world12);elsespeak_isd1420(speak_worlddigit2);/delay_ms(
19、1000);speak_isd1420(speak_world10);/播十delay_ms(1000);if(digit1!=0)speak_isd1420(speak_worlddigit1);delay_ms(1000);speak_isd1420(speak_world11);delay_ms(1000);speak_isd1420(speak_worlddigit0);delay_ms(1000);speak_isd1420(speak_world12);/播度/*语音播报子程序 addr播音地址*/void speak_isd1420(uchar addr) P1=addr; /写
20、地址PLAY=0; /开始播音PLAY=1;void display_page_1() lcd_clear(); lcd_wstr(1,0,桂林电子科技大学); lcd_wstr(2,1,机电工程学院); lcd_wstr(3,2,电气工程); delay_ms(3500); /*主函数* main() long uint temp;int i,a10,b8,j,n,t,m;lcd_init();display_page_1(); lcd_clear(); P1=0xff;top_temp=40;bottom_temp=1;initClock();lcd_wstr(1,0,温度:);lcd_w
21、str(2,0,单位: 摄氏度 );lcd_wstr(3,0,时间:);lcd_wstr(4,0,上限:);lcd_wstr(4,4,下限:);delay_ms(30);lcd_dismode(0);/开关光标 1开,0关while(1) scan_key();delay_ms(5);displayClock(); /*显示温度*for(n=0;n8;n+)/中值滤波 for(i=0;i10;i+) ai=Read_temp();/实测温 for(j=0;j9;j+)for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t; m=n;bm=a4;/取中值 temp=(b0+b1+b2+b3+b4+b5+b6+b7)/8;if(temptop_temp*10)|(tempbottom_temp*10) speak_isd1420(speak_world13); write_figue_1(1,3,temp); /写温度值lcd_pos(1,5);delay_ms(200);if(ENTER=0)speak_temp(temp); write_figue(4,2,top_temp);lcd_pos(4,3);write_figue(4,6,bottom_temp);lcd_pos(4,7);