课题一NTC热敏电阻的温度测量和控制系统.doc

上传人:精*** 文档编号:849481 上传时间:2023-09-10 格式:DOC 页数:31 大小:1.18MB
下载 相关 举报
课题一NTC热敏电阻的温度测量和控制系统.doc_第1页
第1页 / 共31页
课题一NTC热敏电阻的温度测量和控制系统.doc_第2页
第2页 / 共31页
课题一NTC热敏电阻的温度测量和控制系统.doc_第3页
第3页 / 共31页
课题一NTC热敏电阻的温度测量和控制系统.doc_第4页
第4页 / 共31页
课题一NTC热敏电阻的温度测量和控制系统.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、内容摘要:本文叙述了用单片机作为控制器,用NTC热敏电阻制作的温度传感器实现温度变化到电压变化后通过仪用放大器放大后通过AD转换再将数据送给单片机处理后用LED显示出来实现温度测量,并可利用单片机控制蜂鸣器发声和八个发光二极管亮灭来实现报警,同时还可以通过单片机控制水泥电阻给热敏电阻加热来实现温度控制的温度测量和控制系统的设计。该系统使用单片机开发板作为控制系统,而将温度传感器和加热器制作在单独一块板子上,工作时将两块板子连接起来使用。由于单片机开发板上已经有了按键、LED数码管、蜂鸣器以及AD等,因此可以完全满足控制系统的需求。单片机可以用USB供电,而另外一块板子可以用实验室的直流电源作为

2、供电系。本文最后附带了该系统的c51程序,可以方便其他人员阅读以及在此基础上进行修改,使系统功能更加完善。实验表明该系统能够实验温度的测量、温度报警、温度查询、温度的控制等功能,完全满足该课题的基本要求和扩展要求。关键词:单片机、NTC温度传感器、水泥电阻加热器绪论3方案设计4理论分析4系统总体方案的设计及其原理概述原理图5系统各个模块的方案论证与设计6系统温度采集电路的设计6信号调理电路的原理与设计6温度控制电路的设计8脉宽调制的基本原理简介8温度控制电路的原理与电路的设计8报警电路的设计9报警电路的原理与电路的设计9控制电路的原理与设计10AD0804的采样原理及与单片机的连接方法10LE

3、D显示电路的原理及与单片机的连接方法10简易键盘的扫描原理及与单片机的连接方法11系统软件的设计12测试数据的性化处理12系统流程图12系统性能测试与分析测试15测试仪器与设备15测试方案与结果15结论16致谢16参考文献16附录17绪论随着时代的进步,温度计在日常生产生活和工农业领域发挥越来越重要的作用,简单的温度计能够满足人们日常生产生活需要,但在一些工农业生产领域不仅要求能准确测量温度并且要求能够进行温度报警和温度的控制,因此在简单的温度计往往不能满足人们的要求。利用单片机作为控制系统的NTC温敏电阻温度测量和控制系统更能符合工农业生产领域的需求。该系统不能能进行温度的测量并且将温度通过

4、LED数码管显示出来使读取更加方便,该系统还能设定温度上下限实现声光报警,并且该系统还能对温度进行控制,因此在使用和功能上都比传统的温度计优越。该系统可以用在需要对温度要求比较精密的环境中,可以利用该系统的精确温度测量、报警和温度控制功能来保证生产过程的顺利进行。方案设计理论分析根据任务要求,要求制作一个基于NTC热敏电阻的温度测量和控制系统。测量范围为0-100摄氏度。测量精度为+1摄氏度,能够记录24小时内每隔三十分钟温度值,并能够用数码管回调固定时刻的温度值,能够显示24小时内的温度平均值、最大值、最小值、和最大温差,具有报警功能当温度超过设定阈值时能够报警(要求有1摄氏度的回差)。在扩

