基于单片机的ad590测温系统课程设计报告

上传人:痛*** 文档编号:150243805 上传时间:2022-09-09 格式:DOC 页数:17 大小:194.50KB
收藏 版权申诉 举报 下载
基于单片机的ad590测温系统课程设计报告_第1页
第1页 / 共17页
基于单片机的ad590测温系统课程设计报告_第2页
第2页 / 共17页
基于单片机的ad590测温系统课程设计报告_第3页
第3页 / 共17页
资源描述:

《基于单片机的ad590测温系统课程设计报告》由会员分享,可在线阅读,更多相关《基于单片机的ad590测温系统课程设计报告(17页珍藏版)》请在装配图网上搜索。

1、基于单片机的ad590测温系统课程设计报告专业班级: 电子信息工程 07 姓 名: 指导教师: 2010 年 11 月 5 日信息与电子工程学院目 录1、前言12、设计方案比较13、硬件设计34、软件设计75、调试86、总结97、附录10前言近年来随着科技的飞速发展,为使生活更加便捷,单片机技术正在不断地走向日常应用,同时带动传统检测技术日新月异。在人们生活环境中,温度扮演着举足轻重的角色,人们无时无刻在与温度打交道。可以说几乎80%的工业部门都不得不考虑温度的因素。目前测量温度一般使用的温度计,除了常用的水银或酒精制成的温度计外,还有用其他材料制成的温度计。本次课程设计是基于单片机的测温系统

2、,此系统的传感器是热敏电阻,利用热敏电阻负温度系数的特性构建出测量电路,再通过STC12C5608AD单片机,单片机内部有10位8路的AD转换,可把测量电路输出的电压值转化为AD值,然后通过四位数码管显示出温度,本次设计使用键盘设置温度报警点,这样可在不同场合使用,当超过温度时显体管就会闪烁。使用电脑上USB接口的5V电压即可让这个系统工作。经过keil软件编辑,编译,链接,调试以及仿真,写出满足控制要求的程序,通过下载线把写好的程序下载单片机内。 单片机即可自主反复执行程序,从而完成测温过程。这种设计方案实现了温度实时测量和显示。该系统抗干扰能力强,具有较高的测量精度,安装简单方便,性价比高

3、,可维护性好。这种测温系统可广泛应用于各种场合,实现对的实时测量,是一种比较智能、经济的方案,适于大力推广,可带来很好的经济效益和社会效益。设计方案比较方案一:(晶体管3DG6作为温度传感器) 在现代工农业生产过程中,环境温度的测量和控制是极为普遍和重要的。为了提高生产效率,降低生产成本,寻求性能可靠价格低廉,且应用广泛的元器件是生产过程的首选。本测量仪就是采用极为普遍的晶体管3DG6作为温度传感器,廉价的电压/频率转换器(V/F)LM331与AT89C51单片机组成的温度测量仪。它具有成本低,调校简便,自动补偿,测量精度高的特点。 半导体理论和实验证明,在 -50+150 的范围内,当发射结

4、正偏时,不管集电结反偏还是零偏,在一定的集电极电流形式下,NPN硅晶体管的基极-发射极正向电压UBE随温度T的增加而减小。并有良好的线性关系,其电压温度系数约-2.1mv/。因此,晶体管3DG6不但可以作为通常的电子器件使用,而且也是一种价格低廉,取材方便,性能良好的温度传感器,但是此方案抗干扰性差,数据处理复杂,数据存放空间大,且受市场限制。方案二:(DS18B20作为温度传感器)DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO92小体积封装形式;温度测量范围为55125,可编程为9位12位A/D转换精度,测温分辨率可达0.0625,被测温度用符号扩展的16位数字量

5、方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。 方案三:(AD590作为温度传感器)AD590是单片集成感温电流源。它的主要特性如下:流过器件的电流(uA)等于器件所处环境的热力学温度是线性关系, 方便编程人员对电压转化为温度的计算,测温范围为-55+150。电源电压范围为4V30V,可以承受44V正向电压和20V反向电压,输出电阻为710M 欧姆。共有I、J、K、L、M五

