摘 要: 給出了一種研究自由落體運(yùn)動的新方法,,提出了一種以Altera NiosII的SoPC為核心處理單元的自由落體分析儀的設(shè)計(jì)方案,并介紹了分析儀的軟硬件設(shè)計(jì)過程,。該自由落體分析儀可提高測量精度,,使復(fù)雜的系統(tǒng)在單片FPGA上實(shí)現(xiàn)。實(shí)驗(yàn)結(jié)果表明,,該系統(tǒng)穩(wěn)定可靠,,各項(xiàng)指標(biāo)均已經(jīng)達(dá)到設(shè)計(jì)要求,。
關(guān)鍵詞: NiosII;SoPC,;自由落體分析儀,;FPGA
與通用MCU相比,F(xiàn)PGA采用軟件來設(shè)計(jì)硬件,,所有的實(shí)現(xiàn)最終都將轉(zhuǎn)化為其內(nèi)部的硬件邏輯,,而且FPGA可以產(chǎn)生精準(zhǔn)的時(shí)間基準(zhǔn)。然而,,如果對FPGA內(nèi)部所有硬件邏輯都通過編程實(shí)現(xiàn),,則由于FPGA本身的特點(diǎn)難免使系統(tǒng)中存在競爭冒險(xiǎn),系統(tǒng)穩(wěn)定性難以保證,。而且編程任務(wù)量大,,難以實(shí)現(xiàn)。軟核處理器技術(shù)是一種全新的設(shè)計(jì)理念,,它將FPGA設(shè)計(jì)劃分為硬件和軟件兩個(gè)方面,。硬件可以利用芯片設(shè)計(jì)商所提供的各類標(biāo)準(zhǔn)外設(shè)實(shí)現(xiàn)系統(tǒng)所需接口及控制邏輯,軟件可以專注于各種控制算法的實(shí)現(xiàn),。對于一些通用MCU無法滿足的應(yīng)用(如高精度實(shí)時(shí)測量,、豐富的片內(nèi)外設(shè)、硬件可定制可擴(kuò)展的系統(tǒng))來說,,F(xiàn)PGA能夠滿足實(shí)時(shí),、高精度和硬件可定制等多方面的要求。NiosII是Altera[1]的第二代FPGA嵌入式軟核處理器,,其指令執(zhí)行速率可達(dá)200 DMIPS,。對于本文所設(shè)計(jì)的自由落體分析儀,NiosII能夠滿足系統(tǒng)各方面的需求,。
自由落體分析儀在測量領(lǐng)域應(yīng)用非常廣泛,可以用來研究落體運(yùn)動,,準(zhǔn)確測量地球各點(diǎn)的絕對重力加速度值,,對國防建設(shè)、經(jīng)濟(jì)建設(shè)和科學(xué)研究有著十分重要的意義,。
本文設(shè)計(jì)了一種基于Altera NiosII軟核處理器為核心單元的自由落體分析儀,。該系統(tǒng)在FPGA芯片中實(shí)現(xiàn)用戶自定制的處理器,其硬件結(jié)構(gòu)包括步進(jìn)電機(jī)控制單元,、光電編碼器信號采集單元,、存儲器模塊、電源模塊,、UART接口,、PC顯示終端及SoPC模塊Altera CycloneII EP2C8。
2 系統(tǒng)的硬件設(shè)計(jì)
硬件部分的設(shè)計(jì)可以分為兩個(gè)部分。第一部分是硬件平臺的設(shè)計(jì),,包含了主芯片EP2C8,、外設(shè)芯片(SDRAM、配置芯片和Flash)以及它們之間的互聯(lián),;第二部分是定制系統(tǒng)需要的硬件系統(tǒng),,即設(shè)計(jì)處理器 軟核和相關(guān)外設(shè)的控制邏輯。這部分的工作是整個(gè)系統(tǒng)設(shè)計(jì)的基礎(chǔ),。
整個(gè)硬件系統(tǒng)的核心是基于Cyclone II系列FPGA(EP2C8Q208C8)的SoPC模塊,。系統(tǒng)的結(jié)構(gòu)框圖如圖2所示。Nios II軟核處理器定義主從設(shè)備之間的接口與通信時(shí)序,,通過Avalon交換式總線連接各個(gè)控制模塊和多個(gè)IP核,,包括SoPC Builder工具自定義生成的IP核模塊。SoPC Builder中包含3種可選的軟核處理器,,分別是:Nios II/f(快速)——消耗FPGA資源最多,,系統(tǒng)性能最高;Nios II/s(標(biāo)準(zhǔn))——性能和FPGA使用量都是中等的,;Nios II/e(經(jīng)濟(jì))——所占FPGA資源最少,,性能最低[2-3]。根據(jù)系統(tǒng)的需求,,Nios II/f(快速)型軟核處理器完全能滿足本設(shè)計(jì)的需求,。FPGA中還包括鎖相環(huán)、CPU與外部設(shè)備的接口,,PWM輸出模塊對電機(jī)進(jìn)行調(diào)速,,數(shù)據(jù)采集模塊處理光電編碼器的測量數(shù)據(jù),EPCS4用來上電時(shí)對FPGA進(jìn)行配置,,調(diào)試程序的JTAG_UART通信模塊,,此外,電源管理模塊為電機(jī),、光電編碼器和FPGA提供工作所需電源電壓,。
在NiosII處理器電機(jī)控制端口,當(dāng)out_port_ from_the_motor=00時(shí),,電機(jī)正轉(zhuǎn),,小球下降;當(dāng)out_port_ from_the_motor=01時(shí),,電機(jī)反轉(zhuǎn),,小球上升。在FPGA電路和電機(jī)驅(qū)動放大電路之間加光電耦合器(TLP521)以實(shí)現(xiàn)電氣隔離,,可以提高系統(tǒng)的抗干擾性,。L298片內(nèi)有兩個(gè)相同的模塊,,每個(gè)模塊有3個(gè)控制輸入端:一個(gè)使能端和兩個(gè)方向控制端。如圖2所示,,NiosII產(chǎn)生的PWM信號經(jīng)過光電耦合器連接到L298芯片的使能端,,NiosII提供的兩路PWM信號提供步進(jìn)電機(jī)調(diào)速控制,從而小球做勻速直線運(yùn)動來測量位移,。通過將NiosII的并行輸入輸出模塊(PIO)輸出的信號送入L298的方向控制端,,來控制步進(jìn)電機(jī)的轉(zhuǎn)向和制動狀態(tài)。本系統(tǒng)還使用了光電編碼器對電機(jī)進(jìn)行速度檢測并反饋給NiosII,,實(shí)現(xiàn)完整的閉環(huán)控制系統(tǒng),。
光電編碼器三相信號(A、B,、Z)經(jīng)整形電路后的脈沖信號送入FPGA的數(shù)據(jù)采集模塊[4],,數(shù)據(jù)采集模塊主要是為時(shí)間和位移做準(zhǔn)備,這里主要是測量相鄰的時(shí)間脈沖和位移脈沖上升沿之間的個(gè)數(shù),,方便NiosII處理器計(jì)算時(shí)間和位移以及進(jìn)行時(shí)間和位移數(shù)值轉(zhuǎn)換,。
片上存儲器采用EP2C8 FPGA提供165 888 bit的RAM內(nèi)存,共計(jì)36個(gè)M4K RAM blocks,,8 256個(gè)LEs,。
定時(shí)器Timer用來提供系統(tǒng)所需的時(shí)鐘節(jié)拍。
PIO通過2 bit的二進(jìn)制信號來檢測操作面板的按鍵觸發(fā)信號,、判斷電機(jī)控制器的參數(shù)并進(jìn)行小球位置檢測,。
通用異步收發(fā)器(UART)提供了人機(jī)交互接口,與上位進(jìn)行通信以及程序調(diào)試,。這里,,USB接口可視作一個(gè)虛擬的通用異步收發(fā)器來訪問。系統(tǒng)運(yùn)行中,,閃存存儲配置文件,,而SDRAM存儲各類數(shù)據(jù)。
設(shè)計(jì)軟硬件接口的任務(wù)是完成驅(qū)動程序的編寫工作,,驅(qū)動程序是連接硬件與軟件的橋梁,。此外,軟硬件接口的另一個(gè)重要工作是進(jìn)行硬件初始化,,處理器從復(fù)位狀態(tài)進(jìn)入操作系統(tǒng)能夠運(yùn)行的狀態(tài),也就是把控制權(quán)交給操作系統(tǒng)或應(yīng)用程序之前,,硬件和驅(qū)動必須做的一些工作,。利用Altium Designer工具完成電路板的PCB版圖設(shè)計(jì)。
3 處理器的定制與系統(tǒng)的工作原理
NiosII處理器采用32 bit指令﹑32 bit數(shù)據(jù)和地址﹑32 bit通用寄存器和32個(gè)外部中斷源[5],,能在高性能的Stratix或低成本的Cyclone芯片上實(shí)現(xiàn),,配置最合適的處理器,、選擇合適的外設(shè)和接口組合。
本系統(tǒng)是以NiosII處理器作為實(shí)現(xiàn)控制的中央處理器,,實(shí)驗(yàn)證明,,NiosII軟核處理器主頻可以平穩(wěn)運(yùn)行在120 MHz,速度相當(dāng)快,。設(shè)置總線時(shí)鐘頻率為50 MHz,。
利用SoPC Builder開發(fā)工具創(chuàng)建用戶定制的NiosII處理器,其地址映射和中斷優(yōu)先級分配如圖3所示,。圖4所示的本系統(tǒng)定制的NiosII處理器還加入了CPU核,、EPCS、SDRAM,、TIMER,、PIO、數(shù)碼管和UART等外圍接口電路,,以實(shí)現(xiàn)NiosII與外設(shè)的通信,。
SoPC Builder將定制的處理器轉(zhuǎn)化為Verilog HDL等具體的設(shè)計(jì)文件,自動生成針對硬件環(huán)境的C語言和匯編語言的頭文件以及函數(shù)庫,。
在Quartus II中實(shí)現(xiàn)重力加速度測量系統(tǒng)用戶定制的NiosII處理器模塊如圖4所示,。主要端口包括時(shí)鐘信號clk、復(fù)位信號reset_n,、中斷信號int_port_to_the_INT,、光電編碼器采集數(shù)據(jù)in_port_to_the_data_out[31..0]、電機(jī)控制信out_port_from_the_motor[1..0],、LCD顯示coe_seg_ from_the_seg,、UART發(fā)送和接收端口。由于NiosII是在FPGA片內(nèi)實(shí)現(xiàn)的,,因此它既可以通過引腳連到外部與其他設(shè)備相連接,,也可以直接連到片內(nèi)的其他模塊上。同樣,,F(xiàn)PGA片內(nèi)未被使用的資源仍然可以被配置到其他模塊使用,,從而實(shí)現(xiàn)系統(tǒng)的集成。
電路板上只有一個(gè)頻率為50 MHz的外部晶振,,顯然無法滿足設(shè)計(jì)所需的各種頻率要求,。于是采用FPGA內(nèi)嵌的模擬鎖相環(huán)PLL(Phase Lock Loop)進(jìn)行分頻與倍頻,以滿足系統(tǒng)設(shè)計(jì)中各個(gè)模塊不同頻率的要求,。由鎖相環(huán)模塊提供CPU的時(shí)鐘和SDRAM的時(shí)鐘(兩個(gè)時(shí)鐘大小均為50 MHz,,相位相差63°),以及光電編碼器數(shù)據(jù)采集模塊所需的高頻時(shí)鐘200 MHz,。當(dāng)產(chǎn)生測量時(shí)間按鍵中斷時(shí),,小球做自由落體運(yùn)動,,下落的過程中遮擋光電門對管時(shí),產(chǎn)生一系列脈沖,,以高頻200 MHz為基準(zhǔn)頻率測出相鄰脈沖上升沿之間的時(shí)間就是要測量的時(shí)間,。當(dāng)產(chǎn)生測量距離按鍵中斷時(shí),小球再次通過光電門對管,,遮擋光電門時(shí)會產(chǎn)生一系列脈沖,,通過測量模塊得到相鄰兩個(gè)脈沖上升沿之間編碼器的轉(zhuǎn)數(shù)N,要測的位移S=N×c,,其中c為光電編碼器轉(zhuǎn)軸的周長,。
4 系統(tǒng)軟件設(shè)計(jì)
為了操作這些片上硬件,SoPC Builder提供了一個(gè)編寫軟件代碼的NiosII集成開發(fā)環(huán)境(IDE)[6],,軟件編程采用C語言和VHDL語言完成,,在NiosII IDE下完成所有軟件開發(fā)任務(wù),包括編輯,、編譯,、調(diào)試程序和下載[7]。在進(jìn)行軟件設(shè)計(jì)時(shí),,根據(jù)NiosII處理器系統(tǒng)的需求自動生成開發(fā)向?qū)?,避免手動設(shè)置帶來的不便,節(jié)省時(shí)間,,縮短開發(fā)周期[8],。基于SoPC平臺NiosII處理器的整個(gè)軟件系統(tǒng)由實(shí)現(xiàn)不同軟件功能的模塊組成,,包括:主程序模塊,、串口中斷子程序、光電編碼測量子程序,、電機(jī)驅(qū)動程序,、數(shù)據(jù)處理子程序和上位機(jī)顯示程序。
在本測量系統(tǒng)中,,NiosII程序?qū)崿F(xiàn)如下3個(gè)任務(wù),。(1)系統(tǒng)設(shè)置了多個(gè)按鍵,當(dāng)按下按鍵時(shí),,由NiosII軟核識別鍵值完成不同的中斷操作,。(2)通過UART模塊得到上位機(jī)發(fā)出的控制任務(wù)及控制參數(shù),接收與步進(jìn)電機(jī)同軸的光電編碼器的反饋信號,,經(jīng)CPU計(jì)算和處理后得到糾正后的PWM控制參數(shù)并傳達(dá)給自定制的PWM模塊,,由PWM模塊輸出相應(yīng)的PWM信號控制直流電機(jī)的正反轉(zhuǎn)狀態(tài),從而實(shí)現(xiàn)小球做勻速直線運(yùn)動來精確測量兩點(diǎn)間的位移。(3)進(jìn)行數(shù)據(jù)運(yùn)算和進(jìn)制轉(zhuǎn)換,,中間過程要進(jìn)行乘法除法運(yùn)算,測量的時(shí)間換算成秒為單位,,位移換算成米為單位,。
圖5是測量系統(tǒng)的主程序流程圖。系統(tǒng)初始化時(shí),,使用函數(shù)IOWR(SIGNAL_CAP_0_BASE,,0,1)將采集模塊全局信號復(fù)位,,接著判斷串口是否有數(shù)據(jù),,處理串口數(shù)據(jù),判斷按鍵值,,使用KEY->INTERRUPT_MASK=1注冊中斷,,使用alt_irq_register(KEY_IRQ,NULL,,ISR_key)來建立用戶中斷程序,,對各個(gè)按鍵中斷響應(yīng)進(jìn)入中斷服務(wù)程序sig_cap_irq_proc_tests、sig_cap_irq_proc_testt,、sig_ cap_irq_proc_ up,、sig_cap_irq_proc_down、sig_cap_irq_proc_ stop,。當(dāng)完成時(shí)間/位移測量后,,產(chǎn)生一個(gè)硬件中斷,將標(biāo)志flag_INT置1,。當(dāng)主循環(huán)程序判斷flag_INT為1時(shí),,就可以從外擴(kuò)的SDRAM中將時(shí)間/位移數(shù)據(jù)讀入SDRAM中,其中包括用戶自定義指令和硬件模塊實(shí)現(xiàn)的數(shù)據(jù)運(yùn)算和進(jìn)制轉(zhuǎn)換部分,。最后主要使用IOWR_ ALTERA_AVALON_PIO_DATA(SEG_SEL_BASE,,0xff)、IOWR_ALTERA_AVALON_PIO_DATA(SEG_SEL_BASE,,bittab[cnt])和IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE,,0)3個(gè)函數(shù)來顯示測量結(jié)果。
本文基于NiosII設(shè)計(jì)了自由落體分析儀,,提出了一種軟硬件綜合的解決方案,,同時(shí)完成了底層的硬件系統(tǒng)和相應(yīng)的軟件的實(shí)現(xiàn)。由于SoPC技術(shù)先天具有巨大的靈活性,,因此在本文設(shè)計(jì)的基礎(chǔ)上可以配合NiosII軟核的強(qiáng)大功能進(jìn)行功能擴(kuò)展和系統(tǒng)升級,,以提高系統(tǒng)的性能,拓展應(yīng)用領(lǐng)域,。不僅如此,,采用IP核復(fù)用技術(shù)基于NiosII進(jìn)行嵌入式系統(tǒng)設(shè)計(jì)可以大大縮短硬件開發(fā)周期,。
參考文獻(xiàn)
[1] 方茁,彭澄廉,,陳澤文.基于NIOS的SoPC的設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),,2004,25(4):504-507.
[2] 李羚梅,,吳志勇,,崔明.基于NIOSⅡ處理器的B碼解調(diào)設(shè)計(jì)[J].計(jì)算機(jī)工程,2010,,36(9):263-265.
[3] 李蘭英.SoPC設(shè)計(jì)原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,,2006.
[4] 馬永杰,董秀娟,,王軻.基于FPGA的高精度光電編碼器接口電路的設(shè)計(jì)[J].西北師范大學(xué)學(xué)報(bào),,2011,47(4):43-47.
[5] 任愛峰,,初秀琴,,常存,等.基于FPGA的嵌入式系統(tǒng)設(shè)計(jì)[M].西安:西安電子科技大學(xué)出版社,,2005.
[6] 謝東輝,,齊偉民.基于NiosⅡ片上可編程系統(tǒng)(SOPC)實(shí)現(xiàn)的雷達(dá)監(jiān)控系統(tǒng)[J].中國科學(xué)院研究生院學(xué)報(bào),2010,,27(1):63-69.
[7] 楊光輝,,鄔江興.基于FPGA中IP核的IRL系統(tǒng)設(shè)計(jì)方法[J].計(jì)算機(jī)應(yīng)用研究,2008,,25(1):190-194.
[8] 劉明貴,,梁昊.基于SoPC的低應(yīng)變反射波檢測系統(tǒng)[J].電子技術(shù)應(yīng)用,2010,,36(7):87-89.