通用串行總線(USB,universalserialbus)由于具有高傳輸速率、即插即用和易于擴(kuò)展等優(yōu)點(diǎn)而被廣泛應(yīng)用于計(jì)算機(jī)外設(shè)、數(shù)字設(shè)備和儀器儀表等領(lǐng)域。ARM嵌入式處理器因其低廉的成本和較好的性能被廣泛地應(yīng)用于企業(yè)應(yīng)用、汽車系統(tǒng)、家庭網(wǎng)絡(luò)和無線技術(shù)等市場(chǎng)領(lǐng)域。將USB與ARM相結(jié)合是進(jìn)行數(shù)據(jù)采集、處理與傳輸?shù)睦硐虢鉀Q方案。
1、USB數(shù)據(jù)采集系統(tǒng)概述
USB數(shù)據(jù)采集系統(tǒng)由主機(jī)和USB設(shè)備兩部分組成,如圖1所示。本系統(tǒng)中,PC作為USB主機(jī),USB采集模塊作為USB設(shè)備,通過USB接口與主機(jī)相連。模塊與主機(jī)連接之后,主機(jī)能夠正確識(shí)別設(shè)備并將設(shè)備初始化(枚舉)。設(shè)備初始化完畢后,主機(jī)向采集模塊發(fā)送采集命令和任務(wù)參數(shù)。采集模塊正確接收命令后將命令解析并執(zhí)行,然后通過USB接口將采集到的數(shù)據(jù)回傳到主機(jī)上。
從層次上劃分,USB系統(tǒng)的軟、硬件資源可劃分為3個(gè)層次:總線接口層、設(shè)備層及功能層。接口層涉及的是具體的物理層,主要實(shí)現(xiàn)物理信號(hào)和數(shù)據(jù)包的交互,它包括物理鏈接、電信號(hào)環(huán)境和包傳輸機(jī)制;設(shè)備層主要提供USB基本協(xié)議棧,執(zhí)行通用的USB的各種操作和請(qǐng)求命令,從邏輯上講就是USB系統(tǒng)軟件與USB邏輯設(shè)備之間的數(shù)據(jù)交換;功能層提供每個(gè)USB設(shè)備所需的特定功能,包括客戶應(yīng)用軟件和設(shè)備功能塊,它們之間有直接的邏輯對(duì)應(yīng)關(guān)系。這種對(duì)應(yīng)關(guān)系說明在邏輯上客戶應(yīng)用軟件只需考慮如何實(shí)現(xiàn)具體設(shè)備功能即可。USB的層次結(jié)構(gòu)對(duì)應(yīng)關(guān)系如圖2所示。
圖1 ?USB數(shù)據(jù)采集系統(tǒng)組成
2、數(shù)據(jù)采集系統(tǒng)方案設(shè)計(jì)
在系統(tǒng)開發(fā)中選用集成度高的器件,不僅開發(fā)方便,而且所開發(fā)的系統(tǒng)的性能及其可靠性也較高。另一方面,由于USB接口設(shè)備是采用總線供電的,考慮到總線輸出功率有限,盡量采用集成度高的器件有利于降低USB總線的負(fù)荷。但選用集成度高的器件及其開發(fā)工具會(huì)導(dǎo)致成本的提高,所以要綜合各種因素統(tǒng)籌考慮。
圖2 ?USB系統(tǒng)的層次對(duì)應(yīng)關(guān)系
當(dāng)前,USB的開發(fā)方法主要有兩種:一種采用具有USB接口的MCU,另一種采用普通MCU和USB通信芯片。后者是目前被廣泛采用的方法,技術(shù)相對(duì)成熟,開發(fā)成本較低。由于STM32ARM本身自帶A/D轉(zhuǎn)換器和USB控制器,僅需一片ARM即可完成采集與傳輸?shù)墓δ埽虼藷o需再外加USB通信芯片,但是調(diào)試的成本較大。
本模塊選用的處理器STM32F103是意法半導(dǎo)體新近推出的STM32的增強(qiáng)型系列處理器,主頻為72MHz,帶有片內(nèi)RAM和USB2.0接口、16通道的12位A/D轉(zhuǎn)換器等豐富的外設(shè)。其中系統(tǒng)集成的雙ADC結(jié)構(gòu)允許雙通道采樣/保持,能夠?qū)崿F(xiàn)12位的轉(zhuǎn)換精度、1μs的轉(zhuǎn)換速度。由于STM32豐富的片內(nèi)資源,本數(shù)據(jù)采集模塊僅需一片STM32F103以及常見的外部電路即可,電路結(jié)構(gòu)簡單緊湊。數(shù)據(jù)采集模塊的硬件組成框圖如圖3所示。
圖3 ?數(shù)據(jù)采集模塊的硬件組成框圖
整個(gè)數(shù)據(jù)采集模塊采用外部USB取電,USB的+5V電壓經(jīng)由LD1117穩(wěn)壓芯片轉(zhuǎn)換成3.3V供ARM及外設(shè)使用。復(fù)位電路能夠完成上電復(fù)位與手動(dòng)復(fù)位。由于USB工作的時(shí)鐘頻率為48MHz,所以選用8MHz外部晶振經(jīng)由9倍頻為72MHz作為系統(tǒng)主頻,72MHz再1.5分頻后得到準(zhǔn)確的48MHz時(shí)鐘。為了提高采集的效率,在ARM的內(nèi)存空間開辟4KB作為數(shù)據(jù)緩沖區(qū)。外部模擬信號(hào)送入A/D轉(zhuǎn)換器進(jìn)行模數(shù)轉(zhuǎn)換。A/D每次轉(zhuǎn)換結(jié)束之后,使用DMA方式將轉(zhuǎn)換后的16位數(shù)據(jù)順序搬移到數(shù)據(jù)緩沖區(qū)中。待緩沖區(qū)滿后,將4KB數(shù)據(jù)打包經(jīng)由USB總線回傳到PC主機(jī),由應(yīng)用程序進(jìn)行數(shù)據(jù)處理。
3、軟件設(shè)計(jì)與實(shí)現(xiàn)
系統(tǒng)軟件設(shè)計(jì)包括3個(gè)部分:固件驅(qū)動(dòng)程序開發(fā)、USB設(shè)備驅(qū)動(dòng)程序開發(fā)、主機(jī)應(yīng)用程序開發(fā)。三者是一個(gè)有機(jī)整體,缺一不可,需要互相配合,才能完成可靠、高速的數(shù)據(jù)采集與傳輸。3.1STM32F10xxxUSB固件驅(qū)動(dòng)程序庫簡介STM32F10xxxUSB固件驅(qū)動(dòng)程序庫是意法半導(dǎo)體公司專為STM32F10xxx系列ARM微處理器提供的固件驅(qū)動(dòng)程序庫,其主要用途是利用STM32F10xxx系列微控制器中的USB宏單元來簡化應(yīng)用開發(fā)。USB固件庫分為內(nèi)核層和應(yīng)用接口層兩個(gè)層次,層次結(jié)構(gòu)框圖如圖4所示。
圖4 ?USB固件庫層次結(jié)構(gòu)框圖
內(nèi)核層:該層管理使用USBIP硬件與USB標(biāo)準(zhǔn)協(xié)議兩者間的直接通信。USB庫內(nèi)核遵從USB2.0標(biāo)準(zhǔn)并和標(biāo)準(zhǔn)的STM32F10xxx固件庫分離。
應(yīng)用接口層:該層為用戶提供了內(nèi)核和最終應(yīng)用之間的完整接口。
在USB內(nèi)核層,采用調(diào)用構(gòu)造體函數(shù)指針的方法調(diào)用應(yīng)用回調(diào)函數(shù),用這樣的方法將USB內(nèi)核層與應(yīng)用接口層連接在一起。在實(shí)際應(yīng)用中,開發(fā)人員可以不對(duì)內(nèi)核層進(jìn)行十分深入的理解,也無需對(duì)內(nèi)核層函數(shù)進(jìn)行修改,僅對(duì)應(yīng)用接口層函數(shù)進(jìn)行必要的修改即可。
3.2、固件驅(qū)動(dòng)程序設(shè)計(jì)
固件驅(qū)動(dòng)程序(又稱單片機(jī)程序)是指固化到CPU模塊內(nèi)的軟件。固件程序采用模塊化設(shè)計(jì),主要模塊包括:數(shù)據(jù)采集控制模塊和數(shù)據(jù)通信模塊兩大部分。模塊化設(shè)計(jì)的優(yōu)點(diǎn)是可靠性高、可讀性好、軟件改動(dòng)簡單。
USB設(shè)備在上電之后需要首先完成系統(tǒng)時(shí)鐘配置及片內(nèi)外設(shè)的初始化操作。設(shè)備初始化完畢后,采集命令的接收、解析及數(shù)據(jù)傳輸?shù)乃胁僮骶谥袛喾?wù)程序中完成。中斷源及對(duì)應(yīng)功能如表1所列。定時(shí)器3為節(jié)拍發(fā)生器,定時(shí)器中斷用于定時(shí)觸發(fā)A/D轉(zhuǎn)換器采樣與轉(zhuǎn)換。DMA通道1產(chǎn)生中斷表明4KB數(shù)據(jù)緩存已滿,可以將AD采樣數(shù)據(jù)打包并通過USB發(fā)送。
表1中斷源及對(duì)應(yīng)功能
3.3、驅(qū)動(dòng)程序設(shè)計(jì)
USB設(shè)備驅(qū)動(dòng)程序介于USB硬件與數(shù)據(jù)采集系統(tǒng)應(yīng)用程序之間,為它們之間的通信提供橋梁。USB的驅(qū)動(dòng)程序?qū)儆赪DM(Windowsdrivermodel)類型,Windows98/2000等操作系統(tǒng)均支持該類型的驅(qū)動(dòng)程序[3]。USB驅(qū)動(dòng)程序使用DriverStudio中的Driverworks2.7編寫。DriverWorks提供了3個(gè)函數(shù)類:KUsbLowerDevice,KUsbInterface和KUsbPipe類,用于實(shí)現(xiàn)USB設(shè)備操作。KUsbLowerDevice類用于邏輯設(shè)備的編程,KUsbInterface類用于接口的編程,KUsbPipe類用于管道的編程。最基本的例程有設(shè)備的啟動(dòng)、停止、卸載、讀寫、設(shè)備控制等例程。
在端點(diǎn)初始化時(shí),定義最大傳輸字節(jié)數(shù)為4096B。而固件每次傳輸字節(jié)數(shù)最大為64B,因此傳輸4096B的數(shù)據(jù)需要將數(shù)據(jù)分成32包分包發(fā)送,主機(jī)接收數(shù)據(jù)拼包的過程由驅(qū)動(dòng)程序自動(dòng)完成。
3.4、應(yīng)用程序設(shè)計(jì)
用戶應(yīng)用服務(wù)程序直接面向用戶,是控制數(shù)據(jù)采集軟件的最上層,不僅提供與用戶交互的界面,還能通過發(fā)送各種控制命令來控制采集模塊的工作。在Windows中,應(yīng)用程序?qū)崿F(xiàn)與WDM的通信過程是:應(yīng)用程序先用CreateFile函數(shù)打開設(shè)備,然后用DeviceIOControl與WDM進(jìn)行通信,包括從WDM中讀數(shù)據(jù)和寫數(shù)據(jù)給WDM兩種情況,也可以用ReadFile從WDM中讀數(shù)據(jù)或用WriteFile寫數(shù)據(jù)給WDM。當(dāng)應(yīng)用程序退出時(shí),用CloseHandle關(guān)閉設(shè)備。表2列出了幾種常用的分發(fā)例程及其所對(duì)應(yīng)的Win32函數(shù)。
表2常用的分發(fā)例程
采集卡控制的軟件流程圖如圖5所示。首先需要打開設(shè)備,如果設(shè)備沒有被找到,則會(huì)顯示錯(cuò)誤信息;如果設(shè)備能夠被正確識(shí)別,則需要繼續(xù)設(shè)置采樣頻率。正確設(shè)置采樣頻率后就可以單擊開始接收數(shù)據(jù)按鈕接收數(shù)據(jù)了。發(fā)送區(qū)會(huì)不停顯示出已發(fā)送的命令串,在接收區(qū)則會(huì)不停顯示出接收到的數(shù)據(jù)包編號(hào)。如果需要停止數(shù)據(jù)采集,只需單擊停止數(shù)據(jù)采集按鈕即可。
圖5 ?應(yīng)用軟件流程圖
程序在實(shí)現(xiàn)數(shù)據(jù)可視化的過程中,使用了ActiveX控件。ActiveX與具體的編程語言無關(guān),利用ActiveX控件可以較好地實(shí)現(xiàn)可視化的外觀效果,從而逼真、形象地顯示工業(yè)應(yīng)用中的各種儀器、儀表設(shè)備的外觀。本應(yīng)用中利用了LabVIEW中一個(gè)名為NTGraph的ActiveX控件,實(shí)現(xiàn)了數(shù)據(jù)的可視化輸出。實(shí)際測(cè)試時(shí)使用了頻率為1kHz的正弦波信號(hào),實(shí)測(cè)截圖如圖6所示。
圖6 ?實(shí)測(cè)波形
4、結(jié)束語
該數(shù)據(jù)模塊經(jīng)過實(shí)際測(cè)試,效果良好,整個(gè)系統(tǒng)工作正常,最高采樣頻率為300kHz,達(dá)到了預(yù)期設(shè)計(jì)的數(shù)據(jù)采集控制與數(shù)據(jù)傳輸?shù)哪康?,與虛擬儀器的結(jié)合必將帶來廣闊的應(yīng)用前景。
評(píng)論
查看更多