收藏 分享(赏)

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

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

1、12011 年暑期电子设计大赛课题一基于 NTC 热敏电阻的温度测量与控制系统的设计学生姓名 杜衡、向奇林、刘露平院系名称 物理与电子工程学院专业名称 电子信息工程班级 2008 级六班指导老师完成时间2基于 NTC 热敏电阻的温度测量与控制系统设计学生姓名:杜恒、向奇林、刘路平 指导老师:内容摘要:本文叙述了用单片机作为控制器,用 NTC 热敏电阻制作的温度传感器实现温度变化到电压变化后通过仪用放大器放大后通过 AD 转换再将数据送给单片机处理后用 LED 显示出来实现温度测量,并可利用单片机控制蜂鸣器发声和八个发光二极管亮灭来实现报警,同时还可以通过单片机控制水泥电阻给热敏电阻加热来实现温

2、度控制的温度测量和控制系统的设计。该系统使用单片机开发板作为控制系统,而将温度传感器和加热器制作在单独一块板子上,工作时将两块板子连接起来使用。由于单片机开发板上已经有了按键、LED 数码管、蜂鸣器以及 AD 等,因此可以完全满足控制系统的需求。单片机可以用 USB 供电,而另外一块板子可以用实验室的直流电源作为供电系。本文最后附带了该系统的 c51 程序,可以方便其他人员阅读以及在此基础上进行修改,使系统功能更加完善。实验表明该系统能够实验温度的测量、温度报警、温度查询、温度的控制等功能,完全满足该课题的基本要求和扩展要求。关键词:单片机、NTC 温度传感器、水泥电阻加热器3绪论 3方案设计

3、 4理论分析 4系统总体方案的设计及其原理概述原理图 5系统各个模块的方案论证与设计 6系统温度采集电路的设计 6信号调理电路的原理与设计 6温度控制电路的设计 8脉宽调制的基本原理简介 8温度控制电路的原理与电路的设计 8报警电路的设计 9报警电路的原理与电路的设计 9控制电路的原理与设计 10AD0804 的采样原理及与单片机的连接方法 .10LED 显示电路的原理及与单片机的连接方法 .10简易键盘的扫描原理及与单片机的连接方法 11系统软件的设计 12测试数据的性化处理 12系统流程图 12系统性能测试与分析测试 15测试仪器与设备 15测试方案与结果 15结论 16致谢 16参考文献

4、 16附录 174绪论随着时代的进步,温度计在日常生产生活和工农业领域发挥越来越重要的作用,简单的温度计能够满足人们日常生产生活需要,但在一些工农业生产领域不仅要求能准确测量温度并且要求能够进行温度报警和温度的控制,因此在简单的温度计往往不能满足人们的要求。利用单片机作为控制系统的 NTC 温敏电阻温度测量和控制系统更能符合工农业生产领域的需求。该系统不能能进行温度的测量并且将温度通过 LED 数码管显示出来使读取更加方便,该系统还能设定温度上下限实现声光报警,并且该系统还能对温度进行控制,因此在使用和功能上都比传统的温度计优越。该系统可以用在需要对温度要求比较精密的环境中,可以利用该系统的精

5、确温度测量、报警和温度控制功能来保证生产过程的顺利进行。方案设计理论分析根据任务要求,要求制作一个基于 NTC 热敏电阻的温度测量和控制系统。测量范围为 0-100 摄氏度。测量精度为+1 摄氏度,能够记录 24 小时内每隔三十分钟温度值,并能够用数码管回调固定时刻的温度值,能够显示 24 小时内的温度平均值、最大值、最小值、和最大温差,具有报警功能当温度超过设定阈值时能够报警(要求有 1 摄氏度的回差) 。在扩展部分要求制作一个温度控制元件,能够用 LED 显示设定温度值和实际测量值,设定温度范围为:4060摄氏度。并要求采用适当的方法,当设定温度或者环境温度突变时,减小系统的调节时间和超调

6、量,温度控制的静态误差#define uint unsigned 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=

7、 /0-9 和摄氏度单位的段码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x58;uchar code LED_Segment1=/0-9 含小数点的段码0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;19uchar 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,20

