基于STD总线的多路数字I/O设计
摘 要:随着人们生活水平的日益提高,工业控制的对象数量也与日俱增,对I/O模块的开发需进一步加强。为了满足工业控制方面的I/O数量多,操作方便,使用灵活,可靠性高等方面的较高要求,实现了一种基于STD总线,以工业控制计算机为主控制器,应用Xilinx公司的CPLD开发平台,面向工业控制的多路数字I/O设计。工业控制计算机通过多路数字I/O板,实现了多达 128 位I/O被控对象的读、写控制,并且速度快、性能稳,能够充分满足工业控制的要求。
关键词:STD总线; I/O; CPLD; 工业控制
中图分类号:TP316 文献标识码:A
文章编号:1004-373X(2010)11-0200-03
Design of Multi-channel Digital I/O Based on STD Bus
SUN De-tian
(Shenyang Ligong University, Shenyang 110168, China)
Abstract: A design of multi-channel digital I/O interface module for industrial control is completed to meet the requirements of industrial control charactristics such as large number of multi-channel I/O interfaces, easy operation, flexible application, high reliability, which is based on STD bus, industrial control computer-based controller and CPLD(complex programmable logic device)development platform of Xilinx Corporation. The reading and writing control of 128-bit I/O controlled object was achieved with the technology by an industrial control computer.
Keywords: STD bus; I/O; CPLD; industrial control
在工业控制领域,数字I/O以其简单、灵活的特性,得到了广泛的应用。以往对于数字I/O的应用和数量增加的方法通常用GAL和专用I/O芯片采用译码扩展等方式来实现[1],这种方式尽管能够满足一定程度上的要求,但对于更大数量的I/O应用,比如几十甚至上百路的数字I/O,就勉为其难了。为了满足这种要求,并且进一步提高数字I/O的使用效率,专门针对多路数字I/O进行了基于STD总线的设计,应用Xilinx公司的CPLD进行编程开发,实现了64位数字输入DIN 0~DIN 31和 64 位数字输出DOUT 0~DOUT 31,同时每一路I/O可以独立编程,既可以作为输入又可以作为输出。
1 STD总线
目前,STD标准[3]总线已成为工业控制领域内最流行的标准总线之一[4],主要用于8位微处理机和单片机工业控制系统。STD总线的典型结构如图1所示。
在工业控制系统的实际应用中,上位机、主控模块等往往需要通过STD总线,根据STD总线的协议、特性[5]访问其他的单片机系统[1]。例如,在某测量设备中,上位机、主控模块可以通过总线上的I/O模块、A/D模块接口,采集传感器的量值,通过STD总线访问RAM模块,以及通过STD总线进行主控模块与总线上其他控制器之间,主控模块与上位机之间的通信与数据交换等,构成了一个微型的工业控制网络[6]。本文的多路数字I/O就是STD总线中的一个模块。
图1 STD总线典型结构图
2 多路数字I/O的硬件设计
2.1 电路组成
主要由可编程逻辑电路、电平调理电路、总线接口电路以及电源电路等组成。可编程逻辑硬件采用Xilinx公司的CPLD器件XC95288,应用Xilinx公司的Project Navigator(ISE)集成开发环境进行编程开发;电平调理电路采用74LS245,具有输入输出电平转换的功能,还可以通过接继电器或者光电隔离器与外设接口;总线接口电路采用 74LS245,对74LS245 的DIR(方向)进行读写编程,实现了与STD总线的数据通信,电源电路为CPLD以及电平转换电路等提供必需的电源系统。
硬件实现框图如图2所示,虚线框内为多路数字I/O的硬件电路部分。
图2 硬件实现框图
2.2 性能特点
数量多 CPLD芯片XC95288具有208个管脚,其中用户I/O管脚数量达到168个,除了地址总线、数据总线以及片选信号等所占用40个I/O之外,其余的128个I/O完全可以作为通用I/O编程使用;
面积小 如此众多数量的I/O,完全由一片CPLD来实现,简化了电路设计程序,减少了PCB的设计面积,又提高了数字I/O的稳定性;
灵活性高 由于每一个I/O都可独立编程,因此在使用过程中变得非常灵活,可以根据现场需求随时改变其输入、输出,在工业控制应用领域为产品的增强与升级提供了极大的灵活性。
此外,该设计还具有传输速度高(由CPLD的传输特性决定)及电平兼容性好等特点,可满足用户在测试、控制及设计应用中的多种需求。
3 多路数字I/O的程序设计
该系统使用业界领先的 FPGA 设计环境Xilinx ISE,其将先进的技术与灵活性、易使用性的图形界面结合在一起,可以在最短的时间,获得最佳的硬件设计。XC95288 CPLD是低功耗3.3 V器件,288个宏单元,6 400个可用逻辑门,168个用户I/O,再加上灵活、高度优化的VHDL硬件描述语言,实现了128位数字I/O的程序化设计。
3.1 部分程序代码
部分程序代码如下:
if iorq=′0′and wr=′0′ then
case addr is
when ″0110000000″=>en_245<=′0′;dir_245<=′1′; temp0<=bd;out0<=bd;
when ″0110000001″=>en_245<=′0′;dir_245<=′1′; temp1<=bd;out1<=bd;
when ″0110000010″=>en_245<=′0′;dir_245<=′1′; temp2<=bd;out2<=bd;
when ″0110000011″=>en_245<=′0′;dir_245<=′1′; temp3<=bd;out3<=bd;
when ″0110000100″=>en_245<=′0′;dir_245<=′1′; temp4<=bd;out4<=bd;
when ″0110000101″=>en_245<=′0′;dir_245<=′1′; temp5<=bd;out5<=bd;
when ″0110000110″=>en_245<=′0′;dir_245<=′1′; temp6<=bd;out6<=bd;
when ″0110001101″=>en_245<=′0′;dir_245<=′1′; temp7<=bd;out7<=bd;
when others=>en_245<=′0′;dir_245<=′1′;bd<=″ZZZZZZZZ″;
end case;
elsif iorq=′0′ and rd=′0′ then
case addr is
when ″0110000000″=>en_245<=′0′;dir_245<=′0′;bd<=temp0;
when ″0110000001″=>en_245<=′0′;dir_245<=′0′;bd<=temp1;
when ″0110000010″=>en_245<=′0′;dir_245<=′0′;bd<=temp2;
when ″0110000011″=>en_245<=′0′;dir_245<=′0′;bd<=temp3;
when ″0110000100″=>en_245<=′0′;dir_245<=′0′;bd<=temp4;
when ″0110000101″=>en_245<=′0′;dir_245<=′0′;bd<=temp5;
when ″0110000110″=>en_245<=′0′;dir_245<=′0′;bd<=temp6;
when ″0110001101″=>en_245<=′0′;dir_245<=′0′;bd<=temp7;
when ″0110001000″=>en_245<=′0′;dir_245<=′0′;bd<=io_in0 ;
when ″0110001001″=>en_245<=′0′;dir_245<=′0′;bd<=io_in1 ;
when ″0110001010″=>en_245<=′0′;dir_245<=′0′;bd<=io_in2 ;
when ″0110001011″=>en_245<=′0′;dir_245<=′0′;bd<=io_in3 ;
when ″0110001100″=>en_245<=′0′;dir_245<=′0′;bd<=io_in4 ;
when ″0110000111″=>en_245<=′0′;dir_245<=′0′;bd<=io_in5 ;
when ″0110001110″=>en_245<=′0′;dir_245<=′0′;bd<=io_in6 ;
when ″0110001111″=>en_245<=′0′;dir_245<=′0′;bd<=io_in7 ;
when others=>en_245<=′0′;dir_245<=′1′;bd<=″ZZZZZZZZ″;
end case;
else
out0<=temp0;out1<=temp1;out2<=temp2;
out3<=temp3;out4<=temp4;out5<=temp5;
out6<=temp6;out7<=temp7;bd<=″ZZZZZZZZ″;
en_245<=′1′;dir_245<=′1′;
end if;
其中:addr是10位地址总线;bd是8位数据总线;en_245和dir_245分别是STD总线接口芯片74LS245的片选使能与方向信号;tempx是片内寄存器;io_inx和outx分别是8位输入、8位输出I/O口。
3.2 性能描述
多路数字I/O口的选择由10位地址决定,不同的地址操作不同的I/O端口,在I/O非动态情况下,数据总线处于高阻状态,避免了总线冲突,同时也提高了I/O端口的稳定性,减少了高速数据传输条件下引起不必要的错误[7],根据现场对I/O输入、输出的需要,可以修改程序,灵活改变端口的功能,另外,对于输出端口,加入了数据写出后读回的功能,使得上位机能够随时验证写出数据的正确性,对于外设信号,通过信号调理板实现电平匹配[8],进一步增加了本设计的功能可靠性。
4 结 语
以CPLD器件为核心,选用Xilinx公司的ISE作为硬件开发平台,并采用VHDL编程语言,充分应用了可编程逻辑器件的特点,发挥了VHDL硬件描述语言的编程优点。减少了芯片数量,既做到了系统小型化又降低了成本[9]。程序已通过综合实验,应用了STD总线的通讯特点,与总线上的其他板卡、设备通讯也极为方便,既解决了工业通信网络的一般问题[10],又达到了工业通用I/O的较高要求。总之,该多路数字I/O设计容量高、功耗低、速度快,不仅具有通用性、实用性,而且具有灵活性和移植性,便于调试,为高速I/O开发设计提供了一种很好的尝试[11],相信在很多行业都会有广阔的应用前景。
参考文献
[1]胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,1996.
[2]姚骏.STD总线技术现状及发展趋势[J].计算机应用,1990(2):20-22.
[3]杨森,孟晨,王成.基于STD标准的ATS运行时系统设计与应用[J].仪表技术,2009(7):30-32.
[4]杨慧,杨英,王平.双端口RAM在STD总线与单片机通讯中的应用[J].机械管理开发,2008(2):166-167.
[5]王祯,王慧蓉.STD总线技术[J].无线电工程,1990(2):67-71.
[6]李保林,刘继光.基于单片机的工业控制网络模块的研制[J].实验技术与管理,2009(1):59-62,65.
[7]牟华,刘勋章,陈亚骏.光纤数据传输板中ROCKET I/O设计[J].电子技术,2009,34(6):64-67.
[8]黄树毅.采用STD总线技术的伺服机构测试仪[J].测控技术,1993,12(3):24-26.
[9]Matt Klein.Xilinx FPGA的功耗优化设计[J].世界电子元器件,2009(4):18-20.
[10]何芳,李红信.无线扩展Profibus DP 和Profinet I/O的设计[J].微计算机信息,2009,25(12):119-121.
[11]王涛,张德源,郭建军.Compact PCI/PCI总线高速数字I/O的设计[J].中国测试技术,2005(6):110-112.