摘要: 在天文光學精密測量中, 納米精度的壓電陶瓷傳感器常作為微位移執行器,驅動各種精密位移。為進一步提高其采集精度和實時性,設計了基于Zynq7000雙核ARM處理器的采集系統。在Zynq的PL部分實現數據采集和OLED顯示IP核,以CPU0作為主處理器,實現系統的控制和壓電陶瓷電壓的采集,其采集頻率達到30 kHz,數據分辨率為千萬分之一,絕對精度達到10 μV;CPU1作為從處理器,在OLED上實時顯示信息。
引言
壓電陶瓷(Piezoelectric,PZT)以其特有的體積小、響應快、精度高和微動作功能而成為近年來天文光學精密測量中廣泛應用的材料之一。因此,其采集精度和實時性是其關鍵技術之一。本設計以Xilinx公司的Zynq7000雙核ARM處理器作為設計平臺,實現對PZT的高速和高精度采集。Zynq是以ARM為核心、以FPGA作為可編程外設的全新架構處理器,其ARM核是由2個CortexA9 CPU組成的AMP系統。
目前,PZT的采集系統大多采用PC機下的采集卡或者類似于單片機的系統設計,由于PC機系統的實時性比較差,單片機的數據處理能力比較弱,很難滿足類似于天文光學測量系統的實時性要求,采用Zynq的PL部分做數據采集,可以達到μs數量級。利用Zynq的PS部分實現數據存儲、數據處理和通信,實時性也可以達到μs數量級。
1數據采集和OLED顯示IP核設計
1.1OLED顯示IP核設計
ZedBoard開發板上使用Inteltronic /Wisechip公司的OLED顯示模組UG2832HSWEG04,驅動電路采用所羅門科技的SSD1306芯片。OLED采用SPI方式控制,SPI模式使用的信號線和電源線如下:
① RST(RES):硬復位OLED。
② DC:命令/數據標志。
③ SCLK:串行時鐘線。
④ SDIN:串行數據線。
⑤ VDD:邏輯電路電源。
⑥ VBAT:DC/DC轉換電路電源。
⑦ OLED顯示IP核是指在PL中配置相關外設,掛到PS中,作為PS部分的外設使用。
只需要利用Xilinx的嵌入式工具XPS生成硬件系統。主要過程如下:
① 根據XPS工具設計流程,生成Zynq的最小硬件系統。
② 在最小硬件系統中,添加外設IP my_oled,添加一個6位寄存器,每位和SPI引腳對應。
③ 在系統生成的MPD文件中,設置相關引腳和方向信息。
④ 在系統生成的my_oled.vhd文件中,用VHDL語言進行端口設計。
⑤ 在系統生成的user_logic.v文件中,用Verilog語言進行邏輯設計,實現寄存器和SPI對應端口連接并實時讀取。
1.2 數據采集IP核設計
由于壓電陶瓷精度非常高,因此,采用高精度ADS1256轉換芯片采集電壓,ADS1256是多路復用的24位極低噪聲ΔΣADC。其理論采樣精度達到16 777 216分之一,測量電壓范圍為-5~+5 V,因此,其理論精度為1.6 μV,實際測試達到10 μV數量級。
ADS1256與Zynq是通過SCLK、DIN、DOUT、DRDY、CS和RST組成的SPI串行接口,由于其不在ZedBoard開發板上,需要通過板子上的JA和JB接口連接上述6個引腳。
數據采集IP核設計,主要是完成6個引腳的連接,以及A/D轉換過程的命令和數據傳送、時鐘設定,其設計過程和OLED顯示IP核設計過程完全一致。
2 Zynq雙核運行原理
Zynq是一個可擴展處理平臺,它的啟動流程也和FPGA完全不同,而與傳統ARM處理器的類似。
系統上電啟動后,第0階段啟動代碼判斷啟動模式,將第一階段啟動代碼 amp_fsbl.elf下載到 DDR 中,并開始執行。FSBL 會配置硬件比特流文件,加載 CPU0可執行文件和CPU1可執行文件到DDR對應的鏈接地址。在這一階段,所有代碼在CPU0中執行,然后執行第一個可執行文件app_cpu0.elf,把CPU1上將要執行的應用程序執行地址寫入OCM的0xFFFF FFF0地址,然后執行SEV匯編指令,激活CPU1。CPU1激活后,將會到OCM的0xFFFF FFF0地址讀取其數值,其數值就是CPU1執行可執行程序的地址,CPU1應用程序將從該地址執行。
CPU0和CPU1相互之間通過OCM的0xFFFF 0000地址作為共享內存,進行通信。
Zynq是AMP體系架構,CPU0 和CPU1各自占用獨立的DDR空間,其中CPU0占用的DDR地址為0x0010 0000~0x001F FFFF,CPU1使用的地址空間為0x0020 0000~0x002F FFFF。雙核運行原理如圖1所示。
?
圖1 雙核運行原理
3 軟件設計
軟件設計主要包括CPU0應用程序和CPU1應用程序,其中CPU0部分主要實現系統初始化、啟動CPU1、讀取A/D轉換后的數據和對數據進行初步處理。
FSBL加載完CPU0應用程序后,跳轉到0x0010 0000處執行CPU0程序,首先配置MMU,關閉Cache,使OCM物理地址為0xFFFF 0000~0xFFFF FFFF和0x0000 0000~0x0002 FFFF。
關閉Cache后,CPU0執行SEV匯編指令,激活CPU1,CPU1到OCM的0xFFFF FFF0地址讀取CPU1應用程序地址,開始執行CPU1的應用程序。
讀取ADS1256轉換后的數據,對前后2次ADS1256轉換后的數值進行比較,如果大于0xFF,則認為壓電陶瓷有異常,設置COM_VAL=1,等待CPU1把異常信息在OLED上顯示出來。其流程圖如圖2所示:
?
圖2 CPU0程序流程圖
CPU1在激活后,將會從DDR的0x00200000地址開始執行應用程序,由于Zynq是AMP架構,各個CPU獨立使用資源。因此,在CPU1里,仍需要設置MMU,關閉Cache。
關閉Cache后,CPU1讀取共享內存COM_VAL變量,如果其值為0,表示壓電陶瓷工作正常,在OLED上顯示正確信息。如果COM_VAL=1,表示壓電陶瓷工作異常,將在OLED顯示異常信息。其流程圖如圖3所示。
?
圖3 CPU1程序流程圖
4 實驗結果
完成軟硬件設計后,需要將硬件比特流配置到Zynq的PL部分,把軟件部分下載到DDR中運行。使用Xilinx的BootGen工具,將FSBL文件、bit文件、CPU0文件和CPU1文件組合并添加到相關頭部,生成能被Zynq識別的合法鏡像BOOT.BIN文件。把BOOT.BIN拷貝到SD卡中,將ZedBoard設置成SD卡啟動,將SD卡插入SD卡槽,上電后,會看到OLED顯示壓電陶瓷工作狀態信息。
實驗中,壓電陶瓷在一固定位置,隨機讀取部分A/D采集到的數據, 如表1所列,可以看出,其采集精度達到10 μV數量級。
使用臺式萬用表進行測試,電壓為2.5 V。實驗結果表明,A/D采集精度高達10 μV數量級,與高精度臺式萬用表測量結果一致,說明采集結果是正確的。
?
結語
利用高精度ADS1256轉換器和Zynq高速處理平臺,實現了雙核ARM并行運行數據采集和實時顯示功能。經過24小時不間斷測試,系統運行穩定,能夠滿足高速和高精度壓電陶瓷傳感器采集系統的要求。
參考文獻
[1] 陸啟帥,陸彥婷,王地.Xilinx Zynq SoC與嵌入式Linux設計實戰指南:兼容ARM CortexA9的設計方法[M].北京:清華大學出版社,2014:119152.
[2] 陸佳華,江舟,馬岷.嵌入式系統軟硬件協同設計實戰指南:基于Xilinx Zynq[M].北京:機械工業出版社,2013:1718.
[3]冉峰,何林奇,儲楚.基于FPGA 的OLED 微顯示器的IIC 控制模塊設計[J].電子技術與應用,2013,39(5):1517.
[4]肖靈芝,蒲林, 韓俊剛,等.異構多核圖形處理器存儲系統設計與實現[J].電子技術與應用,2013,39(5):3843.
[5] 李想,鄭喜鳳,陳宇.基于Linux下的OLED顯示模塊設計[J].液晶與顯示,2012,27(1):103107.
評論