朱志斌,馬游春,鮑愛達(dá)
(1.中北大學(xué) 電子測(cè)試技術(shù)國家重點(diǎn)實(shí)驗(yàn)室,太原 030051;2.中北大學(xué) 儀器科學(xué)與動(dòng)態(tài)測(cè)試教育部重點(diǎn)實(shí)驗(yàn)室,太原 030051)
隨著科技的發(fā)展,生產(chǎn)生活中需要測(cè)量的參數(shù)越來越多[1],尤其在航天、軍事以及精密設(shè)備等領(lǐng)域,數(shù)據(jù)采集測(cè)量的要求更加苛刻,對(duì)設(shè)備體積,功耗,采樣通道數(shù)量等各項(xiàng)指標(biāo)提出新要求[2],在一些航天軍事應(yīng)用方面,有時(shí)還要面臨一些極端環(huán)境條件。這些需求使得人們不斷探索改進(jìn)采集存儲(chǔ)設(shè)備。市面上多路采集存儲(chǔ)的實(shí)現(xiàn)方案通常是單片機(jī)等控制器控制外部搭載的AD轉(zhuǎn)換芯片以及眾多模擬開關(guān),存儲(chǔ)部分常使用flash完成。然而這種通用方案在一些場(chǎng)合有很大局限性[3]。比如需要將記錄儀內(nèi)嵌在設(shè)備中,而且要求記錄儀在外力作用下?lián)p毀后,依然能方便回收采集的數(shù)據(jù),這樣就對(duì)記錄儀的體積與數(shù)據(jù)防護(hù)方面提出了更高的要求。
針對(duì)這些要求,設(shè)計(jì)一種基于MAX10的多通道記錄儀。MAX10是一款A(yù)ltera公司小外形封裝的FPGA,集成數(shù)模轉(zhuǎn)換模塊,與單片機(jī)作為主控相比,F(xiàn)PGA具有工作延時(shí)少,編程方便靈活,計(jì)算速度更快等優(yōu)點(diǎn)[4],同時(shí),MAX10支持雙配置功能,本設(shè)計(jì)將采集存儲(chǔ)功能作為一個(gè)單獨(dú)程序下載配置進(jìn)MAX10中,將讀取數(shù)據(jù)功能作為第二個(gè)功能程序也下載配置進(jìn)MAX10中,上電啟動(dòng)采集存儲(chǔ)程序,當(dāng)工作完畢時(shí)候,改變控制引腳電平,讓MAX10啟動(dòng)數(shù)據(jù)讀取程序,讀取SD卡中的數(shù)據(jù)傳輸?shù)缴衔粰C(jī)中。這樣可以很大程度利用FPGA邏輯資源。若記錄儀損毀,則從記錄儀殘骸中取出SD卡,再進(jìn)行數(shù)據(jù)回收。
本設(shè)計(jì)主要為多路信號(hào)采集存儲(chǔ)模塊,信號(hào)來源部分是由外部產(chǎn)生,不作為本設(shè)計(jì)研究部分。多路信號(hào)采集存儲(chǔ)模塊包括內(nèi)嵌AD的MAX10主控模塊、SD卡存儲(chǔ)模塊、電源與電壓轉(zhuǎn)換模塊以及串口通信模塊??傮w系統(tǒng)框圖如圖1所示。
圖1 總體系統(tǒng)框圖
上電后,MAX10開始配置內(nèi)部AD的相關(guān)參數(shù),并設(shè)置中斷。外部多路信號(hào)過來后,通過轉(zhuǎn)換接到MAX10上,內(nèi)部AD采集開始工作,然后MAX10將采集的多路數(shù)據(jù)提取出來,加上幀頭幀尾,進(jìn)行混合編幀,然后將幀數(shù)據(jù)寫入緩存,當(dāng)緩存達(dá)到512字節(jié)后,寫入SD卡[5]。采集結(jié)束后,轉(zhuǎn)換控制引腳電平狀態(tài),使MAX10啟動(dòng)第二套程序,從SD卡讀取數(shù)據(jù),然后將數(shù)據(jù)通過串口發(fā)送到上位機(jī),進(jìn)行觀察驗(yàn)證采集的數(shù)據(jù)幀。根據(jù)每一幀的相應(yīng)位來判斷區(qū)分哪些采集的數(shù)據(jù)分別屬于哪一路。
主控與AD采集模塊均是MAX10,它只需要單電源供電,封裝方式為EQFP144,在啟動(dòng)速度、功耗以及安全性方面有著很大的優(yōu)勢(shì)。成功在低成本、單芯片小外形封裝的FPGA器件中完成了先進(jìn)的數(shù)據(jù)處理功能,還包含了以前版本同系列器件的特點(diǎn),在集成功能與集成密度方面有更大加強(qiáng),其密度范圍在2 k至50 KLE之間。在非易失集成器件領(lǐng)域,有著極大地進(jìn)步[6]。
其集成功能包括模數(shù)轉(zhuǎn)換器(ADC)和雙配置閃存,支持在一個(gè)芯片上存儲(chǔ)兩個(gè)鏡像,在鏡像間動(dòng)態(tài)切換。FPGA將AD采集功能作為IP核,具體為Altera Modular ADC Core,MAX10內(nèi)部集成的ADC模塊具有12bit精度,并且最多可以支持到17個(gè)ADC輸入采樣通道。其中,MAX10的ADC是1 MHz逐次逼近型寄存器(SAR)模數(shù)轉(zhuǎn)換器。采集電路如圖3所示。此外,MAX10還支持Nios II嵌入式操作系統(tǒng),可以直接配置成一個(gè)基本的片上操作系統(tǒng),簡(jiǎn)化繁瑣的各種通信協(xié)議與存儲(chǔ)模塊的構(gòu)建,適合一些對(duì)處理速度要求不高、功能簡(jiǎn)單的應(yīng)用場(chǎng)合,能夠大幅縮短開發(fā)周期[7]。MAX10同時(shí)還具備休眠模式,當(dāng)系統(tǒng)一段時(shí)間不工作時(shí)候,設(shè)置MAX10進(jìn)入休眠模式,可以極大降低功耗,延長(zhǎng)電池的使用時(shí)長(zhǎng),這對(duì)嵌入式設(shè)備而言,是一個(gè)非常實(shí)用的功能。
通用的存儲(chǔ)數(shù)據(jù)方法有U盤、存儲(chǔ)卡以及Flash等方式。然而,一般的Flash存儲(chǔ)容量較小,大容量的Flash尺寸也會(huì)相應(yīng)增加[8],與小型化設(shè)計(jì)目標(biāo)有沖突,而且也不便回收。U盤體積更大,而且與其它部件連接處不夠穩(wěn)固。而SD卡存儲(chǔ)容量大、體積小、價(jià)格低廉,通信連線數(shù)量少、讀寫速度快。使用與回收都非常方便。在本設(shè)計(jì)背景條件下,這些優(yōu)點(diǎn)使得SD卡非常適合作為此次設(shè)計(jì)的存儲(chǔ)方式。而且在一些試驗(yàn)環(huán)境危險(xiǎn)的條件下,整個(gè)記錄裝置可能損毀,而此時(shí),SD卡能輕易從損毀的裝置里面取出,不易損失采集的數(shù)據(jù),故本設(shè)計(jì)存儲(chǔ)器選擇SD卡。
本設(shè)計(jì)選用的SD卡類型為SDHC,它采用SD2.0協(xié)議規(guī)范,存儲(chǔ)容量為32 GB,可以配置選擇工作在SDIO模式或者SPI模式,此次設(shè)計(jì)選擇SPI模式,所以共用到CS、CLK、MISO、MOSI四根信號(hào)線,在SPI模式下采用1位數(shù)據(jù)位寬,單純衡量SD卡數(shù)據(jù)傳輸速度,理論上能夠達(dá)到50 Mbps的讀寫速率,遠(yuǎn)大于本設(shè)計(jì)的采集所需。
本設(shè)計(jì)使用的MAX10芯片是單電源型號(hào)。所以我們使用的電源芯片是ALTERA公司的Enpirion電源轉(zhuǎn)換芯片EP53A8HQA,原理連接圖如圖2所示。它屬于DCDC,16引腳封裝,其輸出最大電流1A。其尺寸為:長(zhǎng)3.0 mm、寬3.0 mm、高1.1 mm。工作溫度范圍在-40~105℃之間,從芯片尺寸以及各種參數(shù)性能上考慮,EP53A8HQA非常適合作為本設(shè)計(jì)的電壓轉(zhuǎn)換芯片。
圖2 電源轉(zhuǎn)換芯片原理圖
圖3 八路采集連接圖
模塊選用Silicon Labs CP2102GM的USB-UART芯片,能實(shí)現(xiàn)USB轉(zhuǎn)UART串口功能[9],芯片內(nèi)部集成了1024字節(jié)EEPROM,可以用來存儲(chǔ)各類信息。支持波特率區(qū)間為在300 bps至1 Mbps,工作溫度范圍為-40至+85度,支持對(duì)外供電:5 V或3.3 V。在USB部分,符合USB2.0規(guī)范??梢杂靡桓鵘SB線將它連接到上PC的USB口進(jìn)行串口數(shù)據(jù)通信。也可作為供電接口,使用十分簡(jiǎn)易方便。
為了有效利用FPGA內(nèi)部資源,同時(shí)借助于MAX10獨(dú)有的雙啟動(dòng)配置功能,本設(shè)計(jì)將整個(gè)軟件系統(tǒng)劃分為采集存儲(chǔ)部分與讀取發(fā)送部分,系統(tǒng)運(yùn)行哪一套程序取決于BOOT_SEL引腳的高低電平。當(dāng)數(shù)據(jù)采集結(jié)束,已經(jīng)將數(shù)據(jù)寫入SD卡,再改變BOOT_SEL引腳的電平,使MAX10運(yùn)行讀數(shù)與發(fā)送程序。FPGA根據(jù)內(nèi)部時(shí)序邏輯,向外圍電路發(fā)送各種控制命令[10]。外部的八路信號(hào)進(jìn)來后,啟動(dòng)MAX10內(nèi)部的AD采集功能,然后將八路數(shù)據(jù)提取出來,加上幀頭幀尾,再將幀數(shù)據(jù)寫入緩存中,當(dāng)達(dá)到了SD卡寫的最小單元512個(gè)字節(jié)時(shí),將FIFO中的數(shù)據(jù)提取出來,按時(shí)序?qū)懭隨D卡中。采集結(jié)束后,改變BOOT_SEL引腳電平,讓MAX10運(yùn)行SD卡讀程序,讀取SD卡數(shù)據(jù),然后通過串口發(fā)送到上位機(jī)。
如圖4所示,上電初始化SD卡,使得SD卡工作在SPI工作模式下,校準(zhǔn)AD,配置中斷使能寄存器,開啟采集中斷功能,然后啟動(dòng)AD采集,開始等待數(shù)據(jù)采集完成時(shí)產(chǎn)生的中斷,當(dāng)檢測(cè)到中斷發(fā)生,讀取AD各路采集槽數(shù)據(jù),然后在數(shù)據(jù)兩端加上幀頭0xFFFFFF01幀尾0xFFFFFFFF,進(jìn)行混合編幀,再將這一幀數(shù)據(jù)寫入FIFO中,當(dāng)FIFO半滿時(shí)候,將FIFO中數(shù)據(jù)讀取出來,然后寫入SD卡中,完成數(shù)據(jù)的采集存儲(chǔ)功能。如果FIFO沒有達(dá)到半滿就繼續(xù)等待AD采集過來的數(shù)據(jù)[11]。
圖4 采集存儲(chǔ)圖
如圖5所示,當(dāng)FPGA上BOOT_SEL引腳電平發(fā)生了轉(zhuǎn)換,F(xiàn)PGA會(huì)啟動(dòng)下載配置的第二程序,運(yùn)行SD卡數(shù)據(jù)讀取與發(fā)送程序,MAX10配置SD卡到預(yù)定工作模式后,開始進(jìn)入讀數(shù)階段,先將地址寫入寫入單個(gè)命令塊CMD17,然后按位發(fā)送讀命令,將SD卡單個(gè)扇區(qū)數(shù)據(jù)讀取出來,之后,將數(shù)據(jù)寫入緩存,當(dāng)緩存達(dá)到半滿,取出緩存的數(shù)據(jù),然后串口發(fā)送出來,到上位機(jī)上顯示。當(dāng)緩存中的數(shù)據(jù)發(fā)送完成后,改變SD卡讀數(shù)地址,再次啟動(dòng)SD卡讀數(shù)流程,將下一個(gè)扇區(qū)地址內(nèi)的數(shù)據(jù)讀取出來,依次循環(huán)往復(fù),直到采集的數(shù)據(jù)都被讀出,最終在串口助手上顯示出采集的幀數(shù)據(jù)。通過這種方式,可以很方便地分析一幀中各位的數(shù)據(jù),然后對(duì)比每一路作為測(cè)試的電壓值,相互對(duì)比驗(yàn)證。
圖5 讀數(shù)發(fā)送圖
Signal Tap是第二代系統(tǒng)級(jí)在線調(diào)試工具,它可以選擇多個(gè)需要觀察的目標(biāo)信號(hào)以及選擇目標(biāo)信號(hào)的捕獲方式[12],而傳統(tǒng)的外部邏輯分析儀測(cè)試時(shí)候需要外部連線,當(dāng)要測(cè)試信號(hào)多達(dá)數(shù)十個(gè)時(shí)候,傳統(tǒng)外部邏輯分析儀就有很大的局限性,所以,相比較而言,Signal Tap不需要物理接線,更容易測(cè)試更多數(shù)量的信號(hào),極大地方便了開發(fā)調(diào)試過程。
SD卡的讀寫操作都是基于命令的,通過向SD卡發(fā)送相應(yīng)的命令,獲得相應(yīng)的基本底層驅(qū)動(dòng)接口程序。如圖6所示,用在線邏輯分析儀捕獲信號(hào)變化,可以看出在SD卡空閑狀態(tài)標(biāo)志拉低后,SD卡片選信號(hào)cs拉低,開始初始化配置過程,系統(tǒng)依序進(jìn)入st_cmd0、st_wait_cmd0、st_cmd8 st_cmd55、sta-acmd41等狀態(tài),在這些狀態(tài)下,mosi分別發(fā)送了cmd0、cmd8、cmd55、acmd41等一系列初始化命令,SD卡的miso引腳在一些命令狀態(tài)過程中做出了一系列響應(yīng),最后sd_init_done信號(hào)被拉高,證明SD卡已經(jīng)初始化成功。
如圖7所示,從在線邏輯分析儀中可以看出當(dāng)rd_start_en脈沖來臨后,rd_busy信號(hào)被拉高,標(biāo)志系統(tǒng)進(jìn)入了SD卡讀取數(shù)據(jù)狀態(tài),與此同時(shí),片選信號(hào)拉低,使得SD卡能夠有效通信。還可以看到,rx_flag信號(hào)拉高期間miso數(shù)據(jù)線上電平不斷在跳轉(zhuǎn),mosi則維持在高電平,說明miso處在傳輸過程中,MAX10正在讀取SD卡存儲(chǔ)的數(shù)據(jù)。讀數(shù)結(jié)束后,rx_finish_en產(chǎn)生一個(gè)高脈沖,表示一個(gè)單元的數(shù)據(jù)讀取完畢。
圖7 SD讀數(shù)圖
本設(shè)計(jì)將每一路采集數(shù)據(jù)都用16位數(shù)據(jù)格式表示,其中低12位存儲(chǔ)采集的數(shù)據(jù),高4位用0填充。將SD卡存儲(chǔ)的數(shù)據(jù)讀出后,用串口形式發(fā)送出來,在串口助手上觀察八路采集的結(jié)果。從圖8可以看到,串口助手接收到的數(shù)據(jù)幀頭為0xFFFFFF01,幀尾為0xFFFFFFFF。每組數(shù)據(jù)前的0是程序中額外添加的,用來分割每組數(shù)據(jù)。去掉用0填充的高四位之后,八組采集的十六進(jìn)制數(shù)據(jù)分別為0x000、0x0A4、0x337、0x5C0、0x855、0xAE2、0xD75、0xFFF。
圖8 接收數(shù)據(jù)圖
ADC測(cè)量范圍在0 V到2.5 V之間,模擬輸入量程從000h到FFF之間,它的分辨率為212=4 096,1 LSB=2.5 V/4 096=610.35 μV。其中,實(shí)驗(yàn)測(cè)試中作為輸入的八路數(shù)據(jù)采集口電壓分別為0 V、0.1 V、0.5 V、0.9 V、1.3 V、1.7 V、2.1 V、2.5 V,從理論上分析,八路分別對(duì)應(yīng)的采集的原始值分別為0x000、0x0A4、0x333、0x5C2、0x851、0xAE1、0xD70、0xFFF。但是由于作為實(shí)驗(yàn)輸入的數(shù)字電源的電壓有一定誤差干擾,輸出的電壓值與實(shí)驗(yàn)的理論值有所偏差,使得MAX10采集得到的幀數(shù)據(jù)與理論電壓值不完全相同,有一定的偏差。但是從數(shù)據(jù)結(jié)果來看,與預(yù)期值非常接近,屬于可以接受的實(shí)驗(yàn)誤差范圍。所以此次實(shí)驗(yàn)結(jié)果符合預(yù)期。
為了更加明顯直觀地觀察比較采集的結(jié)果是否正確,從眾多采集點(diǎn)中選取中間30組采集的十六進(jìn)制原始數(shù)據(jù),再經(jīng)過轉(zhuǎn)換變成對(duì)應(yīng)電壓值,然后繪制成折線圖,圖中有八條不同線型的線,它們分別代表著8個(gè)通道采集的數(shù)據(jù)轉(zhuǎn)化后的電壓值。如圖9所示,可以很清楚看到八路數(shù)據(jù)采集分別在0 V、0.1 V、0.5 V、0.9 V、1.3 V、1.7 V、2.1 V、2.5 V附近以一個(gè)非常微小的幅度上下震蕩,這些數(shù)據(jù)結(jié)果與實(shí)驗(yàn)的八路輸入電壓非常接近,證明此記錄儀八路采集均能夠正常工作。
圖9 采集結(jié)果圖
為了解決記錄儀小型化問題,本文設(shè)計(jì)了一種基于MAX10的多通道小型化記錄儀,能同時(shí)采集八路信號(hào),由于采用了具備AD采集功能的MAX10作為在主控芯片,和外加AD方案的記錄儀相比,縮小了近四分之一的體積。并且實(shí)現(xiàn)了八路采集,采樣頻率為1 MHz,分辨率為4 096。同時(shí),為了應(yīng)用在一些惡劣環(huán)境下,例如在炮彈參數(shù)測(cè)試實(shí)驗(yàn)中,當(dāng)炮彈落地,發(fā)生強(qiáng)烈撞擊后,要求保存飛行過程中采集的參數(shù)。所以本設(shè)計(jì)發(fā)生選擇用SD卡作為存儲(chǔ)設(shè)備,其存儲(chǔ)容量為32 GB,易于回收數(shù)據(jù)。而且系統(tǒng)易于升級(jí)改進(jìn),由于MAX10的采集通道多達(dá)17個(gè),可以根據(jù)各使用場(chǎng)合選用合適的采集通道數(shù)量。存儲(chǔ)部分也可以更換更大容量的SD卡以便記錄更多數(shù)據(jù),經(jīng)過實(shí)測(cè),在設(shè)備工作期間,摔擊記錄儀設(shè)備能準(zhǔn)確有效得采集0 V至2.5 V之間的信號(hào)。能夠滿足設(shè)計(jì)要求。在需要將記錄儀嵌入進(jìn)設(shè)備的應(yīng)用場(chǎng)合,應(yīng)用前景十分廣闊。
本設(shè)計(jì)由于時(shí)間原因,也存在著一些不足之處,例如在將SD卡內(nèi)部數(shù)據(jù)讀取出來發(fā)送到上位機(jī)的過程中,選用的是簡(jiǎn)單的串口傳輸,這種方式傳數(shù)比較慢,今后可以做一下改進(jìn),換成USB直接傳出到上位機(jī)中,而不是使用UART轉(zhuǎn)USB方式。