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

发布者:快乐行者最新更新时间:2011-11-05 关键字:弹上通信系统  LabVIEW  51单片机  通信技术 手机看文章 扫描二维码
随时随地手机看文章
引言
    某型信息化弹药通过对目标的基准弹道与飞行中的攻击弹道进行比较后,给出有限次不连续的修正量来修正攻击弹道,以减少弹着点误差,提高弹丸对付高速机动飞行目标的命中精度,或提高远程打击精度。该信息化弹药的基本结构就是在常规炮弹上加装弹道修正模块,弹道修正模块主要由微控制器根据基准弹道修正攻击弹道参数来提高命中率。
    在传感器及信号调理电路的基础上,选用高速单片机、快速的数据传输总线以及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文件选项,对打开的程序修改如下:

[page]

    ③编译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通信的流程。


    LabVIEW通过调用dll文件大大缩减了实现USB通信开发工作量,但最关键也是最难的一步在于给函数配置参数。通常来讲,DLL主要用C/C++等文本语言开发,有些参数类型和LabVIEW不匹配,直接调用无法正常使用。为了解决这个问题,需要用户对参数进行修改或者对原有的dll文件进行二次开发,加大了工作量。

[page]

    值得一提的是,USBXpress开发套件除了包含面向主机的dll文件,还包括面向USB器件的驱动文件和USBX_F34X LIB及USB_API.h文件,封装了USB协议的细节,大大简化了USB固件编程。一个典型的利用API函数实现USB通信的程序流程如图2所示。程序是在SiliconLabs集成开发环境下编译调试的。


    不管利用CIN,还是调用DLL,都可以实现LabVIEW访问USB设备,但并不能很好地体现LabVIEW的优势。因为通过CIN和DLL,不用LabVIEW也可以实现上位机编程。实际上,LabVIEW还有独特的访问USB设备的方法,即通过VISA访问USB设备。

3 通过VISA访问USB设备
    VISA(Virtual Instrument Software Architecture,虚拟仪器软件架构)是一种用来与各种仪器总线进行通信的高级应用编程接口(API),包括GPIB、USB、串口、PXI/PCI、VXI、火线和以太网。它是计算机与仪器的软件连接层,本身不具备编写仪器驱动的能力,通过调用特定仪器驱动与仪器的通信。
    NI-VISA从3.0版开始支持USB通信,它有两种VISA类函数(Resource Class),可以控制两类USB设备:USB INSTR设备与USB RAW设备。U-SB INSTR设备是符合USBTMC协议的USB设备,可以通过使用USB INSTR类函数控制,通信时无需配置NI-VISA;而USB RAw设备是指除了明确符合USBTMC规格的仪器之外的任何USB设备,通信时要配置NI-VISA。C8051F340是USB RAW设备,故欲实现与LabVIEW进行USB通信,可通过NI公司提供的VISA Driver Wizard进行配置。步骤如下:
    ①按照“程序”一“National Instruments”一“VISA”一“Driver Wizard”选择USB并点击Next,进入USB-DeviceInformation界面。
    ②在USB Vendor ID栏和USB Product ID栏分别填写USB设备的PID号和VID号。另外两栏分别是Manufacturer Name和Mode Name栏,选填。每一个USB设备都有唯一的PID号和VID号,它们是主机识别不同USB设备的根据。
    ③生成并安装inf文件,为USB设备创建PNF文档。持续点击Next,并为文件命名。高版本的VISA可发自动创建PNF文档。
    ④连接USB设备。USB具有热拔插功能,所以Windows能够探测到USB设备,并立即会打开“添加新硬件向导”,很快完成USB设备驱动程序的安装。
    至此,主机已将NI-VISA作为访问USB设备的底层驱动,在LabVIEW程序中即可利用VISA选板的VI设计通信程序。
    图3是一个基于NI-VISA编写的LabVIEW与C8051F340进行USB通信的程序框图。设备的PID和VID分别是0x10C4和0x0005,单片机使用端点2IN,采用中断传输方式;LabVIEW程序中用VISA事件处理和获取USB中断等VI。


    通过NI-VISA实现LabVIEW与单片机进行USB通信,大大减小了工作量,同时很好地发挥了LabVIEW的特点。