5、展部分要求制作一个温度控制元件,能够用LED显示设定温度值和实际测量值,设定温度范围为:4060摄氏度。并要求采用适当的方法,当设定温度或者环境温度突变时,减小系统的调节时间和超调量,温度控制的静态误差=0.2摄氏度。分析任务要求,该系统要用NTC温敏电阻作为测温元件,NTC热敏电阻是一种负温度特性的热敏电阻,其阻值随温度的变化曲线如下所示:图表 1由图可知,NTC的阻值随温度的上升而下降,其阻值和温度呈非线性特性,因此必须采用一定的方法对曲线进行线性化处理。其测量原理是利用通过测量其阻值,通过其温度特性曲线便可求的环境温度。但因为温度不便于测量且不便于其他电路处理。通常是将电阻的变化转化为电

6、压的变化通过测量电压变化测得温度的变化。由于采集到的电压信号是模拟信号,不能被数字系统处理,因此必须通过AD转换器,将模拟信号转换成数字信号。一般AD转换器的基准电压要求为2.5v,而采集到的电压信号很微弱,必需经过放大后才能送给AD转换器,因此在系统中还必须有信号放大的信号调理电路。 该系统要求具有报警和控温功能,因此必须有报警装置和控温元件,报警装置可以蜂鸣器和发光二极管来实现。而控温可以制作一个加热器作为控温元件,系统要求能采用适当的方法来实现改变系统的超调量和调节时间,因此可以采用脉冲宽度调制来实现。报警装置和控温装置可以通过三极管来驱动。该系统应该有一个控制器,用以控制温度的显示报警

7、和温度控制等功能。该控制器可以采用单片机,FPGA,或者DSP来实现。系统总体方案的设计及其原理概述原理图根据以上分析可知,该系统应该包括用NTC热敏电阻制作的温度传感器,对传感器信号放大的信号调理电路,加热器,显示电路,报警电路,按键和控制器组成。由于单片机作为控制器价格便宜,控制性能好,电路方便,已能完全满足该系统的要求,因此综合考虑用单片机作为该系统的控制器。该系统通过NTC热敏电阻制作的传感器采集温度,将采集到的值送给单片机处理后通过LED显示出来,并可将处理后的值与设定的温度值进行比较看是否超过设定范围来实现报警。在控制温度模式下,可以通过单片机控制加热器来加热,实现温度控制。系统原

8、理图如下:温度采集电路KEYLED显示电路报警电路加热器STC89C52信号调理电路AD系统原理图系统各个模块的方案论证与设计系统温度采集电路的设计温度采集电路主要由用NTC热敏电阻制作的温度传感器来实现,而NTC测温原理主要是基于基于将NTC阻值随温度变化转换为电压变化来实现。将NTC热敏电阻值变换转换为电压的变化有以下几种方案。方案一:采用恒流源给热敏电阻供电,由于通过电阻的电流恒定,因此只要测出器两端的电压就可以测出其阻值。该方案电路设计简单,测量也方便实现,但对恒流源要求较高,且抗干扰能力较差。方案二:采用差动电桥进行测量。图表 2VCC经过稳压二极管后电压稳定值为2.5V由电桥平衡条

9、件可知,当R2/R3=R4/R5时电桥平衡,此时V1和V2点的压差为零。由于R2=R3,因此在温度为零时,可以调节R5时R5=R4,使电桥平衡,其输出为零。当温度上升时,R4阻值减小,当温度变化一百摄氏度时,热敏电阻的变化范围大概为1K.因此可以粗略的估算电桥输出电压的变化值为2.5*(4.7/24.7-3.7/23.7)=0.0854V.该电路设计复杂,因为采用差动电桥,所以电路抗干扰能力增强,能有效抑制电源波动对电路的影响。对比上面两种方案,第二种方案虽然电路复杂但能有效抑制干扰信号,因此采用第二种方案。信号调理电路的原理与设计由于从电桥出来的信号很微弱,因此需要通过运算放大器放大后才能经

