资源描述
目 录
1. 技术指标 1
2. 设计方案及其比较 1
2.1 方案一 1
2.2 方案二 2
2.3 方案三 2
2.4 方案比较 3
3. 实现方案 3
3.1 器件说明 3
3.1.1 TPS337A热电堆说明 3
3.1.2 LM358运算放大器说明 4
3.1.3 PCF8591 A/D转换器说明 5
3.1.4 74LS138译码器与74HC573锁存器说明 6
3.2 最终实现方案 8
3.2.1 实现方案电路图 8
3.2.2 方案设计原理及思路 9
4. 调试过程及结论 16
4.1 电路实物的连接 16
4.2 调试结果展示 17
4.3 调试结论 18
5. 心得体会 18
6. 参考文献 19
基于热电堆红外探测器的非接触人体表面温度的测量
1. 技术指标
设计一个非接触人体表面温度系统,要求:
1. 通过热电堆TPS337A来探测人体表面的温度;
2. 由LED数码管显示测量的温度,要求显示温度精度能够达到0.1℃;
3. 可以连续测量人体表面或环境温度。
2. 设计方案及其比较
2.1 方案一
通过TPS337A检测人体红外波产生温差电动势,将环境温度与检测到的人体温度分为两路电压信号,完成环境温度的补偿。再经过A/D转换芯片将数字信号发送到单片机输出,最后通过LED数码管显示。放大器采用AD620运算放大器以及LM358运算放大器。具体电路图如图1所示。
图1 方案一电路图
信号采集电路有两部分组成:体温信号放大电路和环境温度信号处理电路。体温信号放大电路是由仪用放大器AD620和参考电压电路组成;环境温度信号处理电路是由运算放大器
LM358构成的电压跟随器组成。三路输出信号其中最上方为放大后的热电堆电压信号,也就是将要处理的体温信号,中间为参考电压,最下方为环境温度信号。
2.2 方案二
通过TPS337A检测人体红外波产生温差电动势,直接将输出电压通过放大器输出电压信号,再经过A/D转换芯片将数字信号发送到单片机输出,最后通过LED数码管显示。放大器采用AD620运算放大器。具体电路图如图2所示。
图2 方案二电路图
运算放大器AD620是一款低成本、高精度仪表放大器,仅需要一个外部电阻来设置增益,增益范围为1至1000。此外,AD620采用8引脚SOIC和DIP封装,尺寸小于分立式设计,并且功耗较低(最大电源电流仅1.3 mA),因此非常适合电池供电的便携式(或远程)应用,其工作电压为4.6V~36V或±2.3V~±18V。两路电压信号分别连接A/D转换芯片的输入。
2.3 方案三
通过TPS337A检测人体红外波产生温差电动势,直接将输出电压通过两级放大器输出电压信号,消除零点漂移,再经过A/D转换芯片将数字信号发送到单片机输出,最后通过LED数码管显示。放大器采用LM358运算放大器。具体电路图如图3所示。
图3 方案三电路图
运算放大器LM358内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式。其单电源为3~30V,双电源为±1.5~±15V,而且它的输出电压摆幅比较大,很适合于电池供电。
2.4 方案比较
方案一中将环境温度与人体体表温度补偿,考虑比较充分全面,但是在实际的操作过程中较为繁琐,可视为理想方案。
方案二中采用AD620运算放大器,电压输出信号有两路,但此后通过A/D转换芯片的输入有两路输入,则在代码的编写方面较为繁琐。
方案三中采用LM358运算放大器,两级放大消除了零点漂移是的输出电压信号更为稳定,而且放大倍数通过电阻直接计算确定,输出信号只有一路,直接连接到A/D转换芯片的输入口。整个电路相对较为简单,而且整体效率也很高,是很好的实行方案。
综上所述,方案三可作为最后的实现方案,可在其基础上进行调试。
3. 实现方案
3.1 器件说明
3.1.1 TPS337A热电堆说明
热电堆TPS337A的管脚图如图4所示。2脚与4脚之间为热敏电阻,1脚与3脚输出电压,其中3脚和4脚接地。热电堆TPS337A的电压与温度对应关系如图5所示。
图4 TPS337A热电堆管脚图
图5 热电堆电压-温度曲线
3.1.2 LM358运算放大器说明
LM358是双运算放大器。内部包括两个独立的、高增益、内部频率补偿的双运算放大器,适合用于电源电压范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。LM358芯片引脚图如图6所示。
图6 LM358芯片引脚图
3.1.3 PCF8591 A/D转换器说明
PCF8591是单片、单电源低功耗8位CMOS数据采集器件,具有四个模拟输入、一个模拟输出和一个串行I2C总线接口。3个地址引脚A0、A1和A2用于变成硬件地址。器件的地址、控制和数据通过两线双向I2C总线传输。PCF8591芯片管脚图如图7所示。
图7 PCF8591芯片管脚图
I2C总线系统中每一片PCF8591通过发送有效地址到该器件来激活。该地址包括固定部分和可编程部分。可编程部分必须根据引脚A0、A1、A2来设置。地址字节的最后一位是用于设置以后数据传输方向的读/写位。PCF8591的地址设置如图8所示。
图8 PCF8591地址设置
发送到PCF8591的第二个字节将被存储在控制寄存器,用于控制器件功能。其控制字设置如图9所示。
图9 控制字设置
3.1.4 74LS138译码器与74HC573锁存器说明
对于74LS138译码器,当一个选通端(E1)为高电平,另两个选通端(/E2)和(/E3)为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。比如:A2A1A0=110时,则Y6输出端输出低电平信号。74LS138译码器芯片引脚图如图
10所示。
图10 74LS138芯片管脚图
74LS138译码器真值表如表1所示。
表1 74LS138译码器真值表
输入
输出
E1
/E2
/E3
A2
A1
A0
/Y0
/Y1
/Y2
/Y3
/Y4
/Y5
/Y6
/Y7
H
L
L
L
L
L
L
H
H
H
H
H
H
H
H
L
L
L
L
H
H
L
H
H
H
H
H
H
H
L
L
L
H
L
H
H
L
H
H
H
H
H
H
L
L
L
H
H
H
H
H
L
H
H
H
H
H
L
L
H
L
L
H
H
H
H
L
H
H
H
H
L
L
H
L
H
H
H
H
H
H
L
H
H
H
L
L
H
H
L
H
H
H
H
H
H
L
H
H
L
L
H
H
H
H
H
H
H
H
H
H
L
对于74HC573锁存器,当使能(G)为高时,Q 输出将随数据(D)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。74HC573锁存器芯片引脚图如图11所示。
图11 74HC573芯片管脚图
74HC573锁存器真值表如表2所示。
表2 74HC573锁存器真值表
/OE
LE
D
Q
L
H
H
H
L
H
L
L
L
L
X
Q0
3.2 最终实现方案
3.2.1 实现方案电路图
热电堆输出的电压信号经过LM358运算放大器放大后直接输出到PCF8591的输入端,通过单片机的程序代码把将电压模拟信号转换过来的数字信号获取通过LED数码管输出。在输出时,位选通过74LS138译码器将2位转换为4为二进制,段选通过74HC573锁存器所存输出,其使能端可通过单片机的一个输出口直接加以控制,决定是输入数据还是锁存数据。
实现方案的电路图如图12所示。
图12 实现方案电路图
3.2.2 方案设计原理及思路
整个设计思路模块如图13所示。
红外线测温模块
电压信号放大模块
A/D转换模块
单片机模块
LED数码管显示
图13 设计思路模块
1.红外测温模块
在自然界中的任何物体,只要高于绝对零度(-273.15℃),由于分子的热运动,都向外辐射电磁波,其辐射能量密度与物体本身的温度关系符合普朗克定律。如果将一物体加热,我们将观测到单位时间发出辐射能的多少及辐射能波长的分布,都与物体温度有关,把这种辐射称为热辐射,人体温度约为310K,在此温度下,主要辐射的电磁波为波长在9-10μm的红外线。通过测量人体自身辐射的红外能量,便可以较为精确地测得人体体表温度。
热电堆TPS337A通过感测人体辐射的电磁波而产生了相应的电动势,通过对该电动势的测量,即可将电压信号还原为温度信号,从而检测出人体体表温度。
2.电压信号放大模块
通过图5红外探测器温度与输出电压关系可知,在人体温度范围内,探测器的输出电压基本与温度成正比,另外可以看出探测器的输出电压比较小,只有几百uV,这样我们必须将输出信号进行放大以后才能显示。所以我们设计了电压的两级放大,可将热电堆输出电压放大1000倍。放大倍数计算公式如下:
3. A/D转换模块
由图8地址设置可知,当A0、A1、A2均接地时,执行写操作,该地址为0x90。
由图9控制字设置可知,模拟输入为1与自动增量为0,采用单通道输入以及输入通道为AIN0时,控制字应设置为01000000,即0x40。
4. 单片机模块
将单片机的P2.0与P2.1两个接口并联到I2C总线中,SCL用于时钟信号,SDA用于数据信号。实现A/D转换芯片到单片机的数据传输。具体的单片机代码如下。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define PCF8591 0x90
#define N 11
void delayms(uint);
bit write=0;
sbit dula=P1^0; //控制锁存器使能端
sbit SCL=P2^1;//时钟信号
sbit SDA=P2^0;//数据信号
uchar table1[]={0xfc,0x60,0xda,0xf2,0x66,
0xb6,0xbe,0xe0,0xfe,0xf6};
//不带小数点数码管显示
uchar table2[]={0xfd,0x61,0xdb,0xf3,0x67,
0xb7,0xbf,0xe1,0xff,0xf7};
//带小数点数码管显示
uchar num,ge,shi,bai;
void delay() //延时4-5个微秒
{;;}
void start()//开始
{
SDA=1;
delay();
SCL=1;
delay();
SDA=0;//SCL处于高电平器件SDA下降沿启动信号
delay();
}
void stop() //停止
{
SDA=0;
delay();
SCL=1;
delay();
SDA=1;//SCL处于高电平器件SDA上升沿停止信号
delay();
}
void respons()//应答
{
uchar i;
SCL=1;
delay();
while((SDA==1)&&(i<255))
i++;//当一段时间过后没有收到从机的应答则主器件默认从器件已经收到数据
SCL=0;
delay();
}
void init() //初始化
{
SDA=1;
delay();
SCL=1;
delay();
}
uchar read_byte()//读一个字节数据
{
uchar i,k;
SCL=0;
delay();
SDA=1;
delay();
for(i=0;i<8;i++)
{
SCL=1;
delay();
k=(k<<1)|SDA;//先左移一位,再在最低位接受当前位
SCL=0;
delay();
}
return k;
}
void write_byte(uchar date) //写一字节数据
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1; //左移一位 移出的一位在CY中
SCL=0; //只有在scl=0时sda能变化值
delay();
SDA=CY;
delay();
SCL=1;
delay();
}
SCL=0;
delay();
SDA=1;
delay();
}
void write_add(uchar control,uchar date)//向芯片的任意地址写一字节的数据
{
start();
write_byte(0x90); //10010000 前四位固定为1001 接下来三位A2、A1、A0为地址选择,本次电路设计为000 最后一位是写 所以为低电平
respons();
write_byte(control);
respons();
write_byte(date);
respons();
stop();
}
uchar read_add(uchar control)//向芯片的任意地址读一字节的数据
{
uchar date;
start();
write_byte(0x90);
respons();
write_byte(control);
respons();
start();
write_byte(0x91); //把最后一位变成1,读
respons();
date=read_byte();
stop();
return date;
}
void display(uchar ge,uchar shi,uchar bai)
{
P0=0;
dula=1; //锁存器使能端打开
P0=table1[bai];
dula=0; //锁存器使能端关闭,数据锁存
P1=0x40; //位选最高位
delayms(10);
P0=0;
dula=1;
P0=table2[shi];
dula=0;
P1=0x20; //位选个位
delayms(10);
P0=0;
dula=0;
P0=table1[ge];
dula=1;
P1=0x00; //位选最低位
delayms(10);
}
void main()
{
uchar A1,A2,A3;
init();
while(1)
{
display(A1,A2,A3);
num=read_add(0x40); //读出的数据保存到num中
A3=(num+250)/100; //十位
A2=(num+250)%100/10; //个位
A1=(num+250)%10; //小数点后一位
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
5. LED数码管显示
单片机代码中LED的显示是由位选和段选构成的。将573锁存器的使能端与单片机一个引脚相连,使之控制锁存器选择哪种输出输入状态。当有数据输入时先打开使能端使输出与输入一致,之后关闭使能端锁存数据,再对于数据进行输出显示。74LS138译码器是对LED数码管进行位选,将P1的两位输入到A0、A1,再经由译码器输出四位到数码管的位选接口,控制数码管的输出。
4. 调试过程及结论
4.1 电路实物的连接
元器件如如表3所示。
表3 元器件列表
元件名称
规格
数量
滑动变阻器
100k
2
滑动变阻器
10k
2
滑动变阻器
1k
3
电容
0.1uF
2
电容
10uF
1
A/D转换芯片
PCF8591
1
译码器
74LS138
1
锁存器
74HC573
1
运算放大器
LM358
1
热电堆
TPS337A
1
整个电路的连接图如图14所示。
图14 整体电路布线图
4.2 调试结果展示
环境温度如图15所示。显示温度为26.0℃。
图15 环境温度
检测人体温度如图16所示。显示人体体表温度为30.4℃。
图16 人体体表温度
4.3 调试结论
电路调试成功,可完成技术要求。初始显示环境温度,当检测到人体体表温度立即显示检测的温度,精度可达0.1℃。将手拿开,立即恢复为环境温度。
6. 参考文献
[1] 杨应平,胡昌奎,胡靖华.《光电技术》.武汉:机械工业出版社,2014
[2] 郭天祥.《51单片机C语言教程》.北京:电子工业出版社,2013
展开阅读全文