1、摘要传统的体温测量仪器大多是采用物理原理,大多数是根据水银等随温度升降的热胀冷缩的性质原理设计的,通过读取刻度值来判断温度值,这种方法操作起来不太方便,使用范围比较局限,而且测量所需要的时间较长。为了解决快速测量和高精度的问题,本设计提供了一种新的温度测量方案,本系统是由 TS118-3 红外线温度传感器、16 位双信道串行A/D 高精度放大器 AD7705、STC89C52 单片机、LCD1602 液晶显示器、DS1302 时钟电路和报警电路等构成,从而实现了非接触式红外快速测温的目的,它能够在较短的时间内准确测量出人体的温度,当测得的温度超出设定范围时即自动启用报警电路进行超标报警,并且还
2、能显示当前测温的时间。运用比较方便,功能较多。本文对该系统提出了具体的设计方案,讨论了红外线非接触式体温测量的基本原理,进行了方案的可行性论证。同时设计出了电路图和程序流程图并编写有程序控制。由于利用了单片机及数字控制系统的优点,使得系统的各个方面的性能得到了显著的提高。关键词 红外线温度传感器;非接触测量;A/D 转换器;STC89C52 单片机1目 录目录目 录 0一、引言 0二、测量原理 0三、总体设计 03.1 传感器的选择 03.2 信号处理芯片的选择 03.3 控制部分的选择 03.4 显示部分的选择 0四、硬件电路的设计 04.1 设计思路 04.2 传感器 04.3 LCD16
3、02 液晶介绍 .0五、总体电路图 05.1 原理图 05.2 PCB 图 .05.3 实物、测试图 0六、程序设计思路 0总结 0参考文献 0附录 0LCD 显示程序初始化部分 .0MLX90615 驱动程序 0延时程序 0主程序 02一、引言在临床医学中,体温是一个及其重要的生理参数。病人的体温为医生提供了极为重要的生理状态的各种信息。传统的水银式体温计和电子式体温计是通过口腔、腋窝、直肠等直接接触体表来测量人体的平均温度。其缺点是测量时间比较长,受测量位置的影响较大,给使用者带来诸多不便。2003 年“非典”疫情的爆发,对人体体温测量技术提出了更高的要求,急需一种更加安全、方便、卫生的非
4、接触测量工具进行测量人体温度。红外辐射式体温仪应用红外线辐射测量原理实现了人体体温的非接触测量,非接触式人体体温测量是一种理想的解决方法,该测量装置不会对人体构成任何威胁。现在市场上普遍应用德国 TS118-3 表面温度测量传感器,用其进行非接触式测量的体温仪具有精度高、成本低、安全的特点,市场应用前景广泛。在 2003 年全国防“非典”斗争中,中科院上海技术物理研究所在 863 计划高技术成果的基础上对红外技术应用于非接触式测温进行了深入研究,在短时间内开发成功了“非接触式红外测温仪” ,打开了国内“非接触式测量”的新篇章,但这种装置受一定因素影响,测量结果还有待进一步进行校正。在国外,非接
5、触式红外测温仪已经非常先进了,自 1999 年就有很多国家致力于这方面的开发研究。到现在为止,很多国家的产品已经达到国际先进水平,并已广泛应用于各个领域。比如,美国早在 2001 年就颁布了有关红外测温仪的计量标准,美国雷泰公司生产的 ST 系列红外测温仪已达到了世界领先水平。由于红外测温仪测温范围宽,除了用于人体温度检测外,还可用于电器的红外测量、供暖的红外测量、运输汽车维修时的红外测温等各个领域。因此,它具有广泛的开发前景。本文设计的红外快速测量人体温度的装置,是由 TS118-3 红外温度传感器、双信道 A/D 转换器 AD7705、STC89C52 单片机、LCD1602 液晶显示屏、
6、报警和时3钟电路等电路组成,从原理的设计到方案的论证,最后到实际制作和调试,都达到了预期的效果。二、测量原理在自然界中,一切温度高于绝对零度(-273.15C)的物体,由于分子的热运动,都在不停地向周围空间辐射包括红外波段在内的电磁波,其辐射能量密度与物体本身的温度关系符合辐射定律。物体的红外辐射能量的大小及其按波长的分布与它的表面温度有着十分密切的关系。因此,通过对物体自身辐射的红外能量的测量,便能准确地测定它的表面温度。 具体的来讲,是红外能量聚焦在传感器上并转变为相应的电信号。该信号经过放大器和信号处理电路,并按照算法和发射率校正后转变为被测目标的温度值。三、总体设计3.1 传感器的选择
7、TS118-3 传感器输出的电压只有 4mV 左右,电压输出太小,而单片机所能采样的电压在 V 级以上,因此单片机不能直接进行采样,所以必须经过放大后,单片机才能进行采样。放大器可以由单个的集成运算放大器构成,从而达到放大的目的,缺点是这种方法产生的测量误差较大,并且数据也不稳定。经过比较多款 A/D 转换器的综合性能,最终选择了一款 16 位高精度的双通道并且增益可调的 A/D 转换器,该芯片的好处是既能起到放大的作用,又能进行模数转换,并且带有两个输入通道,串行输出。使得电路的设计变的非常简单。查阅资料后发现 MLX90615 数字式红外测温传感器内部集成了低噪声放大器,16 位 ADC
8、和强大的 DSP 的 MLX90325 单元。计算所得的温度被存储在 MLX90325的 RAM 并且分辨率可以达到 0.02 C。此数值可以通过串行两线 SMBUS 兼容协4议获得或是器件的 10 位 PWM 格式获得。MLX90615 出厂校准的标准温度范围为:环境温度为-40 到 85 C,物体温度为-40 到 115 C。MLX90615 同样是集热电偶和热敏电阻于一体的红外传感器。优点,比TS118-3 更简单,可以简化程序,简化电路,使得设计更简单一步。缺点:精度比不上 TS118-3,且价格也不低。因此,我们这次设计就采用 MLX90615 传感器。3.2 信号处理芯片的选择由于
9、传感器内部含有 ADC,故可以省去选择 AD 芯片的步骤,使得设计简化。但丝毫不影响功能的实现,已经测量的准确性。3.3 控制部分的选择STC 和 AT 是我们学过的较为常见的芯片,由于传感器和稳压管的选择限制了电压需要选择同样需要 35V 电压的单片机,所以我想到了 STC89C52。3.4 显示部分的选择我们多学过的显示主要有两种方法,一种是 LED 数码管,另一种就是 LCD液晶显示屏。由于现实的内容较多,如果用数码管显示,不仅是电路结构变得很复杂,而且看起来很凌乱,功耗较大。液晶显示屏正好可以克服这点,显示部分看来来直观简洁,耗电量较少。而本次主要显示数字和一些字母符号,所以选择字符型
10、显示屏。字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式 LCD,目前常用 16*1,16*2,20*2 和 40*2 行等的模块。综合电路的结构、显示效果和耗电量等多方面因素,最终选择了 LCD1602 字符型液晶显示屏。该显示屏具有微功耗、体积小、显示内丰富、使用方便等诸多优点而5被广泛应用。字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式 LCD,目前常用 16*1,16*2,20*2 和 40*2 行等的模块。6四、硬件电路的设计4.1 设计思路MLX90615 数字式红外测温传感器内部集成了低噪声放大器,16 位 ADC 和强大的 DSP 的 MLX90325
11、 单元。计算所得的温度被存储在 MLX90325 的 RAM 并且分辨率可以达到 0.02 C。由 MLX90615 红外温度传感器采集温度,并且优势在于它内部直接有 ADC 功能,直接能将模拟信号转换为数字信号。然后将对应的数字信号传输入单片机 STC89C52 中,通过单片机程序处理信号,将对应的温度值显示在 LCD1602 上。硬件设计的系统框图如图 4-10 所示。4.2 传感器MLX90615 内部有 2 颗芯片,红外热电堆探测器和信号处理 ASSP MLX90615红外传感器按键LCD1602STC89LE517MLX90325,尤其是由 Melexis 设计的处理 IR 传感器输
12、出的芯片。器件有工业标准 TO-46 封装形式。由于集成了低噪声放大器,16 位 ADC 和强大的 DSP 的MLX90325 单元,使得高度集成和高精度的温度计得以实现。计算所得的物体温度被存储在 MLX90615 的 RAM,分辨率为 0.02 C。此数值可通过串行两线SMBus 兼容协议获或是器件的 10 位 PWM 格式获得。MLX90615 出厂的标准温度范围为:环境温度为-40 到 85 C,物体温度为-40 到 115 C。作为标准,MLX90615 出厂校准的物体发射率为 1。发射率可以简单地定制为0.1 到 1 之间, 并且不需要用黑来作为重新校准。MLX90615 可用电池
13、供电。封装中集成了可以滤除可见光和近红外辐射通量的光学滤波器(可通过长波)以提供日光免疫。MLX90615 绝对最大额定值见表 a,超过绝对最大额定值会造成永久性损害。在扩展周期里暴露在绝对最大额定值会影响器件的可靠性。表 a :MLX90615 绝对最大额定值参数 MLX90615电源电压,VDD(过压) 5V电源电压,VDD(工作电压) 3.6V反向电压 0.5V工作温度范围,TA -40 到+85C存储温度范围,TS -40 到+125CESD 灵敏度(AEC Q100 002) 2KVDC 方向电流,SDA 引脚 25mADC 方向电流,SDA 引脚 10mADC 方向电流,SCL 引
14、脚 10mAMLX90615 引脚图 MLX90615 外观图8MLX90615产品的感应元件是一款带有可感受目标红外辐射的微机械振膜晶片。Melexis 的这种技术经过多年工业和汽车温度测量领域中的应用,已经得到了充分的证实。温度计中定制的信号调节芯片能够放大并数字化感应振膜上的热电偶产生的微小电压,同时芯片存储器中储存了工厂设定的刻度参数,能够用来准确的计算目标体的温度。数字形式显示的温度是完全线性的,并且会对环境温度进行补偿。高度的整合性使得 MLX90615与过去红外产品相比具有更高的性价比。MLX90615的各引脚描述见表 b。表 b:MLX90615 各引脚描述MLX90615 传
15、感器出厂都已经经过专业的黑体标定过了,在规格范围内可以直接使用。图 c 中 LM2940 为了对电源起稳压作用,防止电源的波动对传感器采取信号时出现偏差。SDA 及 SCL 选择接在 P2.6 和 P2.7 口上。引脚名字 功能VSS 地。低电平接在这个引脚上。SCL 两线通信协议的连续时钟输入。引脚应用弱上拉电阻(典型值300K)SDA/PWM 数字输入/输出开漏 NMOS。在 SMBUS 模式里(出厂默认)串行数据I/O。在 PWM 模式-PWM 输出。引脚引脚应用弱上拉电阻VDD 外接电源电压9图 c MLX90615 传感器与单片机连接图4.3 LCD1602 液晶介绍模块组件内部主要
16、由 LCD 显示屏、控制器、列驱动器和偏压产生电路构成。LCD 显示屏为行和列交叉形成的点阵,以 58 点阵的字符结构模式和设置的显示字符数目,选择适宜的行数,分单屏、双屏或者多屏显示规定的字符。对于双屏或者多屏显示结构的 LCD,每一显示屏结构部分,均由各自独立的使能信号 E 控制。列驱动器与控制器配套使用,它接收来自控制器的振荡、帧同步输出、串行输出的数据和移位及锁存脉冲,产生列交流扫描驱动信号。控制器接受来自 MPU 的指令和数据,控制着整个模块的工作,由CGROM、CGRAM、DDRAM 等字符存储域、以及与 MPU 和列驱动器的 I/O 接口、指令寄存和译码机构、地址计数器等部分组成
17、。在控制器的控制下,模块通过数据总线 DB0DB7 和 E、R/W、RS 三个输入控制端与 MPU 接口。这三根控制线按照规定的时序相互协调作用,使控制器通过数据总线 DB 接收 MPU 发送来的指令和10数据,从 CGROM 中找到欲显示字符的字符码,送入 DDRAM,在 LCD 显示屏上与DDRAM 存储单元对应的规定位置显示出该字符。控制器还可以根据 MPU 的指令,实现字符的显示、闪烁和移位等显示效果。端口的定义液晶各管脚端口定义如表 c 所示:表 c 管脚定义引脚 符号 功能1 Vss 电源地(GND)2 Vdd 电源电压(+5V)3 V0 LCD 驱动电压(可调)4 RS寄存器选择
18、输入端,MPU 选择模块内部寄存器类型信号;RS=0,当MPU 进行写模块操作,指向指令寄存器;当 MPU 进行读模块操作,指向地址计数器;RS=1,无论 MPU 读操作还是写操作,均指向数据寄存器5 R/W 读写控制输入端,MPU 选择读/写模块操作信号;6 E 使能信号输入端,输入 MPU 读/写信号,读操作高电平有效;写操作下降沿有效7 DB 数据输入/输出口,MPU 与模块之间的数据传送通道8 DB 数据输入/输出口,MPU 与模块之间的数据传送通道9 DB 数据输入/输出口,MPU 与模块之间的数据传送通道10 DB 数据输入/输出口,MPU 与模块之间的数据传送通道11 DB 数据
19、输入/输出口,MPU 与模块之间的数据传送通道12 DB 数据输入/输出口,MPU 与模块之间的数据传送通道13 DB 数据输入/输出口,MPU 与模块之间的数据传送通道14 DB 数据输入/输出口,MPU 与模块之间的数据传送通道15 A 背光的正端+5V16 K 背光的负端 0VLCD1602 液晶显示模块与单片机 STC89C52 相接11五、总体电路图5.1 原理图5.2 PCB 图125.3 实物、测试图实物测环境温度测体温13六、程序设计思路非接触式人体体温计软件结构较为简单,包含硬件电路和程序设计部分。传感器采集信号、单片机处理、LCD 显示。软件设计流程图如图,源程序看附录:测
20、温程序总流程单 片 机温度采集程序液晶显示程序按键扫描程序图 6-1 系统程序框图14读取字节流程图15总结参考文献【1】张毅刚.新编 MSC-51 单片机应用设计. 哈尔滨:哈尔滨工业大学出版社,2003【2】宏晶科技.STC Microcontroller Handbook,2007【3】谭浩强.C 程序设计.北京:清华大学出版社,1991【4】求是科技.8051 系列单片机 C 程序设计. 北京:人民邮电出版社,2006【5】郭天祥.新概念 51 单片机 C 语言教程. 北京:电子工业出版社,2009【6】张洪润等.单片机应用技术教程.北京:清华大学出版社【7】夏继强. 单片机实验与实践
21、教程. 北京:北京航空航天大学出版社.2001【8】徐惠民、安德宁 单片微型计算机原理接口与应用第 1 版北京:北京【9】李叶紫. MCS-51 单片机应用教程.北京:清华大学出版社【10】邹应金. 51 系列单片机原理与实验教程.西安:西安电子科技大学出版社16附录:LCD 显示程序初始化部分设计程序如下:#include “1602.h“#include “delay.h“#define CHECK_BUSY#define RS_CLR RS = 0 #define RS_SET RS = 1#define RW_CLR RW = 0 #define RW_SET RW = 1 #defi
22、ne EN_CLR EN = 0#define EN_SET EN = 1#define DataPort P1 /最小系统为 P1 开发板为 P0/*-判忙函数-*/bit LCD_Check_Busy(void) #ifdef CHECK_BUSYDataPort = 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET;return (bit)(DataPort #elsereturn 0;#endif/*-写入命令函数- -*/void LCD_Write_Com(unsigned char com) while(LCD_Check_Busy();
23、 /忙则等待RS_CLR; RW_CLR; EN_SET; DataPort = com; _nop_(); 17EN_CLR;/*-写入数据函数-*/void LCD_Write_Data(unsigned char Data) while(LCD_Check_Busy(); /忙则等待RS_SET; RW_CLR; EN_SET; DataPort = Data; _nop_();EN_CLR;/*-清屏函数-*/void LCD_Clear(void) LCD_Write_Com(0x01); DelayMs(5);/*-写入字符串函数-*/void LCD_Write_String(u
24、nsigned char x,unsigned char y,unsigned char *s) if (y = 0) LCD_Write_Com(0x80 + x); /表示第一行else LCD_Write_Com(0xC0 + x); /表示第二行 while (*s) LCD_Write_Data( *s); s+; /*-写入字符函数-*/void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) if (y = 0) LCD_Write_Com(0x80 + x); else LCD_Write_C
25、om(0xC0 + x); LCD_Write_Data(0x30+Data); /*-写入数字函数-*/void LCD_Write_Num(unsigned char x,unsigned char y,unsigned int Num) if (y = 0) LCD_Write_Com(0x80 + x); else LCD_Write_Com(0xC0 + x); if(Num/1000)|(Num%1000/100) /百位LCD_Write_Data(0x30+Num%1000/100);18if(Num/100)|(0x30+Num%100/10) /十位LCD_Write_Da
26、ta(0x30+Num%100/10);LCD_Write_Data(0x2e);/“.“if(Num/10)|(0x30+Num%10) /个位LCD_Write_Data(0x30+Num%10); /*-初始化函数-*/void LCD_Init(void) LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*显示关闭*/ LCD_Wr
27、ite_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Com(0x0C); /*显示开及光标设置*/MLX90615 驱动程序:#include /#include “MLX90615.h“#include #include “delay.h“sbit SCL=P26; /IIC 时钟引脚定义sbit SDA=P27; /IIC 数据引脚定义/*延时函数 1*/void delay(unsigned int k)unsigned int i,j;for(i=0;i #include #in
28、clude “delay.h“#include “1602.h“#define uint unsigned int#define uchar unsigned charsbit key=P25; #include “MLX90615.h“void main()unsigned int DATA;float Tem;int TemValue;LCD_Init();INIT_MLX90615();LCD_Write_String(1,0,“Temp:“);LCD_Write_Char(11,0,0xdf-0x30);LCD_Write_Char(12,0,0x43-0x30);while(1)21 if (key = 0)DATA = read_temp(0x00,0x27); /Read Object Temperature from MLX90615 RAM 7hTem=DATA*0.02-271.15;TemValue=(int)(Tem*10); LCD_Write_Num(7,0,TemValue);LCD_Write_String(0,1,“ Target Temp!“);elseLCD_Write_Num(7,0,0);LCD_Write_Char(10,0,0);LCD_Write_String(0,1,“ Press the key“);