10、过AD转换。方案一:采用单运放组成的运算放大器进行微弱信号的放大。其原理图如下:图表 3为了使运放对称,因此要求R10=R7,R11=R12.放大倍数A=R12/R10.该电路简单,放大倍数可以通过调节R12来调节,但该调节会使运放不对称,因此需要同时调节R12和R11来实现。方案二:采用仪用放大器来实现放大,仪用放大器的原理图如下。信号调理电路 1仪用放大器的放大倍数可以由以下公式计算得知:A=-R11/R7(1+2*R8/R6)由于R6可调,因此可以利用调节放大倍数。由于信号采集电路采集到的最大电压差为0.0854V.而AD的基准电压为2.5V,所以要求信号调理电路的最大输出为2.5V。而

11、信号采集电路的最大输出为0.0845v,所以要求信号调理电路的放大倍数约为30倍。该电路由于可以调节R6来调节放大倍数,由于调节R6不会影响电路的对称性因此调节起来方便。对比上述两种电路,第一种结构简单但调节起来不方便,而第二种调节起来方便,且易于小信号的采集,因此选用第二种方案。温度控制电路的设计脉宽调制的基本原理简介在脉宽调制有两种方案,第一种是固定低电平时间,而另外一种是固定周期。先对固定周期的脉宽调制原理做如下简介。在固定周期的脉宽调制中,设一个周期的时间为一秒,将一个周期平分成一百份。每一份为10个毫秒,在一个周期内的份数由一个变量P控制,而每一份的时间用一个定时器来控制,当每次中断

12、来时P加1,当P到一百十把P赋值成0,开始下一个周期。而在温度控制程序中,另外设定一个变量M,每次M也加一,M到一百十也赋值为零,并且每次M和P进行比较,当MP时便可以让温度元件开始工作,于是开始控温。要实现温度突变时改变超调量,可以将温度和设定的温度进行比较,当温度差值大于某个范围时,可以改变P的初值,这样就可以进行迅速加热,达到快熟调节温度。当温度和设定值接近时可以将P的值减小,从而缓慢加热。温度控制电路的原理与电路的设计该系统要求具有温度控制功能,因此可以制作一个控温元件来给热敏电阻加热来实现温度控制。方案一:以LTC1923PWM双极性电流控制器和大功率MOSFET构成的半导体热制冷器

13、(TEC)驱动模块。该方案制作的热制冷器可制冷也可制热,但价格相对较高。方案二:该系统通过水泥电阻来给热敏电阻加热来实现温度控制,水泥电阻需要通过一个功率三极管来驱动,为了使受热均匀,系统通过两个水泥电阻来给热敏加热。其驱动电路图如下:功率三极管的基极和单片机的某个I/O口连接,当该I/O口为1时功率三极管导通,水泥电阻开始加热,当I/O为零时,三极管截止,水泥电阻停止加热。因此在程序中可以通过给I/O口送1和零来控制水泥电阻加热和停止加热,从而实现温度控制。该方案简单,元件价格便宜。对比上面两种方案,鉴于第二种方案简单,元件价格低廉因此采用第二种方案。报警电路的设计报警电路的原理与电路的设计

14、该系统的报警电路通过三极管驱动蜂鸣器发声和单片机P1口驱动八个发光二极管发光来实现报警。三极管驱动蜂鸣器和P1口驱动发光二极管电路如下:报警电路 1蜂鸣器采用NPN三极管驱动,三极管的基极和单片机的P23相连。当P23为1时三极管截止蜂鸣器不发声,而当P23为0时,三极管导通,蜂鸣器发声。八个发光二极管通过P1口驱动,当P1口全为0时,二极管发光。因此可以通过使P23为1和让P1为零来让蜂鸣器响和发光二极管发光来实现报警。控制电路的原理与设计AD0804的采样原理及与单片机的连接方法AD采样电路 1AD的片选功能和单片机的P24相连,当P24为低电平时AD选通。AD的读信号RD和写信号WR和单

