摘要:在單片機(jī)高速數(shù)據(jù)采集存儲(chǔ)系統(tǒng)中,高速數(shù)據(jù)采集、海量數(shù)據(jù)存儲(chǔ)以及它們之間的數(shù)據(jù)傳輸是關(guān)鍵技術(shù)。本系統(tǒng)結(jié)合了兩種高頻信號(hào)的采集與處理系統(tǒng)的優(yōu)點(diǎn),基于單片機(jī)的高速數(shù)據(jù)采集與海量數(shù)據(jù)存儲(chǔ)系統(tǒng)。
關(guān)鍵詞:單片機(jī) 數(shù)據(jù)系統(tǒng) 設(shè)計(jì)
對(duì)高頻信號(hào)的采集與處理系統(tǒng),通常的做法有兩種:一是選用速度快,內(nèi)存大的計(jì)算機(jī),并配備高速的A/D采樣板;二是以單片機(jī)為核心,配備高速A/D芯片與大容量電子盤(pán),采集結(jié)束后再進(jìn)行數(shù)據(jù)處理。前者雖然硬軟件開(kāi)發(fā)簡(jiǎn)單,但造成儀器成本的增加,體積大,對(duì)運(yùn)行環(huán)境要求嚴(yán)格,而且當(dāng)距信號(hào)源距離較遠(yuǎn)或測(cè)量多路信號(hào)時(shí),信號(hào)傳輸比較困難,有些情況甚至無(wú)法實(shí)現(xiàn)。后者持續(xù)采集時(shí)間受存儲(chǔ)器容量的限制,在許多場(chǎng)合可能無(wú)法滿足要求,而存儲(chǔ)器容量的增加,其價(jià)格也會(huì)成倍增長(zhǎng)。
用于PC系統(tǒng)的硬盤(pán),以其容量大、接口智能化程度高、控制方便越來(lái)越受到人們的重視。充分發(fā)揮硬盤(pán)的優(yōu)勢(shì),利用單片機(jī)控制普遍應(yīng)用的IDE接口硬盤(pán),可極大地提高系統(tǒng)的性能價(jià)格比,因此本系統(tǒng)采用硬盤(pán)進(jìn)行海量數(shù)據(jù)存儲(chǔ)。選擇高速A/D芯片完成高速數(shù)據(jù)采集不難,關(guān)鍵是A/D模塊與硬盤(pán)之間的數(shù)據(jù)傳輸。本系統(tǒng)采用高速雙口RAM作為兩者之間的接口進(jìn)行數(shù)據(jù)緩存,很好地解決了這一問(wèn)題。
一、系統(tǒng)結(jié)構(gòu)及工作原理
高速數(shù)據(jù)采集與存儲(chǔ)系統(tǒng)結(jié)構(gòu)如圖1,主要包括單片機(jī)、高速A/D轉(zhuǎn)換模塊、高速雙口RAM、IDE硬盤(pán)、可編程邏輯控制等。其工作原理:高頻信號(hào)經(jīng)噪聲抑制、自動(dòng)增益控制、信號(hào)放大等調(diào)理,送入高速A/D轉(zhuǎn)換模塊變成數(shù)字信號(hào),在可編程邏輯控制器(產(chǎn)生寫(xiě)地址及控制信號(hào))的控制下,從左邊寫(xiě)如一片高速雙口RAM中,同樣在可編程邏輯控制器(產(chǎn)生讀地址及控制信號(hào))的控制下,從雙口RAM的右邊讀出數(shù)據(jù),存人由單片機(jī)控制的IDE接口硬盤(pán)中。在上述過(guò)程中,由于寫(xiě)速度比讀速度快得多,不會(huì)出現(xiàn)讀寫(xiě)地址重疊的情況,因此,向雙口RAM讀寫(xiě)數(shù)據(jù)可以同時(shí)進(jìn)行。在整個(gè)系統(tǒng)中,單片機(jī)起核心作用,既要控制數(shù)據(jù)的采集,同時(shí)要控制IDE硬盤(pán)的數(shù)據(jù)存儲(chǔ)。為了協(xié)調(diào)數(shù)據(jù)采集與存儲(chǔ)之間的速度不一致的矛盾,雙口RAM起了非常重要的作用,同時(shí)也使系統(tǒng)的電路得到簡(jiǎn)化。
二、系統(tǒng)硬件設(shè)計(jì)
下面以最高采樣頻率達(dá)到500KHZ,轉(zhuǎn)換分辨率為14Bit,每幀數(shù)據(jù)量為141KB,存儲(chǔ)數(shù)據(jù)量最少10G的系統(tǒng)為例,介紹系統(tǒng)硬件設(shè)計(jì)。系統(tǒng)硬件電路分為數(shù)據(jù)采集與數(shù)據(jù)存儲(chǔ)兩個(gè)部分。
1、數(shù)據(jù)采集電路設(shè)計(jì)
基于雙口RAM的數(shù)據(jù)采集與傳輸系統(tǒng)如圖2,其中,A/D轉(zhuǎn)換器采用14位A/D轉(zhuǎn)換器LTC1419,其最高轉(zhuǎn)換頻率為800KHZ,能滿足系統(tǒng)要求。雙口RAM采用IDT7024,其左端口作為數(shù)據(jù)采集輸入口,16位數(shù)據(jù)線直接與A/D轉(zhuǎn)換器的14位輸出數(shù)據(jù)線相連,寫(xiě)地址及控制信號(hào)有CPLD器件EPM7064產(chǎn)生;其右端口與IDE硬盤(pán)連接。
工作時(shí),單片機(jī)首先通過(guò)P1.1腳向EPM7064組成的實(shí)時(shí)采集控制電路發(fā)出“開(kāi)始采樣”信號(hào),啟動(dòng)一次實(shí)時(shí)采集過(guò)程。這時(shí)A/D轉(zhuǎn)換器便在EPM7064提供的采樣脈沖信號(hào)的驅(qū)動(dòng)下進(jìn)行A/D轉(zhuǎn)換,每個(gè)采樣脈沖信號(hào)的下降沿啟動(dòng)轉(zhuǎn)換,轉(zhuǎn)換后的數(shù)據(jù)通過(guò)BUSY的上升沿鎖存在A/D轉(zhuǎn)換器的數(shù)據(jù)輸出端。為了將轉(zhuǎn)換后的數(shù)據(jù)可靠、實(shí)時(shí)地寫(xiě)入到雙口RAM中,根據(jù)IDT7024的時(shí)序要求,EPM7064送到CER引腳的寫(xiě)信號(hào)最少應(yīng)滯后BUSY信號(hào)上升沿4ns,為此將BUSY信號(hào)經(jīng)兩次反相(約延時(shí)14ns)再送至IDT7024的CER引腳,作為寫(xiě)信號(hào)。雙口RAM寫(xiě)入端地址由EPM7064內(nèi)的地址計(jì)數(shù)器給出,地址計(jì)數(shù)器的初值為零,采集開(kāi)始后,對(duì)應(yīng)每個(gè)采樣脈沖的上升沿,地址計(jì)數(shù)器加1,從而保證產(chǎn)生的寫(xiě)地址A/D轉(zhuǎn)換的過(guò)程同步。上述過(guò)程將重復(fù)1024次,此時(shí)雙口RAM已經(jīng)存儲(chǔ)了一數(shù)據(jù),EPM7064停止地址的增加,至此完成了一次采集與存儲(chǔ)的過(guò)程。當(dāng)寫(xiě)入雙口RAM的數(shù)據(jù)達(dá)到一定數(shù)目時(shí)(例如10個(gè)),EPM7064向單片機(jī)P1.3 腳發(fā)出“取數(shù)據(jù)信號(hào)”,啟動(dòng)IDE硬盤(pán)從雙口RAM的首地址開(kāi)始讀取數(shù)據(jù),當(dāng)硬盤(pán)將雙口RAM中數(shù)據(jù)全部取走后,然后再進(jìn)行新一輪數(shù)據(jù)采集。
2、數(shù)據(jù)存儲(chǔ)部分設(shè)計(jì)
IDE接口的硬盤(pán)驅(qū)動(dòng)器提供了兩種數(shù)據(jù)傳輸模式:PIO模式和DMA模式。由于PIO模式控制相對(duì)容易,提供了一種編程控制輸入/輸出的快速傳輸方法。該模式采用高速的數(shù)據(jù)塊I/O,以扇區(qū)為單位,用中斷請(qǐng)求方式進(jìn)行批量數(shù)據(jù)交換。在扇區(qū)讀寫(xiě)操作時(shí),一次按16位長(zhǎng)度通過(guò)內(nèi)部的高速PIO數(shù)據(jù)寄存器傳輸。通常情況下,數(shù)據(jù)傳輸以扇區(qū)為單位,每傳輸一扇區(qū)數(shù)據(jù)產(chǎn)生一個(gè)中斷。本系統(tǒng)針對(duì)20G或以上IDE筆記本小硬盤(pán)設(shè)計(jì)。IDE接口是一種任務(wù)寄存器結(jié)構(gòu)的接口,所有輸入輸出操作均通過(guò)對(duì)相應(yīng)寄存器的讀寫(xiě)完成。硬盤(pán)在讀寫(xiě) 16 位數(shù)據(jù)時(shí),PC 機(jī)中使用 INSW 指令或 OUTSW 指令實(shí)現(xiàn) 16 位數(shù)據(jù)讀/寫(xiě)操作,由 I/O 端口直接到內(nèi)存。而在本系統(tǒng)中采用 MCS-51 系列單片機(jī)控制硬盤(pán),使數(shù)據(jù)傳輸在硬盤(pán)端口寄存器與緩沖存儲(chǔ)器之間進(jìn)行,不經(jīng)過(guò)單片機(jī),單片機(jī)只是對(duì)硬盤(pán)進(jìn)行初始化,并發(fā)相應(yīng)的寫(xiě)命令。這樣,在單片機(jī)的控制下,數(shù)據(jù)從雙口RAM的左邊入,右邊出,實(shí)現(xiàn)了高速數(shù)據(jù)無(wú)丟失存儲(chǔ)。在向硬盤(pán)驅(qū)動(dòng)器發(fā)出命令前,必須先檢測(cè)硬盤(pán)驅(qū)動(dòng)器是否忙碌(D7=1)。如果在規(guī)定時(shí)間內(nèi)硬盤(pán)驅(qū)動(dòng)器一直忙碌,則置超時(shí)錯(cuò);否則表示硬盤(pán)驅(qū)動(dòng)器空閑,可接受命令。
對(duì)硬盤(pán)寫(xiě)數(shù)據(jù)時(shí),首先單片機(jī)把必要的參數(shù)寫(xiě)入對(duì)應(yīng)的地址寄存器,等待DRDY有效;然后將操作碼寫(xiě)入命令寄存器,同時(shí)驅(qū)器設(shè)置狀態(tài)寄存器的DRQ位,表示準(zhǔn)備好接收數(shù)據(jù),雙口RAM通過(guò)數(shù)據(jù)寄存器將數(shù)據(jù)寫(xiě)入扇區(qū)緩沖區(qū);當(dāng)扇區(qū)緩沖區(qū)填滿后,驅(qū)動(dòng)器清除DRQ位,并置位BSY,驅(qū)動(dòng)器將扇區(qū)緩沖區(qū)中數(shù)據(jù)寫(xiě)入磁盤(pán);當(dāng)寫(xiě)盤(pán)結(jié)束,清除BSY位,發(fā)中斷請(qǐng)求信號(hào)DNTRQ;CPU接收到中斷信號(hào)后,讀驅(qū)動(dòng)器狀態(tài)寄存器,同時(shí)將中斷信號(hào)INTRQ撤除。
實(shí)驗(yàn)證明,本采集存儲(chǔ)方案可行,系統(tǒng)運(yùn)行穩(wěn)定,實(shí)現(xiàn)了高速數(shù)據(jù)正確、無(wú)丟失存儲(chǔ),并應(yīng)用到實(shí)際系統(tǒng)中。