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