模拟温度采集模块
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模拟温度采集模块
4.12.1 设计目的及任务
设计任务:设计一个基于模拟温度传感器的温度采集和显示系统。
功能指标:
⌝AD分辩率:8位或以上
⌝温度采样精度:± 1℃
⌝测试温度范围:0~40℃
⌝电源电压:单电压5V
⌝可以和单片机结合并显示。
设计要求:所设计的温度采集、转换和显示电路应满足EDP实验仪系统设计要求,并能与整个系统有效结合。
以下是采用热敏电阻的温度采集系统的原理以及采用TLC1543 AD芯片的设计范例及其相应电路的讲解,仅供参考。
4.12.2 设计原理
系统大体上由三个部分组成。
"电阻和热敏电阻组成的电桥;
"由OP07组成的差动放大调理电路;
"由TLC1543组成的AD模数转换电路。下面分别介绍如下。
1、热敏电阻
热敏电阻是一种电阻值随温度变化的电子元件,通常有两种类型的热敏电阻。在工作温度范围内,电阻值随温度升高而增加的称为正温度系数热敏电阻,简称PTC热敏电阻;反之称为负温度系数热敏电阻,简称NTC热敏电阻。热敏电阻在温度测控、现代电子仪器及家用电器中有广泛用途。
2、调理电路
由于传感器直接输出的模拟量幅度一般较低,同时为了更好的提高系统的抗干扰能力,在传感器的后端一般要进行调理,调理电路通常选用运算放大器完成。本系统采用OP07组
成一个差分放大器完成后续幅度放大和隔离。
OP07 高精度运算放大器具有极低的输入失调电压、失调电压温漂、噪声电压。可广泛应用于稳定积分、精密绝对值电路、比较器及微弱信号的精确放大,其特点包括:
"低的输入噪声电压幅度—0.35 μVp-p (0.1Hz ~ 10Hz)
"极低的输入失调电压—10 μV
"极低的输入失调电压温漂—0.2 μV/ ℃
"具有长期的稳定性—0.2 μV/Mo
"低的输入偏置电流—± 1nA
"高的共模抑制比—126dB
"宽的共模输入电压范围—±14V
"宽的电源电压范围—± 3V ~± 22V
OP07运算放大器的引脚见图4-12-1。
图4-12-1:OP07运算放大器引脚图
设计用OP07组成一个差动放大器,用以放大电桥输出信号,如下图4-12-2所示:
Rf
Ui1
Ui2Uo
图4-12-2:采用OP07的差分放大器
输入信号分别加之OP07的反相输入端和同相输入端,当R2=R1,Rf=R3时,输出电压Uo 为
f
o i 2i11
R U (U -U )R =
3、 AD 模块TLC1543
AD 模数转换模块TLC1543的具体用法请参考4.9节。
4.12.3 参考设计内容
1、接口定义
EDP 试验仪热敏电桥模块接口定义见图4-12-3,可以采用面包板自行焊接。
2、设计原理
参考设计通过一个热敏电阻和三个固定阻值的电阻搭成一个电桥,通过取电桥两端的电压值(这样做精度更高),再经过一个差动放大器放大,可以有效抑制零点漂移。放大后的信号送入TLC1543 AD转换后经单片机处理。每一个采样放大后的电压值都对应单片机中已经建好的表中的一个温度值,这样就可以根据当前电压值得到目前环境下的温度,再通过LCD显示。原理图如图4-12-4,其中热敏电阻标称阻值为47欧姆。
图4-12-4:模拟温度前端调理部分设计参考图
整个温度采用系统的原理框图见图4-12-4。
3、软件设计方法
软件设计的关键是建立电桥输出电压和实际温度的对应表,即程序中的u_data{}数组。这个数组的数值均通过实验确定,输出的电压值送到TLC1543的第4通道。例4-12-1是温度采集模块的参考程序。
例4-12-1:温度采集模块的参考程序
#include
#include
uint read1543(uchar port);
uchar xdata ad_result[16]={0}; //AD转换结果
uchar bbb[]={" TLC1543 TEST "};
float JiZhun_AD=2.5;
float xdata u_data[30]=
{ 0.750,0.757,0.762,0.769,0.774,0.779,0.803,0.808,0.813,0.823,
0.833,0.837,0.842,0.847,0.854,0.862,0.863,0.864,0.872,0.876,
0.881,0.889,0.894,0.898,0.906,0.911,0.916,0.920,0.923,0.927,
};
//====================================
void main()
{
ulong AD_ad=0;
int i,T_data=0,U_data=0;
float AD_Data=0.0,TEMPRA TURE=12.5;
PORT=0x03; //BA口输出
lcd1602init(); //液晶初始化
lcd_clear();
while(1)
{
AD_ad = read1543(4); //4 - - - - 第4号通道(0--10)
AD_Data = ((float)AD_ad)*JiZhun_AD/1024+0.0005;
for(i=0;i<30;i++)
{
if(AD_Data < u_data[0]) TEMPRA TURE=26.0;
else
{
if( (AD_Data >= u_data[i]) && (AD_Data < u_data[i+1]) ) TEMPRA TURE=26.0+0.5*i;
else if(AD_Data > u_data[29]) TEMPRATURE=30.0;
}
}
T_data=(int)(TEMPRA TURE*10);
U_data=(int)(AD_Data*1000);
ad_result[11]=T_data%10+'0';
ad_result[10]='.';
ad_result[9]=T_data/10%10+'0';
ad_result[8]=T_data/100+'0';