
温度测量
-
2023年3月19日发(作者:顺丰月结管家)1/19
温度测量系统
1.1系统概要
1.1.1引言
温度是表征物体冷热程度的物理量。温度通过物体随温度变化的某些特性来
间接测量。温度的测量和控制在激光器、光纤光栅的使用及其他的工农业生产和
科学研究中应用广泛。温度检测的传统方法是使用诸如热电偶、热电阻、半导体
PN结之类的模拟温度传感器。信号经取样、放大后通过模数转换,再交自单片
机处理。被测温度信号从温敏元件到单片机,经过众多器件,易受干扰、不易控
制且精度不高。因此,本设计介绍了一种温度传感器选用LM35、单片机选用
MC908GP32的温度测量系统。它能通过与单片机,完成温度采集和数据处理。该
系统的温度测量范围为0~99℃,可以精确到一位小数,可适用于工业场合及日
常生活中[6]。
1.1.2系统结构分析
本测温系统由温度传感器电路、信号放大电路、A/D转换电路、单片机系
统、温度显示系统构成,如图1所示。其基本工作原理:温度传感器电路将测量
到的温度信号转换成电压信号输出到信号放大电路,与温度值对应的电压信号经
放大后输出至A/D转换电路,把电压信号转换成数字量送给单片机系统,单片
机系统根据显示需要对数字量进行处理,再送温度显示系统进行显示。如图2
所示[2]。
1.2硬件电路设计
1.2.1硬件电路图
温度传
感器电路
信号
放大电路
A/D
转换电路
单片机
系统
温度
显示系统
图1测温系统的原理框图
2/19
1.2.2温度传感器电路
温度传感器采用的是NS公司生产的LM35,它具有很高的工作精度和较宽的
线性工作范围,它的输出电压与摄氏温度线性成比例,且无需外部校准或微调,
可以提供±1/4℃的常用的室温精度。LM35的输出电压与摄氏温度的线形关系
可用下面公式表示,0℃时输出为0V,每升高1℃,输出电压增加10mV。其电
源供应模式有单电源与正负双电源两种,其接法如图3与图4所示。正负双电源
的供电模式可提供负温度的测量,单电源模式在25℃下电流约为50mA,非常省
电。本系统采用的是单电源模式。
1.2.3信号放大电路
由于温度传感器LM35输出的电压范围为0~0.99V,虽然该电压范围在A
/D转换器的输入允许电压范围内,但该电压信号较弱,如果不进行放大直接进
行A/D转换则会导致转换成的数字量太小、精度低。系统中选用通用型放大器
μA741对LM35输出的电压信号进行幅度放大,还可对其进行阻抗匹配、波形变
3/19
换、噪声抑制等处理。系统采取同相输入,电压放大倍数为5倍,电路图如图5
所示[5]。
1.2.4A/D转换模块
A/D转换模块(AnalogToDigitalConvertModule),即模数转换,是将电
压信号转换为对应的数字信号。
1.2.4.1进行A/D转换的基本问题:
(1)采样精度数字量变化一个最小量时模拟信号的变化量,即采样位数。
(2)采样速率完成一次A/D采样所要花费的时间。
(3)滤波对采样的数据进行筛选去掉误差较大的毛刺。
(4)物理量回归把A/D采样值与实际物理量对应起来。
1.2.4.2A/D转换模块的基本编程方法
(1)A/D转换初始化对ADCLK写入控制字节,决定时钟输入源是内部总线
还是外部晶振,决定分频系数等。
(2)启动A/D转换对ADSCR写入控制字节,选取要转换的通道、决定转
换结束数据获取的方式、设置是连续转换还是一次转换等。
(3)获A/D转换结果若是中断方式,在A/D中断程序中取得,若是查询方
式,通过ADSCR的第7位(COCO位)取得,当COCO=1时可从ADR中取数。
1.2.4.3A/D芯片TCL2543概述
(1)TLC2543的引脚说明
4/19
图6TLC2543引脚图
(2)TLC2543的编程要点,控制字的格式控制字为从DATAINPUT端串行
输入TLC2543芯片内部的8位数据,它告诉TLC2543要转换的模拟量通道、转换
后的输出数据长度、输出数据的格式。
(3)TLC2543的内部寄存器,输入数据寄存器存放从DATAINPUT端移入
的控制字。输出数据寄存器存放转换好的数据,以供从DATAOUT端移出。转换
过程上电后,片选CS必须从高到低,才能开始一次工作周期,此时EOC为高,
输入数据寄存器被置0,输出数据寄存器内容是随机的。开始时,片选CS为高,I/O
CLOCK、DATAINPUT被禁止,DATAOUT呈高阻态,EOC为高。使CS变低,I/OCLOCK、
DATAINPUT使能,DATAOUT脱离高阻态。12个时钟信号从I/OCLOCK端依次加
入,控制字从DATAINPUT一位一位地在时钟信号的上升沿时被送入TLC2543(高
位先送入),同时上一周期转换的A/D数据,即输出数据寄存器中的数据从DATA
OUT一位一位地移出。TLC2543收到第4个时钟信号后,通道号也已收到,因此,
此时TLC2543开始对选定通道的模拟量进行采样,并保持到第12个时钟的下降
沿。在第12个时钟下降沿,EOC变低,开始对本次采样的模拟量进行A/D转换,
转换时间约需10μs,转换完成EOC变高,转换的数据在输出数据寄存器中,待
下一个工作周期输出。此后,可以进行新的工作周期。
(4)TLC2543与MCU的接口方法,TLC2543与微处理器芯片的接口部分有五
个引脚,分别是:时钟输入(I/OCLOCK)、串行控制字输入(DATAINPUT)、片选输
入(CS)、A/D转换串行数据输出(DATAOUTPUT)、转换结束电平输出(EOC)。经
5/19
分析TLC2543的工作时序,可以通过软件估计转换结束,免去EOC接线。TLC2543
与具有SPI或相同接口能力的MCU可以直接连接,对于没有SPI接口的MCU可以
通过软件编程合成SPI操作。扩展电路设计,SPI模块与TLC2543的接口扩展。
如下图[1]。
1.2.5单片机系统
单片机选用的是Freescale公司的MC908GP32,主要完成对A/D转换电路
的控制、对转换后的数字量的处理以及对显示模块的控制,并且为ADC0809提供
工作时钟。其具体连接电路。如图2所示。
1.2.5.1MC908GP32单片机性能概述
MC908GP32有40脚、42脚、44脚三种封装形式;MC908GP32的主要特点概
述如下:
(1)512B片内RAM;32K片内Flash程序存储器,具有在线编程能力和保
密功能
(2)时钟发生器模块,具有32KHz晶振PLL电路,可产生各种工作频率;
8MHz内部总线频率
图7基于SPI的A/D转换扩展电路
MC908GP32
PTC0
MISO
MOSI
SPSCK
PTC1
TLC2543(第0片)
AIN0
CS
∶
DATA
模拟量输入
∶
∶
∶
TLC2543(第1片)
AIN0
CS
∶
DATA
∶
∶
∶
TLC2543(第2片)
AIN0
CS
∶
DATA
∶
∶
∶
6/19
(3)系统保护特性:计算机工作正常(COP)复位;低电压检测复位,可选
为3V或5V操作;非法指令码检测复位;非法地址检测复位。
(4)优化用于控制应用;优化支持C语言。
(5)33根通用I/O脚,包括26根多功能I/O脚和5或7根专用I/O脚;
PTA、PTC和PTD的输入口有可选择的上拉电阻;PTC0—PTC4有15mA吸流和放流
能力,其他口有10mA吸流和放流能力(总体驱动电流应小于150mA);所有口有
最高5mA输入电流保护功能
(6)增强型串行通讯口SCI;串行外围接口SPI;两个16位双通道定时器
接口模块(TIM1和TIM2),每个通道可选择为输入捕捉、输出比较和PWM,其时
钟可分别选为内部时钟的1、2、4、8、6、32和64的分频值;带时钟预分频的
定时基模块有8种周期性实时中断(1、4、16、256、512、1024、2048和4096Hz),
可在STOP方式时使用外部32KHz晶振周期性唤醒CPU;8位键盘唤醒口。
1.2.5.2MC908GP32结构框图(44Pin)
图8MC908GP32结构图
7/19
1.2.5.3GP32内部有以下主要部分:
存储器定时接口模块定时基模块看门狗模块
断点模块串行通信接口SCI串行外设接口SPI并行I/O接口
A/D转换模块键盘中断模块系统设置模块低电压禁止模块CPU08
时钟发生模块及锁相环电路复位与中断模块监控模块MON
1.2.5.4GP32最小系统
硬件结构,但仅有一个MCU是无法工作的,它必须与以MC908GP32单片机为
原型的HC08系列MCU的其他相应的外围电路一起,才能构成一个最小系统。
MC908GP32芯片(以40脚封装为例)最小系统的外围支撑电路包括电源与滤波电
路、晶振电路和复位电路。
1.2.5.5MC908GP32最小系统电路图
图9MC908GP32最小系统电路图
1.2.5.6MC908GP32CB核心板实物图
8/19
图10MC908GP32CB核心板实物图
1.2.6温度显示系统
该温度显示系统较为简单,由可编程并行输入输出芯片8255A的A,B,C
端口外接3个8段LED显示器来实现。MC908GP32的P2.6为8255提供片选信号,
74LS373的Q7,Q6接8255的A1,A0,可得到8255的A,B,C及控制口的地址
为BF3FH,BF7FH,BFBFH,BFFFH。MC908GP32处理好的温度数据输出至8255,
并由MC908GP32对8255编程控制其A,B,C端口输出高电平或低电平,以便从
8段LED显示器显示实际温度。8段LED显示器选用共阳极,8255的A,B,C端
口与8段LED显示器之间接限流电阻,图2中只画出了PA口,PB,PC口的接法
类似[4]。
1.2.7异步串行通信的格式
SCI通常采用NRZ数据格式,即:standardnon-return-zeromark/space
dataformat,译为:“标准不归零传号/空号数据格式”。“不归零”的最初含
义是:用正、负电平表示二进制值,不使用零电平。“mark/space”即“传号/
空号”分别是表示两种状态的物理名称,逻辑名称记为“1/0”。
1.2.7.1RS-232C总线标准
MON08接口
Core1
Core2
GP32最小系统
Core3
Core4
电源开关
晶振开关
9/19
(1)MCU引脚一般输入/输出使用TTL电平,而TTL电平的“1”和“0”的
特征电压分别为2.4V和0.4V,适用于板内数据传输。为了使信号传输得更远,
美国电子工业协会EIA(ElectronicIndustryAssociation)制订了串行物理
接口标准RS-232C。RS-232C采用负逻辑,-3V~-15V为逻辑“1”,+3V~+15V
为逻辑“0”。RS-232C最大的传输距离是30m,通信速率一般低于20Kbps。
(2)RS-232接口,简称“串口”,它主要用于连接具有同样接口的室内
设备。目前几乎所有计算机上的串行口都是9芯接口。下图给出了9芯串行接口
的排列位置,相应引脚含义见下表[3]
图119芯串行接口排列图
表19芯串行接口引脚含义表
引脚号功能引脚号功能
1
2
3
4
5
接收线信号检测(载波检测DCD)
接收数据线(RXD)
发送数据线(TXD)
数据终端准备就绪(DTR)
信号地(SG)
6
7
8
9
数据通信设备准备就绪(DSR)
请求发送(RTS)
清除发送
振铃指示
1.2.7.2SCI的外围硬件电路
具有SCI接口的MCU,一般具有发送引脚(TxD)与接收引脚(RxD),不同公司
或不同系列的MCU,使用的引脚缩写名可能不一致,但含义相同。SCI的外围硬
件电路,主要目的是将MCU的发送引脚TxD与接收引脚RxD的TTL电平,通过
RS-232电平转换芯片转换为RS-232电平。下图给出一个基本SCI电平转换电路
4
1
2
3
5
6
7
8
9
10/19
图12基本SCI电平转换电路
1.3系统软件设计
系统的软件部分用C语言编程,采用模块化结构,主要由A/D转换模块、
单片机内部数据处理模块、温度显示模块等3部分构成,便于修改和维护。
1.3.1A/D转换模块
根据测量系统要求不同以及单片机的忙闲程度,通常可采用3种软件编程方
式:程序查询方式,延时方式和中断方式。本系统采用延时方式。延时程序实际
上是无条件传送I/O方式,当向A/D转换器发出启动命令后,即进行软件延时,
延时时间稍大于进行一次A/D转换所需要的时间,之后打开A/D转换器的输出
缓冲器读数即为转换好的数字量。A/D转换时间为64个时钟周期,因为系统中
ADC0809的工作时钟为500kHz,故A/D转换时间为128μs,延时时间可大致
选择160μs。程序段如下[1]:
//[ADC.h]A/D转换头文件
------------------------------------------------------
MAX232CPE
1109
1234567
51
232电平
OUTIN
+5V
+5V
TTL电平
OUTIN
TTL电平
转为232电平
1μ×4
11/19
#include"GP32C.h"//GP32MCU映像寄存器名定义
#include"Type.h"//类型别名定义
#defineCOCOBit7
voidADCinit(void);//A/D转换初始化
INT8UADCvalue(INT8Uchannel);//1路A/D转换函数
INT8UADCmid(INT8Uchannel);//1路A/D转换函数(中值滤波)
INT8UADCave(INT8Uchannel,INT8Un);//1路A/D转换函数(均值滤波)
//[ADC.c]A/D转换
-----------------------------------------------------------*
//硬件连接:
//PTB0/AD0接模拟量输入端
//-------------------------------------------------------------------
------*
#include"ADC.h"
//ADCinit:A/D转换初始化
----------------------------------------------------*
//功能:设置A/D转换时钟频率为1MHz
//-------------------------------------------------------------------
------*
voidADCinit(void)
{
ADCLK=0b00110000;
//||||||||_______不用
//||||___________选择内部总线时钟
//|||____________分频系数为2
}
//ADCave:1路A/D转换函数(均值滤
波)------------------------------------------*
//功能:通道channel进行n次中值滤波,求和再作均值,得出均值滤波结果
12/19
//-------------------------------------------------------------------
------*
INT8UADCave(INT8Uchannel,INT8Un)
{
INT8Ui;
INT16Uj;
j=0;
for(i=0;i j+=ADCmid(channel); j=j/n; return(INT8U)j; } //ADCmid:1路A/D转换函数(中值滤 波)------------------------------------------* //功能:获取通道channel中值滤波后的A/D转换结果 //------------------------------------------------------------------- ------* INT8UADCmid(INT8Uchannel) { INT8Ui,j,k,tmp; //1.取三次A/D转换结果 i=ADCvalue(channel); j=ADCvalue(channel); k=ADCvalue(channel); if(i>j) { tmp=i; i=j; j=tmp; 13/19 } if(k>i) { if(k>j) { tmp=j; } else { tmp=k; } } else { tmp=i; } returntmp; } //ADCvalue:1路A/D转换函数 --------------------------------------------------* //功能:获取通道channel的A/D转换结果 //------------------------------------------------------------------- ------* INT8UADCvalue(INT8Uchannel) { INT8Utmp; //1.选取通道号ADch4-ADch0=00000-00111:AD0引脚~AD7引脚 channel&=0b00011111;//取通道号变量的低五位(实际通道号) tmp=ADSCR&0b11100000;//取ADSCR的高三位(取上电复位默认值 14/19 000) ADSCR=tmp|channel;//合并上述8位 //2.取A/D转换结果 while((ADSCR&(1< returnADR; } //总头文件 #include"Includes.h" //主程序 voidmain(void) { DisableMCUint();//禁止总中断 //1.芯片初始化 MCUinit(); //2.模块初始化 SCIinit();//(1)串行口初始化 ADCinit();//(2)A/D转换初始化 while(1) { //在通道0做A/D转换,200次中值滤波,串口发送均值滤波结果 SCIsend1(ADCave(0,200)); } } 注:为了使采样数据更稳定可靠,系统还采用了采样平均值的方法以消除干扰。 1.3.2单片机内部数据处理模块 1.3.2.1内部数据处理 系统通过TLC2543转换的数字量是与实际温度成正比的数字量,但系统最后 显示的是实际温度值,因此需要对数据进行处理再通过8255输出到LED显示。 设所测温度值为T,A/D转换后的数字量为X,则有: 15/19 VOUT=0.01V/℃×T℃ VOUT为LM35的输出电压,即运放μA741的输入电压,μA741的输出电压用V1 表示。因为μA741的放大倍数为5,则有: V1=5×VOUT=0.05×T 根据系统设置,温度传感器输出电压0~5V对应于转换后的数字量0~255,则 有:0.05T/5=X/255 可以近似写为:0.05T/5=X/256 这样除以256可通过把被除数右移8位来实现。由此可以得出X和T的关系: T=100×X/256 1.3.2.2串口子程序 //[SCI.h]串行通信头文件-------------------------- #include"GP32C.h"//GP32MCU映像寄存器名定义 #include"Type.h"//类型别名定义 #defineReSendStatusRSCS1//SCI状态寄存器 #defineReTestBit5//接收缓冲区满标志位 #defineSendTestBit7//发送缓冲区空标志位 #defineReSendDataRSCDR//数据寄存器 voidSCIinit(void);//串行口初始化 voidSCIsend1(INT8Uo);//发送1字节 voidSCIsendN(INT8Un,INT8Uch[]);//发送n字节 INT8USCIre1(INT8U*p);//接收1字节 INT8USCIreN(INT8Un,INT8Uch[]);//接收n字节 _____________________________________________ 串行通信驱动文件包括SCI初始化、接收1字节、发送1字节、接收n字节和发 送n字节函数。读者可以直接使用这些函数进行MCU的串行通信编程。 //[SCI.c]串行通信 ----------------------------------------------------------* //硬件连接: //MCU的串口与PC方的串口相连 16/19 //------------------------------------------------------------------- ------* #include"SCI.h" //SCIinit:串行口初始化----------------------------------------* //功能:对串行口进行初始化,默认为允许SCI,正常码输出,8位数* 据,无校验,* //允许发送器,允许接收器.查询方式收发,波特率为9600(设fBUS* =2.4576MHz)* //------------------------------------------------------------* voidSCIinit(void) { //1.总线频率fBUS=2.4576MHz,定义波特率Bt=9600 SCBR=0b00000010; //2.设置允许SCI,正常码输出,8位数据,无校验 SCC1=0b01000000; //3.设置允许发送,允许接收,查询方式收发 SCC2=0b00001100; } //SCIsend1:串行发送1个字节-----------------------------* //功能:串行发送1个字节* //-----------------------------------------------------* voidSCIsend1(INT8Uo) { //判断ReStatusR的第SendTestBit位是否为1,是1可以发送 while(1) if((ReSendStatusR&(1< { ReSendDataR=o; break; 17/19 } } //SCIsendN:串行发送N个字节-----------------------------------* //功能:发送数组中的N个字节数据* //-----------------------------------------------------------* voidSCIsendN(INT8Un,INT8Uch[]) { inti; for(i=0;i SCIsend1(ch[i]); } //SCIre1:串行收一个字节数据 ------------------------------------------------* //功能:从串行口接收1个字节的数据 //------------------------------------------------------------------- ------* INT8USCIre1(INT8U*p) { INT16Uk; INT8Ui; //ReStatusR第ReTestBit位为1表示可接收数据 for(k=0;k<0xfbbb;k++) if((ReSendStatusR&(1< { i=ReSendDataR; *p=0x00; break; 18/19 } //接受失败 if(k>=0xfbbb) { i=0xff; *p=0x01; } returni; } //SCIreN:HC08串行接收N个字节 -----------------------------------------* //功能:接收N个字节数据,并存放在ch数组中 //------------------------------------------------------------------- * INT8USCIreN(INT8Un,INT8Uch[]) { intm; INT8Ufp; m=0; while(m { ch[m]=SCIre1(&fp); if(fp==1) { return1; } m++; } 19/19 return0; }[2] 1.3.3温度显示模块 单片机处理好的温度数据通过8255的3个端口输出到3个LED上显示,8255 的A,B,C口的工作方式均设置为方式0,输出。编程时只需分别从40H,41H, 42H单元取数据送A,B,C口输出即可。 1.4结语 该测温系统经过多次测试,工作稳定可靠,体积小、集成度高、灵敏度高、 响应时间短、抗干扰能力强等特点。此外该系统成本低廉,器件均为常规元件, 有很高的工程价值。如稍加改动,该系统可以很方便地扩展为集温度测量、控 制为一体的产品,具有一定工程应用价值。如对该系统进一步扩展,还可以实 现利用USB协议标准与PC机进行数据通信,能够把监测到的温度值保存到PC 机中。 虽然时间仓促,但此次设计能完成基本的测量温度的功能。在此次设计过程 中,学到了一些新的知识,在此基础上,对MC908GP32单片机又有了进一步的 了解与认识。但毕竟知识与时间有限,这次自己对设计还有未认清与未能完善的 地方,在老师的指导下现在基本上是完成了设计的要求。 参考文献: 【1】王宜怀,刘晓升.嵌入式技术基础与实践.北京:清华大学出版社,2007. 【2】谭浩强.C语言程序设计(第二版).北京:清华大学出版社,2006. 【3】赵晶.Protel99高级应用北京:人民邮电出版社2000 【4】林伸茂.8051单片机彻底研究基础篇.北京:人民邮电出版社2004 【5】范风强等.单片机语言C51应用实战集锦.北京:电子工业出版社2005 【6】万光毅,严义,邢春香.单片机实验与实践教程[M].北京:北京航空航天大 学出版社,2006.4