资源描述
武汉理工大学《光电技术》课程设计说明书
基于热电堆红外探测器的非接触人体表面温度测量系统
1 技术指标
设计一个非接触人体表面温度系统,要求:
(1)通过热电堆TP337A来探测人体表面的温度;
(2)由LED数码管显示测量的温度,要求显示温度精度能够达到0.1℃;
(3)可以连续测量人体表面或环境温度.
其整体方案如图1所示:
红外线测温模块
A/D转换模块
电压信号放大模块
单片机ST89C52模块
LED数码管显示模块
图1 系统硬件设计原理图
2 设计方案及其比较
通过技术指标中的硬件设计的原理,及设计要求,提出了以下三种设计方案
2.1 方案一
采用TPS333热电堆设计电路,热反应堆和放大部分,如图2所示,由于热电堆直接测量产生的电压范围只有几毫伏到几十毫伏,无法由A/D转换芯片PTCF8591直接处理,需要经过放大处理,又因为需要将电压信号放大一千倍,如果采用一级放大会出现零点漂移等一系列的问题,且放大信号有很强的干扰,所以选择了两级放大。
图 2 方案一红外与放大模块的设计
2。2 方案二
在调试方案一时,电路仍然出现了不稳定的现象,零飘等现象仍然存在一些,说明电路仍然不稳定,为此在方案一的基础的上提出了方案二,如图3,方案一与方案的二的区别在于在两级放大电路的中间加了一个电容,其作用是消除零飘,滤波等一系列作用。
图 3 方案三红外与放大模块的设计
图 3 方案二红外与放大模块的设计
图 3 方案二红外与放大模块的设计
2。3 方案三
为了更强劲的抑制零点漂移和抑噪声与干扰的能力,方案三在放大部分采用的是差分放大电路,如图4所示:
图4 方案三放大电路模块
3 实现方案
3。1电路原理
通过将三种方案进行对比,得出方案二电路的性能更加稳定,且电路简单,所以实现方案采用方案二。实现的电路图如图3所示,对于热电堆部分,因为红外温度测量技术的最大的优点是测量速度快,1秒内就可测试完毕,由于它只接受人体对外发射的红外辐射,没有任何其他物理和化学因数作用于人体,所以对人体无任何伤害,在方案中采用的是TPS333热电堆,由于热电堆直接测量产生的电压范围只有几毫伏到几十毫伏,无法由A/D转换芯片PTCF8591直接处理,需要经过放大处理,又因为需要将电压信号放大一千倍,如果采用一级放大会出现零点漂移等一系列的问题,且放大信号有很强的干扰,所以选择了两级放大。在两级放大电路的中间加入一个电容为了的使电路更加稳定,起滤波的作用。其放大的倍数为R5R4*R6R7 .系统的硬件由单片机模块、TPS-333温度传感器模块、LM358电压信号放大器模块、A/D转换模块、LED数码管显示模块,硬件的设计流程是TPS—333红外温度传感器将红外信号转换为电压信号,由于输出的电压信号很微弱,所以采用LM358组成的运算放大器进行前置放大,然后将放大的电压信号发送到由PCF8591组成的A/D转换电路,再将转换后得到的数字信号送至单片机进行处理,最后将处理后的结果送至LCD数码管显示屏进行实时温度的显示,
3。2 电路元件的选择
表 Error! Bookmark not defined. 实验所用器件
器件
型号
数量
电阻
—
7
热电堆
TPS333
1
单片机
STC89C52
1
A/D转换
PTCF8591
1
LED数码管
—
1
放大器
LM358
2
导线
-
若干
在实现方案中所用到的电路板如图5:
图5 电路板
3。3 热电堆模块
热电堆红外探测器TPS333如图6所示:
图6 热电堆实物图
热电堆的背部视图及其引脚如图7:
图 7 热电堆的背部视图及其引脚图
其热电堆的电路图如图8所示:
图8 红外测温模块的电路图
3。4电压信号放大模块
由于热电堆直接测量产生的电压范围只有几毫伏到几十毫伏,无法由A/D转换芯片PTCF8591直接处理,需要经过放大处理,又因为需要将电压信号放大一千倍,如果采用一级放大会出现零点漂移等一系列的问题,且放大信号有很强的干扰,所以选择了两级放大。在两级放大电路的中间加入一个电容为了的使电路更加稳定,起滤波的作用。其电路图如图9所示:
图9 放大器模块电路图
3.5A/D转换模块、单片机ST89C52模块与LED数码管显示模块
设计中,采用的是开发板包含的A/D转换模块,如果外接A/D转换模块,由于干扰的影响会得到信号的不稳定。LED数码管采用的是共阴极的数码管,单片机ST89C52则用于程序的载入。
3.5 电路连线实物图
通过理论分析设计,最终得到了理想的电路图,其连线如图10所示:
图10 电路实物图
4 调试过程及结论
当电路连接成功后,接下来便是调试,载入程序后,遇到了一下的几种问题:
问题1:在进行第一次程序载入的时候,电路没有反应.
经过反复的检查,发现电阻连接错误,导致电路连接的不成功。
问题2:在载入程序后,数码管显示的数字乱码。
经过检查发现,在单片机导出的线中,将段选的线接反了.
问题3:电路板成功运行后发现将手放上去,数码管显示的数据变化幅度不大。
经检查发现,电路的放大倍数过小。
改正了以上问题后,得到了理想的结果,如图11、12所示:
图11 室温下的布线图
图12 人体温度测量的布线图
5心得体会
热电堆的设计很接近生活,因为体温计是人们日常生活的必需品,而传统的一些体温测量计测量时间长、读数不精确,且本身材料又不是很符合大众需要,如水银温度计,不仅易碎而且里面的水银有毒,而且每次使用都还必须仔细的消毒,而一些新型的温度计,如一些电子温度计,但是也有测温时间长的弊端,而这次设计的基于热电堆红外探测器的非接触人体表面温度测量正好可以弥补这些弊端,它的灵敏度高测量时间也短。很是符合大众的需求.本次光电实验充分的结合了本学期所学的光电技术的知识及单片知识的运用,让我们将理论知识与实践有了更完美的结合,让我们对光电技术这门课程有了更全面的认识与掌握,在设计中运用到了数电的知识,也让我们对数电的知识也有了一定的复习作用,在接电路图的时候,因为线路过多,也很考验我们个细心,也锻炼我们独立自主的能力。
本次课设全是我一人独立自主完成的,让我在独立设计方面的能力有了进一步的提高,实验过程中遇到了很多的麻烦,如线接反了,电阻接漏了,或者在计算放大倍数的时候计算出错,导致最终的结果的放大倍数过小,LED数码管显示不灵敏,但最终也都得到了自己想要的结果。但是这次实验中涉及到的单片机方面的程序还是不是很熟悉,基本上都是查阅书籍或者百度得来的,但是这也属于我自己的劳动成果吧。对这次实验我感到很满意,让我学会了很多的东西,美中不足的是觉得自己的基本功太差,还需呀好好弥补!
6 参考文献
[1]杨应平,胡昌奎,胡靖华等。光电技术。机械工业出版社。2014。
[2]郭天祥。新概念51单片机C语言教程。电子工业出版社 2007。
7 附录
#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()
{;;}
void start()
{
SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
}
void stop()
{
SDA=0;
delay();
SCL=1;
delay();
SDA=1;
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;
SCL=0;
delay();
SDA=CY;
delay();
SCL=1;
delay();
}
SCL=0;
delay();
SDA=1;
delay();
}
void write_add(uchar control,uchar date)
{
start();
write_byte(0x90);
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);
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 ge,shi,bai;
init();
while(1)
{
display(ge,shi,bai);
num=read_add(0x40);
bai=(num+250)/100;
shi=(num+250)%100/10;
ge=(num+250)%10;
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i——)
for(j=110;j〉0;j——);
}
目录
1 技术指标 1
2 设计方案及其比较 2
2.1 方案一 2
2.2 方案二 2
2.3 方案三 3
3 实现方案 4
3.1电路原理 4
3.2 电路元件的选择 4
3.3 热电堆模块 5
3.4电压信号放大模块 7
3.5A/D转换模块、单片机ST89C52模块与LED数码管显示模块 7
3.5 电路连线实物图 7
4 调试过程及结论 8
5心得体会 9
6 参考文献 10
7 附录 10
12
展开阅读全文