基于NTC热敏电阻的温度测量与控制系统的设计_第1页
基于NTC热敏电阻的温度测量与控制系统的设计_第2页
基于NTC热敏电阻的温度测量与控制系统的设计_第3页
基于NTC热敏电阻的温度测量与控制系统的设计_第4页
基于NTC热敏电阻的温度测量与控制系统的设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图表SEQ图表\*ARABIC4在这次试验中可以先通过试验得到AD转换的值和对应的温度然后以AD值为横坐标,温度值为纵坐标。将每个AD值和对应的温度制成表格,当采集到AD值时便可以通过查表将对应的温度查询出来从而实现了线性化处理。系统流程图主程序AD转换程序温度报警程序SEQ温度报警程序\*ARABIC1滤波程序显示程序系统性能测试与分析测试测试仪器与设备测试器件:水银温度计 直流稳压电源 万用表测试方案与结果测试环境与结果:将系统分别在20摄氏度的冷水中,室温下,50—60设施度得温水中,和80摄氏度的热水中进行测试,测试结果如下。 结论本文主要论述了基于NTC热敏电阻的温度测量和控制系统的设计。对整个系统的核心做了介绍。对系统的各个模块做了比较深入的研究,主要包括以下几个方面。1.对系统进行了方案的论证,进行了方案的讨论,并最终确定了系统=方案。2.查找了系统上相关的芯片资料并仔细的阅读,并查阅了大量的相关文献资料。理解各个芯片的工作原理,完成各个模块电路的设计,完成开题报告。3.对系统的原理进行了讨论,对硬件部分各个模块进行充分的说明。4.用protel完成了系统各个模块的原理图设计和PCB制作。5.完成电路板的焊接,并排查焊接错误,检查系统电路。6.通过软件多核心板的各个模块进行了测试。7.对整个设计的过程,拟出简要的大纲,并完成详细的论文报告。修改论文,完成最终定稿。致谢本论文是在实验室老师的指导下完成的,实验室在参加比赛过程中给了我们极大的帮助和支持,并在我们共同努力下取得了一定的成绩。至此,我们要非常感谢老师对我的帮助。本次课题的完成也离不开实验室老师的指导,在这些过程中老师给了我们极大的帮助,他们的认真负责的态度和孜孜不倦的精神使我受益匪浅,从老师身上学习到了很多专业知识,这对我们以后的工作有很大的帮助,在此,向实验室老师表示深深的敬意,感谢他对我们的指导和帮助。参考文献黄贤武,郑筱霞.传感器原理与应用.电子科技大学出版社,1995年五月。谭浩强.C语言程序设计.清华大学出版社,2005年七月。白驹荇,雷晓平.电子科技大学出版社,2005年九月。附录系统PCB电路图图表SEQ图表\*ARABIC5实验程序#include<reg52.h>#defineuintunsignedint#defineucharunsignedchar/**********************变量定义*************************************/sbitheat=P2^2;//水泥电阻驱动使能sbitbeep=P2^3;//蜂鸣器使能sbitdioLE=P2^5;//八位LED锁存器开关使能sbitdula=P2^6;//LED段选sbitwela=P2^7;//LED位选sbitadcs=P2^4;//AD片选sbitadd=P3^5;//加键sbitsub=P3^4;//减键sbitadrd=P3^7;//AD读sbitadwr=P3^6;//AD写ucharcodeLED_Segment[]={//0-9和摄氏度单位的段码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x58};ucharcodeLED_Segment1[]={//0-9含小数点的段码0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};ucharcodetemdata[75]={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,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转换值floatcodetemtest[75]={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,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};//测试点温度值/*floatcodeslop[20]={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,2.5,2.5};*///斜率uintidatarecord[48];uintTH=30*10,TL=20*10;//温度上下限报警设定初值ucharLPFdata;uinttemperature,max,min,average,dif;ucharflag;/**********************函数声明*************************************/ucharAD();//AD转换子程序voidDelay(ucharz);//延时子程序voidDisplay(uinta);//数码管驱动显示子程序voidLPF();//数据滤波voidData_temperature();//AD采样数据转换为温度值voidAlarm();//温度报警voidSet_hitemperature();//设定最高报警温度voidSet_lotemperature();//设定最低报警温度voidSet_function(uchara);//按键功能判定voidDisp_record();//显示记录温度值voidSet_tempreature();//温度控制设定voidDriveled(ucharwei,ucharduan);/**********************主函数*************************************/voidmain(){// ucharflag=0; TMOD=0X11; TH0=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(flag>5) { flag=0; } while(adwr==0); } } if(adrd==0)//OK键 { Delay(5); if(adrd==0) { flag=0; while(adrd==0); } } if(flag==5)//当进入温度控制模式时启动定时器,PWM控制加热 TR1=1; else TR1=0; }}/**********************延时函数*************************************/voidDelay(ucharz){ ucharx,y; for(y=10;y>0;y--) for(x=z;x>0;x--); }/**********************AD采样函数*************************************/ucharAD() { ucharvalue; adcs=0; //选通AD转换器片选adwr=0; //AD写入(主要是为了启动AD转换)Delay(1);adwr=1; P1=0xff;//读取P1口之前先给其写全1adrd=0;//AD读使能 value=P1; //AD数据读取赋给P1口adrd=1; adcs=1; P1=0xff; return(value);}/**********************数码管驱动显示函数*************************************/voidDisplay(uinta){ dula=0; //送温度值十位 P0=0xff; wela=1; P0=0xfe;// wela=0; P0=0; dula=1; P0=LED_Segment[a/100]; dula=0; Delay(10); dula=0;//送温度值个位,含小数点 P0=0xff; wela=1; P0=0xfd;// wela=0; P0=0; dula=1; P0=LED_Segment1[a/10%10]; dula=0; Delay(10); dula=0;//送温度值小数点位 P0=0xff; wela=1; P0=0xfb;// wela=0; P0=0; dula=1; P0=LED_Segment[a%10]; dula=0; Delay(10); dula=0;//送摄氏度单位 P0=0xff; wela=1; P0=0xf7;// wela=0; P0=0; dula=1; P0=LED_Segment[10]; dula=0; Delay(10);}/**********************数据滤波动函数*************************************/voidLPF(){ uchartemp[7],a; uchari,j,k; for(i=0;i<=6;i++)//数据采集存储 { temp[i]=AD(); Delay(5); } for(j=0;j<=6;j++)//按小到大排序 { for(k=j;k<=6;k++) { if(temp[j]>=temp[k]) { a=temp[j]; temp[j]=temp[k]; temp[k]=a; } } } temp[0]=temp[6]=0;//去掉最大最小值 LPFdata=(temp[1]+temp[2]+temp[3]+temp[4]+temp[5])/5;//求平均值}/**********************AD转换值转温度值函数*************************************/voidData_temperature(){ floatb; uchari; for(i=0;i<=74;i++) { if((LPFdata>=temdata[i])&(LPFdata<temdata[i+1])) { b=temtest[i]+(LPFdata-temdata[i])*((temtest[i+1]-temtest[i])/(temdata[i+1]-temdata[i])); break; } } temperature=b*10;//强制转化为整形}/**********************温度报警函数*************************************/voidAlarm(){ if((temperature>=TH)|(temperature<=TL)) { //dioLE=1; P1=0; beep=0; } else { if((temperature<(TH-10))&(temperature>TL+10)) //回差 { P1=0xff; beep=1; } } }/*****************************设定最高报警温度**********************************/voidSet_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);//显示H标志}/*********************************************设定最低报警温度*****************************************/voidSet_L(){ Display(TL); if(add==0) { Delay(10); if(add==0) { TL=TL+10; if(TL+30>=TH) { TL=TH-40;//最低报警温度应小于最高报警温度-4 } } while(add==0);//防止按键重入 } if(sub==0) Delay(10); if(sub==0) { TL=TL-10; } while(sub==0);//防止按键重入 Driveled(0xef,0x38);//显示“L”标志}ucharp;//占空比控制/*********************************设定控制温度*****************************************/uintset_value=400;//温度设定初值40摄氏度voidSet_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; } else { if((set_value-temperature)>50) p=50; else { if(set_value>temperature) p++; else p--; } } */ /* if(set_value>temperature) { if((set_value-temperature)>100) { p=100; } else { if((set_value-temperature)>50) { p=50; } else { p++; } } } else { p=0; }*/ if(set_value>temperature) { if((set_value-temperature)>=100) { p=200; } elseif((set_value-temperature)>=80) { p=160; } elseif((set_value-temperature)>=60) { p=120; } elseif((set_value-temperature)>=40) { p=80; } elseif((set_value-temperature)>=20) { p=40; } elseif((set_value-temperature)>=10) { p=10; } else { p++; if(p>200) { p=200; } } } else p=0; Display(temperature);//显示测定温度 dula=0; //显示设定温度 P0=0xff; wela=1; P0=0xef; wela=0; P0=0; dula=1; P0=LED_Segment[set_value/100]; dula=0; Delay(10); dula=0;//送温度值个位,含小数点 P0=0xff; wela=1; P0=0xdf; wela=0; P0=0; dula=1; P0=LED_Segment1[set_value/10%10]; dula=0; Delay(10); dula=0; //送温度值小数位 P0=0xff; wela=1; P0=0xbf;// wela=0; P0=0; dula=1; P0=LED_Segment[set_value%10]; dula=0; Delay(10); dula=0;//送摄氏度单位 P0=0xff; wela=1; P0=0x7f; wela=0; P0=0; dula=1; P0=LED_Segment[10]; dula=0; Delay(10); }voidDriveled(ucharwei,ucharduan){ dula=0; P0=0xff; wela=1; P0=wei; wela=0; P0=0; dula=1; P0=duan; dula=0; Delay(10);}uchari;voidDisp_record(){ Display(record[i]);//显示记录值 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(i>47) i=0; } while(add==0); if(sub==0) Delay(5); if(sub==0) { i--; if(i==255) i=47; } while(sub==0);}/*************************显示平均温度,最大最小温度,最大温差******************************/ucharii;voidDisp_cal(){ if(add==0)//进入后按加键切换显示查看平均、最大最小、最大温差值 Delay(40); if(add==0) { ii++; if(ii>3) ii=0; }while(add==0); switch(ii) { case0:Display(average); Driveled(0xef,0x40); Driveled(0xdf,0x40); Driveled(0xbf,0x40); break; case1:Display(max); Driveled(0xef,0x1); Driveled(0xdf,0x1); Driveled(0xbf,0x1); break; case2:Display(min); Driveled(0xef,0x8); Driveled(0xdf,0x8); Driveled(0xbf,0x8); break; case3:Display(dif); Driveled(0xef,0x5e); Driveled(0xdf,0x06); Driveled(0xbf,0x71); break; } }/**********************************按键功能判断*****************************************/voidSet_function(uchara){ switch(a) { case0:Display(te

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论