基于ADuC841的USB接口數據采集系統設計
摘要: 本文提出了一種傅立葉光譜儀中USB數據采集系統的簡易實現。
關鍵詞: USB;微控制器;多通道;數據采集
引言
在微機測控系統中,經常會遇到需要輸入各種模擬信號的情況,這時必然要進行A/D轉換。有時在某些實際項目中,為了采集某些模擬量而選用一些專用的數據采集卡,不僅使得系統更加復雜,不容易實現功能擴展,還增加了系統設計成本。另一方面,USB接口操作簡單越來越得到廣泛的應用,因此設備的USB接口化也是一個發展趨勢。
XFT-1型開放式傅立葉變換光譜儀采用了經典的麥克爾遜干涉儀,干涉后的光強隨著動鏡的移動而發生變化,光電接收器將接收到的緩慢變化的光強信號轉化為了相應的電壓信號。為了去除由于動鏡移動速度不均勻所造成的誤差,模塊中采用了雙通道,同時測量參考光(He-Ne 激光)和被測光源后,利用參考光的信息校正被測光測量位置誤差。在XFT-1型開放式傅立葉變換光譜儀中,采用了本文提出的這種簡易的USB數據采集系統。考慮到經濟、實用因素,系統中采用了單片機和通用USB接口芯片,將兩者結合實現USB接口的數據采集系統設計。上位PC則采用了C#語言編程,將采集到的數據實時顯示、處理分析、數據保存和打印。
硬件電路設計
本系統以ADI公司的ADuC841為核心實現數據采集和控制。此單片機具有單指令周期20MIPS 8052內核和8通道高速420Ksps、12bit模/數轉換器,支持在線下載。控制器和ADC集成縮短了開發時間,提高了系統的穩定性。
本文以南京沁恒的USB接口芯片CH375為核心實現USB數據傳輸。如下特點:兼容USB2.0;內置固件模式下屏蔽了相關的USB 協議,自動完成標準的USB 枚舉配置過程,完全不需要本地端控制器作任何處理,簡化了單片機的固件編程;通用Windows 驅動程序提供設備級接口,通過DLL 提供API 應用層接口。
ADuC841和CH375的接口電路圖如圖1所示。ADuC841和CH375有串行和并行兩種數據線連接方法。模塊中為了提高速度采用了并行的方法,將ADuC841的P0口與CH375的并行總線相連。除了讀寫信號連接外,采用A14作為地址位。A14=0,表示數據總線上是數據;A14=1,表示數據總線上是命令。USB傳輸過程中,ADuC841與CH375通過外部中斷觸發,采用ADuC841的INT0外部中斷引腳直接和CH372的INT#引腳相連。CH375在正常工作時ACT#引腳輸出為低電平,因此在電源和此引腳間加一個發光二極管能夠指示USB接口芯片是否正常工作。發光二極管的亮滅為下位機程序的調試提供了重要的信息。
系統軟件設計
系統軟件是由下位機程序(固件程序)、USB系統驅動程序和應用程序三部分構成。利用USB協議傳輸數據的模型如圖2所示。本系統的軟件程序主要包括單片機C語言編寫的數據采集和數據傳輸子程序,以及用C#編寫的上位PC機采集到的數據實時顯示、處理分析、數據保存和打印子程序。
下位機程序
設備的固件程序是數據采集系統的核心,下位機程序主要利用KeilC51編寫。為了降低復雜程度和增加程序的可維護性,下位機程序設計采用先查詢PC機通過USB接口傳過來的命令再執行的方式。在上位機和下位機通訊過程中設定協議,在協議中設定相應的命令字和校驗字段。主要的命令字有系統檢測是否正常、設定采樣頻率、設定采樣點數、采樣啟動信號等。下位機主程序為不斷掃描命令字變量,看其是否有效。被監視命令字初始設為無效,上位機發出新的命令字后,下位機進入中斷子程序接收命令字,命令字設為有效。下位機掃描到新命令字的內容后,執行相應的操作,然后將待監視命令字設為無效,繼續等待新的命令字。這種設計細化了任務的功能,有利于開發、調試和維護。
數據采集子程序在主程序接收到啟動數據采集過程命令字后運行。當單片機接收到上位機通過USB發送過來的命令字后,啟動數據采集過程。它利用片內的定時器設定采集時間間隔,利用片內的ADC進行數據采集。在定時中斷子程序中,單片機將采集兩個通道的數據,將它們按一定的順序存放到緩沖區中,然后檢查緩沖區是否滿,如果緩沖區不滿,定時中斷子程序結束,否則將緩沖區中的數據通過CH375發送給上位機,清空緩沖區,定時中斷子程序結束。
USB驅動程序
本系統的一大優點就是開發容易。南京沁恒公司已經為用戶提供了通用的USB驅動程序。只需要安裝現有的USB驅動安裝程序,它為應用程序的開發提供了很多接口函數。由于主要采用批量上傳和批量下載方式,所以主要用到CH375ReadData,CH375WriteData等函數。這一部分不需編寫程序。
上位機程序
上位機程序可以采有多種軟件開發工具,本系統在Visual Studio2005開發環境下,用C#語言編寫了應用程序。主要完成讀取、顯示、保存、打開和打印數據等工作。
數據讀取過程是上位機程序的關鍵部分。為了在從下位機讀取數據時不影響數據采集界面響應的流暢,在程序設計中利用多線程實現數據讀取。數據采集工作在單獨的子線程中完成,而主線程則負責完成鼠標、鍵盤等對用戶的響應。在數據采集子線程中,通過DLL 提供API 應用層接口直接訪問USB驅動程序中的緩沖區。成功打開設備后,利用CH375WriteData接口函數向緩沖區中寫命令字,向單片機發送命令;利用CH375ReadData接口函數讀取緩沖區中的數據,獲得采集到的數據。
在Visual Studio2005開發環境下,編寫上位機程序開發難度相對較低。數據實時顯示增加了數據采集過程的直觀性。將采集到的數據通過GDI+在PictureBox控件上繪圖,設置一個軟件定時器,每隔一定的時間將圖形重繪一次,由于時間間隔小于0.1s,視覺上是連續變化的曲線。數據的保存和打開功能主要是利用C#中的StreamWriter類和StreamReader類完成。打印數據和圖形主要使用PrintDocument類,調用Print方法后,在PrintDocument_PrintPage事件中將需要打印的文字和圖形輸出或重繪即可打印。
結語
利用單片機和USB接口芯片的簡單連接即可擴展出一個USB接口的數據采集模塊,而且無需外擴數據存儲器,同時,該采集系統還可充分利用ADuC841豐富的片上外設和I/O資源進行功能上的擴展。在XFT-1型開放式傅立葉變換光譜儀系統中,利用了ADuC841通過同步電機控制麥克爾遜干涉儀動鏡位置。經過測試,該系統采樣數據精度較高,傳輸速率較快,性能穩定,通過與PC機相連后,不僅使得數據存儲量大,而且更易于進行數據處理,經濟簡單,在XFT-1型開放式傅立葉變換光譜儀系統中性能穩定。
參考文獻:
1. http://www.analog.com/UploadedFiles/Data_Sheets/ 247905996157419352262670829ADuC841_2_3_0.pdf
2. Universal Serial Bus Specification Reversion 1.1. www.usb.org, 1998
3. http://winchiphead.com/download/CH372/CH372DS1.PDF
4. http://winchiphead.com/download/CH372/CH372DS2.PDF
干涉儀相關文章:干涉儀原理
電機保護器相關文章:電機保護器原理
評論