USB接口的高速數據采集卡的設計與實(shí)現
現代工業(yè)生產(chǎn)和科學(xué)研究對數據采集的要求日益提高,在瞬態(tài)信號測量、圖像處理等一些高速、高精度的測量中,需要進(jìn)行高速數據采集?,F在通用的高速數據采集卡一般多是PCI卡或ISA卡,存在以下缺點(diǎn):安裝麻煩;價(jià)格昂貴;受計算機插槽數量、地址、中斷資源限制,可擴展性差;在一些電磁干擾性強的測試現場(chǎng),無(wú)法專(zhuān)門(mén)對其做電磁屏蔽,導致采集的數據失真。
通用串行總線(xiàn)USB是1995年康柏、微軟、IBM、DEC等公司為解決傳統總線(xiàn)不足而推廣的一種新型的通信標準。該總線(xiàn)接口具有安裝方便、高帶寬、易于擴展等優(yōu)點(diǎn),已逐漸成為現代數據傳輸的發(fā)展趨勢?;?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/USB">USB的高速數據采集卡充分利用USB總線(xiàn)的上述優(yōu)點(diǎn),有效解決了傳統高速數據采集卡的缺陷。
1 USB數據采集卡原理
1.1 USB簡(jiǎn)介
通用串行總線(xiàn)適用于凈USB外圍設備連接到主機上,通過(guò)PCI總線(xiàn)與PC內部的系統總線(xiàn)連接,實(shí)現數據傳送。同時(shí)USB又是一種通信協(xié)議,支持主系統與其外設之間的數據傳送。USB器件支持熱插拔,可以即插即用。USB1.1支持兩種傳輸速度,既低速1.5Mbps和高速12Mbps,在USB2.0中其速度提高到480Mbps。USB具有四種傳輸方式,既控制方式(Control mode)、中斷傳輸方式(Interrupt mode)、批量傳輸方式(Bulk mode)和等時(shí)傳輸方式(Iochronous mode)。
考慮到USB傳輸速度較高,如果用只實(shí)現USB接口的芯片外加普通控制器(如8051),其處理速度就會(huì )很慢而達不到USB傳輸的要求;如果采用高速微處理器(如DSP),雖然滿(mǎn)足了USB傳輸速率,但成本較高。所以選擇了TI公司內置USB接口的微控制器芯片TUSB3210,開(kāi)發(fā)了具有USB接口的高速數據采集卡。
1.2 系統原理圖
系統原理圖如圖1所示。
整個(gè)系統以TUSB3210為核心,負責啟動(dòng)A/D轉換,控制FIFO的讀寫(xiě)及采樣頻率的設定,與主機之間的通信及數據傳輸。
2 USB數據采集卡硬件
2.1 TUSB3210芯片
TUSB3210是TI公司推出的內嵌8052內核并帶有USB接口的微控制器芯片。TUSB3210有256字節的內部RAM,8K字節的程序RAM,512字節的USB數據緩沖和端點(diǎn)描述塊EDB(Endpoint Descriptor Blocks),4個(gè)通用的GPIO端口P0、P1、P2、P3,I2C接口電路,看門(mén)狗電路等。
TUSB3210的USB接口符合USB1.1協(xié)議,有4個(gè)輸入端點(diǎn)(Input Endpoint)和4個(gè)輸出端點(diǎn)(Output End-Point),支持全速和低速傳輸速率,并具有USB協(xié)議所規定的4種傳輸方式。TUSB3210的USB接口采用串行接口引擎(SIE)編碼和解碼串行數據,并且進(jìn)行校驗、位填充,執行USB所需要的其他信號。這樣采用硬件完成USB協(xié)議,簡(jiǎn)化了固件代碼的編制。
TUSB3210采用基于內部RAM的解決方案,允許通過(guò)I2C總線(xiàn)從串行EEPROM中讀入固件或從主機中下載固件程序。這項功能便于設備的開(kāi)發(fā)與在線(xiàn)升級。
2.2 A/D芯片MAX1449
MAX1449是MAXIM公司生產(chǎn)的10位、105MSPS、單3.3V電源、低功耗的高速A/D芯片。它采用差分輸入,帶有高寬帶采樣/保持(T/H)的10階段流水線(xiàn)(pipeline)型結構的ADC,如圖2。采樣信號每半個(gè)時(shí)鐘周期通過(guò)一個(gè)流水線(xiàn)段,完成連續轉換到數據輸出共需5.5個(gè)時(shí)鐘周期。每個(gè)流水線(xiàn)首先通過(guò)一個(gè)1.5位的閃速ADC對輸入電壓量化,由DAC產(chǎn)生一個(gè)對應于量化結果的電壓并與輸入電壓作差,輸出電壓放大2倍后送到下一級流水線(xiàn)處理。每級流水線(xiàn)提供1位的分辨率,并進(jìn)行差錯校正,得到良好的線(xiàn)性和低失調。
MAX1449提供一個(gè)2.048V的精確帶隙基準源,用來(lái)設定ADC滿(mǎn)量程范圍,也可以用外部基準源改變量程范圍。MAX1449的最大差分輸入電壓范圍為2V。
2.3 輸入信號處理電路
MAX1449芯片的輸入信號為差分輸入時(shí)有最佳的采樣效果。在本系統中用TI的HTS4503作為單端輸入到差分輸出的轉換電路。THS4503高性能的全差分運放,帶寬可達270MHz,具有非常好的線(xiàn)性,在100MHz下可支持11位的A/D轉換要求,適合作為A/D變換的前端接口電路。具體電路見(jiàn)圖3所示。
2.4 FIFO和時(shí)鐘發(fā)生電路
高速A/D變換的數據不能直接通過(guò)USB送入主機,系統中通過(guò)FIFO來(lái)緩沖數據。本系統采用TI公司SN74V293芯片。它的容量為65536×18或131072×9,最快讀寫(xiě)周期為6ns,可以滿(mǎn)足100MHz采樣數據的存儲。用戶(hù)可以選擇輸入、輸出寬度,當選擇輸入、輸出寬度為18時(shí),可存儲64K×10位的數據。如果選擇輸入、輸出為9位,則可使存儲容量擴大到128×9位,這樣對精度要求不高的用戶(hù)可以獲得更多數據。
SN74V293有獨立的讀寫(xiě)時(shí)鐘控制電路,允許讀寫(xiě)操作同時(shí)進(jìn)行。SN74V293內部有滿(mǎn)、空、半滿(mǎn)輸出信號以及可編程設定的幾乎滿(mǎn)和幾乎空輸出信號,通過(guò)這些信號控制器可以靈活控制FIFO的讀寫(xiě)操作。
對于高速數據采集系統,時(shí)鐘信號很重要。在本系統中選用DALLAS公司的DS1073時(shí)鐘芯片。DS1073是無(wú)需外部元件的頻率振蕩器。通過(guò)DALLAS獨有的1-wire技術(shù),可以設定內部的分頻器數值,實(shí)現輸出頻率從27.3kHz~100MHz可調,從而方便地改變采樣時(shí)鐘,簡(jiǎn)化電路設計。MAX1449數據輸出時(shí)下降沿有效,而FIFO寫(xiě)入時(shí)上升沿鎖存數據。系統中采用DS90LC028A實(shí)現對時(shí)鐘信號的取反。
2.5 PCB板制作
由于是高速A/D采集,在制作PCB板時(shí)有一些需要注意的地方。電路板最好使用多層板,元件盡量選用表面封裝器件。這樣可以減小元器件之間的距離,減小寄生電感、寄生電容,同時(shí)減小電路板的尺寸。所有的旁路電容都要盡量靠近芯片的電源管腳。模擬公共地和數字公共地要分開(kāi),選一點(diǎn)通過(guò)低值表貼電阻(1~5Ω)、磁珠或直接連接,以免數字地電流干擾模擬地。電源最好用線(xiàn)性穩壓電源,A/D和前端處理電路要用同一電源地輸出,減小電源波動(dòng)對采集的影響。
3 USB高速數據采集卡的軟件
開(kāi)發(fā)一個(gè)USB設備,軟件設計是必不可少的。USB應用系統軟件設計分為三部分:USB外設端的固件(Firmware)、主機操作系統上的客戶(hù)驅動(dòng)程序以及主機應用軟件。主機應用軟件通過(guò)客戶(hù)驅動(dòng)程序與系統USBI(USB Device Interface)進(jìn)行通信,由系統產(chǎn)生USB數據的傳送動(dòng)作;固件則響應各種來(lái)自系統的USB標準請求,完成各種數據的交換工作和事件處理。
3.1 USB接口編程
固件程序主要是實(shí)現USB通信。TUSB3210采用SIE來(lái)管理USB通信。當主機與芯片進(jìn)行USB通信時(shí),會(huì )產(chǎn)生外部中斷0,通過(guò)中斷矢量寄存器判斷。Setup_packed_Int、Input_endpoint0_Int、Output_endpoint0_Int這三個(gè)中斷主要用于與主機建立連接、進(jìn)行控制傳輸或中斷傳輸;Input_endpoint1_Int、Output_endpoint1_Int這兩個(gè)中斷主要在批量傳輸時(shí)使用。在固件中分別執行不同的中斷程序來(lái)實(shí)現USB的數據傳輸。
Void EX0_int(void) interrupt 0 //外部中斷0
{
EA=DISABLE; //關(guān)中斷
switch (bBECINT)(//確定中斷ID
case VECINT_OUTPUT_ENDPOINT0:
bVECFINT=0x00;
Ep0QutputInterruptHandler();
break;
case VECINT_INPUT_ENDPOINT0:
bBECINT=0x00;
Ep0InputInterruptHandler();
break;
case VECINT_OUTPUT_ENDPOINT1:
bVECINT=0x00;
Ep 1 OutputInterruptHandler();
Break;
case VECINT_INPUT_ENDPOINT1:
bVECINT=0x00;
Ep1InputInterruptHandler();
break;
case VECINT_SETUP_PACKET_RECEIVED:
SetupPacketInterruptHandler();
bUSBSTA=USBSTA_SETUP;
bVECINT=0x00;
break;
default:break; //不知道中斷ID
EA=ENABLE; //開(kāi)中斷
}
3.2 主機軟件設計
筆者首先開(kāi)發(fā)TUSB3210在主機中的驅動(dòng)程序。用WinDK3.0開(kāi)發(fā)了Win2000下的驅動(dòng)程序,實(shí)現了控制傳輸、中斷傳輸和批傳輸的標準接口函數。
在應用程序開(kāi)發(fā)中,可用VC++編制應用程序??梢园裊SB設備當成文件來(lái)操作,利用CreateFile得到USB句柄,用DeviceIoControl來(lái)進(jìn)行控制傳輸,用ReadFile、WriteFile進(jìn)行批量傳輸。程序實(shí)例如下:
HANDLE m_hUsbSample; //USB句柄
m_hUsbSample=CreateFile(\.USBSampl0,GENERIC_READ|
GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULI,OPEN_EXISTING,0,NULL); //打開(kāi)USB句柄
DeviceIoControl(m_hUsbSample,IOCTL_USBSAMPL_REBOOT, NULL,0,NULL,0,length,NULL); //控制傳輸
WriteFile(m_hUsbSample,pBuffer,writelength,writelength,NULL); //批量輸出傳輸
ReadFile(m_hUsbSample,pBuffer,64,lgngth,NULL); //批量輸入傳輸
CloseHandle(m_hUsbSample); //關(guān)閉USB句柄
使用上述函數編制USB高速數據采集卡的主機軟件。
通過(guò)以上設計實(shí)現了基于USB數據采集卡的基本功能。但還有一些如信號的觸發(fā)、事件的捕獲功能還需完善;需開(kāi)發(fā)基于USB2.0的系統,進(jìn)一步提高數據傳輸的速率。
分頻器相關(guān)文章:分頻器原理
評論