數據采集任務多在戶外進行,所以數據采集系統通常要滿足實時性、專用性、可靠性和低功耗等性能,這些特性在嵌入式系統中都能得到很好的體現,因此本文將以WindowsCE的嵌入式平臺來開發效據采集系統。但是由于嵌入式系統的硬件結構不易改變,所以在進行數據采集設備擴展時應該選擇接口簡單靈活、數據傳輸率高和支持熱拔插的傳輸總線,而USB接口則能很好地滿足這些要求,同時USB還有總線供電和不受插槽、中斷等硬件資源限制的特性,因此USB接口是數據采集設備與嵌入式系統進行數據傳輸的理想選擇。綜上所述,本文將設計一款基于嵌入式USB接口的數據采集系統以滿足實際的需要,下面將從硬件設計,程序實現和實際測試3方面具體描述。
1 硬件設計
1.1 硬件結構框架
本系統的硬件結構主要由控制中心、模數轉換和USB協議實現3個部分組成,下面將針對這3個部分進行詳細的介紹。具體的結構框架如圖1所示。
圖1 嵌入式USB接口的數據采集系統總體結構
1)控制中心。本系統采用單片機提供地址數據復用總線、選通信號(D12_CS和AD_CS),讀寫信號(RD和WR)以及對中斷信號(D12_INT和AD_INT)進行檢測。
2)模數轉換。本系統采用MAX197芯片進行模數轉換,該芯片具有采樣保持功能和12位的高精度輸出。單片機可向MAX197寫入其特定的命令從而選擇指定的通道進行模數轉換,轉換結束后,MAX197向單片機輸出低電平的AD_INT信號,單片機采用輪詢方式檢測到后通過HBEN信號控制MAX197輸出低8位和高4位的轉換數據。
3)USB協議實現。本系統采用PDIUSBD12作為USB設備端的控制芯片,該芯片實現了USB1.1傳輸協議。嵌入式系統要對USB設備進行讀寫均需通過信號D12_INT向單片機發送中斷,單片機響應中斷后只需對PDIUSBD12的不同寄存器進行讀寫操作就可以利用USB進行數據傳輸。
1.2 固件程序設計
硬件設備需要固件程序的控制以保證其正常運行,本文所設計的固件程序主要用于識別USB設備以及采集與傳輸數據。固件程序的總體流程如圖2所示。
圖2 固件程序的總體流程
1)設備識別。USB設備的識別過程分別由操作系統和設備驅動兩個部分通過USB協議的標準設備請求來完成。操作系統在USB設備連接時加載設備驅動程序并分配通信地址,驅動程序啟動后通過中斷讀取相關描述符進行資源配置并使能傳輸端點,從而為應用程序提供接口。
2)數據采集與傳輸。通過單片機的定時器可對數據的采集頻率進行設置。本系統的數據采集頻率為1 000 Hz,因此設置定時器每一毫秒中斷一次進行數據采集,而主機端對USB設備的讀寫操作則通過外部中斷實現,定時器中斷優先級高于外部中斷以保證采集頻率固定為1 000 Hz.主機端通過寫操作向USB設備發送控制信息,包括設備啟動和停止的相關初始化與清理的工作,其中在對USB設備進行讀操作前要先在端點的緩沖區填寫64字節數據并通過命令使其有效,不然主機端對USB設備進行讀操作時,無效的緩沖區將導致PDIUSBD12芯片不會產生中斷,從而導致讀操作失敗。
2 驅動程序設計
Windows CE下的USB設備驅動模型由3個層次組成,其中由操作系統實現的有兩層,它們分別是HCD模塊(USBHoST Controller Driver)和USBD模塊(USB Bus Driver),而第三層則被稱為USB客戶端驅動(USB Client Driver),由驅動開發人員實現。HCD模塊處于最底層,是CPU中USB控制器的驅動,為USBD模塊提供底層的功能訪問服務。USBD模塊處于HCD模塊的上層,它根據HCD模塊提供的功能設計USB驅動接口函數,并提供給第3層使用。USB客戶端驅動處于USB驅動模型的最頂層,也是本文所要設計的USB驅動程序,它向上為應用程序提供接口以方便對USB設備進行控制,向下利用USBD模塊提供的接口函數傳遞控制信息和數據。因此,要成功開發USB設備的驅動程序,在操作系統定制的時候就需要把HCD和USBD的相關組件添加進去。
本文開發的USB設備驅動程序是流接口形式的驅動程序,它被設計用來與通常的文件系統API(如CreateFile、ReadFile和WriteFile等)進行通信,應用程序通過對文件系統的操作來完成對設備的控制。本驅動所設計的流接口如表1所示。
表1 驅動所設計的流接口
3 系統測試
3.1 測試條件與結果
本測試的目的在于檢驗本文設計的數據采集系統能否在采集頻率較高的情況下準確地采集數據,并通過USB接口完整地進行數據傳輸。因此,測試將基于以下5個條件進行。其中一個通道的部分測試數據結果如圖3所示。
圖3 正弦波采集測試結果圖
1)測試信號為正弦波,峰峰值約為12 V,頻率為100Hz.
2)系統以1000Hz的采集頻率連續對8個通道進行采集。
3)單片機晶振頻率為12MHz.
4)采集系統的數據緩沖區設置為128字節。
5)采集數據記錄在SD卡中。
3.2 測試結果分析
由3.1的正弦波采集測試結果圖可以得出如下兩點結論:
1)采集的正弦波的峰峰值約為12 V,一個周期有10個數據點,根據采集頻率1000Hz可知采集到的正弦波的頻率為100Hz.
2)在30 ms的時候,正弦波發生畸變,可見采集數據在USB傳輸過程中發生丟失。
第一點結論說明了本采集系統能準確地進行數據采集,而對于第二點結論所表現出的不完整性分析如下。
1)設V1是有效數據的傳輸速度,V2是協議開銷的傳輸速度,N為采集數據的通道數目,M為每通道采集的字節數,H為采集頻率,K為緩沖區大小,U為傳輸的協議開銷字節數。USB數據幀的組成包括有效數據和協議開銷兩個部分,其中傳輸協議的開銷包括同步字段、包標識符、地址信息、端點信息和CRC校驗,所以數據采集系統要求的USB傳輸速度可根據公式(1)計算得到。本文設計的數據采集系統共有8個通道,每通道有2個字節的數據,采集頻率為1 000 Hz,根據公式(2)可得有效數據的傳輸速度約為16 kB/s.一個完整的數據幀的傳輸需要11個字節的協議開銷,本文設計的數據傳輸過程分為4個步驟:發送傳輸請求,發送接收控制命令,接收請求應答,開始接收數據,每個步驟均需傳輸一個完整的USB數據幀,因此進行一次傳輸的協議開銷為44個字節,根據公式(3)可計算出協議開銷的傳輸速度。以緩沖區的大小為橫坐標,數據采集系統要求的USB傳輸速度為縱坐標繪出圖4所示的關系圖,分析該圖可得:緩沖區越大,所要求的USB傳輸速度越少。測試中較少的128字節緩沖區使得在一次傳輸中有效數據過少,約5.5 kB/s的額外開銷傳輸速度約占總速度的25%,過高的額外傳輸開銷導致數據來不及傳輸,從而發生數據丟失的情況。
圖4 緩存區大小與USB傳輸速度關系圖
2)另外,由于應用程序要在SD卡這類低速設備上記錄數據,所以記錄數據的時候來不及獲取USB設備中的數據也會導致實際的傳輸速度變慢,導致新采集的數據溢出緩沖區并覆蓋來不及傳輸的舊數據,從而造成數據丟失。
因此有必要采取一定的方法來改善數據采集系統,以保證數據采集的完整性。下面將提出3個解決方法。
3.3 系統改善措施
1)增大晶振頻率到24MHz,加快單片機的處理速度。
2)在硬件上增加靜態RAM作為數據存儲的緩沖區,緩沖區的存在一方面可以保證新采集的數據不會覆蓋沒來得及傳輸的舊數據,另一方面可以讓USB設備在一次USB數據幀的傳輸中所含有的有效數據更多,從而減少在傳輸過程中的校驗、識別和握手等USB協議的額外開銷,加快傳輸速度。
3)在應用程序控制USB設備時將新建2條線程,一條進程用于向USB設備進行讀寫操作來進行數據采集,另一條進程用于向嵌入式系統的SD卡這類低速設備進行讀寫操作來記錄數據,利用操作系統分時復用的特性減少數據記錄過程對數據傳輸造成的延誤,從而加快USB設備的傳輸速度。
4 結束語
本文從硬件結構、固件程序和驅動程序3個方面對基于嵌入式USB接口的數據采集系統進行了設計。最后還通過實際采集正弦波信號對系統進行了測試,并提出了3個方法有效地提高了數據采集系統的傳輸速度。本系統能在擁有USB接口的嵌入式設備上方便地進行連接和安裝,是數據采集應用的一個重要部分。
(審核編輯: 小丸子2)
分享