微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > 弹上通信系统的LabVIEW与单片机的通信技术

弹上通信系统的LabVIEW与单片机的通信技术

时间:04-12 来源:互联网 点击:

摘要:结合某型信息化弹药弹上电子器件通信问题研究,以C8051F340单片机为例,介绍了单片机与LabVIEW进行USB通信的3种方法。针对LabVIEW,实现USB通信的方式有:利用CIN(代码接口节点),调用DLL(动态链接库),通过VISA(虚拟仪器软件架构)。对这3种方式进行详细的介绍和比较,并给出结论。
关键词:信息化弹药;LabVIEW;USB;C8051F340;DLL;VISA

引言
某型信息化弹药通过对目标的基准弹道与飞行中的攻击弹道进行比较后,给出有限次不连续的修正量来修正攻击弹道,以减少弹着点误差,提高弹丸对付高速机动飞行目标的命中精度,或提高远程打击精度。该信息化弹药的基本结构就是在常规炮弹上加装弹道修正模块,弹道修正模块主要由微控制器根据基准弹道修正攻击弹道参数来提高命中率。
在传感器及信号调理电路的基础上,选用高速单片机、快速的数据传输总线以及LabVIEW应用程序,可快速开发一个简单实用的信息化弹药弹道控制通信系统模型。本通信系统模型用USB总线,在PC机与USB设备间实现上下位机之间的通信,在软件方面通常要完成以下设计:USB设备固件编程、USB设备驱动编程和PC机应用程序设计。下位机弹道修正模块用Silicon Labs公司的全速USB Flash微控制器C8051F340,上位机PC采用LabVIEW编写应用程序。与C8051F340进行USB通信主要有3种方式:利用CIN调用开发USB设备的外部代码;调用DLL对USB设备进行操作;通过VISA访问USB设备。下面分别进行介绍和比较。

1 利用CIN调用开发USB设备外部代码
CIN(Code Interface Node,代码接口节点)是LabVIEW中通过参数传递来调用C/C++代码的节点,可以利用USB设备生产厂家提供的C/ C++代码,将代码集成并作为一个单独的VI发布,实现数据的高效处理。这种实现方法相当于在LabVIEW下利用CIN对USB设备编写驱动程序。以C8051F340端口1IN批量传输为例。规定使用端口1IN批量传输且最大包长度为128字节,假设端点1IN的缓冲区地址为0x7E00~0x7E8F。主机通过不断发送IN令牌请求USB执行IN传输,C8051F340会通过将端点字节计数寄存器(N1CNT)加载,以示数据准备完毕,同时将一个IN数据包装入端点的IN FIFO并将INPRDY位(EINCSR L.O)位置1。利用CIN调用USB设备的外部代码的一般步骤如下:
①创建CIN节点。CIN节点位于“函数选板”一“互连接口”一“库与可执行库文件”子选板下。根据设备的参数需要增加外部代码的输入/输出端口。
②创建C源文件。右击CIN并选择创建C8051F340UsbInl.c文件选项,对打开的程序修改如下:

③编译C8051F340UsbInl.c文件,生成可被LabVIEW执行的C8051F340UsbInl.1sb。以VC++为例编译CIN节点源文件。在VC++下创建C8051F340UsbInl.mak文件,内容如下:

在VC++下点击new\project\make file,输入文件名C8051F340UsbInl后点击为OK和Finish按钮。将C8051F340UsbInl.c和C8051F340U-sbInl.mak一起复制到C8051F340UsbInl文件夹下,重新打开C8051F340UsbInl工作台,按F7可生成C8051F340UsbInl.1sb文件。
④右击选用的CIN图标,选择“加载代码资源”并选择C8051F340UsbInl.1sb文件。至此,一个基于CIN的读USB端口1的VI创建完毕。
上面是一个利用CIN创建开发USB驱动的VI的步骤,实际开发过程要麻烦很多,需要对设备及通信协议相当熟悉。因此,利用CIN实现USB通信受到一些限制。

2 调用DLL实现USB通信
开发USB设备时,不仅要面向USB控制器编程还要面向Windows编程(如果上位机用Windows操作系统),对不熟悉USB协议的用户而言是个难题。为了缩短用户开发USB设备时间,生产厂家往往会把对USB设备进行操作的函数封装成DLL(Dynamic Link Library,动态链接库)提供给用户。dll文件是一种可执行文件,允许程序共享执行特殊任务必需的代码和其他资源,与语言无关,可以被任何支持DLL的语言编写的应用程序访问。
Silicon Labs公司针对USB系列单片机为USB驱动程序开发提供了USBXpress开发套件,其中的SiUSBXp.dll包含了23个函数。一个简单的USB通信程序,通常要用到SiUSBXp.dll中的SI_GetNumDevices、SI_SetTimeouts、SI_Open、SI_Read、SI_Write和SI_Close等几个函数。在LabVIEW中调用dll文件有两种方法,下面将分别介绍。
首先是利用CLF(调用库函数节点)节点调用SiUSBXp.dll,一般步骤如下:
①放置CLF节点并通过路径加载dll文件。CLF节点位于“函数选板”一“互连接口”一“库与可执行库文件”子选板下。
②在加载的dll文件里选择要用到的函数并进行参数配置。根据USBXpress开发手册,对每一个被调用的函数配置合适的参数。
③配置参数完成之后,每一个函数就是一个VI,可在LabVIEW程序中调用。
其次是通过导入共享库的方法调用SiUSBXp.dll。
导入共享库的实质是将dll文件中的函数自动生成对应的VI。函数的每个参数可在头文件包含以及预处理定义条件下在生成的VI中显示出来,与利用CLF相比较,省去了手动配置参数的步骤。使用方法如下:新建一个VI,点击“工具”一“导入共享库”,选择为用户创建共享库;点击下一步,在“选择共享库及头文件”页面加载.dll文件和.h文件的路径;点击下一步,在预处理定义中添加预处理说明(如果需要添加);点击下一步,等待解析头文件并选择待转换函数;点击下一步,进行项目库设置配置,连续点击下一步,直至所有选中的函数生成VI存放用户库里(默认状态)。调用时,在“函数选板”一“用户库”一“SiUSBXp”,选择在LabVIEW程序设计中用到的VI。
以上两种调用DLL实现USB通信的方法具体操作不一样,但本质都是利用USB厂家提供的dll文件访问USB设备。图1为LabVIEW调用DLL实现一个简单USB通信的流程。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top