引言
在测量与仪器仪表中,温度的检测几乎成为必不可少的一部分。传统的模拟温度传感器如AD590因外围电路复杂、需调零等缺点而受到使用限制,用数字温度传感器设计各种控制系统必将成为发展趋势。武汉力源的AD7416是在一个单片中有完整的数字温度传感器和热监测系统的芯片。它与其它数字温度传感器相比具有体积小、编程简单等优点。笔者在多路循环温湿度检测控制仪中选用了此芯片。发现其使用简单、测量精度高,并且不易受环境干扰。
AD7416具有如下特点:
- 10位温度至数字转换器
- 漏极开路超温掉电输出,可以实现“线与”
- I2C兼容的串行接口
- 可选的串行总线地址,允许在单一总线上连接多达8个AD7416
- 低功耗掉电方式(典型2mA)
- 400ms更新速率
- -55℃至+125℃温度测量范围
AD7416表示温度的数据是10位二进制数码,以2的补码格式储存。上面给出了几个温度数据的格式。
AD7416有5个内部寄存器。其中四个是数字寄存器,一个是地址指针寄存器。地址指针寄存器是一个8位寄存器,它储存指向四个数据寄存器之一的地址。对AD7416每一次串行写操作的第一个数据字节是数据寄存器的地址,这就是随后的数据字节要写入的地址。这个寄存器只须最低两位被用来选择一个数据寄存器。
温度值寄存器是一个16位只读寄存器,它的高10位以2的补码格式储存由AD转换器送来的10位温度读数;配置寄存器是一个8位读/写寄存器,它用来设置AD7416的工作方式;THYST设点寄存器是一个16位读/写寄存器,它的9个最高位储存以2的补码格式表示的低温度门限设点;TOTI设点寄存器是一个16位读/写寄存器,它的9个最高位储存以2 的补码格式表示的高温度门限设点。AD7416上电时地址指针指向温度值寄存器,TOTI=80℃,THYST=75℃,这些缺省使得AD7416可以用于标准的恒温器而不需要与任何串行总线连接。
AD7416与AT89C2051的接口
如所有的I2C兼容器件一样,AD7416有一个7位串行地址。这个地址的高4位设定为1001,而低3位可由用户通过将A2至A0引脚连接到无论是+VS或GND来设置。通过它们不同的设定地址,可将多达8个AD7416接到一条串行总线,超过8个则将与总线上的其它器件发生冲突。
从AD7416读数据是一或二字节的操作。读温度寄存器的内容是一个双字节的操作。下面是针对硬件结构所编写的读温度子程序TEMP。
ORG 0000H
AJMP MAIN
ORG 0010H
T_SDA BIT P1.6
T_SCL BIT P1.4
MAIN: ......
;=============
TEMP:SETB T_SCL
SETB T_SDA
CLR T_SDA ;发送起始位
MOV A,
9FH ;发送串行总路线地址字节
MOV R4,
8
THE: CLR T_SCL
RLC A
MOV T_SDA,C
SETB T_SCL
DJNZ R4,THE
CLR T_SCL ;AD7416响应位
SETB T_SCL
SETB T_SDA
MOV R4,
8 ;读温度数值的第一个字节,并把结果放到3FH寄存器中。
XX0: CLR T_SCL
SETB T_SCL
MOV C,T_SDA
RLC A
DJNZ R4,XX0
MOV 3FH,A
MOV A,
0
CLR T_SCL ;主机响应位
CLR T_SDA
SETB T_SCL
CLR T_SCL
SETB T_SDA
MOV R4,
8 ;读温度数值的第二个字节,并把结果放到3EH寄存器中。
XX1: CLR T_SCL
SETB T_SCL
MOV C,T_SDA
RLC A
DJNZ R4,XX1
MOV 3EH,A
CLR T_SCL ;主机响应位
SETB T_SDA
SETB T_SCL
CLR T_SCL ;发送停止位
CLR T_SDA
SETB T_SCL
SETB T_SDA
RET
......
读出温度数字值之后就可对温度进行适当的处理。
应用中需注意的问题
电源耦合
AD7416必须用一个0.1mF陶瓷电容接在+VS和地之间去耦。如果AD7416要装在离电源较远处时,此尤其重要。
远距离通讯
若AD7416要放在离主板较远的地方,比如20米左右,则需要在*近AD7416的两条通讯线处分别加一个500Ω或1KΩ的上拉电阻。若还要远,最好的办法是在主板通讯线出口接一驱动电路,在AD7416处接一整形电路,以保证时钟及数据传输的准确性。
时钟频率
AD7416一般情况下工作时钟周期为2.5ms,而单片机的时钟同期很短。在接12MHz的晶振时,单片机的时钟周期为1ms。因此在读出的温度值不正确的情况下,应考虑适当降低时钟频率。最简单的方法是在程序中时钟线的高低变化之间加入几个NOP语句,也可以用定时器来实现频率的降低。