摘 要:本文介绍了基于C8051F的SMBus串行接口实现的智能测温系统,利用硬件SMBus资源和具有SMBus接口的双通道智能温度传感器MAX6654进行数据通信,并应用于智能测温系统中。文中介绍了该系统的工作原理,并给出了软硬件的设计思想和方法。该系统具有检测精度高且不易受环境干扰的优点。 关键词:测温系统;智能温度传感器;C8051F单片机;SMBus 1 引言 C8051F005是美国Cygnal公司推出的一种高性能混合信号系统级单片机,即SOC(System on chip)。C8051F系列器件使用CYGNAL的专利:CIP-51微控制器内核。C8051F系列单片机内部有一个全双工的UART、SPI总线以及I2C/SMBus[1]。每种串行总线都完全用硬件实现,都能向CIP-51产生中断,因此很少需要CPU的干预。这些串行总线不共享定时器中断或I/O端口,可以按需要使用一个或全部。本文介绍的是基于这种具有硬件实现I2C/ SMBus的单片机和具有SMBus接口的双通道智能温度传感器MAX6654进行数据通信而构成的智能测温系统。利用该系统可对PC机、笔记本电脑和服务器中CPU的温度进行监控等[2]。 2 C8051F005的SMBus配置和信号时序 C8051F系列单片机的SMBus串行接口完全符合系统管理总线标准1.1版。SMBus接口的工作电压可以在(3.0~5.0) V之间。总线上不同器件的工作电压可以不同。因为SCL串行时钟线和SDA串行数据线是双向的,因此两条线上都需要上拉电阻或类似电路将它们连到
电源电压,在没有数据传输时,两条线都处于高电平。典型的SMBus配置如图1所示。SMBus采用多种线路条件作为器件的握手信号。在一次数据传输过程中,SDA只能在SCL为低电平时改变。在SCL为高电平时,SDA发生改变则代表如下的开始和停止信号:⑴开始。该条件启动一次传输过程,当SCL为高电平时,SDA上出现一个下降沿。⑵结束。该条件结束一次传输过程,当SCL为高电平时,SDA上出现一个上升沿。⑶应答,也称为ACK。接受器件发送信号表示确认。例如:在器件X收到一个字节后,它发送一个ACK,确认传输成功。ACK条件是在SCL为高电平时,采样到SDA为低电平。 ⑷非应答,也称为NACK。这是在SCL为高电平时,采样到SDA为高电平。当接受器件不能产生ACK时,发送器件看到的是NACK。在典型的数据传输中,收到NACK信号,表示所寻址的从器件没有准备好,或不在总线上。处于发送状态的主器件发送NACK表示传输的最后一个字节。SMBus的握手信号时序如图2所示。 SMBus可以工作在主方式或从方式。总线为串行传输提供了时序和移位控制,字节控制是用户定义的。SMBus的工作由下列寄存器中的内容决定:SMBOSTA(状态寄存器)、SMBOCN(控制寄存器)、SMBOADR(地址寄存器)和SMBODAT(数据寄存器)。用户软件是基于状态来控制SMBus的。每当发生状态改变时,SI(SMBus串行终端标志)位被硬件置1,并在中断使能的情况下产生一个中断,接着停止SMBus,直到用户软件完成状态变化服务并清除SI位。SMBus操作用状态表来定义[3]。 3 MAX6654 该芯片是美国MAXIM公司生产的双通道智能温度传感器,它采用SMBus总线接口,能同时测量远程温度和本地温度(即该芯片本身的环境温度)。它具有多种工作模式可供选择,并具有可编程的欠温/超温报警输出功能[4]。 3.1 性能特点 MAX6654是一种大规模集成电路。它的主要性能特点有:⑴本地温度和远程温度的测量范围为-55~+125℃,在0~+100℃范围内的测温精度为±2℃,通过外部扩展温度寄存器可将分辨力提高到0.125℃。⑵选择“寄生阻抗抵消”模式,能抵消远程传感器引线阻抗所引起的测温误差,即使引线阻抗达到100,也不会影响测量精度。传感器引线可采用普通双绞线或者带屏蔽层的双绞线[5]。⑶具有多种工作模式可供选择,主要包括单次转换模式、连续转换模式、待机模式和低温极限扩展模式,这些模式的操作都非常简便。通过转换速率寄存器可以设定连续转换模式下的A/D转换速率,设定范围为0.0625~8次/s。⑷带有SMBus串行接口,可与I2C总线兼容,串行时钟频率范围为0~100kHz,在总线上最多可接9片MAX6654。⑸电源电压范围为+3.0~+5.5V,典型值可选为+3.3V或+5V。正常工作电流为550μA,待机模式下电流为3μA。 3.2工作原理 MAX6654采用的是16引脚的QSOP封装。其中Vcc、GND分别接电源的正、负极。DXP、DXN分别接远程温度传感器PN结的P、N端(对NPN晶体管而言,就是发射极和基极)。ADDl、ADDO为SMBus从机地址的三态输入端,设计时最多可在总线上挂接9片MAX6654。a
lert为报警(中断)输出端,为漏极开路输出。SMBDATA、SMBCLK分别为串行数据输入/输出端、串行时钟输入端。STBY为待机输入端,低电平时为待机模式。该芯片内部主要包括如下9个部分:传感器输入级、多路转换器、11位A/ D转换器、控制逻辑、地址译码器、SMBus串行接口、11个寄存器(包括远程温度数据寄存器、本地温度数据寄存器、TH寄存器1和2、TL寄存器1和2、命令寄存器、状态寄存器、配置寄存器、转换速率寄存器和报警响应地址寄存器)、两个数字比较器、输出级(含或门、D触发器和漏极开路的MOS场效应管)。除此之外,还有远程传感器的故障检测器 3.2.1 传感器输入级和A/D转换器 MAX6654的传感器输入级包括两个电流源和两只硅二极管。其中VDl为偏置二极管。电流源经外部测温晶体管的PN结流过VD1使VD1正向导通,从而给DXN端提供一个偏置电压UF1,并使其电位高于地电位。VD2为内置温度传感器。片内多路开关的作用是在A/D转换过程中自动切换两个通道。MAX6654在上电时的默认状态:首先清除中断锁存器中的内容,然后对地址选择端采样并进行片选;A/D转换器工作在连续模式时的转换速率为0.25次/s,同时将命令字节设成OOH,以便对远程接收字节进行快速访问;最后再给TH寄存器和TL寄存器分别置tH、tL值。 3.2.2 SMBus串行接口 从软件的角度看,MAX6654呈现给用户的是一套字节宽度寄存器的集合,其中包括温度值、报警阈值和控制位。用户可以通过SMBus接口来读取温度值、写控制位和写报警阈值。其温度与数据的对应关系见表1所列。MAX6654能满足标准SMBus协议中对写字节、读字节、发送字节和接收字节的规定。当转换速率≤1次/s时,温度值的前8位可从内部温度寄存器和外部温度寄存器中读取,而额外的3位则可从外部扩展温度寄存器和内部扩展温度寄存器中读取。使用扩展温度寄存器可将分辨力提高到0.125℃。 3.2.3 报警阈值寄存器和命令字寄存器 报警阈值寄存器包括TH寄存器和TL寄存器两种,可分别用来存储远程温度和本地温度的上、下限。当被测温度超出报警阈值时,a
lert将产生中断。而a
lert响应中断可为从机提供快速故障确认功能。主机每接收到一个a
lert中断信号,就给a
lert响应从地址(0001 100)发出一个接收字节命令,再由产生中断的从机将自己的地址发送到总线上以供主机识别。利用a
lert响应可同时激活几个从机。命令字寄存器是主机指向从机中其他各寄存器的指针。根据命令,主机可完成读本地温度、读外部温度、读转换速率、读内部温度上下限、读远程温度上下限、读外部扩展温度、读产品序列号等功能。 4 系统软硬件设计 4.1 硬件设计 用单片机C8051F005来实现对MAX6654的信号采集和输出控制,硬件设计简单可靠,系统温度结点可扩展性强。硬件设计原理如图3所示。远程传感器VT选用2N3904型低噪声晶体管,并将它粘贴在被测量的CPU芯片上。C1为远程传感器的消噪电容。由R1和C2可构成高频干扰滤波器。R2~R4均为上拉电阻。C8051F005单片机通过SMBus与MAX6654相连,可为后者提供串行时钟并完成读/写操作。一旦CPU的温度越限,MAX6654的a
lert端就输出低电平报警信号以使C8051F005产生中断。C8051F005还可通过控制散热风扇使CPU处于正常温度范围。内置温度传感器用来检测MAX6654附近的环境温度(图中未标出)。在本智能测温系统中,C8051F005的 P0.0为SDA,P0.1为SCL,它们是硬件通过交叉开关译码器分配的,不能是其它引脚。 此外,还应注意电路中远程传感器的选择以及噪声干扰的滤除等问题。远程传感器可选用SST3904、CMPT3904、2N3904 等型号的低噪声小功率硅晶体管,也可选用国外生产的带铝盘
散热器和双绞线的500-32BT02-000型晶体管来做远程传感器。虽然MAX6654中的A/D转换器对串模噪声干扰的抑制能力较强,但是,在一般情况下,工业环境中的高频噪声干扰仍会使测量值偏高1~100℃,所以,对串模噪声必须加以抑制。在DXP与DXN之间连接一只2200pF的电容能有效地滤除高频电磁干扰。远程传感器的引线应采用屏蔽双绞线
电缆,并将DXP和DXN分别接至双绞线的一端,而将屏蔽层接GND(远端屏蔽层可不接地)。使用较长的电缆线时,其分布电容本身就具有滤除噪声的作用,此时可适当减小C1的容量。 4.2 软件设计 系统程序流程如图4所示。在本系统中,C8051F005的SMBus始终作为主器件出现,SMBus首先发出一个起始条件,接着发出MAX6654器件地址+W(写)。写操作用于设置MAX6654的当前地址。在收到从器件的ACK后,主器件发出待读存储器地址。在收到一个ACK后,主器件发出重复起始条件和从器件地址+R(读)。从器件在发出ACK后,将发送温度寄存器内的数据字节。读完之后,主器件发出一个NACK,并随后发出停止条件。程序中用重复起始条件使写存储器地址和读数据字节之间不能进行其它传输。温度读取时所涉及的所有的状态都由中断处理程序通过状态表来完成。 5 结论 目前,SMBus串行总线用的主要还是虚拟SMBus,特别是在软件编程方面。本文的智能测温系统采用硬件SMBus实现温度读取,比用虚拟SMBus实现的温度读取要稳定和可靠得多,受通信速度的影响也小得多。此外,用MAX6654构成的温度采集系统,温度检测准确可靠且不易受环境干扰,为整个系统的正常运行提供了可靠性保障。 参考文献: [1] 王邵华.I2C总线[J].无线电. 2003.(1):8~8 [2] 唐友怀.Cygnal在片系统单片机的特点与应用[J].电子世界. 2003.(6):34~35 [3] 李刚,林凌.与8051兼容的高性能、高速单片机--C8051Fxxx[M].北京:北京航空航天大学出版社.2002 [4] 江海洋.精密数字温度传感控制器MAX6654[J].无线电. 2002.(5):47~47 [5] 马净,李晓光,宁伟. 几种常用温度传感器的原理及发展[J].中国仪器仪表.