结语
    对实现LabVIEW与C8051F340单片机USB通信的3种方式进行比较,结论如下:
    ①通过CIN节点访问USB可以充分利用设备生产厂家提供的C语言编写的驱动程序及源程序,发挥C语言的优势;但要求用户非常熟悉USB协议,这种实现方法相当于在LabVIEW下用CIN对USB设备编写驱动程序,使用较为麻烦。
    ②通过调用DLL实现USB通信,可以利用生产厂家提供的dll文件,发挥dll文件的优势;但由于dll文件的数据格式通常和LabVIEW不完全匹配,往往需要修改参数或者对dll文件进行二次开发,需要具备开发dll文件的能力,也比较麻烦。
    ③通过NI-VISA可以充分发挥LabVIEW的优势,无需熟悉传统文本语言编程,极大方便上位机的编程。
    ④就单片机在USB设备固件编程的工作量而言,通过NI-VISA方式与通过CIN方式相当,比通过USBXpress开发套件的工作量大。
    结合实现LabVIEW与C8051F340USB通信总体软件编程任务,从工程应用角度进行比较,如表1所列。


    对于一般情况下基于LabVIEW的上下位机USB通信,建议通过调用DLL或者使用VISA实现USB通信,具体采用哪种方式,还要结合系统具体要求而定。

 

关键字:弹上通信系统  LabVIEW  51单片机  通信技术 引用地址:弹上通信系统的LabVIEW与51单片机的通信技术

上一篇:基于51单片机的超低频信号发生器设计
下一篇:基于51单片机的CAN总线系统设计

推荐阅读最新更新时间:2024-03-16 12:45