15、片机的P36和P37相连。由于AD采用的是直通方式,当P37为0时启动AD,开始转换数据。当P36为1时便可以读取AD转换的数据。LED显示电路的原理及与单片机的连接方法单片机通过一个锁存器来控制八个LED的位选,通过另外一个来控制八个LED的段选从而实现八位LED的动态扫描。其与单片机的连接方法如下。LED显示电路 1两个锁存器的片选分别于单片机的P26和P27相连。与P27相连的锁存器通过P0口给八位LED送位选码简易键盘的扫描原理及与单片机的连接方法该系统采用与单片机连接的简易键盘来实现来实现系统的按键功能。简易键盘与单片机的连接方法如下:简易键盘电路 1四个简易按键分别于单片机的P34

16、,P35,P36,P37相连。当键没有按下时,与之相连的I/O口为1,而当有按键按下时,与之相连的I/O口为0,当检测到某个I/O口为低电平时,表明该按键按下。系统软件的设计测试数据的线性化处理由于温敏电阻的阻值随温度变化为非线性,因此应对数据进行线性化处理。方案一:用硬件来实现非线性的校正。简单的非线性就是以奇制奇的方法,将两只非线性的传感器接成差动的方式,他们的非线性误差以大小相等,极性相反的方向变化,这样就可以获得较理性的输出特性曲线。方案二:用软件来实现非线性校正。软件非线性校正可以采用一次软件插值法来实现,插值法原理如下。图表 4在这次试验中可以先通过试验得到AD转换的值和对应的温度

17、然后以AD值为横坐标,温度值为纵坐标。将每个AD值和对应的温度制成表格,当采集到AD值时便可以通过查表将对应的温度查询出来从而实现了线性化处理。系统流程图 主程序 AD转换程序 温度报警程序 1滤波程序 显示程序系统性能测试与分析测试测试仪器与设备测试器件:水银温度计 直流稳压电源 万用表测试方案与结果测试环境与结果:将系统分别在20摄氏度的冷水中,室温下,5060设施度得温水中,和80摄氏度的热水中进行测试,测试结果如下。结论本文主要论述了基于NTC热敏电阻的温度测量和控制系统的设计。对整个系统的核心做了介绍。对系统的各个模块做了比较深入的研究,主要包括以下几个方面。 1.对系统进行了方案的

18、论证,进行了方案的讨论,并最终确定了系统=方案。2. 查找了系统上相关的芯片资料并仔细的阅读,并查阅了大量的相关文献资料。理解各个芯片的工作原理,完成各个模块电路的设计,完成开题报告。3.对系统的原理进行了讨论,对硬件部分各个模块进行充分的说明。4.用protel完成了系统各个模块的原理图设计和PCB制作。 5完成电路板的焊接,并排查焊接错误,检查系统电路。6. 通过软件多核心板的各个模块进行了测试。7. 对整个设计的过程,拟出简要的大纲,并完成详细的论文报告。修改论文,完成最终定稿。致谢本论文是在实验室老师的指导下完成的,实验室在参加比赛过程中给了我们极大的帮助和支持,并在我们共同努力下取得

19、了一定的成绩。至此,我们要非常感谢老师对我的帮助。本次课题的完成也离不开实验室老师的指导,在这些过程中老师给了我们极大的帮助,他们的认真负责的态度和孜孜不倦的精神使我受益匪浅,从老师身上学习到了很多专业知识,这对我们以后的工作有很大的帮助,在此,向实验室老师表示深深的敬意,感谢他对我们的指导和帮助。参考文献【1】 黄贤武,郑筱霞.传感器原理与应用.电子科技大学出版社,1995年五月。【2】 谭浩强.C语言程序设计.清华大学出版社,2005年七月。【3】 白驹荇,雷晓平.电子科技大学出版社,2005年九月。附录系统PCB电路图图表 5实验程序#include#define uint unsign

20、ed int#define uchar unsigned char/*变量定义*/sbit heat=P22;/水泥电阻驱动使能sbit beep=P23;/蜂鸣器使能sbit dioLE=P25;/八位LED锁存器开关使能sbit dula=P26;/LED段选sbit wela=P27;/LED位选sbit adcs=P24;/AD片选sbit add=P35;/加键sbit sub=P34;/减键sbit adrd=P37;/AD读 sbit adwr=P36;/AD写uchar code LED_Segment= /0-9和摄氏度单位的段码0x3f,0x06,0x5b,0x4f,0x6