6、档,其中M档精度最高,在-55+150范围内非线性误差为0.3。利用热敏电阻负温度系数的特性构建出测量电路,再通过STC12C5410AD单片机,单片机内部有10位8路的AD转换,可把测量电路输出的电压值转化为AD值,然后通过四位数码管显示出温度,本次设计使用键盘设置温度报警点,这样可在不同场合使用,当超过温度时蜂鸣器就会发出声音。使用电脑上USB接口的5V电压即可让这个系统工作。经过keil软件编辑,编译,链接,调试以及仿真,写出满足控制要求的程序,通过下载线把写好的程序下载单片机内。 单片机即可自主反复执行程序,从而完成测温过程。 总结:与方案一相比,方案三可行性好,便于标定,好调节,精度

7、高,线性好,便于计算,电路有较好的平衡性与灵敏性,测量范围为从55150。与方案二相比,方案三的测量范围大,而且价格便宜,而且更适应生活的温度测量要求。而且方案三的电路简单,软硬件结构模块化,可根据外界温度的变化,直接在数码管上显示温度值,易于观察。综上所述选方案三最适合.硬件设计 硬件电路设计是课程设计的一大组成,软件设计也需在硬件设计的基础上才能完成。电路图的设计也是系统设计的一大助力,设计的时候通过protel将电路图连接好,此时清晰明了,为后面的焊接提供方便。图1 STC12C5410AD与RS232的连接电路图如图1所示,这是单片机STC12C5410AD与RS232的管脚连接图,当

8、单片机通过RxD和TxD与RS232的R1OUT和T1IN的连接时即可通信,而RS232通过串口又与电脑连接,即可将电脑中程序下载到单片机中,完成所需要的功能,并可以 按照所需修改便能完成不同的功能。图2 AD590 电路连接方式如图2所示,是AD590的温度测量电路,此电路运用了AD590对周过环境温度进行测量,AD590随着环境温度变化改变AD590输出的电流值,它们的关系是i= T+273。差动运算放大器的正端连接AD590,获得电压值为(273+T)*10Kv,而差动运算放大器的负端连接的是2.73*10kv,通过运算放大器的减法运算,以及放大器的放大倍数是5.6倍。最后的电压值输出

9、V=5.6/100。再将随温度变化的电压值输入到单片机进行处理。图3 74HC164的连接电路图4 四位数码管如图3、4所示,单片机的P1.0,,P1.1控制74HC164的DA和CK,通过164可使串行数据转化为并行数据,用以缓解I/O口太少的问题。164输出口连接数码管,用于选择输出的数字。图5 报警电路如图5所示可知,单片机的P2.4控制发光二极管,当提示温度超过限制温度时,p2.4为高电平,发光二极管闪烁,提示温度超过限制温度。图6 USB供源电路如图6所示为USB供源电路,当USB插在电脑上时,可为整个系统提供5V的电压,电路中的电感可防止电脑和电路之间相互干扰,当电路接通时发光二极

10、管会接通发光。图7 按键电路如图7所示,本测温系统有三个按键接有三个上拉电阻分别连接脚p3.2,p3.3,p3.4。这三个脚用来实现设置温度上限。其中p3.2脚用来改变十位的温度,p3.3脚用来改变个位的温度,p3.4脚用来切换设置温度和测量温度的界面显示。图8 测温系统完整的电路图如图8所示,这便是完整的基于单片机的热敏电阻测温系统的电路图,所能完成的功能如下:1、单片机通过AD590进行AD采样计算温度。 2、温度能4位显示。 3、能通过键盘进行温度报警点设置。 4、温度超限时通过发光二极管闪烁报警。软件设计如图是主函数流程图。 开始时端口,定时器初始化,eeprom初始化并读取储存值。在

