用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

USB便携式多道γ能谱仪的设计与实现

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 23:49:03
2.2 USB设备驱动程序的设计

在Windows环境下,USB设备驱动程序遵循WDM(Win32 Driver Mode)方式。为了简化设计,并兼顾驱动程序的运行效率,笔者选用了DriverStudio2.7工具软件中的DriverWorks组件进行USB设备驱动程序的开发。DriverWorks为WDM设备驱动程序的开发提供了完善的支持。其中包含一个非常完善的源代码生成工具DriverWizard以及相应的类库和驱动程序范例,它还支持在C++下进行设备驱动程序的开发。通过DriverWizard生成的代码只需要进行少量的修改可以使用,这使得驱动程序开发者可以将精力集中在驱动功能的实现上,而不必理会太多的WDM开发细节。

本设计在DriverWizard的最后自定义了三个IOCTL接口对USB设备进行控制,如表2所示。然后在自动生成的驱动程序代码中向相应的IOCTL函数添加代码,用函数BuildVerdorRequest构建USB协议的自定义向量请求(Vendor Request)。由编译修改后的源代码即可得到驱动程序文件McaD12.SYS。

表2 自定义IOCTL接口

自定义IOCTL接口功能说明
Mca_IOCTL_START启动多道采集数据
Mca_IOCTL_READ开始读取数据
Mca_IOCTL_START停止多道数据

2.3 USB应用程序的设计

应用程序的设计在Visual C++6.0开发环境下进行。根据实际要求,本设计需要在软件中对采集的数据进行整理、分析并显示。其功能模块主要有数据采集、谱数据显示、ROI操作、系统刻度、谱分析等,其结构框图如图5所示。

在Win32系统中,USB设备被抽象为一个文件,应用程序只需要通过几个API函数就可以实现与驱动程序中USB设备的通信。API函数如表3所示。

表3 设备文件操作API函数

API函数功能说明
CreateFile打开设备
ReadFile从设读取数据
WriteFile向设备发送数据
CloseHandle关闭设备
DeviceIoControlI/O控制操作

本程序设计使用MFC多线程技术。单击开始按钮,程序就创建一个用户接口线程,并且通过IOCTL启动USB设备,然后在此线程每隔一定时间(10~20ms)从USB总线上读取一次数据;而程序自身的主线程则不断地依据读取的数据刷新屏幕,显示多道能谱。当单击停止按钮或是设定采集时间到时,程序则通过IOCTL停止USB设备的数据采集,终止用户接口线程,并且停止屏幕谱线的更新。

当创建用户接口线程时,首先从CwinThread类派生一个CioThread类,然后调用AfxBeginThread()函数创建CioThread类的对象进行初始化,启动线程运行。根据需要可将初始化和结束代码分别放在类的InitInstance()和ExitInstance()函数中。其中,InitInstance()函数是从USB采集数据的线程的主要函数。从中实现对IOCTL的调用、对USB设备数据的读取等功能。其流程如图6所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>
3 测试与结论

实测Cs放射源γ能谱如图7所示。根据能量为0.6641MeV的谱峰,系统可以自动计算能量分辨率,实测能量分辨率小于10%。

经过严格测试,该系统其它主要技术指标为:γ射线能量分析范围为20keV~3.0MeV; γ能谱分析道数为1024道;放射源能量非线性系数小于5%;使用NaI(T1)探测器时,整机功耗小于960mW;实测USB最大数据传输速率约为1Mbps;连续测量数据符合放射性统计涨落规律;设备驱动及应用程序兼容Win98/2000/XP。

上述结果表明,本系统的技术路线和软硬件设计先进,方案合理,并具有一定的创新性和实用价值。对本系统编译稍加修改便可应用于其它基于微机的数据采集、自动化测控系统中。



上一页  [1] [2] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:29,265.63000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号