用I2C总线实现AD7416的多点温控系统
扫描二维码
随时随地手机看文章
1 AD7416器件结构 AD7416采用节省空间的SO-8和小型SOIC封装。
AD7416引脚说明 引脚号 名 称 说 明 1 SDA 数字I/O。双向数据串行总线,漏极开路输出 2 SCL 数字输入。串行总线时钟 3 OTI 数字输出。超温掉电输出(漏极开路) 4 GND 电源地 5~7 A2~A0 数字输入。串行总线地址可编程低3位 8 +VS 正电源电压,+2.7~+5.5V 2 系统软硬件设计
2.1 硬件设计 用单片机AT89C2051来实现对AD7416的信号采集和输出控制,硬件设计简单可靠,系统温度节点可扩展性强。为确保系统不受电源波动的干扰,采用电源电压监视器TL7705A作系统复位控制器。如果AD7416要装在离电源较远处,AD7416必须用一个0.1μF的陶瓷电容接在+VS和地之间去耦。
如所有的I2C兼容器件一样,AD7416有一个7位串行地址。这个地址的高4位设定为1001,而低3位可由用户通过将A2~A0脚连接到无论是+VS或GND来设置。通过它们不同的设定地址,可将多达8个AD7416接到一条串行总线,超过8个,则将与总线上的其它器件发生冲突。 如果需要采集更多的温度节点,可采用多条串行总线的形式来扩展。 此例中,AT89C2051的P1,1脚用作I2C串行总线的时钟信号线,P1.0脚用作双向串行数据总线。通过从硬件上将AD7416的地址引脚A0、A1、A2接至不同电平,从而实现对每片AD7416的编址。
2.2 寄存器结构
对AD7416编程要注意其内部寄存器的结构,每片AD7416有5个内部寄存器,其中4个是数字寄存器而1个是地址指针寄存器。地址指针寄存器是一个8位寄存器,储存指向4个数据寄存器之一的地址。AD7416每一次串行写操作的第一个数据字节是数据寄存器的地址,这就是随后的数据字节要写入的地址。这个寄存器只须最低两位被用来选择一个数据寄存器,。
地址指针寄存器 P7* P6* P5* P4* P3* P2* P1* 0 0 0 0 0 0 0 地址指针寄存器最低两位所选的数据寄存器。
寄存器地址 P1 P0 寄存器 0 0 温度值(只读,上电缺省) 0 1 配置(读/写) 1 0 THYST(读/写) 1 1 TOTI(读/写) 温度值寄存器是一个16位只读寄存器,它的高10位以2的补码格式储存由A/D转换器送来10位温度读数,低6位未用。温度数据格式。
温度数据格式 温度/℃ 数字输出 温度/℃ 数字输出 -75 10 1101 0100 +0.25 00 0000 0001 -50 11 0011 1000 +10 0 0001 01000 -25 11 1001 1100 +25 0 0011 00100 -0.25 11 1111 1111 +50 0 0110 01000 0 00 0000 0000 +75 0 1001 01100 配置寄存器是一个8位读/写寄存器,用来设置AD7416的工作方式。 TRYST设点寄存器是一个16位读/写寄存器,它的9个最高位储存以2的补码格式表示的低温度门限设点。 TOT1设点寄存器是一个16位读/写寄存器,它的9个最高位存储以2的补码格式表示的高温度门限设点。 AD7416上电时地址指针指向温度值寄存器,TOT1设点寄存器的值为80℃,THYST设点寄存器的值为75℃,这些缺省使得AD7416可以用于标准的恒温器而不需要与任何行总线连接。
2.3 工作方式选择 AD7416有两种工作方式,方式的选择由系统工作情况来决定。 在工作方式1情况下,配置寄存器高3位D7~D5必须保持位0,最低位D0=0为正常工作方式。每400μs进行一次转换,旦转换结束,器件将部分地降低功耗(典型情况为350μA),直至下一次转换开始。 工作方式2由配置寄存器的最低位D0=1来启动,适合于比较慢的速率测温系统中。通过写AD7416使之进入一个在两次读操作之间处于全掉电状态,这样,器件的功耗可以更低。在全掉电时,电流消耗典型值为0.2μA。
2.4 软件设计 软件设计采用虚拟I2C总线软件包VIIC[1],该软件包具有最佳包容性设计、归一化设计以及应用界面设计等特色。在此软件包为平台来进行软件设计可以不必了解I2C总线原理、协议和时序,只要了解该软件包的应用操作即可,使程序更具模块化、调试简单等优点。 软件包规定了读/写N字节数据子程序为惟一出口界面,因此,由调用该读/写子程序及满足调用操作的初始化操作的三条命令即构成软件包的应用界面,即 MOV SLA,#SLAW/SLAR ;寻址字节存放单元存放总线 ;上节点寻址并确定数据传送方向 MOV NUMBYT,#N ;传送字节数存储单元存放 ;需要传送的N字节 LCALL WRNBYT/RDNBYT:调用读/写N字节数据子程序 三条初始化命令决定了CPU对总线上节点的寻址和数据传送方向以及需要传送的字节数N。在具体应用该软件包时,只需要对软件包的应用界面进行操作即可,从而避免了设计者必须从I2C总线原理上对扩展的I2C总线外围器件进行繁琐的应用程序设计。 系统程序流程如图4所示。 读两字节的温度值寄存器时序。
3 远程离温度数据采集的实现方法
本实例中要求测量近20m的温度节点,为了简化系统硬件设计,没有使用缓冲器进行驱动;而通过加适当的上拉电阻,以获得一定的上拉电流使信号采集可靠。在实际应用系统中,上拉电阻值由I2C总线系统中信号所需的上升时间决定。近似地认为整修系统的时间常数为1μs。对于每个分别的总线,其上拉电阻计算式为 Rp=1μs/(Cd+Cw) 式中:Cd为连到每个总线上的器件电容的和;Cw为每个线上的全部导线电容和杂散电容。 系统中电容估算:I2C器件电容约为80 pF;杂散电容约为80 pF;导线电容约为1500 pF。因此,总线系统的上拉电阻为 Rp=1μs/(80pF+80pF+1500pF)=602Ω 为使数据采集可靠,选用了Rp=510Ω的电阻。由于上拉电阻受到最大拉电流限制,所以应检查上拉电流不超过30mA。本例上拉电流(5-0.4)V/Rp=9.02mA<30mA,检查通过。 调试中发现,降低上拉电阻阻值后大大改善了通信情况,但有时仍然会有误码现象出现,于是在软件上降低了通信的频率。将频率由400 kb/s降低到200 kb/s,通过放慢通信速度来提高通信可靠性。实际证明,处理之后的温度值读取稳定可靠。
结束语 笔者用AD7416所设计的多路温湿度循环检测控制仪,温度检测准确可靠,不易受环境干扰,为整个系统的正常运行提供了可靠性保障。