基于LabVIEW和C51的USB通信系统

2014-08-16 01:08陈龙燕
网络安全与数据管理 2014年9期
关键词:数码管下位虚拟仪器

陈龙燕

(泉州理工职业学院,福建 泉州 362000)

随着计算机技术的迅猛发展及其在电子工业测量技术与仪器上的广泛应用,测试理论、测试方法和仪器结构的日益更新冲破了传统仪器的概念,促使电子测量仪器的功能和作用发生了质的变化。在这样的时代背景下,20世纪 80年代 National Instrument Company(简称NI公司)提出了虚拟仪器的概念。我国于20世纪末开始兴起对虚拟仪器的开发和应用,如今已广泛应用于航空、航天、通信、医疗、电力、石油勘探和铁路等行业[1]。

本系统主要研究实现了基于USB接口的上位机以图形化编程语言LabVIEW为应用程序开发平台与下位机89C51单片机程序之间的通信。

首先,本设计采用美国NI公司开发的先进的虚拟仪器技术LabVIEW作为上位机的开发平台,其功能强大且灵活,程序的编写过程直观明了,用户界面人性化。利用它可以方便地建立自己的虚拟仪器,与其他软件相比有许多优越之处。目前,LabVIEW代表着当今仪器发展的最新趋势,是促进测控技术发展的一个重要开发工具。

第二,本设计通过在LabVIEW中调用动态链接库DLL,实现了基于USB接口的PC与单片机之间的通信。完成了LabVIEW中暂时无法实现的硬件通信工作,扩展了虚拟仪器的功能,进一步验证了DLL在虚拟仪器开发中的重要性。

第三,采用通用串行总线USB接口,克服了串口通信传输速度慢等缺点。

第四,现有的NI公司生产的数据采集卡,成本高,插拔不方便,不易扩展。为了解决这个问题,下位机采用C51单片机技术,在实际工程中,可以很方便地通过它控制硬件电路部分的功能。利用USB技术和单片机相结合,可以扩展应用于数据的采集等用途。由于数据采集卡价格昂贵,因而大大减少了开发成本。

最后,建立起上位机与下位机的通信机制之后,应用是十分广泛的。可以方便地根据实际需要,利用它们之间的通信实现各种操作。

1 系统功能介绍

下位机采用51单片机程序,上位机采用LabVIEW开发环境,实现了基于USB接口的LabVIEW与单片机的数据通信系统。系统界面如图1所示。

图1 基于LabVIEW与C51的USB通信系统运行界面

(1)打开设备

在LabVIEW界面上有两个指示灯和一个检测设备是否连接成功的按钮,按下按钮,如果设备连接成功第一个灯亮,反之,第二个灯亮。

(2)获取设备信息

在LabVIEW界面上分别有获取设备名和设备号的按钮,按下按钮后就可以在相应的输出框中得到设备号和设备名。

(3)显示部分

LabVIEW界面上有8个与电路板上的数码管对应的VI、数码管位选择控件和输入数据控件等。当打开硬件设备时,运行LabVIEW程序,在LabVIEW界面上的控件输入数字(1~9)、字母 A~Z/a~z、“=”、“.”或空格,则在电路板上的对应数码管也能显示出一样的数据。即LabVIEW能把数据通过USB接口传到硬件电路的单片机上,并在电路板上的数码管上显示出来。

(4)取反部分

在取反输入框中输入数据,按下开始取反按钮,此时,LabVIEW中的数据将通过USB线传入到下位机单片机中,单片机接收到数据后取反,并把数据通过USB线上传回上位机的LabVIEW界面。如果数据下传成功,那么将出现一个“数据下传成功”的提示框,经过单片机处理后上传到PC;如果上传成功,也将出现一个“数据上传成功”的提示框,最后在输入框中返回的数据是取反后的数据。此功能表明了数据可以顺利通过USB线下传、上传,从而实现了数据的通信功能。

(5)单片机控制电路演示部分

电路板上有24个键盘,如果把电路板上的P2的第5脚和第6脚之间插上短路子,那么按下任意一个按键,数码管上就会显示出键盘的按键值,先左移原显示,再显示按键值。

2 设计的思路

本系统的总体结构流程图如图2所示。

图2 系统总体结构流程图

从图2可知,系统结构从上到下依次为:计算机、USB线、USB接口芯片 CH372、单片机、CH451外围芯片、键盘和数码管。

CH372的UD+、UD-两个引脚分别与 USB的数据信号线D+、D-引脚连接进行数据通信。CH372芯片在本地端提供了通用的被动并行接口,包括:8位双向数据总线D7~D0、读选通输入引脚 RD#、写选通输入引脚WR#、片选输入引脚 CS#、中断输出引脚 INT#以及地址输入引脚A0。通过被动并行接口D[7..0],CH372芯片可以很方便地挂接到单片机的系统总线上;CH372芯片的RD#和WR#可以分别连接到单片机的读选通输出引脚和写选通输出引脚;INT#输出的中断请求是低电平有效,连接到单片机的中断输入引脚,单片机通过中断方式获知中断请求[2]。

CH451具有硬件实现的高速4线串行接口,包括4个信号线:串行数据输入线DIN、串行数据时钟线DCLK、串行数据加载线LOAD和串行数据输出线DOUT。其中,DIN、DCLK、LOAD是带上拉的输入信号线,默认是高电平;DOUT在未启用键盘扫描功能时作为串行数据输出线,在启用键盘扫描功能后作为键盘中断和数据输出线,默认是高电平。

CH451可以动态驱动8个共阴数码管,所有数码管的相同段引脚(段A~段G以及小数点)并联后连接CH451的段驱动引脚SEG0~SEG7,各数码管的阴极分别由CH451的DIG0~DIG7引脚进行驱动。同时,CH451还具有键盘扫描功能,所以它的 SEG[7..0]和 DIG[7..0]引脚可以分别与键盘的 SEG[7..0]和 DIG[7..0]相连,来控制键盘的功能[3]。

3 下位机单片机设计

下位机要与上位机中的动态链接库建立通信机制,以接收和发送数据包。首先二者之间必须先约定好数据传输的命令和协议,这与SOCKET通信一样。因此在下位机的单片机中必须先定义一个与上位机通信的命令包结构COMMAND_PACKET。当单片机上电后,先对各个芯片进行初始化,然后启动CH451的显示驱动和键盘扫描,如果P2的第5脚和第6脚之间插上短路接子,则由单片机控制,否则由PC通过USB控制演示。

下位机单片机主程序的流程图如图3所示。

图3 单片机主程序流程图

4 上位机LabVIEW设计

4.1 设计原理

LabVIEW本身包含的一些接口设备的驱动程序都是针对NI公司自己生产的接口板,对于用户自行设计的硬件设备则不能直接与LabVIEW进行通信[4]。以下就是针对非NI公司提供的USB设备,利用LabVIEW的现有资源来设计一种实现USB与LabVIEW通信的方法。

首先,在前面板创建一个类型与下位机结构体类似的数组,用来向下位机传递数据的输入框,在输入框中输入的命令必须与下位机中定义的命令一致。

4.2 后面板程序

LabVIEW中的程序主要包括打开硬件设备模块、获取设备信息模块、数码管显示模块和取反模块等。

4.2.1 打开硬件设备模块

作为一个开放式开发平台,LabVIEW提供了DLL接口。用户在LabVIEW平台上能调用其他软件平台编译的模块,即可以通过调用动态链接库DLL中的CH375OpenDevice函数,打开硬件设备。LabVIEW对动态链接库DLL的调用可以概括为以下3个步骤。

(1)点击 LabVIEW 功能模板中“Advanced”子模板里的“调用库函数(Call Library Function)”节点,放入 DLL调用节点到框图程序中。

(2)双击该节点进入参数配置对话框。包括DLL的选择、DLL库函数选择以及函数的输入、输出参数设置。

(3)点击参数配置对话框的“OK”按钮,在程序框图中将实际参数连接到DLL调用节点的输入输出端口上[11]。

调用 CH375OpenDevice函数时,Call Library Function结点对话框如图4所示。

系统具体操作中,是当按下“连接设备”按键时,程序才开始运行,所以,引入了case structure结构。当按键按下,此时选择器端子的值为真,则开始执行结构中true部分的程序;当无按键按下时,此时选择器端子的值为假,则开始执行case structure结构中false部分的程序,此程序中false部分为空操作。

图4 Call Library Function节点对话框

