摘 要: 随着电子信息技术和计算机技术的高速发展,数据采集应用越来越广泛。提出了一种基于USB接口的数据采集卡的设计解决方案。采用PIC16F886单片机为主控制芯片,PDIUSBD12为USB的接口芯片。给出了采集卡的设计整体框图,并介绍了采集卡的硬件电路设计以及固件程序设计。所设计的USB接口的数据采集卡电路简单、性能稳定,支持即插即用。
关键词: 数据采集;USB接口;PIC16F886;PDIUSBD12
0 引言
工业生产和科研领域往往都需要对重要数据进行采集,为提高产品质量、降低成本提供信息和手段[1]。随着计算机外部设备的普及,微机技术和电子信息技术的快速发展不断对数据采集系统提出新的要求。基于传统总线的采集卡存在的安装繁琐、传输速率低、可挂载的设备少等问题,制约着数据采集系统的发展。由于USB总线在支持即插即用、数据传输快、性价比高等方面具有优势,本文提出了一种USB接口数据采集卡的设计,有效地解决了传统总线面临的问题。
1 采集卡设计整体框图
USB接口的数据采集卡的整体设计框图如图1所示。数据采集卡的硬件电路选择PIC16F886单片机作为主控制芯片,PDIUSBD12芯片作为USB的接口芯片,A/D转换模块使用单片机内部的10位AD转换模块。
系统的硬件部分需要完成与PC端之间的USB数据通信,PC需要识别插入的USB接口的数据采集卡并完成相关的配置。PC对USB采集卡的识别过程,需要对USB接口的采集卡进行枚举。
2 硬件电路设计
2.1 PIC16F886芯片介绍
PIC16F886单片机是Microchip公司推出的支持精简指令集(RISC)的8位嵌入式微控制器[2]。PIC16F886共有28个引脚,支持PDIP、SOIC和SSOP封装。它具有 8 096 B的程序存储器和256 B的EEPROM数据存储器,有11个通道的10位模数A/D转换器,带有同步异步收发发送接收器USART等。
本文选择此单片机作为本系统硬件设计的主控制器,它具有如下优势:PIC16F886采用的是精简指令集RISC的结构,只有35条指令,程序的执行效率和执行速度大大提高;PIC16F886具有良好的开发环境,支持在线编程,便于单片机的在线调试和开发,减少了开发时间;PIC16F886有8 096 B的程序存储空间,因为USB协议框架移植较大,它可以进行USB协议的单片机固件编程;PIC16F886有28个引脚,分别有Port A(RA0:RA5)、Port B、Port C、Port D共24个,作为I/O端口;另外,有11个通道的10位A/D转换模块,可以作为采集卡的数据采集的通道。
2.2 PDIUSBD12芯片介绍
本文的USB接口的数据采集卡设计选择Philips公司的PDIUSBD12芯片作为USB接口芯片,其引脚图如图2所示。
PDIUSBD12芯片是一款性价比高的USB接口控制芯片,该芯片提供了标准的外围接口,包括8位的数据并口,可以灵活设计与其他单片机连接,协同处理USB协议和数据交换,缩短了USB的开发周期,减少了开发成本,是USB外围通信电路方案中较为简单和经济的解决方案[3]。它还支持直接存储器寻址的DMA传输,便于高速的数据传输。PDIUSBD12芯片也是符合USB2.0协议的,支持低速和全速模式下的数据传输。PDIUSBD12芯片支持各种USB外设,包括外部存储设备、打印设备、扫描设备等。此外,PDIUSBD12的挂起功耗低可以应用于总线供电的外设,可以满足对USB电源管理的要求。
PDIUSBD12芯片使用8位并行的数据口与外部的PIC16F886主控制器连接,支持5 V的逻辑电平;内置电压调整器,可以选择使用3.3 V和5 V的电源为设备供电;内置PLL锁相环,外部时钟频率使用6 MHz;具有软连接和数据指示灯功能,能够模拟USB的断开连接,并通过指示灯反馈;此外还包括了模拟收发器、串行搜索引擎、存储器管理单元和DMA接口等。
2.3 USB接口电路
图3所示为PIC16F886主控制器与PDIUSBD12的USB接口芯片的电路连接图。从图中可知,PDIUSBD12的8位数据并口与PIC16F886的PORTC引脚相连接,A0引脚与MCU的RA4连接,WR_N和RD_N脚分别与MCU的RB5和RB4连接,INT_N脚与MCU的RB0连接,ALE、CS_N和SUSPEND引脚接地。通过PIC16F886的一个IO口RA4与PDIUSBD12的A0引脚连接,来设置8位的数据并口是命令地址还是数据地址,A0为低电平,则为数据地址;A0为高电平,则为命令地址。通过PIC16F886的两个IO口,RB4和RB5与PDIUSBD12的读写选通引脚连接,模拟数据和命令的读写时序,进行数据的交换。此外,PDIUSBD12的外部晶振频率选择 4 MHz;D+与D-引脚与USBA型接口的D+和D-数据线对应连接;3.3 V电压调整输出端口接地,使用5 V电源供电;CLKOUT和DMREQ引脚不使用,悬空。当USB设备上电之后,PWR的LED电源指示灯会一直亮着。在USB设备的枚举过程中,USB的数据流指示灯会间歇闪烁,直到成功枚举和配置之后,会常亮。USB接口的数据采集卡的采集通道使用了PIC16F886其中的8个通道,分别为ADC0~ADC7。
2.4 PCB图
图4所示为USB采集卡的PCB图,其中PCB图利用Altium Designer绘画。
3 固件程序设计
单片机PIC16F886的固件程序设计的主要内容包括了对单片机参数和PDIUSBD12端点模式的初始化程序、USB设备枚举过程中与PDIUSBD12之间的数据交换程序、数据采集程序。固件编程的目的是为了让PC端的USB主机识别USB接口的数据采集卡,并知道USB接口的数据采集卡的类型和功能,完成数据的采集、处理和传输。主控制器PIC16F886需要协同USB接口芯片PDIUSBD12完成数据采集卡的枚举,对此需要单片机进行固件程序编程[4],将USB接口的数据采集卡的相关描述符信息报告给PC端的USB主机,实现PC端与采集卡之间的USB通信,来为USB接口的数据采集卡的枚举提供底层的软件支撑,这是在USB接口的数据采集卡的软件设计中必要的环节。
在USB系统初始化之后,PC端的USB主机开始控制传输过程,需要对USB接口的数据采集卡进行枚举,PC端的USB主机获取描述符和设置地址的流程图,如图5所示。
获取描述符的程序类似,下面以获取设备描述符为例,给出获取设备描述符部分程序[5]:
if((bmRequestType&0x80)==0x80)
{
//判断bmRequestType第6、5位,表示请求的类型
switch((bmRequestType>>5)&0x03)
{
case 0://标准请求
switch(bRequest)
{
……
case GET_DESCRIPTOR://获取描述符
switch((wValue>>8)&0xff)
{
case DEVICE_DESCRIPTOR: //获取设备描述符
for (i=0; i<18; i++)
{
pBuffer[i]=USB_DeviceDesp[i];
//保存设备描述符结构在pBuffer中
}
if (wLength > 18)
{
sendDataSize=18;
if (sendDataSize%16==0)
ZeroFlag=1;
else
sendDataSize=wLength;
USB_CTL0_Send();
//按sendDataSize大小发送pBuffer中的数据
break;
….
}
break;
default: break;
}
}
4 结论
本文提出了一种基于USB接口的数据采集卡的设计方案。该方案主要利用主控制芯片PIC16F8886和USB接口芯片PDIUSBD12来实现,采集卡电路简单、性能稳定,支持即插即用,克服了传统总线的采集卡安装繁琐、传输速率低、可挂载的设备少等问题。该USB接口的数据采集卡适合于高速数据采集系统与主机进行数据通信,同时也可为便携式系统提供方便、可靠的接口解决方案。
参考文献
[1] 马宗骏,张博,牛大鹏.基于USB的数据采集卡应用[J].物联网技术,2011(3):68-70.
[2] PIC16F886 Data Sheet[EB/OL].[2008-02-01](2015-01-10).www.microchip.com.
[3] 刘铁.基于USB的数据采集卡设计[J].纺织机械,2010(4):11-12.
[4] 周立功.PDIUSBD12 USB固件编程与驱动开发[M].北京:北京航空航天大学出版社,2003.
[5] 张明峰.PIC单片机入门与实战[M].北京:北京航空航天大学出版社,2004.