没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
基于 NI-VISA 与 LabVIEW 的 USB 接口应用设计
2008-01-15 嵌入式在线 收藏 | 打印
通用串行总线(USB)作为一种灵活的高速总线接口技术,非常适合作为主机和外设之
问的通信接口,但其结构复杂。
本文以一个采集多点温度的实际系统为倒,阐述 USB 接口应用系统的总体设计思想及
其层次结构,在实现方法上避开传统的 Windows 编程技术,另辟蹊径地给出使用 NI-VISA
来驱动 USB 接口以应用 LabVIEW 进行应用编程的方法。
USB(Universal Serial Bus)接口是近年来应用在 PC 领域的新型接口技术。它基于单
一的总线接口技术来满足多种应用领域的需求;它的即插即用、支持热插拔、易于扩展等
特性极大地方便了用户的使用,已逐渐成为现代数据传输的发展趋势。
传统的开发 USB 应用系统的步骤是,先用 WindowsDDK(设备驱动程序开发包)或第
三方开发工具(如 DriverStudio)开发 USB 驱动程序,然后用 Visual C++编写 DLL(动态连接
库),最后再调有 DLL 来开发应用程序。显然,这对 Windows 编程不熟悉的人来说有一定
的难度,何况 USB 驱动程序的开发难度很大。本文介绍一种简单、快速开发 USB 接口应
用系统的方法。它直接在 LabVIEW 环境下通过 NI-VISA 开发能驱动用户 USB 系统的应用
程序,完全避开了以前开发 USB 驱动程序的复杂性,大大缩短了开发周期。
1 NI-VISA 简介
NI-VISA(Virtual Instrument Software Architec-ture,以下简称为“VISA”)是美国国家仪
器 NI(National Instrument)公司开发的一种用来与各种仪器总线进行通信的高级应用编程接
口。VISA 总线 I/O 软件是一个综合软件包,不受平台、总线和环境的限制,可用来对
USB、GPIB、串口、VXI、PXI 和以太网系统进行配置、编程和调试。VISA 是虚拟仪器系
统 I/O 接口软件。基于自底向上结构模型的 VISA 创造了一个统一形式的 I/O 控制函数
集。一方面,对初学者或是简单任务的设计者来说,VISA 提供了简单易用的控制函数集,
在应用形式上相当简单;另一方面,对复杂系统的组建者来说,VISA 提供了非常强大的仪
器控制功能与资源管理。
2 LabVIEW 及其调用 VISA 的条件
LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是 NI 公司开发的一
种基于图形程序的编程语言。用户利用创建和调用子程序的方法编写程序,使创建的程序
模块化,而且程序编制简单、直观。一个 LabVIEW 程序分为 3 部分:前面板、框图程序
和图标/接线端口。前面板用于模拟真实仪器的前面板;框图程序是利用图形语言对前面
板上的控件对象(分为控制量和指示量两种)进行控制;图标/接线端口用于把 LabVIEW 程
序定义成一一个子程序,从而实现模块化编程。
当进行 USB 通信时,VISA 提供了两类函数供 Lab-VIEW 调用,USB INSTR 设备与
USB RAW 设备。USBINSTR 设备是符合 USBTMC 协议的 USB 设备,可以通过使用 USB
INSTR 类函数控制,通信时无需配置 NI-VISA;而 USB RAW 设备是指除了明确符合
USBTMC 规格的仪器之外的任何 USB 设备,通信时要配置 NI-VISA。
(1)配置 NI-VISA 的步骤
① 使用 Driver DevelopineInt Wizard(驱动程序开发向导)创建 INF 文档;
② 安装 INF 文档,并安装使用 INF 文档的 USB 设备;
③ 使用 NI-VISA Interactive Control(NI-VISA 互动控制工具)对设备进行测试,以证实
USB 设备已正确安装,并获得 USB 设备的各属性值。
详细过程可参考 NI 官方网站上免费提供的文档《使用 NI-VISA 控制 USB 设备》。
(2)与 NI-VISA 相配合的 LabVIEW 横板中 VI 子节点
ViOpen,打开并指定 VISA resource name 的设备的连接。
ViProperty,VISA 设备的属性子节点,可以设置端点或传输方式。
ViWnte,向 VISA resource name 指定的设备写入数据。
ViRead,从 VISA resource name 指定的设备读出数据。
ViClose,结束设备读写并关闭与指定设备的连接。
(3)USB RAW 设备读写的操作次序
USB RAW 设备的读写次序如图 l 所示。
下面以一个 USB 接口的温度采集系统为例,说明基于 NI-VISA 驱动的 USB 接口应用
系统的设计与实现。
3 系统硬件结构
系统以 Philips 公司的增强型 80C51 单片机为核心,如图 2 所示。这是一个多点温度
采集系统,核心器件是含有 8 KB 非易失 Flash 程序存储器的 P89C52,与标准 80C51 完
全兼容。USB 通信控制芯片采用 Philips 公司的 PDIUSBD12 芯片(简称“D12”)。它是一款
较新型的专用 USB 通信控制芯片,符合通用串行总线 USBl.1 版规范,内部集成有串行
接口引擎 SIE、320 字节 FIFO 存储器、收发器和电压调节器。前端温度传感器采用 Dallas
公司生产的 DSl8820。它是一线式数字温度传感器,直接以数字量输出给微处理器,可节
省大量的引线和信号调理电路。DSl8820 内部有一个光刻 ROM。这个 ROM 中存有 64 位
序列号。它可以看作足该 DS18820 的地址序列码,所以多路温度传感器可以挂在 l 条总线
上,共同占用单片机的 1 条 I/O 线即可实现接口。在提升单片机 I/O 线驱动能力的前提
下,理论上可以任意扩充检测的温度点数。
D12 与单片机的接口共有两种方式:多路地址/数据总线方式和单地址/数据总线方
式。这里选择了单地址/数据总线方式,因此,D12 的 ALE 接为低电平,而 A0 脚与
P89C52X2 的端口 P3.3 相连。该端口控制 D12 的命令和数据状态:A0=1,表示数据总
线上是命令;A0=0,表示数据总线上是数据。D12 的数据总线直接与 P0 口相连,D12 的
中断引脚 INT_N 与 P89C52X2 的 INT0 相连。当 D12 的外部巾断有一位为 1 时,INT_N 输
出低电平,触发 P89C52X2 的外部中断。因为系统未采用 DMA,所以 D12 的 DMAcK_N
引脚接高电平,EOT_N 引脚通过电阻接到 USB 的+5 V,以正确检测到 USB 连接;INT_N
引脚加一个上拉电阻。因为 D12 有片内上电复位电路,故引脚 RESET_N 直接与电源引脚
VCC 相连。温度传感器 DSl8820 工作在外接电源工作方式,DQ 引脚直接和 P89C52X2 的
P1.0 相连。
3.1 系统的工作原理
根据 USB 协议,任何传输都是由主机(host)开始的,单片机的前台工作就是等待。主
机 PC 首先要发送令牌包给 USB,D12 接收到令牌包就给单片机发中断,单片机进入中断
服务程序。首先读 D12 的中断寄存器,判断 USB 令牌包的类型,然后执行相应的操作,
因此,USB 单片机程序主要就是中断服务程序的编写。在 USB 单片机程序中要完成对各
种令牌包的响应,主要是对端口的编程。
3.2 软件部分的设计
系统的固件程序从功能上分为两部分,整个编程在 Keil C 环境下完成。
(1)温度传感器 D818820 的读取程序
DSl8820 单线通信功能是分时实现的。它有很严格的时序要求,对它的操作必须按协
议进行,即初始化→发 ROM 操作命令→发存储器操作命令→数据处理。
(2)MCU 和 USB 接口的通信程序
本程序使用 D12 的端点 l 和端点 2 进行上位汁算机与 MCU P89C52 之间的命令和数
据的传输。端点 l 和端点 2 设置成模式 O(非同步方式)。其中端点 1 以中断传输方式进行命
令的传输和应答,端点 2 以批量传输方式进行数据的传输。端点 1 接收上位机发送过来的
读指令,端点 2 返回读成功数据。
系统的固件程序编写以分层结构展开。它是一种积木式结构,如图 3 所示。
① 硬件提取层:对单片机的 I/O 口、数据总线等硬件接口进行操作。
②PDIUSBD12 命令接口:对 D12 器件进行操作的模块子程序集。
③ 中断服务程序:当 D12 向单片机发出中断请求时,读取 D12 中断传输来的数据,并
设定事件标志“EPP-FLAGS”和 Settup 包数据缓冲区“CONROL_XFER”传输给主循环程序。
④ 标准设备请求处理程序:对 USB 的标准设备请求进行处理。
⑤ 厂商请求处理程序:对用户添加的厂商请求进行处理。
⑥ 主程序:发出 USB 数据传输请求,处理总线事件和调用用户自定义功能子程序。
以 NI-VISA 为驱动的主机 LabVIEW 应用程序的设计,NI-VISA 采用 3.2 版本,
LabVIEW 采用 7.1 版本。
整个应用程序的主框架使用了 WHILF 循环来进行不断的查询。在程序的编写过程中,
采用了类似 Windows 程序中的事件驱动机制,LabVIEW 提供了这样的结构——事件结构。
各个消息的产生利用了各种界面控件并由 Case 选择结构给出。程序框图如图 4 所示。
为了便于说明 USB 操作次序,把图 4 中事件结构展开,有图 5 所示的具体 USB 操作
次序。
在图 5 中,USB RAW 设备通信采用端点 1 以中断传输方式接收上位机操作命令,协
议可以自己约定。端点 2 以批量传输方式给上位机发回温度数据。其中端点数“130”是对应
十六进制数“0082”的十进制数,此数表示端点 2 批量输入;而端点数“1”则是对应十六进制
数“0001”的十进制数,此数表示端点 1 中断输出。
剩余22页未读,继续阅读
资源评论
- yinxin10142015-01-06学习一下!!!好好看!!有用!!
- liu100m2013-11-25是基本东西 不太详细
fengye55340
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功