TC77是Microchip公司生产的一款13位串行接口输出的集成数字温度传感器,其温度数据由热传感单元转换得来。TC77内部含有一个13位ADC,温度分辨率为0.062 5℃/LSB。在正常工作条件下,静态电流为250μA(典型值)。其他设备与TC77的通信由SPI串行总线或Microwire兼容接口实现,该总线可用于连接多个TC77,实现多区域温度监控,配置寄存器CONFIG中的SHDN位激活低功耗关断模式,此时电流消耗仅为0.1μA(典型值)。TC77具有体积小巧、低装配成本和易于操作的特点,是系统热管理的理想选择。
2 TC77的内部结构及引脚功能
图1所示为TC77的内部结构原理图。TC77由CMOS结型温度传感器、带符号位的13位∑-△A/D转换器、温度寄存器、配置寄存器、制造商ID寄存器及三线制串行接口等部分组成。
其引脚定义如下:
SI/O:串行数据引脚
SCK:串行时钟
Vss:地
CE:片选端(低电平有效)
VDD:电源电压(6.0 V)
数字温度传感器TC77从固态(PN结)传感器获得温度并将其转换成数字数据。再将转换后的温度数字数据存储在其内部寄存器中,并能在任何时候通过SPI串行总线接口或Microwire兼容接口读取。TC77有两种工作模式,即连续温度转换模式和关断模式。连续温度转换模式用于温度的连续测量和转换,关断模式用于降低电源电流的功耗敏感型应用。
3.1 TC77的上电与复位
上电或电压复位时,TC77即处于连续温度转换模式,上电或电压复位时的第一次有效温度转换会持续大约300 ms,在第一次温度转换结束后,温度寄存器的第2位被置为逻辑“1”,而在第一次温度转换期间,温度寄存器的第2位是被置为逻辑“0”的,因此,可以通过监测温度寄存器第2位的状态判断第一次温度转换是否结束。
3.2 TC77的低功耗关断模式
在得到TC77允许后,主机可将其置为低功耗关断模式,此时,A/D转换器被中止,温度数据寄存器被冻结,但SPI串行总线端口仍然正常运行。通过设置配置寄存器CONFIG中的SHDN位,可将TC77置于低功耗关断模式:即设置SHDN=0时为正常模式;SHDN=1时为低功耗关断模式。
3.3 TC77的温度数据格式
TC77采用13位二进制补码表示温度,表1所列是TC77的温度、二进制码补码及十六进制码之间的关系。表中最低有效位(LSB)为0.062 5 ℃,最后两个LSB位(即位1和位0)为三态,表中为“1”。在上电或电压复位事件后发生第一次温度转换结束时,位2被置为逻辑“1”。
TC77的串行总线包括片选信号线CE、串行时钟信号线SCK及串行数据信号线SI/O,遵循SPI或Mi-crowire接口标准协议。在有多个TC77连接到串行时钟和串行数据信号线时,CE用于选择其中的某一个TC77器件,CS为逻辑“0”时,用于写入器件或从器件中读出数据的同步;CS为逻辑“1”时,SCK被禁止。CS的下降沿启动器件间的相互通信,CS的上升沿则停止器件间的相互通信。图2是对温度寄存器进行读操作的时序。
图3是TC77的多字节通信操作时序,包括对温度寄存器的读操作和对配置寄存器的写操作。第一组的16个SCK脉冲用于将TC77的温度数据传送到微处理器,第二组的16个SCK脉冲用于接收微处理器的指令,以便使TC77进入关断模式或连续转换模式。写入TC77配置寄存器的数据应为全0或全1,分别与连续转换模式或关断模式相对应,当配置寄存器的C0~C7全为1时为关断模式,当C0~C7中有一个0被写入时即变为连续转换模式。
4.1 TC77与AVR单片机的硬件接口
图4是TC77与AVR单片机的接口硬件连接原理图。图中使用的是同步串行三线SPI接口,可以方便地连接采用SPI通信协议的外设或另一片AVR单片机,实现短距离的高速同步通信。
4.2 TC77与AVR单片机的软件接口
TC77与AVR单片机的接口软件包括主程序和中断服务程序。在主程序中首先要对ATmega128的硬件SPI进行初始化。在初始化时,应将PORTB的MOSI、SCLK和SS引脚作为输出,同时将MISO引脚作为输入,并开启上拉电阻。接着对SPI的寄存器进行初始化设置,并空读一次SPSR(SPX Status Reg-ister,SPI状态寄存器)、SPDR(SPI Data Register SPI,数据寄存器),使ISP空闲等待发送数据。AVR的SPI由一个16位的循环移位寄存器构成,当数据从主机方移出时,从机的数据同时也被移入,因此SPI的发送和接收可在同一中断服务程序中完成。在SPI中断服务程序中,先从SPDR中读一个接收的字节存人接收数据缓冲器中,再从发送数据缓冲器取出一个字节写入SPDR中,由ISP发送到从机。数据一旦写入SPDR,ISP硬件开始发送数据。下一次ISP中断时表示发送完成,并同时收到一个数据。程序中putSPIchar()和getSPIchar()为应用程序的底层接口函数,同时也使用了两个数据缓冲器,分别构成循环队列。下面这段代码是通过SPI主机方式连续批量输出、输人数据的接口程序: