课程设计报告课程名称:传感器课程设计系别:机电工程系专业班级:自动化1101班学号:***********名:***课程题目:基于热敏电阻的测温控制系统设计完成日期:2013年11月20日指导老师:2013年11月20日附件:目录第一部分:明确实验的主要目的和要求………………………第二部分:系统设计…………………………………………….2.1学习板电路的设计………………………………………2.2电路总体设计与参数选择………………………………2.2.1设计原理………………………………………………2.2.2硬件电路的设计………………………………………2.2.3旗舰店使用和连接…………………………………….2.3模数转换电路的设计……………………………………2.4 硬件电路的设计………………………………………….2.4.1热敏电阻的选用………………………………………2.4.2 AT89C52单片机的选用及资源安排……………第三部分:系统软件设计………………………………………第四部分:系统调试与仪器使用………………………………4.1 系统调试的一起选用及其使用………………………4.2 系统调试故障的检测和分析…………………………4.3 结果分析………………………………………………第五部分:测试数据与结果分析………………………………第六部分:参考文献…………………………………………第七部分:附录………………………………………………….热敏电阻温度采集系统设计该系统采用了AT89C52单片机、NTC热敏电阻、共阴极数码管显示、电容、排阻、晶振、电阻等元器件。
摘要:本系统由TL431精密基准电压,NTC热敏电阻(MF-55)的温度采集,A/D 和D/A转换,单片机AT89C52为核心的最小控制系统,LCD1602的显示电路等构成。
温度值的线性转换通过软件的插值方法实现。
该系统能够测量范围为2—24℃,测量精度±1℃,并且能够记录24小时内每间隔30分钟温度值,并能够回调选定时刻的温度值,能计算并实时显示24小时内的平均温度、温度最大值、最小值、最大温差,且有越限报警功能。
由于采用两个水泥电阻作为控温元件,更有效的增加了温度控制功能。
关键词: NTC TL431 温度线性转换第一部分系统主要功能本系统中采用NTC热敏电阻的测温工作原理,测量的温度范围为2—24℃摄氏度,可以通过数码管直观地显示出当前温度值。
经过TL431精密稳压源输5V电压给一个桥式电阻电路,由于NTC热敏电阻的特性,所以随着温度的变化,电阻值减少了,后面在接一个三运放电路将电压放大到所需要的电压值。
输出的电压值经过8位A/D转换器ADC0804转换后,将数字信号经由单片机AT89C52进行处理,然后将这些值送由LCD1602进行显示。
第二部分系统设计2.1 学习板电路学习板系统总体设计电路图学习板系统总体设计图学习板上独立按键和矩阵按键的电路图LED 数码显示器DA 转换器 蜂鸣器 温度传感器 EEPROM计算机USB 通信接口电源键盘AD 转换器 LCD 显示器 LED 流水灯 MCUP2P3P1P0AT89C52单片机电路图AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。
AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash 只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
兼容MCS51指令系统·8k可反复擦写(>1000次)Flash ROM ·32个双向I/O口·256x8bit内部RAM ·3个16位可编程定时/计数器中断·时钟频率0-24MHz ·2个串行中断·可编程UART串行通道·2个外部中断源·共6个中断源·2个读写中断口线·3级加密位·低功耗空闲和掉电模式·软件设置睡眠和唤醒功能AT89C52P为40 脚双列直插封装的8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。
RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。
P0~P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(32~39 脚)被定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS (19脚)端口,12 脚、27 脚及28 脚定义为握手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。
2.2 电路总体设计与参数选择2.2.1设计原理图1如图1所示,当外界温度变化时,热敏电阻的阻值随着发生变化,热敏电阻上分得的电压发生变化,通过单片机的IO口和集成AD可以获得热敏电阻的电压值为V,通过计算得出热敏电阻的阻值变化规律R=V*R1/(5-V)。
由于热敏电阻的阻值与温度有表1的对应关系,将各对应值用数组形式写入程序,通过查表便可以得到此时外界的温度值。
表1 2.2.2 硬件电路图2 2.2.3器件选用及连接7 电容C2 30pF8 晶振X1 12MHZ9 排阻RP1 10K X 810 数码管8段共阴11 单片机STC12C5A60S2表2系统所用的元器件及说明如表2所示。
引脚连接安排为:P1.1引脚接热敏电阻,RST引脚接复位电路,X1、X2连接用来起振,P2.7-P2.4 引脚接数码管的1、2、3、4,P0.0-P0.7引脚接数码管的a b c d e f g h和10K的排阻。
2.3 模数转换电路前向通道中,当温度值转换为电压后,还需要将电压值进行A/D转换,转换后的值才能送到单片机进行处理。
后向通道中进行温度显示前应该先经过D/A转换2.4硬件选用2.4.1热敏电阻的选用热敏电阻器的热敏电阻有电阻值随温度升高而升高的正温度系数(简称PTC)热敏电阻和电阻值随温度升高而降低的负温度系数(简称NTC)热敏电阻。
NTC热敏电阻器,是一种以过渡金属氧化物为主要原材料,采用电子陶瓷工艺制成的热敏半导体陶瓷组件。
这种组件的电阻值随温度升高而降低,利用这一特性可制成测温、温度补偿和控温组件,又可以制成功率型组件,抑制电路的浪涌电流。
电阻温度特性可以近似地用下式来表示: R= R*EXP[B*(1/T-1/T)] 式中:RT、RN 分别表示NTC在温度T(K)和额定额定温度TN(K)下的电阻值,单位Ω,T、TN为温度,单位K(TN (k)=273.15+TN(℃))。
B,称作B值,NTC热敏电阻特定的材料常数(Beta)。
由于B值同样是随温度而变化的,因此NTC热敏电阻的实际特性,只能粗略地用指数关系来描述,所以这种方法只能以一定的精度来描述额定温度或电阻值附近的有限的范围。
电阻-温度关系: NTC热敏电阻器CWF2-502F3950各温度点的电阻值,即电阻-温度关系表。
NTC热敏电阻器CWF2-502F3950的测温范围为[-55℃,125℃],其电阻值的变化范围为[250062Ω,242.64Ω]。
如表1所示,列举了2-42摄氏度的电阻-温度关系。
2.4.2 AT89C52单片机的选用及单片机资源安排2.4.3 AT89C52概述本次课程设计核心元件是单片机AT89C52,下面对AT89C52做简单的概述。
2.4.4基本构造AT89C52单片机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储区(SRAM)、定时/计数器、UART串口、串口2、I/O接口、高速A/D转换、SPI接口、PCA、看门狗及片内R/C振动器和外部晶振等模块。
AT89C52系列单片机几乎包含了数据采集和控制中所需的所有单元模块,可称得上一个片内系统。
单片机AT89C52的基本构造如图3所示:图32.4.5性能特点60KB的Flash片内程序存储器、256字节的内部随机存取数据存储器(RAM)、1024字节的外部存储器、1K字节的数据Flash存储(EEPROM)、ISP(在系统可编程)/IAP(在应用可编程)、看门狗、内部集成MAX810专用复位电路、外部掉电检测电路、时钟源:外部精度晶体/时钟,内部R/C振荡器、4个16位定时器、3个时钟输出口、7个外部中断I/O口、PWM(2路)/PCA(可编程计数器阵列,2路)、A/D 转换,10位精度ADC,共8路.2.4.6 AT89C52单片机资源利用本次课程设计,主要应用了AT89C52单片机中中央处理器(CPU)、高速A/D 转换、外部晶振等模块。
第三部分C语言程序流程图及代码主函数流程图:AD中断流程图:系统C程序代码:Config.h代码:#ifndef _CONFIG_H_#define _CONFIG_H_#include <STC.h>#define FOSC 12000000L#define ADC_POWER 0x80#define ADC_FLAG 0x10#define ADC_START 0x08#define ADC_SPEEDLL 0x00#define ADC_SPEEDL 0x20#define ADC_SPEEDH 0x40#define ADC_SPEEDHH 0x60#define ADC_POSITION 1 //AD通道位置0-7#define NUX_DATA P0 //数码管段选#define NUX_SEG P2 //数码管位选void Delay_ms(unsigned int ms); //延时函数void InitADC(); //初始化AD功能#endifMain.c代码:#include "config.h"unsigned int code Ttable[42][2]={2,257, 3,246, 4,236, 5,225, 6,216, 7,207 8,198 9,190 10,182 11,174 12,167 13,160 14,154 15,148 16,142 17,136 18,131 19,126 20,121 21,116 22,112 23,107 24,103 25,100 26,96 27,92 28,89 29,8630,82 31,80 32,77 33,74 34,71 35,69 36,66 37,64 38,62 39,60 40,58 41,56 42,54 43,52 }; // 此数组保存热敏电阻的温度值(从2-43摄氏度),超出无效unsigned char code TableDATA[13]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D,0x7D, 0x07, 0x7F, 0x6F/*0-9*/, 0x00/*无*/, 0x02, 0x39,}//数码管数字0-9unsigned char code TableSEG [ 4] = {0xEF,0xDF,0xBF,0x7F};//数码管位置0-3unsigned char show[4];//定义温度全局/********************************************** 函数名称: void Delay_ms(unsigned int ms)** 功能描述: 延时函数** 输入: unsigned int ms 延时时间** 输出: 无** 全局变量: 无** 调用模块: 无**********************************************/void Delay_ms(unsigned int ms){for(;ms>0;ms--);}/******************************************************* 函数名称: void adc_isr() interrupt 5** 功能描述: AD中断,获取AD数据** 输入: 无** 输出: show** 全局变量: show** 调用模块: Delay_ms********************************************************/void Adc_isr() interrupt 5{unsigned char i;unsigned int m;m = ADC_RES;//计算此时热敏电阻阻值m = (100*m)/(255-m);//计算此时的温度值for(i=41;i<42;i--){if(m >= Ttable[i][1] && m < Ttable[i-1][1]){show[0] = (Ttable[i][0]+1)/10;show[1] = (Ttable[i][0]+1)%10;show[2] = 11;show[3] = 12;break;}}ADC_CONTR = ADC_POWER|ADC_SPEEDLL|ADC_START|ADC_POSITION; //重新使能AD转换}/******************************************************** 函数名称: void InitADC()** 功能描述: 初始化AD功能** 输入: 无** 输出: 无** 全局变量: 无** 调用模块: Delay_ms*********************************************************/void InitADC(){P1ASF = 0xff;ADC_RES = 0;ADC_CONTR = ADC_POWER|ADC_SPEEDLL|ADC_START|1; //使能P11为AD输入IE = 0xa0;Delay_ms(20);}main(){unsigned char i,j;InitADC();while(1){for(j=255;j>0;j--){for(i=0;i<4;i++)//数码管扫描{NUX_SEG = TableSEG[3-i];NUX_DATA = TableDATA[show[i]];Delay_ms(100);NUX_DATA = 0x00;}}}}第四部分系统调试与仪器使用4.1系统调试的仪器选用及其使用4.2 系统调试及调试故障的检测与分析第一步用下载程序的电路板和电脑给单片机下载编写好的程序第二步将下载好的单片机安装在设计的电路板上,给电路板接上5V的电源(接上电源后,数码管没有显示。