引言
ADT75是ADI公司生产的集温度传感器、12位A/D转换器、可编程的温度过限报警器和SMBus/I2C总线接口于一体的新型数字温度传感器。其额定工作温度范围为-55~+125 ℃,能准确、灵敏地检测数字化温度,温度误差最大为±1 ℃,测温分辨率可达0.062 5 ℃;工作电压范围为3~5.5 V,3.3 V时典型的功耗为79 μW,在关断模式下其典型工作电流值仅为3 μA。
1 ADT75的引脚及结构原理
ADT75的引脚排列如图1所示,引脚说明如表1所列。
图1 ADT75的引脚排列
表1 ADT75的引脚说明
ADT75采用8引脚的MOSP和SOIC封装,其内部结构如图2所示。
图2 ADT75的内部结构框图
ADT75的工作过程为:片上的温度传感器采集温度后,产生一个与绝对温度成比例的精确电压,并与内部参考电压进行比较;然后输入到精确的数字式调节器中,转换为有效精度为12位的数据。将该数据与限定值比较,如果测量值超限,则OS/ALERT引脚输出超限信息。
在正常模式下,温度转换需要60 ms,然后模拟转换电路自动关闭,40 ms后模拟电路上电,开始下一个温度值的转换。所以一次温度转换周期为100 ms。
2 ADT75的寄存器结构
ADT75包含6个寄存器:1个地址指针寄存器,4个数据寄存器和1个单步模式寄存器。数据寄存器中,配置寄存器是唯一的8位寄存器,其他3个都是16位;温度值寄存器是唯一的只读寄存器,其他3个都是可读写的。单步模式寄存器也是可读写的。上电后,地址指针寄存器的初始值为0x00,指针指向温度值寄存器。ADT75的寄存器描述如表2所列。
表2 ADT75的寄存器
(1) 地址指针寄存器
该8位只读寄存器存放指向某个数据寄存器的地址,可以选择单步模式。P0位和P1位选择要读/写数据的数据寄存器,向P0、P1和P2位中写入0x04来选择单步模式。地址指针寄存器的其余位都为0。寄存器的地址选择如表3所列。
表3 寄存器的地址选择
(2) 温度值寄存器
该16位只读寄存器存储由芯片内部温度传感器测得的温度值。温度以二进制补码形式存储,最高位为符号位。读该寄存器时,先读高8位,后读低8位。
(3) 配置寄存器
该8位可读写寄存器为ADT75提供了多种配置模式:关断、过温中断、单步、SMBus报警使能、OS/ALERT引脚极性和过温错误队列。
(4) THYST定值寄存器
该16位可读写寄存器为2个中断模式存放温度滞后限定值。这个限定值以二进制补码形式存储,最高位是温度值符号位。读该寄存器时,先读高8位,后读低8位。限定值THYST的默认值为+75 ℃。
(5) Tos定值寄存器
该16位可读写寄存器为2个中断模式存放过温限定值。这个温度限定值以二进制补码形式存储,最高位是温度值符号位。读该寄存器时,先读高8位,后读低8位。限定值Tos的默认值为+80 ℃。
3 ADT75的应用实例
3.1 硬件设计
在外界温度场作用下,光纤延迟线系统中光纤长度、横截面结构、光纤纤芯和包层的折射率分布特性会发生变化,因此在光纤中传播的光载波信号的相位和模式双折射特性就会随温度的改变而变化,从而影响最终解调出的微波信号的延时。为减小温度变化对微波信号延时的影响,需要设计一个温度控制系统,用来控制系统的温度。
硬件设计电路主要包括2部分:数字信号处理器TMS320F2812和数字温度传感器ADT75。
采用TI公司推出的TMS320F2812作为核心控制芯片。其外部晶振频率为30 MHz,通过片内的PLL进行倍频,最高主频可达150 MHz;运行速度快,可以对采集的温度信号进行实时处理。
TMS320F2812没有设计I2C总线,但是有56个GPIO口,所以采用GPIO口模拟I2C总线时序来控制ADT75。这种硬件电路结构简单,功耗较低,实用性强。ADT75与TMS320F2812的接口电路如图3所示。
图3 ADT75与TMS320F2812的接口电路
TMS320F2812的GPIOB0引脚用作I2C总线的时钟信号线,GPIOB1引脚用作I2C总线的串行数据线。供电电压为5 V,10 kΩ电阻为开漏极的上拉电阻,0.1 μF电容起去耦作用。本设计仅实时采集光纤延迟线系统的温度,不需要过温报警,所以OS/ALERT引脚保留。
ADT75的地址为7位,高4位为1001,低3位由地址引脚A0~A2决定。由于只有一片ADT75,故可将其3个地址引脚全部接地,则芯片地址可确定为1001000。
温控系统根据测得的温度在TMS320F2812内部进行PID运算,然后通过外部的温度控制装置对光纤延迟线内部温度进行调节,使其稳定在某个设定的范围内。
3.2 软件设计
利用死循环等待函数while(1)中的ReadDevice()函数从ADT75中读取温度值。每隔250 ms读取一次温度值,从而实现对系统温度的实时监控。
ReadDevice()函数包括以下函数:Start(),Stop(),SendAddress(),ReadAck(),ReceiveData(),Mack(),MNack()。读取温度的流程如图4所示,
读取温度的时序如图5所示。
图4 读取温度流程
图5 读取温度时序
(1) 启动数据传输
在头文件中对TMS320F2812的GPIOB口进行配置。定义GPIOB0为SCL,输出;GPIOB1为SDA,输出。Start()函数模拟I2C总线的起始条件:
SDA=1;
Delay(50);
SCL=1;
Delay(50);
SDA=0;
Delay(50);
SCL=0;
Delay(50);
至此,完成了I2C总线的启动。
(2) 传送ADT75地址
在读取温度值之前必须向从器件发送地址。ADT75的7位地址为0x48。由于是读数据(读/写位为1),所以传送的8位地址命令为0x91。在传送数据时,当SCL为0时,才允许SDA上的数据变化;为1时,SDA上的数据保持不变。8位地址传送结束后,主机释放SDA(令SDA=1),等待从机的应答信号。
(3) 检测ADT75的应答位
I2C总线传输完8位数据后由从机给主机一个低电平的应答信号,表示从机正常工作并可以接收下一个字节的数据。检测ADT75的应答位时,应注意把GPIOB1口设置为输入。
EALLOW;
GpioMuxRegs.GPBDIR.bit.GPIOB1=0;
EDIS;
如果SDA=0,则TMS320F2812开始从ADT75中读取数据的高字节;SDA=1,表示ADT75忙或者损坏,结束数据读取。
(4) 读取数据
当检测到ADT75的应答信号为0时,开始读取温度值。I2C总线的数据传输是以字节为单位的,首先读取温度值的高字节(温度值的整数部分,最高位为符号位),读取的数据存放在retc中。每接收1位数据,retc左移1位。若SDA=1,retc加1;SDA=0,retc不变。
retc=0;
……
retc=retc<<1;
if(SDA=1)retc=retc+1;
Delay(50);
高8位数据传输完后,TMS320F2812传给ADT75一个低电平的应答信号,由Mack()函数完成。此时,需要将GPIOB1端口的数据传输方向改为输出:
EALLOW;
GpioMuxRegs.GPBDIR.bit.GPIOB1=1;
EDIS;
然后开始接收温度值的低字节(温度值的小数部分),读取成功后由TMS320F2812发送一个非应答位,表示本次温度值的读取结束,进入停止状态。
(5) 结束数据传输
结束数据传输由Stop()函数完成,结束条件如下:
SDA=0;
Delay(50);
SCL=1;
Delay(50);
SDA=1;
Delay(50);
至此,读取一个温度值的全过程结束。
在程序调试过程中发现,当设置断点单步运行时,无法检测到ADT75发出的低电平应答信号,应答信号始终为1;若不设断点连续执行时,则可以检测到低电平应答信号。这点是ADT75和其他I2C总线器件(如E2PROM芯片AT24C256)的不同之处,在调试程序的过程中要注意该细节。
ADT75的温度转换周期为100 ms。在本设计中,每隔大约250 ms读取一次温度值,可以实现监测光纤延迟线系统温度的变化。
结语
在光纤延迟线系统的硬件设计中,ADT75完全能够满足实时温度采集的要求,而且测温准确, 灵敏度高。由于使用了I2C总线接口,所以温度检测电路结构简单,占用空间小,串行接口占用TMS320F2812的资源少,可靠性高,功耗低,不易受环境干扰。实验证明,设计和运行都达到了令人满意的效果。