单总线技术具有节省I/O口线资源、结构简单、成本低廉、便于总线扩展和维护等优点,因此,在分布式测控系统中有着广泛应用。
1 DS2480B主要特性
◇ 串口UART/RS232至单总线通信协议的转接桥,可直接连到UART和5V RS232系统中, 支持Dallas全系列单总线器件,如数字温度传感器DS18B20、A/D转换器DS2450等;
◇ 将主机从单总线时序控制中解脱出来,提供规范的、灵活的和强驱动的单总线定时;
◇ 支持标准UART通信,支持9.6(默认)、 19.2、57.6和115.2 kbps速率;
◇ 具有较强的总线驱动能力,通信距离可达300 m;
◇ 可编程下拉摆率控制和有源上拉,工作范围 5 V,-40 ~ +85 ℃,8引脚SOIC封装。
2 引脚说明及原理框图
DS2480B为8脚贴片式封装,如图1所示。引脚功能如表1所列。
表1 引脚功能说明
引脚号 | 引脚名称 | 引脚功能 |
1 | GND | 地线 |
2 | 1-W | 单总线输入输出端 |
3 | NC | 悬空 |
4 | VDD | 4.5~5.5V电压 |
5 | VPP | EPROM编程电压 |
6 | POL | RXD/TXD选择端 |
7 | TXD | 发送端 |
8 | RXD | 接收端 |
DS2480B工作原理框图如图2所示。
3 DS2480B与RS232的接口技术
电路应用了串口"窃电"技术,不用外加电源,同时有DS9502对单总线提供静电保护,如图3所示。
4 基于DS2480B的单总线农业温室分布式测控系统设计
4.1 核心器件介绍
温度信号的检测选用单总线数字温度计DSl8B20。它利用温敏振荡器的频率随温度变化的关系,通过对振荡周期的计数来实现温度测量。DSl8B20采用3引脚TO-92小体积封装形式;温度测量范围为 -55~+125 ℃,可编程为9~12位 A/D转换精度,测温分辨率可达 0.0625 ℃,典型转换速度200 ms/次;被测温度用符号扩展的16位二进制补码数字量方式串行输出;内部非挥发的温度报警触发器可由用户设置高、低限报警值。
湿度信号、二氧化碳浓度等信号的检测,先由相应的传感器和信号调理电路将其转换成电压信号,然后挂接到DS2450上。DS2450是单总线4通道逐次逼近式A/D转换器,其输入电压范围、转换精度位数(2~6位)、报警门限电压等均可编程;每个通道有各自的存储器以存储电压范围设置、转换结果、门限电压等参数;普通方式下串行通信速率达16.3 kbps;片内16位循环冗余校验码生成器可用于检测通信的正确性;芯片正常工作时仅消耗2.5 mW功率,空闲情况下消耗25μW。
温室控制系统的执行机构采用开关量控制,选用可寻址的单总线控制开关DS2405,由它送出1位0或1作为控制码信息,先触发光电耦合器,经功率放大,驱动继电器、晶闸管或固态继电器,控制通风机、增湿器执行机构等的开启与关闭。
对于控制系统中所需要的数字输入信号,可选用DS2401。DS2401是符合单总线协议的ROM硅片。当外围电路接通DS2401后,通过条件搜索ROM命令,可以由计算机查询到该输入开关量的状态。
4.2 系统硬件组成框图
系统硬件组成框图如图4所示。
4.3 软件设计
为了保证数据可靠地传输,任一时刻单总线上只能有一个控制信号或数据。进行数据通信时应符合单总线协议,计算机对某一测控对象操作时,一般有以下4个过程:① 初始化;② 传送ROM命令;③ 传送RAM命令;④ 数据交换。每次传送的数据或命令是由一系列的时序信号组成,单总线上共有4种时序信号:① 初始化信号(复位信号);② 写0信号;③ 写1信号;④ 读信号。软件设计时要产生这四种时序信号波形。在单总线系统中,软件设计是技术的关键。简捷的硬件设计是靠复杂的软件来支撑的。
为了提高开发效率,我们采用了Dallas公司授权的软件开发商(ASDB)提供的免费TMEX软件开发工具套件。在TMEX中已包含上述4种时序信号波形程序,编程时可直接调用。TMEX实际上是一些动态链接库,包括IBFS32.DLL 、IB97U32.DLL 等文件,提供了对单总线芯片进行访问和控制的函数。它支持Windows及DOS操作平台,可以采用C、C++、Delphi、VB等计算机语言开发用户应用程序;它还支持基于DS2480B的串口转换器DS9097U、DS1410D并行转换口。因此,可以设计精美、生动的界面,既可以看到测控系统的总布局图,又可查看某个测控现场的状态数据和指示信号,达到了现代化、自动化的管理水平。
下面是用VB6.0开发工具调用TMEX的API函数,驱动DS2480B进行单总线通信的程序。
......
Dim dmmy,search, result as integer
Dim Myhandle as long
State-buffer(15360) as byte
Private declare function TMExtendedStartSession lib "IBFS32.DLL"(Byval portnum as integer Byval portType as integer, Byval reserved as any) as long
Private declare function TMsetup lib "IBFS32.DLL"(Byval session_handle as long ,state_buffer as byte) as integer
Private declare function TMfirst lib "IBFS32.DLL" (Byval session_handle as long, state_buffer as byte) as integer
Private declare function TMrom lib "IBFS32.DLL" (Byval session_handle as long, state_buffer as byte, rom as integer) as integer
Private declare function TMendsession lib "IBFS32.DLL"(Byval session_handle as long) as integer
......
Myhandle= TMExtendedStartSession(1,5,vbNullstring)
'检查DS2480B是否准备就绪,准备建立会话注意,针
'对DS2480B,该函数第2个参数必须为5
If (Myhandle>0) then '成功建立会话
Dmmy=TMSetup(Myhandle) '初始化
Search=TMFirst(Myhandle,state_buffer(0)) '查找设备,找
'到第1个设备返回"1"
If (search=1) then
ROM[0] = 0; '表示读数据
result = TMRom(session_handle, state_buffer(0), ROM(0));
if (result = 1) then
'此时ROM中数据表示该设备的64位ROM序列号,其中
' ROM[0]为器件类型代码,如ROM(0)=20H 表示找到
' DS2450, ROM[7] 存放的是 8 bit CRC
...... '对找到的设备进行相应操作
......
end if
dmmy= TMendsession(Myhandle) '结束会话,释放单总线
......
结束语
基于DS2480B的单总线分布式测控系统,具有节省I/O口线资源、结构简单、开发快捷、成本低廉、便于总线扩展和维护等优点,因此有广阔的应用空间,具有较大的推广价值。