21、6,0x6d,0x7d,0x07,0x7f,0x6f,0x58;uchar code LED_Segment1=/0-9含小数点的段码0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;uchar code temdata75=11,17,34,41,52,61,69,79,90,100,111,117,126,132,138,145,149,154,160,165,169,173,178,182,186,188,193,196,199,203,205,207,208,209,213,214,215,216,217,218,219,220,221

22、,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253;/AD转换值float code temtest75=5.5,6.0,7.3,8.1,9.0,10.0,11.0,12.0,14.1,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0

23、,36.0,36.3,36.9,37.5,39.1,39.4,39.8,40.1,40.6,41.0,41.4,41.7,42.5,42.8,43.0,43.2,44.8,44.9,45.0,45.3,46.1,46.8,47.3,47.8,48.9,49.5,50.3,51.0,51.7,52.3,52.9,53.5,54.1,54.8,55.6,56.0,58.3,59.0,59.8,60.6,62.4,63.8,65.1,66.3,67.6;/测试点温度值/*float code slop20=2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5

24、,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5;*/ /斜率uint idata record48;uint TH=30*10,TL=20*10;/温度上下限报警设定初值uchar LPFdata;uint temperature,max,min,average,dif;uchar flag;/*函数声明*/uchar AD();/AD转换子程序void Delay(uchar z);/延时子程序void Display(uint a);/数码管驱动显示子程序void LPF();/数据滤波void Data_temperature();/AD采样数据转换为温度值void A

25、larm();/温度报警void Set_hitemperature();/设定最高报警温度void Set_lotemperature();/设定最低报警温度void Set_function(uchar a);/按键功能判定void Disp_record();/显示记录温度值void Set_tempreature();/温度控制设定void Driveled(uchar wei,uchar duan);/*主函数*/void main()/uchar flag=0;TMOD=0X11;TH0=0X4C;TL0=0;TH1=0XDC;TL1=0;EA=1;ET0=1;ET1=1;TR0=

26、1;while(1) /P1=0XFF; /dioLE=0; LPF();/将采集到的数据进行滤波 Data_temperature();/将滤波后的数据转换成温度值 Set_function(flag);/按键功能判定 /Data_temperature();/将滤波后的数据转换成温度值 Alarm();/调用报警程序当温度超过设定上下限时变报警 if(adwr=0)/按功能键切换工作状态 Delay(5);if(adwr=0)flag+;if(flag5)flag=0;while(adwr=0); if(adrd=0)/OK键 Delay(5);if(adrd=0)flag=0;while

27、(adrd=0); if(flag=5)/当进入温度控制模式时启动定时器,PWM控制加热 TR1=1; else TR1=0;/*延时函数*/void Delay(uchar z)uchar x,y;for(y=10;y0;y-)for(x=z;x0;x-);/*AD采样函数*/uchar AD() uchar value;adcs=0;/选通AD转换器片选 adwr=0;/AD写入(主要是为了启动AD转换) Delay(1); adwr=1;P1=0xff; /读取P1口之前先给其写全1 adrd=0; /AD读使能 value=P1;/AD数据读取赋给P1口 adrd=1;adcs=1;P

28、1=0xff;return(value);/*数码管驱动显示函数*/void Display(uint a)dula=0;/送温度值十位P0=0xff;wela=1;P0=0xfe;/wela=0;P0=0;dula=1;P0=LED_Segmenta/100;dula=0;Delay(10);dula=0;/送温度值个位,含小数点P0=0xff;wela=1;P0=0xfd;/wela=0;P0=0;dula=1;P0=LED_Segment1a/10%10;dula=0;Delay(10);dula=0;/送温度值小数点位P0=0xff;wela=1;P0=0xfb;/wela=0;P0=

