2.16 AD采集-明德?lián)P至簡(jiǎn)設(shè)計(jì)法原理與應(yīng)用
本文的文檔編號(hào):000400000027
需要看對(duì)應(yīng)的視頻,請(qǐng)點(diǎn)擊視頻編號(hào):002700000454
1、本文檔講述FPGA產(chǎn)生正弦波數(shù)據(jù),由DA輸出,然后再外部環(huán)回到AD接口進(jìn)行采集,可通過在線調(diào)試工具進(jìn)行觀察
2、801開發(fā)板使用
項(xiàng)目背景
1.1 AD轉(zhuǎn)換
轉(zhuǎn)換 轉(zhuǎn)換就是模數(shù)轉(zhuǎn)換。顧名思義,就是把模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)。主要包括積分型、逐次逼近型、并行比較型串并行型、ΣΔ調(diào)制型、電容陣列逐次比較型及壓頻變換型。
A/D轉(zhuǎn)換器是用來通過一定的電路將模擬量轉(zhuǎn)變?yōu)閿?shù)字量。模擬量可以是電壓、電流等電信號(hào),也可以是壓力、溫度、濕度、位移、聲音等非電信號(hào)。但在A/D轉(zhuǎn)換前,輸入到A/D轉(zhuǎn)換器的輸入信號(hào)必須經(jīng)各種傳感器把各種物理量轉(zhuǎn)換成電壓信號(hào)。
AD轉(zhuǎn)換的技術(shù)指標(biāo),一般有如下幾個(gè):
1.?分辨率(Resolution)?指數(shù)字量變化一個(gè)最小量時(shí)模擬信號(hào)的變化量,定義為滿刻度與2^n的比值。分辨率又稱精度,通常以數(shù)字信號(hào)的位數(shù)來表示。
2.?轉(zhuǎn)換速率(Conversion Rate)是指完成一次從模擬轉(zhuǎn)換到數(shù)字的AD轉(zhuǎn)換所需的時(shí)間的倒數(shù)。積分型AD的轉(zhuǎn)換時(shí)間是毫秒級(jí)屬低速AD,逐次比較型AD是微秒級(jí)屬中速AD,全并行/串并行型AD可達(dá)到納秒級(jí)。采樣時(shí)間則是另外一個(gè)概念,是指兩次轉(zhuǎn)換的間隔。為了保證轉(zhuǎn)換的正確完成,采樣速率?(Sample Rate)必須小于或等于轉(zhuǎn)換速率。因此有人習(xí)慣上將轉(zhuǎn)換速率在數(shù)值上等同于采樣速率也是可以接受的。常用單位是ksps和Msps,表 示每秒采樣千/百萬(wàn)次(kilo / Million Samples per Second)。
3.?量化誤差?(Quantizing Error)?由于AD的有限分辨率而引起的誤差,即有限分辨率AD的階梯狀轉(zhuǎn)移特性曲線與無限分辨率AD(理想AD)的轉(zhuǎn)移特 性曲線(直線)之間的最大偏差。通常是1個(gè)或半個(gè)最小數(shù)字量的模擬變化量,表示為1LSB、1/2LSB。
4.?偏移誤差(Offset Error)?輸入信號(hào)為零時(shí)輸出信號(hào)不為零的值,可外接電位器調(diào)至最小。
5.?滿刻度誤差(Full Scale Error)?滿度輸出時(shí)對(duì)應(yīng)的輸入信號(hào)與理想輸入信號(hào)值之差。
6.?線性度(Linearity)?實(shí)際轉(zhuǎn)換器的轉(zhuǎn)移函數(shù)與理想直線的最大偏移,不包括以上三種誤差。
其他指標(biāo)還有:絕對(duì)精度(Absolute Accuracy) ,相對(duì)精度(Relative Accuracy),微分非線性,單調(diào)性和無錯(cuò)碼,總諧波失真(Total Harmonic Distotortion縮寫THD)和積分非線性。
1.2?教學(xué)板AD原理圖
明德?lián)P教學(xué)板上板載板載32Mhz?轉(zhuǎn)換速率、8bit高速AD芯片AD9280,滿足各種信號(hào)的采集,滿足用戶實(shí)現(xiàn)各種常見濾波算法的實(shí)現(xiàn)。實(shí)際位置如下所示:

圖?599

圖?600
上面是AD9280的原理圖。與FPGA相連的信號(hào)有:AD_D0~7、AD_OTR、AD_CLK。

1.3?AD9280的控制時(shí)序
AD9280的控制時(shí)序如下圖。

圖?601

圖?602