11、while(1)循环里取的10个温度值取平均,扫描键盘是否进入限制温度的显示。若否,显示测量温度值,若是,显示限制温度值。对四个晶体管的引脚分别选中,显示相应位上的值,并判断P脚是否选中,若选中相应晶体管的数值加一。最后判断测量温度是否大于显示温度,若是报警。图 主函数流程图 本系统的显求部分使用了定时器中断,通用这个方法数码管显示比较稳定,不会受到其它代码影响,到了定时的时间,定时器溢出,立刻就去执行显示动作。调试一、 软件调试过程1、 用keil软件编写C语言程序,实现相应功能;2、 用单步运行和断点运行方法调试步骤;3、 调试显示的过程中,在watch窗口中显示需要观察的温度的十、个、小

12、数点后一位的值。4、 每块实现功能程序单独调试。排除其它干扰。5、 把程序烧入单片机运行结果观察,然后修改,目标达到最佳效果。二、 软件调试遇到的问题 在调试的过程中,遇到各种各样的问题,使结果不理想。问题总结如下:1、 最开始时,程序烧进单片机显示的温度全是乱码。考虑是否是显示数字程序编码错误。给显示程序一个特定的值,显示的结果正确,排除是显示问题。如法炮制,排除温度计算问题。得到是传感器得到采样值经过转化出现错误。解决方法:给单片机端口初始化,P1M0=0x10,P1M1=0x00,使口只为输入端。2、 温度显示画面抖动很快,数字模糊。解决方法:取多个温度值组成数组,如数组溢出,温度值平移

13、一位。最后取的平均值显示输出。显示界面清晰,温度值准确。3、 按键按下去时,晶体管显示抖动一下,给人感觉非常不舒服。解决方法:用延时,判断有键按下,暂时不执行,程序继续往下走,过了一段时间再执行。4、 限制温度无法储存。每次重新上电需再次设置。解决方法:使用STC12C2608单片机里的eeprom功能,把每次设置的温度存储进去,下次上电时再读取。 5、在接AD590温度采集电路前,无输入状态或固定电压输入下的 显示不正确。 解决方法:由于AD转换子函数所得结果为数字量,因此要把转换值乘以基准电压后再乘1024。总结这次课程设计是我们第一次接触完整的系统设计,在这次设计中学到了很多,虽然在软件

14、设计编程过程中遇到了很多以前没注意或者容易出错的问题,经过每一次改正都是学习的一次突破,非常感谢老师给我们的这次机会,让我们从理论学习转为真正的实际操作,了解到了理论学习与实际操作其实有很大的区别,只有在不断调试才能进步,而有时调试通过,将程序烧到板子上的时候就会发现又一次区别,有可能出现板子不能实现你所需要的功能,或者执行错了功能,这都是我们在调试中需要改正的,调试在我们整个设计过程中占了很大的比重,当基本功能调试成功了,我们才能考虑实现更多功能,使系统更加完善。最后感谢张磊老师对我们的悉心指导。附录1、#include code unsigned char seg_tab10=0x3F,0

15、x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F; /共阴断码表unsigned int TM0=10000,count; /中断时间设置unsigned char led_buff3; /* 存放3位数码管的段笔画 */unsigned char shi_w,ge_w; sbit contr_0=P32;sbit contr_1=P33;sbit contr=P34;sbit DA=P27;sbit CK=P26;sbit LED=P25;void delay(unsigned int i) for(;i0;i-); /*延时*/void init_IS

16、P(void)ISP_ADDRH=0x28;ISP_ADDRL=0x00;/送地址ISP_CONTR=0x87;ISP_CMD=0x01; /读操作ISP_TRIG=0x46; /触发ISP_TRIG=0xb9;shi_w=ISP_DATA;ISP_ADDRH=0x28;ISP_ADDRL=0x01;/送地址ISP_CONTR=0x87;ISP_CMD=0x01; /读操作ISP_TRIG=0x46; /触发ISP_TRIG=0xb9;ge_w=ISP_DATA;void write_ISP(void) ISP_ADDRH=0x28; ISP_ADDRL=0x00;/送地址 ISP_CONTR

