首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于CPLD多通道编码器数据采集系统设计(下)

基于CPLD多通道编码器数据采集系统设计(下)

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虚拟设备驱动程序编程指南.北京:清华大学出版社
返回列表