王 龍,聶強(qiáng)廣
隨著科技的進(jìn)步,工業(yè)應(yīng)用中數(shù)據(jù)采集技術(shù)標(biāo)準(zhǔn)要求的提高,數(shù)據(jù)采集的增多,數(shù)據(jù)記錄儀的設(shè)計(jì)必須考慮存儲(chǔ)設(shè)備的存儲(chǔ)容量、速度、質(zhì)量、便攜性及工業(yè)應(yīng)用環(huán)境等因素[1].
本設(shè)計(jì)構(gòu)成的模塊有:主控處理器、數(shù)據(jù)通信模塊、flash讀取模塊、U盤讀取模塊、電源管理模塊,具體構(gòu)成如圖1所示.
圖1 整體框架圖
首先ATmega128主控芯片將外部接收到的數(shù)據(jù),緩存到大容量flash中,再?gòu)膄lash中將緩存的數(shù)據(jù)讀出,借助U盤控制芯片CH376s將數(shù)據(jù)存入U(xiǎn)盤中.其采用flash作為前級(jí)數(shù)據(jù)緩存的目的,是實(shí)現(xiàn)數(shù)據(jù)寫入的速率與flash的存儲(chǔ)速率的匹配,不會(huì)因?yàn)閿?shù)據(jù)在采集時(shí)受U盤存儲(chǔ)數(shù)據(jù)的速率限制,達(dá)成數(shù)據(jù)采集與存儲(chǔ)的最佳效果.本設(shè)計(jì)有以下優(yōu)點(diǎn).
(1)將U盤應(yīng)用于高速數(shù)據(jù)記錄儀,U盤高速數(shù)據(jù)記錄儀因避免了操作系統(tǒng)容易崩潰的問(wèn)題而具有更高的可靠性,操作簡(jiǎn)單方便且成本低廉.
(2)采用flash作為前級(jí)數(shù)據(jù)緩存的目的是實(shí)現(xiàn)數(shù)據(jù)在采集存儲(chǔ)時(shí)寫入的速率與flash的存儲(chǔ)速率完成有效的匹配,避免數(shù)據(jù)在采集存儲(chǔ)時(shí)受到U盤存儲(chǔ)數(shù)據(jù)速率的限制,完成數(shù)據(jù)采集與存儲(chǔ)的最佳效果.
由U盤構(gòu)成的數(shù)據(jù)儲(chǔ)存記錄儀,實(shí)現(xiàn)了快速實(shí)時(shí)數(shù)據(jù)采集,能在單片機(jī)的控制下快速將數(shù)據(jù)存儲(chǔ)到大容量U盤中,并且能脫離計(jì)算機(jī)控制實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ),滿足了在特殊條件下使用USB接口傳輸存儲(chǔ)數(shù)據(jù).本設(shè)計(jì)可面向海量數(shù)據(jù)采集存儲(chǔ)、設(shè)備黑匣子、考勤機(jī)數(shù)據(jù)記錄、水文監(jiān)測(cè)、無(wú)紙記錄儀及自動(dòng)化生產(chǎn)線等應(yīng)用場(chǎng)合.例如在原始生態(tài)自然保護(hù)區(qū),需要記錄某段時(shí)間內(nèi)的降雨量或者是實(shí)時(shí)溫度變化情況,就可以通過(guò)雨量計(jì)量?jī)x或者溫度測(cè)量?jī)x檢測(cè)出相應(yīng)數(shù)據(jù),再結(jié)合數(shù)據(jù)存儲(chǔ)器實(shí)時(shí)準(zhǔn)確記錄數(shù)據(jù),為生態(tài)環(huán)境研究提供可靠的數(shù)據(jù)[2].
flash芯片型號(hào)是W25Q128BV,容量有128M-bit,工作電壓2.7~3.6V,最大工作頻率100MHz[3],可以通過(guò)串行方式,將代碼映射到RAM中,再通過(guò)spi控制方式來(lái)調(diào)控代碼和實(shí)現(xiàn)聲音、文本、數(shù)據(jù)的存儲(chǔ).W25Q128BV主要采用四條數(shù)據(jù)總線即CLK、/CS、DI、DO,他們分別對(duì)應(yīng)片選信號(hào)、數(shù)據(jù)輸入端、數(shù)據(jù)輸出端、時(shí)鐘控制信號(hào),spi特點(diǎn)就是在發(fā)送每個(gè)數(shù)據(jù)的同時(shí)也會(huì)接收到對(duì)方一個(gè)字節(jié)的數(shù)據(jù).
本設(shè)計(jì)中flash芯片W25Q128BV采用spi通信操作方式.spi控制方式主要有四條數(shù)據(jù)控制線,即MISO、MOSI、SCLK三條主要的數(shù)據(jù)線,另外一條是片選線CS,它主要控制spi接口的主從方式,當(dāng)設(shè)置為0時(shí)即為從設(shè)備,設(shè)置1也就是主設(shè)備.主從選擇非常方便,只需控制CS信號(hào)線的高低電平便可以快速選擇主從設(shè)備.
單片機(jī)與flash連接如圖2所示,CLK連接PB5、/CS連接PB4、DO連接PB6、DI連接PB7,程序配置流程,配置引腳使能,spi時(shí)鐘,系統(tǒng)IO口初始化,進(jìn)入spi初始化,判斷指定的spi標(biāo)志位是否已經(jīng)設(shè)置好,讀取發(fā)送緩存的空標(biāo)志位,判斷是否配置好spi緩存標(biāo)志.
圖2 單片機(jī)與flash連接
驅(qū)動(dòng)CH376s步驟.
配置頭文件,這其中有Atmega128相應(yīng)的頭文件及CH376應(yīng)用層和硬件層、文件系統(tǒng)層頭文件,例如#include
初始化后應(yīng)答正常就進(jìn)入中斷,中斷函數(shù)是CH376DiskConnect,等待U盤插入,緊接著檢查U盤相關(guān)信息,比如U盤的容量,接著創(chuàng)建文本文檔,通過(guò)串口返回監(jiān)測(cè)結(jié)果,初始化成功后,進(jìn)入接收數(shù)據(jù)狀態(tài).
異步串口通訊方式主要包括:數(shù)據(jù)讀RXD和串行數(shù)據(jù)輸出引腳TXD.
CH376使用的串行數(shù)據(jù)傳輸格式采用字節(jié)傳輸方式,包含1位起始位和8位數(shù)據(jù)位及1位停止標(biāo)志位[4].默認(rèn)設(shè)置的波特率是 9600bp,如果要修改波特率需要修改函數(shù)CMD_SET_BAUDRATE.
通訊過(guò)程中,分為兩個(gè)階段,即發(fā)送命令階段和命令應(yīng)答階段.其中發(fā)送命令也就是使用者向?qū)懭肫鳎ù趓s-233)提出操作申請(qǐng)和數(shù)據(jù)應(yīng)答,命令應(yīng)答是寫入器向用戶命令返回的響應(yīng).
軟件接口功能.首先檢測(cè)U盤的狀態(tài)(如插入,拔出),創(chuàng)建文件和目錄(支持長(zhǎng)文件名文件和目錄),打開一個(gè)已經(jīng)創(chuàng)建的文件和目錄(支持長(zhǎng)文件名文件和目錄),從文件中讀取指定長(zhǎng)度和指定位置的數(shù)據(jù)(支持長(zhǎng)文件名文件和目錄).
寫數(shù)據(jù)到指定文件的指定地址(支持長(zhǎng)文件名文件和目錄),列舉目錄下的文件和目錄(支持長(zhǎng)文件名文件和目錄),刪除文件和目錄(支持長(zhǎng)文件名文件和目錄),查詢U盤容量.
CH376的通信方式是異步串行通信UART,其中包含:RXD為串行數(shù)據(jù)輸入,TXD為數(shù)據(jù)輸出[5].采用這種通信方式的優(yōu)勢(shì)是減少與單片機(jī)的連線.CH376s在通信中的數(shù)據(jù)格式屬于標(biāo)準(zhǔn)的字節(jié)傳輸模式,一位啟始位,八位數(shù)據(jù)位,一位停止位.CH376能夠適應(yīng)硬件設(shè)定的串行通訊波特率,當(dāng)然也可以修改函數(shù)CMD_SET_BAUDRATE以匹配單片機(jī)的波特率.每次上電復(fù)位后,CH376s的波特率取決于BZ和SCK和SDI三個(gè)引腳的電平組合,與單片機(jī)的連線如圖3所示.
圖3 ch376模塊電路圖
數(shù)據(jù)采集是通過(guò)rs232標(biāo)準(zhǔn)串口通信,用串口軟件將數(shù)據(jù)發(fā)送給單片機(jī),再通過(guò)單片機(jī)spi傳輸方式傳輸給flash,進(jìn)行緩存.atmega128將flash緩存數(shù)據(jù)讀取出來(lái),通過(guò)uart通信將數(shù)據(jù)存入U(xiǎn)盤.數(shù)據(jù)采取通過(guò)RS-232數(shù)據(jù)線與電腦的串口調(diào)試助手進(jìn)行通信,從而達(dá)到模擬數(shù)據(jù)采集,當(dāng)數(shù)據(jù)存入U(xiǎn)盤后會(huì)返還一個(gè)代碼14給單片機(jī),告知它一次數(shù)據(jù)存入完成,也會(huì)通過(guò)串口調(diào)試助手進(jìn)行顯示,便于監(jiān)測(cè).
在單片機(jī)中TXD、RXD是TTL電平,要將接收的信號(hào)轉(zhuǎn)成TTL電平,必須借助max323芯片來(lái)實(shí)現(xiàn),將USB數(shù)據(jù)信號(hào)換成TTL電平數(shù)據(jù),或?qū)TL電平轉(zhuǎn)換成USB信號(hào),數(shù)據(jù)發(fā)送以100ms為周期,進(jìn)行自動(dòng)數(shù)據(jù)傳輸,便于直觀監(jiān)測(cè).電平轉(zhuǎn)換電路如圖4所示.
圖4 電平轉(zhuǎn)換電路
主程序流程如圖5所示.主程序首先對(duì)定時(shí)器、I/O口資源、wrd128flash、CH376s、串口通信等進(jìn)行初始化.初始化后應(yīng)答正常就進(jìn)入中斷,中斷函數(shù)是CH376DiskConnect,等待U盤插入,緊接著檢查U盤相關(guān)信息,比如U盤的容量,接著創(chuàng)建文本文檔,通過(guò)串口返回監(jiān)測(cè)結(jié)果,初始化成功后,寫數(shù)據(jù)到緩沖區(qū),讀緩沖區(qū)數(shù)據(jù)到寫入U(xiǎn)盤.
圖5 主程序流程圖
數(shù)據(jù)采集最先在flash中緩存,其中flash中是以數(shù)組形式進(jìn)行存儲(chǔ),數(shù)據(jù)分為一位空閑檢測(cè)位、一位地址位、八位數(shù)據(jù)位.主要采用的讀取方式是spi,讀取寄存器sprd.
將flash數(shù)據(jù)轉(zhuǎn)存到U盤中,采用異步串行通信數(shù)據(jù)幀格式傳輸,數(shù)據(jù)幀是一位數(shù)據(jù)起始位、八位數(shù)據(jù)位、一位校驗(yàn)位和一位停止位.
主程序除了對(duì)所用到的外設(shè)資源進(jìn)行初始化之外還調(diào)用了3個(gè)子程序,分別是模擬數(shù)據(jù)傳感器的數(shù)據(jù)讀寫程序、flash暫存讀取程序、對(duì)CH376s數(shù)據(jù)處理程序.CH376工作流程圖如圖6所示,初始化成功后,進(jìn)入接收數(shù)據(jù)狀態(tài).首先檢測(cè)U盤的狀態(tài)(如插入,拔出),創(chuàng)建文件和目錄,打開一個(gè)已經(jīng)創(chuàng)建的文件和目錄,從文件中讀取指定長(zhǎng)度和指定位置的數(shù)據(jù),最后等待設(shè)備的移除.
圖6 CH376工作流程圖
串口助手調(diào)試如圖7所示,開機(jī)上電,自檢初始化,返回U盤信息狀態(tài),返回指令字符14,初始化成功,通過(guò)串口通信發(fā)送數(shù)據(jù)給單片機(jī),波特率為9600bps,自動(dòng)寫數(shù)據(jù)周期為1000ms,模擬數(shù)據(jù)發(fā)送,每次數(shù)據(jù)寫入成功會(huì)返回字符代碼14,并自動(dòng)換行.
圖7 串口助手調(diào)試
借助串口調(diào)試助手XCOM V1.4進(jìn)行調(diào)試,需要安裝串口驅(qū)動(dòng)程序和CH340串口驅(qū)動(dòng),連接硬件打開串口,波特率設(shè)置9600bps,CH376模塊指示燈亮燈,表明連接正常,串口助手與單片機(jī)握手,進(jìn)行U盤數(shù)據(jù)信息讀取,并且在U盤中創(chuàng)建一個(gè)txt文件用于存儲(chǔ)數(shù)據(jù).一切正常時(shí)會(huì)返回初始化成功的命令,并通過(guò)串口助手進(jìn)行顯示,這時(shí)就能進(jìn)行模擬數(shù)據(jù)采集了.
利用串口軟件將數(shù)據(jù)發(fā)送給單片機(jī),單片機(jī)接收到數(shù)據(jù)后通過(guò)spi傳輸方式傳給flash進(jìn)行緩存.atmega128將flash緩存中的數(shù)據(jù)讀取出來(lái),然后通過(guò)uart通信將數(shù)據(jù)存入U(xiǎn)盤.數(shù)據(jù)采集是通過(guò)RS-232數(shù)據(jù)線與電腦的串口調(diào)試助手進(jìn)行通信,從而達(dá)到模擬數(shù)據(jù)采集,當(dāng)數(shù)據(jù)存入U(xiǎn)盤后會(huì)返還代碼14給單片機(jī)告知它一次數(shù)據(jù)存入完成,也會(huì)通過(guò)串口調(diào)試助手進(jìn)行顯示,能直觀地看到一次數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)和完成,還可以通過(guò)電腦訪問(wèn)U盤中存儲(chǔ)的數(shù)據(jù),圖8就是U盤中接收的數(shù)據(jù),存儲(chǔ)在一個(gè)txt文件中.
圖8 數(shù)據(jù)存儲(chǔ)效果圖