本文提出了采用Xilinx公司生产的CPLD来对多通道旋转编码器进行数据采集的方法,着重介绍了系统的软硬件设计和驱动程序开发,以及实际应用情况,得出了用CPLD技术为多通道编码器进行数据采集这样一种切实可行的方法。
关键词:旋转编码器 CPLD 数据采集
概述
旋转编码器是一种测量旋转角度的测量器件,通常采用两个相位差90度的方波编码方式,其旋转方向由两个波形的相位差决定。当输出波形A超前于输出波形B如图1,则可认为是正方向旋转,反之,若输出波形A滞后于输出波形B如图2,则可认为是反方向旋转,当旋转方向发生变化时,其输出信号产生镜像翻转如图3。
编码器的精度由旋转一周产生方波数决定,当旋转一周可产生2000个方波时,每一个方波周期表示为360°/2000。但为了提高旋转编码器的测量精度,系统将A、B两相的各个沿进行了计数,从而将测量精度提高了四倍,相当于最小的测量角度为360°/8000。
旋转编码器广泛应用于旋转角度的测量,以及可以将各种参数角度化的参数的测量,通过与各种机械结构的组合,可以测量多种物体的边缘形状、各种机械装置的结构偏差等。
本论文主要根据旋转编码的输出信号特点,提出了采用CPLD技术,来完成6个旋转编码器信号测量,采用CPLD技术,设计适合于PC机的数据采集卡的硬件以及软件,并给出了实际调试及应用结果。
1数据采集系统的硬件设计
1.1系统结构
数据采集系统由旋转编码器信号接口、光电隔离和信号校正、编码计数以及PC接口组成,系统结构如图4。旋转编码器信号接口将旋转编码器的信号通过一定的接插件引入到采集卡中,随后通过光电隔离与信号校正,送入到由CPLD器件实现的编码器计数。宿主机通过ISA总线来对编码器的计数进行控制与读取。
1.2光电隔离和信号校正
旋转编码器的控制电源可以在较大范围内变化使用,为了确保系统的安全可靠,必须进行光电隔离。
由于旋转编码器的输出信号频率达100kHz,所以应选用高速的光电隔离器件,如具有1M数据速率的4N135/136,或10M数据速率的4N137等。同时为了防止噪声引起的信号抖动,应采用斯密特触发器进行抗抖和信号校正。
1.3编码器计数
编码器计数由CPLD器件来完成。CPLD是复杂可编程逻辑器件的简称。系统选用Xilinx生产的XC9500系列CPLD,它是一种Flash编程型的可编程逻辑器件。该产品采用先进的FastFLASH技术,该技术采用一个双层的多晶硅、两层金属技术,可提供高达10000次以上的编程/擦写寿命周期,和传统存储技术EPROM和E2PROM相比有着明显的优势。采用EPROM存储技术虽可提供优良存储器单元且功耗较低,但它不可电擦除;采用E2PROM技术虽可电擦除,但需要较大的存储器。而CPLD的FastFLASH技术是对EPROM技术的电擦除扩展。
和普通的可编程逻辑器件相比,CPLD具有以下优点:操作灵活、使用方便;高性能的逻辑能力;存储元胞密度高;可靠性高;开发迅速;经久耐用;能实行电擦除;能为器件提供快速编程;采用ISP(系统同编程)技术。
XC9500系列中可供选用的片子有多种,从旋转编码器的测量、片子宏单元的多少以及调试的方便,系统最终选用了XC95108PC84。
XC95108的机械特性和电气特性如下:宏单元数为108个;最大端口数为108个;引脚至引脚延时7.5ns;系统频率为83.3MHz;支持单个OE(输出使能)控制;支持JTAG(IEEE边界扫描标准1149.1)协议。特别值得一提的是,XC95108采用了ISP技术。因此,对器件进行编程不再需要硬件编程器。只要一根下载电缆通过下载软件与元件的编程接口连接即可实现。并且,无论产品处在设计或制造的哪个环节,还是产品已提交给用户以后,都可以改写器件的逻辑功能,也就是可以通过软件对硬件进行升级。
六个通道的旋转编码器计数由两个XC95108完成,每个XC95108完成三个编码器通道的编码计数以及相关控制命令的接受和计数值的输出,其大致功能可由图5表示。
1.4PC机接口
六个通道的编码器信号通过光电隔离和信号较正送入两片XC95108后,XC95108分别对三个通道的计数信号进行正反相计数,其计数结果分别存放在不同的寄存器中,供宿主机PC读取。根据设计的实际需要,PC机接口采用ISA总线。
PC机接口要完成对ISA总线的地址译码,数据的缓冲和数据的双向传送(控制命令发送和编码器计数值的读取)。所有的这些功能同样由一片CPLD器件(同样选择XC95108)完成,其主要功能可由图6表示。
2CPLD功能实现
系统采用3片XC95108分别实现6个通道旋转编码器的编码计数以及与PC计算机的接口。这里主要介绍一个通道的编码计数实现。CPLD功能实现根据支持软件的不同可选择采用原理图方式、VHDL编程以及两者混合使用三种模式,本系统设计采用VHDL语言编程方式。
为了确保旋转编码器的编码精度,采用对输出信号A、B的各沿进行编码计数方式,这意味着要提取输出信号A、B的各个跳变,图7是一种跳变检测电路的原理图,相对应的VHDL编程如下。
根据A,B变化前后的状态,可以得到旋转方向、变即计数器计数方向Dire。从而可以有下列计数程序。
这样就实现了一个通道的编码计数。
3系统的控制软件设计
3.1虚拟设备驱动程序
应用系统要使用该采集卡,必须要有相应的软件支持,这各支持可以是直接将复杂的控制方式告诉用户,让用户直接对该卡操作,这样大大增加了程序的复杂性,也可以采用动态连接库的方式,这里该系统提供了虚拟设备驱动程序的接口方式。
对于不同的工作平台,可以有不同的设备驱动程序模型,对于Windows9x可以为VxD,对于Windows2000为WDM,对于Windows98既可以是VxD,也可以是WDM。而编写的方式和借助的工具也各不相同。对于编写VxD可以借助于VtoolsD,对于编写WDM可以借助于DriverWorks,或者直接用Microsoft DDK(Windows9x和Windows2000均可)。现以编写VxD为例,简述本系统的虚拟设备驱动程序的编写。
VxD是Vixtual x Device的简写,此处x表示Something。但VxD的功能远非仅仅虚拟某个硬件设备。有些VxD确实用来虚拟设备,而有些虽然用作驱动程序,却并不虚拟任何设备。而另外有些VxD只是给其他应用程序或VxD提供服务。不管如何,它的作用在于对Windows操作系统的功能进行扩展。开发VxD常用的方法是用汇编语言,或者用汇编语言和C语言混合编程,而本设计借助于Compuware推出的VtoolsD,从编写、编译VxD到应用程序调用VxD都不涉及汇编语言,直接用C++语言来实现。思路如下:
(1)运用VtoolsD的QuickVxd,快速生成VxD基本框架。在“Device Parameters”栏填上VxD的名称(要遵循C语言规则),本研究中设为SJCJ。为了能将该软件动态加载,注意选中Dynamically Loadable。对VxD有动态加载和静态加载方法。动态加载是由应用程序或别的VxD来加载,而静态加载是在Windows初始化时加载,直至Windows结束运行时才卸载。如果VxD(如本例)是为某些特定应用程序服务,则最好不要静态加载,因为当应用程序不调用它时,它所占的那部分内存就浪费了。为了能向Win32应用程序提供服务,控制消息W32-DEVICEIOCONTROL应选中。在“Output Files”栏选择输出地址目录,输出SJCJ.h文件、SJCJ.cpp文件和SJCJ.mak文件。
(2)根据需要在SJCJ.h和SJCJ.cpp添加相应的类和函数(SJCJ.mak用来指导编译程序对源程序进行编译,不要变更),其添加规则与C++的规则完全一样。本程序所要实现的是要对某个指定的I/O端口进行完全监视,并且采集相关数据,所以另外添加了一些与相关的类和函数。
3.2应用程序对VxD的调用
按照传统方法,调用VxD一般要用汇编语言,但通过W32-DEVICEIOCONTROL控制消息,可以实现Win32API对VxD的直接调用。刚才在Quick Vxd中已将该消息选中,系统就会自动加载Virtual DWord OnW32DeviceIoControl函数,该函数用来处理Win32API的调用问题。换言之,当Win32应用程序加载VxD、调用W32 DeviceIocontrol API以及卸载VxD时,将触发函数OnW32DeviceIoControl,从而实现数据的交换。Win32应用程序通过调用函数CreateFile可以调用SJCJ.VxD;通过调用函数CloseHandle可以卸载SJCJ.VxD。
4调试结果
多通道旋转编码器数据采集系统完成后,先后在不同的系统中进行了应用测试,取得了较好的实际效果。下面该系统应用于“具有交叉支撑的三大件转向架的平面形位偏差”测试为例作简要说明。
铁路车辆应用具有交叉支撑的三大件转向架后,左右侧架被弹性固定。由于各种因素,不可能使左右侧架完全正位。从而使实际导框的中心与名义中心不一致。虽然轮对的承载鞍与导框间有间隙,但由于摩擦力巨大,轮对不能轻易活动,导框的实际中心的偏差会造成轮对的平均(统计概率)定位中心的偏差。研究表明这种偏差会不同程序地影响车辆的线路上的运行状态,引起转向架的不对称磨耗,实际情况下我们用轴距偏差、对角线偏差等来控制转向架的正位状态。
为此采用机械结构结合多个旋转编码器来测量轴距偏差、对角线偏差等来控制转向架的正位状态。
为此采用机械结构结合多个旋转编码器来测量轴距偏差、对角线偏差,从而保证将这些偏差控制在一定范围内,减少转向架的不对称磨耗。该系统选用10个日本光洋公司出产的旋转编码器TRD-N-RZ2000,旋转一周能产生2000个方波,而且最大的响应频率达到100kHz。该系统用两块多通道旋转编码器数据采集卡,同时采集10个计数值。使用表明,可以很好的实现系统的要求,采集数据误差为±1,即测量精度为360°/8000。
5结论
采用CPLD技术来实现多通道编码器数据采集系统是切实可行的,由于采用了ISP和JTAG技术,修改和编程都很方便,所以通过对程序的修改,可以使该数据采集系统适合于多种编程方式的编码器,从而使该系统的应用场合更加广泛。
参考文献
1朱明程.XILINX数字系统现场集成技术.南京:东南大学出版社
2徐志军等.CPLD/FPGA的开发与应用.北京:电子工业出版社
3杨全胜等.现代微机原理与接口技术.北京:电子工业出版社
4KAREN HAZZAH.Writing Windows VxDs and Device Driver,孙喜明译.北京:中国电力出版社
5杨强,李堂秋.Win9x虚拟设备驱动程序编程指南.北京:清华大学出版社