17、=0x87; ISP_CMD=0x03; /擦除操作ISP_TRIG=0x46; /触发ISP_TRIG=0xb9;ISP_DATA=shi_w;ISP_ADDRH=0x28;ISP_ADDRL=0x00;/送地址ISP_CONTR=0x87;ISP_CMD=0x02; /写操作ISP_TRIG=0x46; /触发ISP_TRIG=0xb9; ISP_DATA=ge_w;ISP_ADDRH=0x28;ISP_ADDRL=0x01;/送地址ISP_CONTR=0x87;ISP_CMD=0x02; /写操作ISP_TRIG=0x46; /触发ISP_TRIG=0xb9; unsigned int

18、GetAdData(unsigned char ch) /*A/D转换*/unsigned char Lo2; unsigned int Hi8;ADC_CONTR=0xE8+ch;while(!(ADC_CONTR&0x10);ADC_CONTR = 0x80;Lo2 =ADC_LOW2;Lo2&=0x03;Hi8 =ADC_DATA;Hi8=2;Hi8+=Lo2; return(Hi8);void show_1LED(unsigned char b) /*串转并*/ unsigned int i; unsigned char a; a=led_buffb; if(b=1) a=a+0x80

19、; for(i=0;i8;i+) DA=a&0x80; CK=1; a=a1; CK=0; void Init_Timer0(void) P1M0=0x10; /设置P1.4仅为输入口 LED=0; EA=0; TR0=0; TMOD |= 0x01; /使用模式1,16位定时器,使用|符号可以在使用多个定时器时不受 影响 TH0=(65536-TM0)/256; /给定初值 TL0=(65536-TM0)%256; ET0=1; /定时器中断打开 TR0=1; /定时器开关打开 EA=1; /总中断打开void timer0(void) interrupt 1 /*10ms中断*/ TR0=

20、0; TH0=(65536-TM0)/256; /*初值设置*/ TL0=(65536-TM0)%256; TR0=1; P1=0xbf; /十位显示 show_1LED(0); delay(1000); P1=0xff; P1=0x7f; /个位显示 show_1LED(1); delay(1000); P1=0xff; P1=0xfe; /小数位显示 show_1LED(2); delay(1000); P1=0xff; void led_fill_d(unsigned int n) led_buff2=seg_tab(unsigned char)(n%10); / 小数位 n=n/10;

21、 led_buff1=seg_tab(unsigned char)(n%10); / 个位 n=n/10; led_buff0=seg_tab(unsigned char)(n%10); / 十位void keypress_0(void) /*十位设置*/ if(!contr_0) delay(1000); if(!contr_0) shi_w+; if(shi_w=10) shi_w=0; while(!contr_0); write_ISP(); void keypress_1(void) /*个位设置*/ if(!contr_1) delay(1000); if(!contr_1) ge

22、_w+; if(ge_w=10) ge_w=0; while(!contr_1); write_ISP(); void main() unsigned int alarmtemp,memorycount,temp,T; unsigned char ch=0x04; float v0,sum,T0; Init_Timer0(); init_ISP(); while(1) if(!contr) /*切换设置*/ delay(1000); if(!contr) count+;while(!contr); v0=GetAdData(ch); /*温度获取*/ T0=v0*5/1024+0.05 ; T

23、=T0*1000*10/(4.84*10); sum+=T; memorycount+; if(memorycount=150) temp=sum/150; sum=0; memorycount=0; if(count%2=0) led_fill_d(temp); if(count%2=1) keypress_0(); led_buff0=seg_tabshi_w; keypress_1(); led_buff1=seg_tabge_w; led_buff2=seg_tab0; alarmtemp=shi_w*10+ge_w; alarmtemp=alarmtemp*10; if(alarmtemptemp) LED=1; else LED=0; 15

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!