51 单片机串行通讯中波特率的自动检测
本文介绍一种在 80C51 串行通讯应用中自动检测波特率的方法。按照经验,程序起动后所接收到的第1个字符用于测量波特率。 这种方法可以不用设定难于记忆的开关,还可以免去在有关应用中使用多种不同波特率的烦恼。人们可以设想:一种可靠地实现自动波特检测的方法是可能的,它无须严格限制可被确认的字符。问题是:在各种的条件下,如何可以在大量允许出现的字符中找出波特率的定时间隔。 显然,最快捷的方法是检测一个单独位时间(single bit time),以确定接收波特率应该是多少。可是,在 RS-232 模式下,许多 ASCII 字符并不能测量出一个单独位时间。对于大多数字符来说,只要波特率存在合理波动(这里的波特率是指标准波特率)
[单片机]
51 单片机串行通讯中波特率的自动检测
基于51单片机的dht11温湿度数码管显示
按button1可以切换模式 模式0 只显示温度 模式1 只显示湿度 模式2 动态显示温度和湿度,每5s切换一次 实物如下 温度显示 湿度显示 小数 模式选择,自动显示切换湿度和温度,只显示温度,只显示湿度。 单片机源程序如下: #include reg51.h bit DHT_Start(); bit DHT_ByteRead(unsigned char *dat); void ConfigTimer0(unsigned int ms); void Display_hum(unsigned char *num); void Display_temp(unsigned char *num);
[单片机]
基于<font color='red'>51单片机</font>的dht11温湿度数码管显示
普通51单片机驱动3.5寸TFT的应用实例
目前市场流行的3.5寸屏基本上都是只内置了驱动器,而不带控制器,这样给用户的使用造成了一些难度。基本上很多朋友在用彩屏时选择一些带LCD控制器的ARM7或ARM9去开发,对于不会ARM开发的朋友来说,只使用普通MCU,这样可以选择的3.5寸TFT模块,就很难找到了。 本文就是基于市场上一款比较使用的3.5寸TFT模块编写的,用户只需要帮该TFT模块当作普通的单色液晶的开发思路来使用,就可以很容易去编程。 一、 硬件选择 1、 MCU:AT89S51 2、 开发编译环境:Keil C51 3、 3.5寸TFT模块型号:MzT35C1 二、 TFT模块基本性能: 1、基本参数 模块结构: 内置控制器 屏幕大
[单片机]
普通<font color='red'>51单片机</font>驱动3.5寸TFT的应用实例
51单片机控制RTL8019AS实现以太网通讯
摘要:介绍以太网的帧协议和以太网控制芯片RTL8019AS的结构特性;介绍51单片机控制RTL8019AS实现以太网通讯的硬件设计方案;采用C51语言实现ARP协议(地址解析协议),并进行了系统的调试与验证。 关键词:RTL8019AS Ethernet 51单片机 TCP/IP协议 互联网络硬件、软件的迅猛发展,使得网络用户呈指数增长,在使用计算机进行网络互联的同时,各种家电设备、仪器仪表以及工业生产中的数据采集与控制设备在逐步地走向网络化,以便共享网络中庞大的信息资源。在电子设备日趋网络化的背景下,利用廉价的51单片机来控制RTL8019AS实现以太网通讯具有十分重要的意义。 1 以太网(Ethernet)协议 一个标
[网络通信]
51单片机测量PWM脉冲宽度LCD1602显示当前PWM占空比频率
此程序通过两个定时器一个外部中断,测量PWM高电平时间以及周期,计算并在1602显示出占空比 周期 高电平时间,只需让脉冲在P3^2口输入即能测得数据。。 单片机源程序如下: #include reg52.h #include LCD1602.h typedef unsigned char uint8; typedef unsigned int uint16;//数据类型重定义 uint8 count = 0; //计进入外部中断次数 bit flag = 1; //捕获结束标志位 long Pwm_All; //PWM的周期 long Pwm_High; //PWM的高电平时间 占空比=Pwm_Hi
[单片机]
逻辑运算与51单片机的位操作指令
一个单片机逻辑电路题目,要求编一程序实现下面逻辑电路的逻缉功能。 逻辑图: 悬赏分:20 | 解决时间:2011-1-2 22:53 ;------------------------------------------------------------ 最佳答案: 先把逻辑图写成如下的表达式:(用“P1.6\” 代表“P1.6 的非”,其它的也雷同) P3.0 = ((P1.0 * P1.1)\ * (P1.4 + P1.5)\) + P1.6\)\ 再反复应用摩根定理化简: P3.0 = ((P1.0 * P1.1)\ * (P1.4 + P1.5)\)\ * P1.6 P3.0 = ((P1.0 * P1
[单片机]
逻辑运算与<font color='red'>51单片机</font>的位操作指令
51单片机基础之串口通信
原理: 这里需要解释一下,串口通信是需要占用定时器1的,所以使用了串口通信就不能使用定时器1,除非是代码优化。 这个需要配置几个寄存器,都比较简单,TMOD寄存器设置定时器计数器的工作方式,SCON则是设置串口通信的工作方式,PCON则是波特率加倍操作,都是比较简单的。 计时器初始值的设置有专门的工具 链接:https://pan.baidu.com/s/1BSi8YCaRWtBGLaV2gslpSw 提取码:1234 使用方法: 设置定时器工作方式,单片机晶振,所需波特率,是否开启倍频,最好让误差为零。 代码: #include reg51.h typedef unsign
[单片机]
<font color='red'>51单片机</font>基础之串口通信
谈谈自学C51单片机的一些见解仅作参考
学习C51有半个月多了,在这短短的半个月里,虽说没有每天都在学,都是至少投入的时间还是跟天数成正比的。幸运的是有C语言和汇编的知识做基础,学习 C51还是满上手的。在这半个月中,通过不断的学习基础知识和练习例子,到最后还是取得一定的成功,从什么都不会到会写一个简单的跑马灯程序,再到花样流水灯,电子琴设计,数码管显示,按键扫描,点阵输出,中断,定时和串口初步设计,最后到LCD1602驱动程序设计,DS1302时钟电路驱动程序设计,那种渐进的感觉真的会让你充斥着一种无比的自豪感和成就感,让你忍不住想把这种感觉带给别人,让别人看到你的成就。 说真的,当你学会C51,我想你不会再用汇编编程了,这种现象足以说明C语言相对于汇编的
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved