朱志斌,馬游春,鮑愛達
(1.中北大學 電子測試技術國家重點實驗室,太原 030051;2.中北大學 儀器科學與動態測試教育部重點實驗室,太原 030051)
隨著科技的發展,生產生活中需要測量的參數越來越多[1],尤其在航天、軍事以及精密設備等領域,數據采集測量的要求更加苛刻,對設備體積,功耗,采樣通道數量等各項指標提出新要求[2],在一些航天軍事應用方面,有時還要面臨一些極端環境條件。這些需求使得人們不斷探索改進采集存儲設備。市面上多路采集存儲的實現方案通常是單片機等控制器控制外部搭載的AD轉換芯片以及眾多模擬開關,存儲部分常使用flash完成。然而這種通用方案在一些場合有很大局限性[3]。比如需要將記錄儀內嵌在設備中,而且要求記錄儀在外力作用下損毀后,依然能方便回收采集的數據,這樣就對記錄儀的體積與數據防護方面提出了更高的要求。
針對這些要求,設計一種基于MAX10的多通道記錄儀。MAX10是一款Altera公司小外形封裝的FPGA,集成數模轉換模塊,與單片機作為主控相比,FPGA具有工作延時少,編程方便靈活,計算速度更快等優點[4],同時,MAX10支持雙配置功能,本設計將采集存儲功能作為一個單獨程序下載配置進MAX10中,將讀取數據功能作為第二個功能程序也下載配置進MAX10中,上電啟動采集存儲程序,當工作完畢時候,改變控制引腳電平,讓MAX10啟動數據讀取程序,讀取SD卡中的數據傳輸到上位機中。這樣可以很大程度利用FPGA邏輯資源。若記錄儀損毀,則從記錄儀殘骸中取出SD卡,再進行數據回收。
本設計主要為多路信號采集存儲模塊,信號來源部分是由外部產生,不作為本設計研究部分。多路信號采集存儲模塊包括內嵌AD的MAX10主控模塊、SD卡存儲模塊、電源與電壓轉換模塊以及串口通信模塊。總體系統框圖如圖1所示。

圖1 總體系統框圖
上電后,MAX10開始配置內部AD的相關參數,并設置中斷。外部多路信號過來后,通過轉換接到MAX10上,內部AD采集開始工作,然后MAX10將采集的多路數據提取出來,加上幀頭幀尾,進行混合編幀,然后將幀數據寫入緩存,當緩存達到512字節后,寫入SD卡[5]。采集結束后,轉換控制引腳電平狀態,使MAX10啟動第二套程序,從SD卡讀取數據,然后將數據通過串口發送到上位機,進行觀察驗證采集的數據幀。根據每一幀的相應位來判斷區分哪些采集的數據分別屬于哪一路。
主控與AD采集模塊均是MAX10,它只需要單電源供電,封裝方式為EQFP144,在啟動速度、功耗以及安全性方面有著很大的優勢。成功在低成本、單芯片小外形封裝的FPGA器件中完成了先進的數據處理功能,還包含了以前版本同系列器件的特點,在集成功能與集成密度方面有更大加強,其密度范圍在2 k至50 KLE之間。在非易失集成器件領域,有著極大地進步[6]。
其集成功能包括模數轉換器(ADC)和雙配置閃存,支持在一個芯片上存儲兩個鏡像,在鏡像間動態切換。FPGA將AD采集功能作為IP核,具體為Altera Modular ADC Core,MAX10內部集成的ADC模塊具有12bit精度,并且最多可以支持到17個ADC輸入采樣通道。其中,MAX10的ADC是1 MHz逐次逼近型寄存器(SAR)模數轉換器。采集電路如圖3所示。此外,MAX10還支持Nios II嵌入式操作系統,可以直接配置成一個基本的片上操作系統,簡化繁瑣的各種通信協議與存儲模塊的構建,適合一些對處理速度要求不高、功能簡單的應用場合,能夠大幅縮短開發周期[7]。MAX10同時還具備休眠模式,當系統一段時間不工作時候,設置MAX10進入休眠模式,可以極大降低功耗,延長電池的使用時長,這對嵌入式設備而言,是一個非常實用的功能。
通用的存儲數據方法有U盤、存儲卡以及Flash等方式。然而,一般的Flash存儲容量較小,大容量的Flash尺寸也會相應增加[8],與小型化設計目標有沖突,而且也不便回收。U盤體積更大,而且與其它部件連接處不夠穩固。而SD卡存儲容量大、體積小、價格低廉,通信連線數量少、讀寫速度快。使用與回收都非常方便。在本設計背景條件下,這些優點使得SD卡非常適合作為此次設計的存儲方式。而且在一些試驗環境危險的條件下,整個記錄裝置可能損毀,而此時,SD卡能輕易從損毀的裝置里面取出,不易損失采集的數據,故本設計存儲器選擇SD卡。
本設計選用的SD卡類型為SDHC,它采用SD2.0協議規范,存儲容量為32 GB,可以配置選擇工作在SDIO模式或者SPI模式,此次設計選擇SPI模式,所以共用到CS、CLK、MISO、MOSI四根信號線,在SPI模式下采用1位數據位寬,單純衡量SD卡數據傳輸速度,理論上能夠達到50 Mbps的讀寫速率,遠大于本設計的采集所需。
本設計使用的MAX10芯片是單電源型號。所以我們使用的電源芯片是ALTERA公司的Enpirion電源轉換芯片EP53A8HQA,原理連接圖如圖2所示。它屬于DCDC,16引腳封裝,其輸出最大電流1A。其尺寸為:長3.0 mm、寬3.0 mm、高1.1 mm。工作溫度范圍在-40~105℃之間,從芯片尺寸以及各種參數性能上考慮,EP53A8HQA非常適合作為本設計的電壓轉換芯片。

圖2 電源轉換芯片原理圖

圖3 八路采集連接圖
模塊選用Silicon Labs CP2102GM的USB-UART芯片,能實現USB轉UART串口功能[9],芯片內部集成了1024字節EEPROM,可以用來存儲各類信息。支持波特率區間為在300 bps至1 Mbps,工作溫度范圍為-40至+85度,支持對外供電:5 V或3.3 V。在USB部分,符合USB2.0規范。可以用一根USB線將它連接到上PC的USB口進行串口數據通信。也可作為供電接口,使用十分簡易方便。
為了有效利用FPGA內部資源,同時借助于MAX10獨有的雙啟動配置功能,本設計將整個軟件系統劃分為采集存儲部分與讀取發送部分,系統運行哪一套程序取決于BOOT_SEL引腳的高低電平。當數據采集結束,已經將數據寫入SD卡,再改變BOOT_SEL引腳的電平,使MAX10運行讀數與發送程序。FPGA根據內部時序邏輯,向外圍電路發送各種控制命令[10]。外部的八路信號進來后,啟動MAX10內部的AD采集功能,然后將八路數據提取出來,加上幀頭幀尾,再將幀數據寫入緩存中,當達到了SD卡寫的最小單元512個字節時,將FIFO中的數據提取出來,按時序寫入SD卡中。采集結束后,改變BOOT_SEL引腳電平,讓MAX10運行SD卡讀程序,讀取SD卡數據,然后通過串口發送到上位機。
如圖4所示,上電初始化SD卡,使得SD卡工作在SPI工作模式下,校準AD,配置中斷使能寄存器,開啟采集中斷功能,然后啟動AD采集,開始等待數據采集完成時產生的中斷,當檢測到中斷發生,讀取AD各路采集槽數據,然后在數據兩端加上幀頭0xFFFFFF01幀尾0xFFFFFFFF,進行混合編幀,再將這一幀數據寫入FIFO中,當FIFO半滿時候,將FIFO中數據讀取出來,然后寫入SD卡中,完成數據的采集存儲功能。如果FIFO沒有達到半滿就繼續等待AD采集過來的數據[11]。

圖4 采集存儲圖
如圖5所示,當FPGA上BOOT_SEL引腳電平發生了轉換,FPGA會啟動下載配置的第二程序,運行SD卡數據讀取與發送程序,MAX10配置SD卡到預定工作模式后,開始進入讀數階段,先將地址寫入寫入單個命令塊CMD17,然后按位發送讀命令,將SD卡單個扇區數據讀取出來,之后,將數據寫入緩存,當緩存達到半滿,取出緩存的數據,然后串口發送出來,到上位機上顯示。當緩存中的數據發送完成后,改變SD卡讀數地址,再次啟動SD卡讀數流程,將下一個扇區地址內的數據讀取出來,依次循環往復,直到采集的數據都被讀出,最終在串口助手上顯示出采集的幀數據。通過這種方式,可以很方便地分析一幀中各位的數據,然后對比每一路作為測試的電壓值,相互對比驗證。

圖5 讀數發送圖
Signal Tap是第二代系統級在線調試工具,它可以選擇多個需要觀察的目標信號以及選擇目標信號的捕獲方式[12],而傳統的外部邏輯分析儀測試時候需要外部連線,當要測試信號多達數十個時候,傳統外部邏輯分析儀就有很大的局限性,所以,相比較而言,Signal Tap不需要物理接線,更容易測試更多數量的信號,極大地方便了開發調試過程。
SD卡的讀寫操作都是基于命令的,通過向SD卡發送相應的命令,獲得相應的基本底層驅動接口程序。如圖6所示,用在線邏輯分析儀捕獲信號變化,可以看出在SD卡空閑狀態標志拉低后,SD卡片選信號cs拉低,開始初始化配置過程,系統依序進入st_cmd0、st_wait_cmd0、st_cmd8 st_cmd55、sta-acmd41等狀態,在這些狀態下,mosi分別發送了cmd0、cmd8、cmd55、acmd41等一系列初始化命令,SD卡的miso引腳在一些命令狀態過程中做出了一系列響應,最后sd_init_done信號被拉高,證明SD卡已經初始化成功。
如圖7所示,從在線邏輯分析儀中可以看出當rd_start_en脈沖來臨后,rd_busy信號被拉高,標志系統進入了SD卡讀取數據狀態,與此同時,片選信號拉低,使得SD卡能夠有效通信。還可以看到,rx_flag信號拉高期間miso數據線上電平不斷在跳轉,mosi則維持在高電平,說明miso處在傳輸過程中,MAX10正在讀取SD卡存儲的數據。讀數結束后,rx_finish_en產生一個高脈沖,表示一個單元的數據讀取完畢。

圖7 SD讀數圖
本設計將每一路采集數據都用16位數據格式表示,其中低12位存儲采集的數據,高4位用0填充。將SD卡存儲的數據讀出后,用串口形式發送出來,在串口助手上觀察八路采集的結果。從圖8可以看到,串口助手接收到的數據幀頭為0xFFFFFF01,幀尾為0xFFFFFFFF。每組數據前的0是程序中額外添加的,用來分割每組數據。去掉用0填充的高四位之后,八組采集的十六進制數據分別為0x000、0x0A4、0x337、0x5C0、0x855、0xAE2、0xD75、0xFFF。

圖8 接收數據圖
ADC測量范圍在0 V到2.5 V之間,模擬輸入量程從000h到FFF之間,它的分辨率為212=4 096,1 LSB=2.5 V/4 096=610.35 μV。其中,實驗測試中作為輸入的八路數據采集口電壓分別為0 V、0.1 V、0.5 V、0.9 V、1.3 V、1.7 V、2.1 V、2.5 V,從理論上分析,八路分別對應的采集的原始值分別為0x000、0x0A4、0x333、0x5C2、0x851、0xAE1、0xD70、0xFFF。但是由于作為實驗輸入的數字電源的電壓有一定誤差干擾,輸出的電壓值與實驗的理論值有所偏差,使得MAX10采集得到的幀數據與理論電壓值不完全相同,有一定的偏差。但是從數據結果來看,與預期值非常接近,屬于可以接受的實驗誤差范圍。所以此次實驗結果符合預期。
為了更加明顯直觀地觀察比較采集的結果是否正確,從眾多采集點中選取中間30組采集的十六進制原始數據,再經過轉換變成對應電壓值,然后繪制成折線圖,圖中有八條不同線型的線,它們分別代表著8個通道采集的數據轉化后的電壓值。如圖9所示,可以很清楚看到八路數據采集分別在0 V、0.1 V、0.5 V、0.9 V、1.3 V、1.7 V、2.1 V、2.5 V附近以一個非常微小的幅度上下震蕩,這些數據結果與實驗的八路輸入電壓非常接近,證明此記錄儀八路采集均能夠正常工作。

圖9 采集結果圖
為了解決記錄儀小型化問題,本文設計了一種基于MAX10的多通道小型化記錄儀,能同時采集八路信號,由于采用了具備AD采集功能的MAX10作為在主控芯片,和外加AD方案的記錄儀相比,縮小了近四分之一的體積。并且實現了八路采集,采樣頻率為1 MHz,分辨率為4 096。同時,為了應用在一些惡劣環境下,例如在炮彈參數測試實驗中,當炮彈落地,發生強烈撞擊后,要求保存飛行過程中采集的參數。所以本設計發生選擇用SD卡作為存儲設備,其存儲容量為32 GB,易于回收數據。而且系統易于升級改進,由于MAX10的采集通道多達17個,可以根據各使用場合選用合適的采集通道數量。存儲部分也可以更換更大容量的SD卡以便記錄更多數據,經過實測,在設備工作期間,摔擊記錄儀設備能準確有效得采集0 V至2.5 V之間的信號。能夠滿足設計要求。在需要將記錄儀嵌入進設備的應用場合,應用前景十分廣闊。
本設計由于時間原因,也存在著一些不足之處,例如在將SD卡內部數據讀取出來發送到上位機的過程中,選用的是簡單的串口傳輸,這種方式傳數比較慢,今后可以做一下改進,換成USB直接傳出到上位機中,而不是使用UART轉USB方式。