摘 要: 隨著電子信息技術(shù)和計(jì)算機(jī)技術(shù)的高速發(fā)展,數(shù)據(jù)采集應(yīng)用越來越廣泛。提出了一種基于USB接口的數(shù)據(jù)采集卡的設(shè)計(jì)解決方案。采用PIC16F886單片機(jī)為主控制芯片,PDIUSBD12為USB的接口芯片。給出了采集卡的設(shè)計(jì)整體框圖,并介紹了采集卡的硬件電路設(shè)計(jì)以及固件程序設(shè)計(jì)。所設(shè)計(jì)的USB接口的數(shù)據(jù)采集卡電路簡(jiǎn)單、性能穩(wěn)定,支持即插即用。
關(guān)鍵詞: 數(shù)據(jù)采集;USB接口;PIC16F886;PDIUSBD12
0 引言
工業(yè)生產(chǎn)和科研領(lǐng)域往往都需要對(duì)重要數(shù)據(jù)進(jìn)行采集,為提高產(chǎn)品質(zhì)量、降低成本提供信息和手段[1]。隨著計(jì)算機(jī)外部設(shè)備的普及,微機(jī)技術(shù)和電子信息技術(shù)的快速發(fā)展不斷對(duì)數(shù)據(jù)采集系統(tǒng)提出新的要求?;趥鹘y(tǒng)總線的采集卡存在的安裝繁瑣、傳輸速率低、可掛載的設(shè)備少等問題,制約著數(shù)據(jù)采集系統(tǒng)的發(fā)展。由于USB總線在支持即插即用、數(shù)據(jù)傳輸快、性價(jià)比高等方面具有優(yōu)勢(shì),本文提出了一種USB接口數(shù)據(jù)采集卡的設(shè)計(jì),有效地解決了傳統(tǒng)總線面臨的問題。
1 采集卡設(shè)計(jì)整體框圖
USB接口的數(shù)據(jù)采集卡的整體設(shè)計(jì)框圖如圖1所示。數(shù)據(jù)采集卡的硬件電路選擇PIC16F886單片機(jī)作為主控制芯片,PDIUSBD12芯片作為USB的接口芯片,A/D轉(zhuǎn)換模塊使用單片機(jī)內(nèi)部的10位AD轉(zhuǎn)換模塊。
系統(tǒng)的硬件部分需要完成與PC端之間的USB數(shù)據(jù)通信,PC需要識(shí)別插入的USB接口的數(shù)據(jù)采集卡并完成相關(guān)的配置。PC對(duì)USB采集卡的識(shí)別過程,需要對(duì)USB接口的采集卡進(jìn)行枚舉。
2 硬件電路設(shè)計(jì)
2.1 PIC16F886芯片介紹
PIC16F886單片機(jī)是Microchip公司推出的支持精簡(jiǎn)指令集(RISC)的8位嵌入式微控制器[2]。PIC16F886共有28個(gè)引腳,支持PDIP、SOIC和SSOP封裝。它具有 8 096 B的程序存儲(chǔ)器和256 B的EEPROM數(shù)據(jù)存儲(chǔ)器,有11個(gè)通道的10位模數(shù)A/D轉(zhuǎn)換器,帶有同步異步收發(fā)發(fā)送接收器USART等。
本文選擇此單片機(jī)作為本系統(tǒng)硬件設(shè)計(jì)的主控制器,它具有如下優(yōu)勢(shì):PIC16F886采用的是精簡(jiǎn)指令集RISC的結(jié)構(gòu),只有35條指令,程序的執(zhí)行效率和執(zhí)行速度大大提高;PIC16F886具有良好的開發(fā)環(huán)境,支持在線編程,便于單片機(jī)的在線調(diào)試和開發(fā),減少了開發(fā)時(shí)間;PIC16F886有8 096 B的程序存儲(chǔ)空間,因?yàn)閁SB協(xié)議框架移植較大,它可以進(jìn)行USB協(xié)議的單片機(jī)固件編程;PIC16F886有28個(gè)引腳,分別有Port A(RA0:RA5)、Port B、Port C、Port D共24個(gè),作為I/O端口;另外,有11個(gè)通道的10位A/D轉(zhuǎn)換模塊,可以作為采集卡的數(shù)據(jù)采集的通道。
2.2 PDIUSBD12芯片介紹
本文的USB接口的數(shù)據(jù)采集卡設(shè)計(jì)選擇Philips公司的PDIUSBD12芯片作為USB接口芯片,其引腳圖如圖2所示。
PDIUSBD12芯片是一款性價(jià)比高的USB接口控制芯片,該芯片提供了標(biāo)準(zhǔn)的外圍接口,包括8位的數(shù)據(jù)并口,可以靈活設(shè)計(jì)與其他單片機(jī)連接,協(xié)同處理USB協(xié)議和數(shù)據(jù)交換,縮短了USB的開發(fā)周期,減少了開發(fā)成本,是USB外圍通信電路方案中較為簡(jiǎn)單和經(jīng)濟(jì)的解決方案[3]。它還支持直接存儲(chǔ)器尋址的DMA傳輸,便于高速的數(shù)據(jù)傳輸。PDIUSBD12芯片也是符合USB2.0協(xié)議的,支持低速和全速模式下的數(shù)據(jù)傳輸。PDIUSBD12芯片支持各種USB外設(shè),包括外部存儲(chǔ)設(shè)備、打印設(shè)備、掃描設(shè)備等。此外,PDIUSBD12的掛起功耗低可以應(yīng)用于總線供電的外設(shè),可以滿足對(duì)USB電源管理的要求。
PDIUSBD12芯片使用8位并行的數(shù)據(jù)口與外部的PIC16F886主控制器連接,支持5 V的邏輯電平;內(nèi)置電壓調(diào)整器,可以選擇使用3.3 V和5 V的電源為設(shè)備供電;內(nèi)置PLL鎖相環(huán),外部時(shí)鐘頻率使用6 MHz;具有軟連接和數(shù)據(jù)指示燈功能,能夠模擬USB的斷開連接,并通過指示燈反饋;此外還包括了模擬收發(fā)器、串行搜索引擎、存儲(chǔ)器管理單元和DMA接口等。
2.3 USB接口電路
圖3所示為PIC16F886主控制器與PDIUSBD12的USB接口芯片的電路連接圖。從圖中可知,PDIUSBD12的8位數(shù)據(jù)并口與PIC16F886的PORTC引腳相連接,A0引腳與MCU的RA4連接,WR_N和RD_N腳分別與MCU的RB5和RB4連接,INT_N腳與MCU的RB0連接,ALE、CS_N和SUSPEND引腳接地。通過PIC16F886的一個(gè)IO口RA4與PDIUSBD12的A0引腳連接,來設(shè)置8位的數(shù)據(jù)并口是命令地址還是數(shù)據(jù)地址,A0為低電平,則為數(shù)據(jù)地址;A0為高電平,則為命令地址。通過PIC16F886的兩個(gè)IO口,RB4和RB5與PDIUSBD12的讀寫選通引腳連接,模擬數(shù)據(jù)和命令的讀寫時(shí)序,進(jìn)行數(shù)據(jù)的交換。此外,PDIUSBD12的外部晶振頻率選擇 4 MHz;D+與D-引腳與USBA型接口的D+和D-數(shù)據(jù)線對(duì)應(yīng)連接;3.3 V電壓調(diào)整輸出端口接地,使用5 V電源供電;CLKOUT和DMREQ引腳不使用,懸空。當(dāng)USB設(shè)備上電之后,PWR的LED電源指示燈會(huì)一直亮著。在USB設(shè)備的枚舉過程中,USB的數(shù)據(jù)流指示燈會(huì)間歇閃爍,直到成功枚舉和配置之后,會(huì)常亮。USB接口的數(shù)據(jù)采集卡的采集通道使用了PIC16F886其中的8個(gè)通道,分別為ADC0~ADC7。
2.4 PCB圖
圖4所示為USB采集卡的PCB圖,其中PCB圖利用Altium Designer繪畫。
3 固件程序設(shè)計(jì)
單片機(jī)PIC16F886的固件程序設(shè)計(jì)的主要內(nèi)容包括了對(duì)單片機(jī)參數(shù)和PDIUSBD12端點(diǎn)模式的初始化程序、USB設(shè)備枚舉過程中與PDIUSBD12之間的數(shù)據(jù)交換程序、數(shù)據(jù)采集程序。固件編程的目的是為了讓PC端的USB主機(jī)識(shí)別USB接口的數(shù)據(jù)采集卡,并知道USB接口的數(shù)據(jù)采集卡的類型和功能,完成數(shù)據(jù)的采集、處理和傳輸。主控制器PIC16F886需要協(xié)同USB接口芯片PDIUSBD12完成數(shù)據(jù)采集卡的枚舉,對(duì)此需要單片機(jī)進(jìn)行固件程序編程[4],將USB接口的數(shù)據(jù)采集卡的相關(guān)描述符信息報(bào)告給PC端的USB主機(jī),實(shí)現(xiàn)PC端與采集卡之間的USB通信,來為USB接口的數(shù)據(jù)采集卡的枚舉提供底層的軟件支撐,這是在USB接口的數(shù)據(jù)采集卡的軟件設(shè)計(jì)中必要的環(huán)節(jié)。
在USB系統(tǒng)初始化之后,PC端的USB主機(jī)開始控制傳輸過程,需要對(duì)USB接口的數(shù)據(jù)采集卡進(jìn)行枚舉,PC端的USB主機(jī)獲取描述符和設(shè)置地址的流程圖,如圖5所示。
獲取描述符的程序類似,下面以獲取設(shè)備描述符為例,給出獲取設(shè)備描述符部分程序[5]:
if((bmRequestType&0x80)==0x80)
{
//判斷bmRequestType第6、5位,表示請(qǐng)求的類型
switch((bmRequestType>>5)&0x03)
{
case 0://標(biāo)準(zhǔn)請(qǐng)求
switch(bRequest)
{
……
case GET_DESCRIPTOR://獲取描述符
switch((wValue>>8)&0xff)
{
case DEVICE_DESCRIPTOR: //獲取設(shè)備描述符
for (i=0; i<18; i++)
{
pBuffer[i]=USB_DeviceDesp[i];
//保存設(shè)備描述符結(jié)構(gòu)在pBuffer中
}
if (wLength > 18)
{
sendDataSize=18;
if (sendDataSize%16==0)
ZeroFlag=1;
else
sendDataSize=wLength;
USB_CTL0_Send();
//按sendDataSize大小發(fā)送pBuffer中的數(shù)據(jù)
break;
….
}
break;
default: break;
}
}
4 結(jié)論
本文提出了一種基于USB接口的數(shù)據(jù)采集卡的設(shè)計(jì)方案。該方案主要利用主控制芯片PIC16F8886和USB接口芯片PDIUSBD12來實(shí)現(xiàn),采集卡電路簡(jiǎn)單、性能穩(wěn)定,支持即插即用,克服了傳統(tǒng)總線的采集卡安裝繁瑣、傳輸速率低、可掛載的設(shè)備少等問題。該USB接口的數(shù)據(jù)采集卡適合于高速數(shù)據(jù)采集系統(tǒng)與主機(jī)進(jìn)行數(shù)據(jù)通信,同時(shí)也可為便攜式系統(tǒng)提供方便、可靠的接口解決方案。
參考文獻(xiàn)
[1] 馬宗駿,張博,牛大鵬.基于USB的數(shù)據(jù)采集卡應(yīng)用[J].物聯(lián)網(wǎng)技術(shù),2011(3):68-70.
[2] PIC16F886 Data Sheet[EB/OL].[2008-02-01](2015-01-10).www.microchip.com.
[3] 劉鐵.基于USB的數(shù)據(jù)采集卡設(shè)計(jì)[J].紡織機(jī)械,2010(4):11-12.
[4] 周立功.PDIUSBD12 USB固件編程與驅(qū)動(dòng)開發(fā)[M].北京:北京航空航天大學(xué)出版社,2003.
[5] 張明峰.PIC單片機(jī)入門與實(shí)戰(zhàn)[M].北京:北京航空航天大學(xué)出版社,2004.