8、8,209,213,214,215,216,217,218,219,220,221,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

9、.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,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

10、.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,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();/数据滤波

11、void Data_temperature();/AD 采样数据转换为温度值void Alarm();/温度报警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()20/ uchar flag=0;TMOD=0X11;TH0=

12、0X4C;TL0=0;TH1=0XDC;TL1=0;EA=1;ET0=1;ET1=1;TR0=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

13、)/OK 键Delay(5);if(adrd=0)flag=0;while(adrd=0);if(flag=5)/当进入温度控制模式时启动定时器,PWM 控制加热TR1=1;else21TR1=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 口之前先给其写全 1adrd=0; /A

14、D 读使能value=P1; /AD 数据读取赋给 P1 口adrd=1;adcs=1;P1=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);22dula=0;/送温度值个位,含小数点P0=0xff;wela=1;P0=0xfd;/wela=0;P0=0;dula=1;P0=LED_Segment1a/10%10;dula=0;Delay(10);du

15、la=0;/送温度值小数点位P0=0xff;wela=1;P0=0xfb;/wela=0;P0=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=tempk)a=tempj;tempj=tempk;tempk=a;temp0=temp6=0;/去掉最大最小值LPF

16、data=(temp1+temp2+temp3+temp4+temp5)/5;/求平均值/*AD 转换值转温度值函数*/void Data_temperature()float b;uchar i;for(i=0;i=temdatai)beep=1;/*设定最高报警温度*/void Set_H()Display(TH);if(add=0)Delay(10);if(add=0)TH=TH+10;while(add=0);/防止按键重入if(sub=0)Delay(10);if(sub=0)TH=TH-10;while(sub=0);/防止按键重入Driveled(0xef,0x76); /显示

17、H 标志/*设定最低报警温度*/void Set_L()Display(TL);if(add=0)Delay(10);25if(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);/防止按键重入Driveled(0xef,0x38);/显示“L”标志uchar p;/占空比控制/*设定控制温度*/uint set_value=400;/温度设定初值 40 摄氏度 void Set_tempreatur

18、e()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);/防止按键重入26/* if(set_value-temperature)100)p=100; elseif(set_value-temperature)50)p=50;elseif(set_valuetemperature)p+;elsep-;*/* if(set_valuetemperature)if(set_valu

19、e-temperature)100)p=100;elseif(set_value-temperature)50)p=50;elsep+; elsep=0; */if(set_valuetemperature)27if(set_value-temperature)=100)p=200;else if(set_value-temperature)=80)p=160;else if(set_value-temperature)=60)p=120;else if(set_value-temperature)=40)p=80;else if(set_value-temperature)=20)p=40;

20、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;28wela=0;P0=0;dula=1;P0=LED_Segmentset_value/100;dula=0;Delay(10);dula=0;/送温度值个位,含小数点P0=0xff;wela=1;P0=0xdf;wela=0;P0=0;dula=1;P0=LED_Segment1set_value/10%10;dula=0;D

21、elay(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);void Driveled(uchar wei,uchar duan)dula=0;P0=0xff;29wela=1;P0=wei;wela=0;P0=0;dula=1;P0=duan;dula=

22、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);/*显示平均温度,最大最小温度,最大温差*/uch

23、ar ii;void Disp_cal()if(add=0)/进入后按加键切换显示查看平均、最大最小、最大温差值30Delay(40);if(add=0)ii+;if(ii3)ii=0;while(add=0);switch(ii)case 0: Display(average);Driveled(0xef,0x40);Driveled(0xdf,0x40);Driveled(0xbf,0x40);break;case 1: Display(max);Driveled(0xef,0x1);Driveled(0xdf,0x1);Driveled(0xbf,0x1);break;case 2: Display(min);Driveled(0xef,0x8);Driveled(0xdf,0x8);Driveled(0xbf,0x8);break;case 3: Display(dif);Driveled(0xef,0x5e);Driveled(0xdf,0x06);Driveled(0xbf,0x71);break;/*按键功能判断*/void Set_function(uchar a)switch(a)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报