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