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