29、0;dula=1;P0=LED_Segmenta%10;dula=0;Delay(10);dula=0;/送摄氏度单位P0=0xff;wela=1;P0=0xf7;/wela=0;P0=0;dula=1;P0=LED_Segment10;dula=0;Delay(10);/*数据滤波动函数*/void LPF() uchar temp7,a; uchar i,j,k; for(i=0;i=6;i+)/数据采集存储 tempi=AD();Delay(5); for(j=0;j=6;j+)/按小到大排序 for(k=j;k=tempk)a=tempj;tempj=tempk;tempk=a; te

30、mp0=temp6=0;/去掉最大最小值 LPFdata=(temp1+temp2+temp3+temp4+temp5)/5;/求平均值/*AD转换值转温度值函数*/void Data_temperature()float b;uchar i;for(i=0;i=temdatai)&(LPFdata=TH)|(temperature=TL)/dioLE=1;P1=0;beep=0;elseif(temperatureTL+10)/回差P1=0xff;beep=1;/*设定最高报警温度*/void Set_H()Display(TH);if(add=0)Delay(10);if(add=0)TH

31、=TH+10;while(add=0);/防止按键重入if(sub=0)Delay(10);if(sub=0)TH=TH-10;while(sub=0);/防止按键重入Driveled(0xef,0x76); /显示H标志/*设定最低报警温度*/void Set_L()Display(TL);if(add=0)Delay(10);if(add=0)TL=TL+10;if(TL+30=TH)TL=TH-40;/最低报警温度应小于最高报警温度-4while(add=0);/防止按键重入if(sub=0)Delay(10);if(sub=0)TL=TL-10;while(sub=0);/防止按键重入

32、Driveled(0xef,0x38);/显示“L”标志uchar p;/占空比控制/*设定控制温度*/uint set_value=400;/温度设定初值40摄氏度 void Set_tempreature()if(add=0)Delay(10);if(add=0)set_value=set_value+10;while(add=0);/防止按键重入if(sub=0)Delay(10);if(sub=0)set_value=set_value-10;while(sub=0);/防止按键重入/*if(set_value-temperature)100)p=100; elseif(set_val

33、ue-temperature)50)p=50;elseif(set_valuetemperature)p+;elsep-; */*if(set_valuetemperature)if(set_value-temperature)100)p=100;elseif(set_value-temperature)50)p=50;elsep+; elsep=0; */if(set_valuetemperature) if(set_value-temperature)=100)p=200;else if(set_value-temperature)=80)p=160;else if(set_value-t

34、emperature)=60) p=120;else if(set_value-temperature)=40) p=80;else if(set_value-temperature)=20) p=40;else if(set_value-temperature)=10)p=10;elsep+;if(p200)p=200; elsep=0;Display(temperature);/显示测定温度dula=0;/显示设定温度P0=0xff;wela=1;P0=0xef;wela=0;P0=0;dula=1;P0=LED_Segmentset_value/100;dula=0;Delay(10);

35、dula=0;/送温度值个位,含小数点P0=0xff;wela=1;P0=0xdf;wela=0;P0=0;dula=1;P0=LED_Segment1set_value/10%10;dula=0;Delay(10);dula=0;/送温度值小数位P0=0xff;wela=1;P0=0xbf;/wela=0;P0=0;dula=1;P0=LED_Segmentset_value%10;dula=0;Delay(10);dula=0;/送摄氏度单位P0=0xff;wela=1;P0=0x7f;wela=0;P0=0;dula=1;P0=LED_Segment10;dula=0;Delay(10)

36、;void Driveled(uchar wei,uchar duan)dula=0;P0=0xff;wela=1;P0=wei;wela=0;P0=0;dula=1;P0=duan;dula=0;Delay(10);uchar i;void Disp_record()Display(recordi);/显示记录值Driveled(0xef,0x40);/显示-Driveled(0xdf,LED_Segment(i+1)/10);/显示第i个值Driveled(0xbf,LED_Segment(i+1)%10);if(add=0)Delay(5);if(add=0)i+;if(i47)i=0;while(add=0);if(sub=0)Delay(5);if(sub=0)i-;if(i=255)i=47;while(sub=0);/*显示平均温度,最大最小温度,最大温差*/uchar ii;void Disp_cal()if(

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922