圖?603
由時(shí)鐘圖可以看出,每個(gè)時(shí)鐘就可以做AD轉(zhuǎn)換一次,但會(huì)延遲3個(gè)時(shí)鐘才輸出。例如時(shí)序圖中第一個(gè)時(shí)鐘采集到S1,并對(duì)S1進(jìn)行模數(shù)轉(zhuǎn)換,經(jīng)過3個(gè)時(shí)鐘后,輸出DATA1,這個(gè)DATA1就是S1所應(yīng)對(duì)的數(shù)字值。
由參數(shù)時(shí)序可以看出,時(shí)鐘最大是32MHz。
由上面時(shí)序可以看出,控制AD9280非常簡(jiǎn)單,只要給出不超過32MHz的時(shí)鐘,然后對(duì)其采集就行了。
2?設(shè)計(jì)目標(biāo)
本次案例將使用到AD9709和AD9280。其連接示意如下圖所示。

圖?604
其中跳帽就設(shè)置成XXX,設(shè)置后,AD9709的通道A輸出,就會(huì)環(huán)回給AD9280。
本案例是FPGA先產(chǎn)生正弦信號(hào),這個(gè)正弦信號(hào)輸出給DA通道A,經(jīng)過環(huán)回后,給回AD9280的輸入端,F(xiàn)PGA再采集AD9280的數(shù)據(jù),最后使用signaltap采集數(shù)字信號(hào)。

圖?605
正弦信號(hào)的產(chǎn)生方式,與“FIR濾波器的設(shè)計(jì)”案例一致。正弦信號(hào)的頻率受開發(fā)板上的3個(gè)撥碼開關(guān)控制,用3位信號(hào)key表示,一共可以產(chǎn)生8種頻率。
正弦信號(hào)的頻率?約等于:?100KHz * (key+1)。
例如,當(dāng)key等于0時(shí),產(chǎn)生約100KHz的正弦信號(hào);
當(dāng)key等于1時(shí),產(chǎn)生約200KHz的正弦波;
當(dāng)key等于7時(shí),產(chǎn)生約800KHz的正弦波。
FPGA產(chǎn)生25MHz的時(shí)鐘給AD9280,也就是采樣率為25M。用這個(gè)時(shí)鐘作為SIGNALTAP的采樣時(shí)鐘,觀察AD9280過來的數(shù)據(jù)波形。
上板效果圖如下圖所示。(用signaltap抓取波形)

圖?606
3?設(shè)計(jì)實(shí)現(xiàn)
3.1?頂層信號(hào)
新建目錄:D:mdy_bookd_prj。在該目錄中,新建一個(gè)名為ad_prj.v的文件,并用GVIM打開,開始編寫代碼。
我們要實(shí)現(xiàn)的功能,概括起來就是FPGA產(chǎn)生控制AD9709,讓其中的通道A產(chǎn)生正弦波所對(duì)應(yīng)的電壓,同時(shí)采集AD9280的數(shù)據(jù)并觀察。為了控制AD9709的通道A,就需要控制AD9709的MODE、SLEEP、CLK1、WRT1、DB7~0P1管腳。為了采集AD9280,那么就需要控制AD9280的CLK、D0~D7管腳。根據(jù)設(shè)計(jì)目標(biāo)的要求,整個(gè)工程需要以下信號(hào):
1.?使用clk連接到晶振,表示50M時(shí)鐘的輸入。
2.?使用rst_n連接到按鍵,表示復(fù)位信號(hào)。
3.?使用3位信號(hào)key,表示三位撥碼開關(guān)。
4.?使用dac_mode信號(hào)連接到AD9709的MODE管腳,用來控制其工作模式。
5.?使用dac_sleep信號(hào)連接到AD9709的SLEEP管腳,用來控制其睡眠模式。
6.?使用dac_clka信號(hào)連接到AD9709的CLK1管腳,用來控制通道A的時(shí)鐘。
7.?使用dac_wra信號(hào)連接到AD9709的WRT1管腳,用來控制通道A的寫使能。
8.?使用8位信號(hào)dac_da連接到AD9709的DB7~0P1管腳,用來控制通道A的寫數(shù)據(jù)。
9.?使用ad_clk信號(hào)連接到AD9280的CLK管腳,用來作來采樣時(shí)鐘。
10.?使用8位ad_in信號(hào)連接到AD9280的D7~0管腳,用來采集數(shù)據(jù)。
綜上所述,我們這個(gè)工程需要10個(gè)信號(hào),時(shí)鐘clk,復(fù)位rst_n,dac_mode、dac_sleep、dac_clka、dac_wra、dac_da、ad_clk和ad_in,其中dac_da?、ad_in是8位信號(hào),key是3位信號(hào),其他都是1位信號(hào)。


將module的名稱定義為ad_prj,代碼如下:

其中clk、rst_n是1位的輸入信號(hào),dac_da是8位的輸出信號(hào),dac_mode,dac_clka,dac_wra,dac_sleep是1位輸出信號(hào),ad_clk是1位輸出信號(hào),ad_in是8位輸入信號(hào),key是3位輸入信號(hào)。

