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