0 引言
在電子技術(shù)領(lǐng)域中,示波器的應(yīng)用非常廣泛,,使用它可以方便直觀地觀察到信號的全貌,,并測量信號的幅度、頻率,、周期等基本參數(shù),。傳統(tǒng)的模擬示波器顯示時采用熒光物質(zhì)的余輝時間都是一定的,導(dǎo)致其難以觀測到周期較長的信號,。另外,,模擬示波器還無法對信號進(jìn)行一些特殊的數(shù)學(xué)處理(如FFT)。而數(shù)字示波器正好可以克服模擬示波器的不足,,它采用各種先進(jìn)的測量技術(shù)來滿足各種應(yīng)用,。如基于采樣原理,采用高速A/D轉(zhuǎn)換器實現(xiàn)高速數(shù)據(jù)采集,,將模擬信號數(shù)字化,,然后借助處理器強(qiáng)大的數(shù)據(jù)處理能力實現(xiàn)各種數(shù)字信號處理算法,將波形以圖形的方式直觀地顯示出來,并能夠得到被測信號各種豐富的參數(shù),。
1 系統(tǒng)總體方案
本設(shè)計的系統(tǒng)框圖如圖1所示,,得益于FPGA的靈活性,系統(tǒng)的大部分功能都在FPGA內(nèi)部完成,,使得整體結(jié)構(gòu)非常簡潔,。外圍電路主要包括A/D轉(zhuǎn)換模塊、LCD顯示器,、SD卡,、FLASH和按鍵。
A/D轉(zhuǎn)換模塊的功能是實現(xiàn)模擬信號到數(shù)字信號的轉(zhuǎn)換,;FLASH模塊的功能是存儲SoPC(System-on-a-Programmable-Chip)片上系統(tǒng)的固件程序,;SD卡模塊的功能是實現(xiàn)測量信息的長期、大量存儲,,提供與PC機(jī)的接口,,便于后期在計算機(jī)上進(jìn)行分析;LCD模塊的功能是對測量信號波形和相關(guān)參數(shù)的實時顯示,;按鍵模塊的功能是提供整機(jī)的調(diào)節(jié)和控制接口,。
2 FPGA邏輯功能模塊設(shè)計
FPGA內(nèi)部系統(tǒng)框圖如圖2所示。它主要由采樣率控制器,、觸發(fā)控制單元,、FIFO控制器、頻率測量單元,、按鍵控制單元和LCD驅(qū)動器構(gòu)成。
3 SoPC設(shè)計
本設(shè)計中使用的是NiosⅡ/f處理器,,使用硬件乘除法器,,工作于50 MHz。使用FPGA內(nèi)嵌的RAM塊作為系統(tǒng)的運(yùn)行內(nèi)存,。采用FLASH作為片外存儲器,,保存用戶程序,其通過Avalon總線三態(tài)橋與NiosⅡ處理器相連,。
3.1 SoPC軟件設(shè)計
系統(tǒng)開機(jī)調(diào)用相關(guān)函數(shù)初始化LCD,,SD卡和FAT文件系統(tǒng)之后,首先繪制圖形界面,,輸出固定信息,,接著讀取波形參數(shù),將其顯示在LCD上,,然后等待FIFO寫滿,。若FIFO寫滿則將FIFO數(shù)據(jù)讀入緩沖區(qū)中,同時在屏幕上繪制波形,獲得波形的最大和最小值,。最后如果有用戶按鍵輸入則處理按鍵事件,,否則檢測波形參數(shù)是否變化,若有變化則更新顯示,,否則等待FIFO寫滿,,進(jìn)行下一次顯示。流程如圖3所示,。
3.1.1 SoPC底層軟件設(shè)計
底層軟件為各設(shè)備的驅(qū)動程序,,主要有:
(1)LCD驅(qū)動。根據(jù)顯示內(nèi)容的需求,,LCD驅(qū)動程序設(shè)計了以下函數(shù):
①發(fā)送數(shù)據(jù)/命令:將數(shù)據(jù)/命令通過驅(qū)動器發(fā)送到LCD,;
②LCD初始化:完成LCD的上電復(fù)位和初始化;
③LCD清屏:清空顯示,;
④輸出一個像素:在指定位置輸出一個指定顏色的像素點(diǎn),;
⑤畫直線:畫從(x0,y0)到(x1,,y1)的指定顏色的直線,;
⑥畫矩形:畫從(x0,y0)到(x1,,y1)的指定顏色的矩形,,可選擇是否填充;
⑦輸出一個字符:在指定位置輸出一個指定顏色的字符,;
⑧輸出一個字符串:在指定位置輸出一個指定顏色的字符串,。
(2)SD卡驅(qū)動。SD卡通信采用SPI模式,,SD卡驅(qū)動的函數(shù)及功能為:
①發(fā)送數(shù)據(jù)/命令:將數(shù)據(jù)/命令發(fā)送到SD卡,;
②讀取數(shù)據(jù):從SD卡讀取一個字節(jié);
③SD卡復(fù)位:SD卡上電后復(fù)位并使其進(jìn)入SPI模式,;
④SD卡初始化:初始化SD卡使其作好數(shù)據(jù)讀寫準(zhǔn)備,;
⑤讀一個扇區(qū):從指定的扇區(qū)地址讀取一個扇區(qū)的數(shù)據(jù)到緩沖區(qū);
⑥寫一個扇區(qū):將緩沖區(qū)數(shù)據(jù)寫入指定的扇區(qū)地址處,。
(3)FAT16文件系統(tǒng),。FAT16文件系統(tǒng)的主要函數(shù)及功能為:
①FAT初始化:獲取每簇的扇區(qū)數(shù)、FAT表地址,、根目錄地址和FAT表占用的扇區(qū)數(shù)等FAT信息,;
②確定文件名稱:查找已存在的波形文件以確定要保存的文件的名稱;
③添加根目錄項:將保存的文件的名稱,、大小,、位置等添加到根目錄,;
④添加FAT表項:查找FAT表的空簇,將新文件的簇號寫入FAT表,。
3.1.2 SoPC頂層軟件設(shè)計
SoPC的頂層軟件主要完成波形及參數(shù)的顯示,、運(yùn)行/停止控制、光標(biāo)測量,、波形窗口移動,、保存數(shù)據(jù)到SD卡等功能。
(1)波形參數(shù)顯示,。繪制完圖形界面后首先輸出波形信息的固定部分,,如Vpp:???mV,其中“???”將在讀取相關(guān)參數(shù)后更新,。然后讀取相關(guān)參數(shù)并判斷是否變化,,若有變化則更新相關(guān)顯示,在波形輸出結(jié)束后將峰峰值更新到屏幕上,。
(2)波形顯示,。波形參數(shù)顯示完成之后,CPU進(jìn)入等待狀態(tài),,若FIFO寫滿信號為1,,則開始讀FIFO數(shù)據(jù)并顯示波形。流程如圖4所示,。
(3)運(yùn)行/停止控制,。波形顯示完后,若讀到stop為1,,則等到FIFO寫滿后進(jìn)入停止?fàn)顟B(tài),。在停止?fàn)顟B(tài)FIFO中的數(shù)據(jù)保持不變。在停止?fàn)顟B(tài)若檢測到用戶輸入,,則執(zhí)行相應(yīng)函數(shù),。若檢測到stop為0,則清屏,,重繪圖形界面,輸出運(yùn)行圖標(biāo),,返回到顯示波形狀態(tài),。
(4)光標(biāo)測量。在停止?fàn)顟B(tài)若檢測到光標(biāo)測量為1,,則進(jìn)入光標(biāo)測量狀態(tài),。首先將2個光標(biāo)的y軸坐標(biāo)轉(zhuǎn)換為實際電壓值輸出到LCD,然后計算2個光標(biāo)電壓的差值輸出到LCD上的相應(yīng)位置處,。再根據(jù)分頻系數(shù)將2個光標(biāo)的x軸差值轉(zhuǎn)換為實際的時間,,輸出到LCD。最后繪制2個十字光標(biāo),每個光標(biāo)由一橫一縱2條直線構(gòu)成,,其交點(diǎn)位于波形上,。
光標(biāo)繪制完成后檢測用戶按鍵,如果有左右移動或光標(biāo)切換按鍵操作,,則對相應(yīng)光標(biāo)的x坐標(biāo)做加減運(yùn)算,,然后從緩沖區(qū)重新讀取波形輸出到LCD,將之前的信息覆蓋,,接著再次調(diào)用光標(biāo)繪制函數(shù)繪制新的光標(biāo)位置和光標(biāo)的信息,。流程如圖5所示。
(5)將波形保存到SD卡,。在停止?fàn)顟B(tài)若檢測到保存按鍵輸入,,則將數(shù)據(jù)保存到SD卡。首先在FAT表中查找空簇,,返回簇號,,并在FAT表中標(biāo)記該簇已被占用,同時更新FAT表,。然后在根目錄中查找已存在的DAT文件,,若有DAT文件則返回最大的文件名,否則返回0,。然后將緩沖區(qū)的數(shù)據(jù)寫入SD卡的對應(yīng)扇區(qū),,扇區(qū)地址=根目錄地址+根目錄大小+(簇號-2)×每簇的扇區(qū)數(shù)。接著在根目錄中找到一個空閑項,,將文件名稱,、大小、所在簇寫入該項,,即完成文件的保存,。最后在LCD上輸出相應(yīng)的提示信息。流程如圖6所示,。
(6)波形顯示窗口的移動,。在停止?fàn)顟B(tài)若檢測到左右移動輸入,則進(jìn)行波形顯示窗口的移動,。當(dāng)左/右鍵按下時,,若窗口沒超過FIFO邊界,則將窗口的首地址左/右移2個像素,,然后更新顯示的窗口,,同時按比例更新窗口指示器的位置。
(7)波形文件格式,。用于保存波形的文件使用8.3格式命名,,名稱為OSC_xxxx.DAT,,其中xxxx為文件的編號。由于每次采集的波形數(shù)據(jù)量大小相同,,因此文件的大小也為固定值,。FIFO深度為256 B,添加觸發(fā)電平,、觸發(fā)沿,、時間刻度等信息后,文件的體積為260 B,。由于磁盤的底層讀寫操作是按照扇區(qū)進(jìn)行的,,一個扇區(qū)512 B,所以將文件的大小定義為512 B,。前256 B為波形數(shù)據(jù),,第257 B為觸發(fā)沿信息,第258 B為觸發(fā)電平信,,第259 B,,260 B為分頻系數(shù),通過軟件轉(zhuǎn)換后可得時間刻度的大小,。
4 PC機(jī)軟件設(shè)計
PC端軟件使用C語言設(shè)計,。圖形部分使用SDL庫。PC機(jī)軟件用于打開示波器保存的波形文件,,還原波形信息,,并可以進(jìn)行光標(biāo)測量。程序首先初始化SDL視頻,,然后打開文件讀取260個字節(jié),,關(guān)閉文件。載入背景圖案,,初始化TTF字體,。將波形繪制到背景圖案上并計算相關(guān)參數(shù)輸出到相應(yīng)位置,繪制兩個光標(biāo),,等待用戶移動光標(biāo),。光標(biāo)移動后重新載入背景和波形并更新相關(guān)信息。軟件流程如圖7所示,。
5 結(jié)語
本文介紹了一種基于SoPC的數(shù)字示波器設(shè)計,,實際測試結(jié)果表明,系統(tǒng)完成了數(shù)字示波器的基本功能,,各部分工作正常,,各項指標(biāo)達(dá)到設(shè)計要求,。在設(shè)計過程中采用了FPGA芯片,、嵌入式NiosⅡ處理器以及Verilog HDL語言,,簡化了電路的設(shè)計,提高了靈活性,,縮短了設(shè)計周期,。