3.2?信號(hào)設(shè)計(jì)
由于正弦信號(hào)的產(chǎn)生要求,與“FIR濾波器設(shè)計(jì)”相同,所以不再詳細(xì)描述原因?,F(xiàn)在把相關(guān)代碼整理如下。







還有最后一個(gè)信號(hào)要設(shè)計(jì):ad_clk。由設(shè)計(jì)目標(biāo)可知,要求是25MHz的時(shí)鐘。為了產(chǎn)生時(shí)鐘,我們就要用到PLL。
3.3?生成PLL IP核
1.打開IP核管理工具
打開quartus軟件,然后選擇Tools ->IPcatalog,在右側(cè)彈出如下界面

圖?607
在搜索框中,填下ALTPLL,就會(huì)出現(xiàn)如下界面。

圖?608
ALTPLL就是我們需要使用的PLL IP核。雙擊ALTPLL,在彈出的對(duì)話框中起個(gè)文件名,如vga_pll,記得選擇verilog。然后點(diǎn)OK就可以開始設(shè)置參數(shù)了。

圖?609
2.設(shè)置IP參數(shù)

圖?610
上圖中,主要是設(shè)置輸入的時(shí)鐘頻率,明德?lián)P開發(fā)板輸入時(shí)鐘是固定的50MHz,因此可填寫50,注意旁邊的單位是選擇MHz。其他默認(rèn),按next。

圖?611
上圖的option inputs中,全部取消勾選,不需要產(chǎn)生復(fù)位信號(hào)。上圖中的lock output,全部取消勾選,不需要產(chǎn)生locked指示信號(hào)。然后選Next。

圖?612
不用做任何更改,直接Next。

圖?613
不用做任何更改,直接Next。

圖?614
增加輸入時(shí)鐘,由于我們只有一個(gè)輸入時(shí)鐘,所以只用inclk0即可,無需增加。直接Next。

圖?615
不用做任何更改,直接Next。

圖?616
設(shè)置c0的輸出頻率。我們選擇Enter output clock frequest中,直接填入25,單位選擇MHz,就是表示要產(chǎn)生25MHz的時(shí)鐘。然后點(diǎn)擊Finish,彈出如下窗口。

圖?617
取消my_pll_bb.v的勾選,然后選擇Finish。QUARTUS就會(huì)產(chǎn)生PLL IP的代碼了。
稍等片刻,到工程目錄?D:mdy_bookd_prj,可以看到生成一個(gè)my_pll.v文件,用GVIM打開后,可以看到PLL模塊的模塊輸入輸出接口。其中inclk0是50MHz輸入時(shí)鐘,c0是25MHz的輸出時(shí)鐘。頂層模塊直接例化就可以使用了。

圖?618

至此,主體程序已經(jīng)完成。接下來是將module補(bǔ)充完整。
3.4?信號(hào)定義
接下來定義信號(hào)類型。
在“FIR濾波器案例”中已經(jīng)說明了部分信號(hào)的說明,現(xiàn)補(bǔ)充如下。

ad_clk是由例化模塊輸出信號(hào),非always產(chǎn)生,可以定義為wire型,只有1位。

綜合與上板
4.1?添加文件到工程

圖?619
1.前面已經(jīng)介紹了新建工程?,F(xiàn)在打開quartus,在Project菜單中選擇Add/Remove File to Project,彈出文件窗口。

圖?620
點(diǎn)擊右上角的
,在彈出來的窗口中,雙擊選擇D:mdy_bookd_prj目錄下的ad_prj.v文件。然后記得要點(diǎn)Add,才算正式加到工程。

圖?621
點(diǎn)OK關(guān)閉本窗口。
4.2?綜合
1.點(diǎn)擊右上角藍(lán)色三角鍵進(jìn)行編譯

圖?622
之后等待編譯成功
4.3?配置管腳

圖?623
在菜單欄中,選中Assignments,然后選擇Pin Planner,就會(huì)彈出配置管腳的窗口。

圖?624
在配置窗口中的location一列,可以填寫每個(gè)管腳所對(duì)應(yīng)的FPGA管腳號(hào)。


按上面配置好每個(gè)信號(hào)的管腳,其最終效果如下圖。

圖?625
關(guān)閉Pin Planner,軟件自動(dòng)會(huì)保存管腳配置信息。
4.4?再次綜合

圖?626
在菜單欄中,選中Processing,然后選擇Start Compilation,再次對(duì)整個(gè)工程進(jìn)行編譯和綜合。

圖?627
出現(xiàn)上面的界面,就說明編譯綜合成功。
4.5?連接開發(fā)板

圖?628
連接示意如上圖所示。將電源接上開發(fā)板;USB BLASTER一端連接到JTAG插口,另一端連到PC的USB接口;將開發(fā)板上的P7接口和P11與示波器的兩個(gè)通道相連。最后再將電源打開。
4.6?設(shè)置SIGNALTAP
4.7 用SIGNALTAP觀察