为了方便操作人员识别,特设置了两个LED指示灯,如果设备打开成功,则第一个灯亮;否则,第二个灯亮。当打开设备成功时,CH375OpenDevice函数的返回值不等于-1,此时包含指示灯的case structure的选择器端子的值为真,给相应的LED灯连接上true constant或false constant;当打开设备失败时,LED指示灯连接情况与打开成功时的相反。其部分源代码如图5所示。

图5 打开设备模块的部分程序代码

4.2.2 获取设备信息模块

获取设备信息模块也是通过按键来控制的,程序中也引用case structure来实现,程序如图6所示。

图6 获取设备相关信息的部分程序代码

4.2.3 数码管显示模块

数码管显示模块设计原理如下。

(1)因在 LabVIEW中没有数码管控件,所以必须用LabVIEW语言自己编写数码管子VI。方法是:在前面板中点击右键,从All controls下的Boolean中取出7个square LED和1个Round LED分别作为数码管的SEG[0..7]。再后面板中用case structure把要亮的LED与true constant连接,变暗的与false constant连接。数码管模块源代码如图7所示。

图7 LED数码管显示模块的部分源代码

(2)在下位机单片机中已经约定好了测试数码管显示的命令为DEMO_CH451_CMD 0X56,所以在前面已创建的用来向下位机传递数据的数组的输入框中必须输入下传的命令。

(3)因有8个数码管,在设计时用Enum控件来控制数码管的位选择。

(4)在string control中输入的下传数据为string型,且输入数据 1~9、a~z、A~Z、“=”、“.”或空格都为 string。 把string转换为相应的BCD码如图8所示。

图8 将string转换为BCD码的部分程序代码

(5)为达到在硬件上显示数据时,LabVIEW上也在相应的数码管显示出数据,则必须创建一个数码管位选择Enum控件的局部变量,同样用case structure结构来实现,其具体实现过程如图9所示。

图9 在LabVIEW选择数码管的部分程序源代码

(6)最后,把和下位机规定好的协议写入到数组中,再把数据写入到动态链接库DLL中的CH375WriteData函数中,就可实现与下位机的通信。程序如图10所示。

图10 向下位机写入数据

4.2.4 取反模块

取反模块设计原理如下。

(1)与数码管显示模块的第(2)步类似,首先,也是先在前面板创建一个数组,在数组中写入已约定好的取反协议DEF_CMD_TEST_DATA及其他相关数据。并调用动态链接库DLL中的CH375WriteData函数把数据传入到下位机中。其具体实现过程如图11所示。

图11 数据下传到单片机的部分程序代码

(2)通过调用CH375ReadData函数把数据从下位机的缓冲区中读取出来,具体程序如图12所示。

图12 读取数据部分程序

(3)如果数据下传成功,会弹出一个“数据下传成功”的提示框;如果数据上传读取成功,也会弹出一个“数据上传成功”的提示框。

本系统建立了LabVIEW开发环境下基于USB接口的PC与单片机的通信,这就为扩展其他功能提供了必要的通信基础。对于实现如数据的采集与分析,就十分容易了。此外,由于USB具备高速率、低功耗和低成本等优势,越来越多支持USB标准的设备或产品将推向市场,USB在未来将成为标准的配置。因此它的实现很有可能会带动一次新的产业升级和设备换代。

可以预见,随着USB技术和测试测量技术的发展,USB接口技术在虚拟仪器测试测量的研究开发和应用中将会得到更快的推广和普及。

[1]雷振山.LabVIEW7编程技术实用教程[M].北京:中国铁道出版社,2004.

[2]南京沁恒电子有限公司.CH372中文手册[Z].

[3]南京沁恒电子有限公司.CH451中文手册[Z].

[4]陈国亮,张素君.基于 LabVIEW的虚拟仪器设计[J].福建电脑,2005(7):45-150.

猜你喜欢
数码管下位虚拟仪器
微课教学设计之“数码管动态显示”
Arduino编程
MC9S08FL16单片机数码管静态显示分析
单片机控制的四位数码管动态显示编程
发射机房监控系统之下位机
PCB 刻制机功能开发及在虚拟仪器实验室建设中的应用
虚拟仪器及其在电工电子实验中的应用
虚拟仪器技术在农业装备测控中的应用
景洪电厂监控系统下位机数据传输网络改造
围观党“下位”,吐槽帝“登基”