低成本的U盤數據采集器設計
3 系統軟件設計
如圖5所示,C8051F340單片機主程序需要首先完成單片機I/O引腳的設置與相關寄存器配置,然后讀取P4口用戶輸入控制指令,并根據用戶指令設置A/D轉換器參數,接著初始化CH375通信端口,進而初始化CH375芯片及其程序庫。緊接著檢查U盤是否插入,以及插入的U盤是否準備就緒。一旦U盤準備就緒,就在U盤新建文本文件格式的數據采集文件,然后打開文件,并使文件指針指向文件尾部以方便后面寫入采集數據。所有準備工作完成,就可以啟動A/D轉換器。如果采樣數據達到U盤1個扇區512字節,那么就可以將采樣數據一次性寫入U盤的1個扇區中。這里需要注意兩點。第一,U盤讀寫可以字節為單位也可以塊為單位,以字節為單位需要頻繁訪問U盤,從而導致U盤存儲速度下降,使用壽命縮短,而以U盤1個扇區的512字節為單位讀寫U盤則可以很好地解決這個問題;另外,為了實現不間斷實時采樣,在設計數據的采集和存儲時采用了“乒乓制”,即在單片機開辟了A、B兩個512字節的RAM存儲區,而A、B兩個存儲區分別交替完成存儲采樣數據和將采樣數據搬移到U盤中的任務,相互獨立工作,互不干擾,有效地解決了存儲數據與搬移數據可能出現的沖突。第二,A/D轉換器采集到的數據不是真實的電壓值,而只是真實電壓值與參考電壓相比的相對值,因此為了今后對采樣值分析方便,還需要計算出真實采樣電壓值,并將數字轉換為字符后再存儲到U盤采樣數據文件中。
C8051F340單片機通過CH375訪問U盤是系統軟件的核心部分,在實現這部分功能的程序中使用了南京沁恒電子有限公司開發的CH375HF5.LIB庫函數。這里以系統插入U盤,向U盤寫入512字節數據,然后拔出的過程為例,簡單介紹單片機訪問CH375的程序流程。
系統初始化成功后,調用xQueryInterrupt()函數查詢CH375中斷并更新中斷狀態,等待U盤插入。U盤插入后,經過一段延時,系統調用CH375DiskReady()函數查詢U盤是否準備就緒。U盤一旦就緒,系統調用mCopyCodeStringToIRAM()和CH375FileCreate()函數,在U盤根目錄新建采樣數據文件,并調用CH375FileOpen()函數打開文件,接著使用語句
mCmdParam.ByteLocate.mByteOffset=Oxffffffff使文件指針指向文件的尾部,以方便后面添加采樣數據。如果已完成512字節采樣數據的采集,則調用CH375FileWriteX()函數,實現U盤一個扇區的寫操作。寫操作完畢后,需要利用下列4個語句:
mCmdParam.Modify.mFileAttr=Oxff
mCmdParam.Modify.mFileTime=MAKE_FILE_TIME()
mCmdParam.Modify.mFileDate=MAKE_FILE_DATE()
mCmdParam.Modify.mFileSize=0xffffffff
對文件屬性、時間、日期、長度等參數進行修改,然后調用CH375FileModify()函數完成對上述4個文件屬性的更新。最后系統調用CH375FileClose()函數關閉文件,調用xQueryInterrupt()函數查詢CH375中斷并更新中斷狀態,等待U盤拔出,從而最終完成對U盤的訪問。
結語
本文設計的數據采集器利用高度集成的C8051F340處理器實現了數據A/D轉換和系統控制,利用CH375實現了采集器的USB主機功能,從而使采集的數據能以FAT32文件系統格式直接存儲到U盤中。該采集器數據收集方便,便于計算機分析,同時僅有C8051F340和CH375兩個主要器件,結構簡單,工作穩定,只有名片大小,成本不足50元(不包括U盤),已成功應用于工業現場。
評論