最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

LabVIEW FPGA番外篇:實(shí)驗(yàn)67-基于LabVIEW FPGA的DDS波形發(fā)生器原理與實(shí)現(xiàn)

2021-07-12 23:27 作者:神電測(cè)控  | 我要投稿

1、概述

????????用于生成具有高精度頻率和相位可控的重復(fù)任意波形的一種常用方法是直接數(shù)字合成 (DDS)。本節(jié)實(shí)驗(yàn)向大家展示如何輕松地將DDS波形發(fā)生器添加到用戶自己的LabVIEW FPGA應(yīng)用程序中,并以mHz或更好的相對(duì)頻率控制以及多個(gè)波形之間的精確相位控制輸出波形。

????????通過(guò)在查找表中指定自己的參考波形,大家可以使用本節(jié)實(shí)驗(yàn)提供的DDS框架生成任意波形。這些波形是逐點(diǎn)生成的,只要是生成信號(hào)的硬件所允許范圍內(nèi)的任何形狀都行。另外,還可以在信號(hào)中加入毛刺、漂移、噪聲和其他異常,以便測(cè)試設(shè)備在不在受控環(huán)境中模擬可能遇到的真實(shí)條件。

????????本節(jié)實(shí)驗(yàn)我們會(huì)通過(guò)黑金的Spartan6/Artix7 FPGA開發(fā)板和AD9767 DAC高速模擬輸出模塊(最高更新率125MS/s),利用LabVIEW編寫FPGA程序產(chǎn)生多路相位和幅度可調(diào)的DDS信號(hào)。

2、DDS理論

????????DDS波形發(fā)生器的核心組件是累加器。累加器本質(zhì)上是一個(gè)實(shí)時(shí)計(jì)數(shù)器,用于存儲(chǔ)生成波形的當(dāng)前相位值。累加器更新的速率和累加器增量值決定了生成的波形頻率。

????????例如,如果累加器每秒更新360次且累加器增量為1度,則生成的波形頻率為1Hz(每秒360度)。當(dāng)累加器相位值達(dá)到最大值(360度)時(shí),它會(huì)翻轉(zhuǎn)并從0度重新開始。為了更準(zhǔn)確地表示相位值,累加器通常使用32位、48位或64位作為計(jì)數(shù)器。在32位累加器中,相位值的范圍為0到4294967295,代表波形的一個(gè)完整周期或0到360 度。

????????當(dāng)前累加器(相位)值用于在參考波形的查找表中執(zhí)行查找操作,以確定下一個(gè)輸出值。查找表包含了要生成的波形的一個(gè)完整周期,通常包含代表波形的1024到8192 個(gè)采樣點(diǎn)(量化點(diǎn)數(shù))。

????????由于累加器值通常比參考波形具有更高的分辨率,受樣本數(shù)量的限制,查找操作還可以在參考波形中的兩個(gè)樣本之間執(zhí)行內(nèi)插。這是基于累加器值中的額外分辨率完成的,并返回更準(zhǔn)確的更新值,從而使生成的信號(hào)具備更好的頻率控制和更少的諧波失真。

3、FPGA DDS實(shí)現(xiàn)

????????本節(jié)實(shí)驗(yàn)提供的LabVIEW FPGA項(xiàng)目包含了2個(gè)DDS信號(hào)生成器下位機(jī)FPGA和上位機(jī)PC端的程序,分別如圖1和圖2所示。其中,下位機(jī)FPGA里面兩個(gè)最為核心的兩個(gè)IP核VI內(nèi)部的查找表存儲(chǔ)的信號(hào)波形分別是正弦和三角。

圖1:LabVIEW FPGA任意波形生成器DDS項(xiàng)目瀏覽器(下位機(jī)FPGA程序)
圖2:LabVIEW FPGA任意波形生成器DDS項(xiàng)目瀏覽器(上位機(jī)PC端程序)

????????下位機(jī)FPGA DDS VI無(wú)需更改即可在用戶自己的FPGA應(yīng)用程序中重復(fù)使用,也可以根據(jù)項(xiàng)目需求進(jìn)行調(diào)整。 其中,F(xiàn)PGA DDS生成器VI(FPGA DDS SineGen IP.vi、FPGA DDS TriangleGen IP.vi)最為核心的是累加器和波形查找兩個(gè)功能。

4.1、累加器

????????DDS發(fā)生器中的累加器是一個(gè)32位計(jì)數(shù)器。每次調(diào)用DDG生成器VI時(shí),累加器都會(huì)將當(dāng)前累加器相位值增加指定的累加器增量。“Saturation Add”函數(shù)會(huì)自動(dòng)回繞,以便當(dāng)達(dá)到最大相位值時(shí),累加器值返回到0,如圖3所示。另外,DDS生成器VI還有一個(gè)重置輸入,用于重新初始化累加器值。這可用于同步同一應(yīng)用程序 VI中使用的多個(gè) DDS 生成器。

圖3:LabVIEW FPGA中實(shí)現(xiàn)的DDS累加器程序框圖


4.2、波形查找

????????DDS發(fā)生器的波形查找部分使用當(dāng)前累加器相位值從參考波形查找表返回當(dāng)前波形值。使用可配置的LabVIEW FPGA查找表功能可以輕松存儲(chǔ)參考波形。雙擊查找表Express VI,然后在彈出來(lái)的查找表配置對(duì)話框定義樣本波形的大小和波形值,如圖4所示。本節(jié)實(shí)驗(yàn)我們使用了2048個(gè)樣本的參考波形,作為重復(fù)波形的一個(gè)周期。

圖4:配置參考波形查找表

????????執(zhí)行查找操作的第一步,是從累加器值應(yīng)用可選的相位偏移。這就允許我們可以精確控制多個(gè)DDS同步發(fā)生器之間的相位偏移,程序框圖如圖5所示。

圖5:DDS生成的波形查找功能程序框圖

????????波形輸出的結(jié)果對(duì)應(yīng)當(dāng)前相位,寬度為32位值。本節(jié)實(shí)驗(yàn),我們使用了存儲(chǔ)在查找表中的2048個(gè)樣本作為參考波形。2048個(gè)樣本相當(dāng)于11位樣本分辨率 (2^11 = 2048)。?? ?因此,相位值的前11位確定將使用參考波形中的哪個(gè)樣本。邏輯移位(移位-5)和分割數(shù)函數(shù)將前11位作為一個(gè)值返回,將接下來(lái)的16位作為單獨(dú)的值返回。例如,前11位可能返回的樣本索引是420,如圖6所示。

圖6:帶有樣本索引的DDS參考波形

????????如果要充分使用滿量程的16位相位值,我們可以通過(guò)內(nèi)插參考波形中的兩個(gè)相鄰點(diǎn)來(lái)更準(zhǔn)確地計(jì)算出輸出值。假設(shè)接下來(lái)的16位相位累加器包含值30609。在LabVIEW FPGA查找表函數(shù)中,我們使用的可能范圍為0到65535的16位整數(shù)表示參考波形的兩個(gè)相鄰樣本之間的范圍。在本節(jié)實(shí)驗(yàn)中,所需值 (30609)位于樣本 420到樣本421之間的比例大約是46%,如圖7所示。通過(guò)在參考波形的這兩個(gè)樣本點(diǎn)之間進(jìn)行插值,查找表函數(shù)會(huì)為DDS 返回更準(zhǔn)確的輸出值,從而生成的波形也更加精細(xì)。

圖7:具有內(nèi)插數(shù)據(jù)樣本的DDS參考波形

????????內(nèi)插輸出值在這個(gè)VI內(nèi)部,可以完成信號(hào)幅度縮放。從查找表返回的值是一個(gè)范圍在-32768到32767之間的有符號(hào)整數(shù)。該值乘以返回I32整數(shù)的信號(hào)幅度,然后按-15 邏輯移位(除以32768)以返回-Signal Amplitude到+Signal Amplitude范圍內(nèi)的值。

????????縮放后的輸出值從FPGA DDS Generator VI輸出,然后傳遞給AO模擬輸出或在FPGA VI中作進(jìn)一步處理。

5、使用單個(gè)FPGA DDS生成器

????????FPGA DDS Generator VI作為子VI放置在用于生成波形信號(hào)的FPGA循環(huán)中。每次調(diào)用DDS發(fā)生器都會(huì)增加累加器并返回波形信號(hào)的下一個(gè)值。DDS生成器VI的輸出被傳遞到DAC模擬輸出節(jié)點(diǎn),或者在FPG上進(jìn)一步處理。

????????本節(jié)實(shí)驗(yàn)里面,DDS發(fā)生器的輸出在更新到模擬輸出之前通過(guò)一個(gè)移位寄存器,如圖8所示。這種流水線技術(shù)允許DDS發(fā)生器和AO模擬輸出(比如黑金的AD9767雙通道DAC模塊)并行運(yùn)行,可以實(shí)現(xiàn)更高的物理輸出更新率,當(dāng)然,還可以將DDS信號(hào)通過(guò)FIFO傳遞給其他定時(shí)循環(huán)使用!

圖8:使用1個(gè)FPGA DDS Generator VI產(chǎn)生1路DDS信號(hào)


6、同步多個(gè)DDS生成器

????????我們將FPGA DDS生成器VI配置成“可重入子VI”,這樣用戶就可以在一個(gè)FPGA VI里面放置多個(gè)DDS生成器。在一個(gè)程序中使用多個(gè)DDS發(fā)生器的一種常見應(yīng)用是生成大量具有可變幅度和相位偏移的同步波形信號(hào)。

????????在下面圖9所示的范例程序里面,分別給3路DDS信號(hào)設(shè)置了不同的頻率(累加器增量)、相移和信號(hào)幅度,然后將一個(gè)復(fù)位按鈕同時(shí)接到這3個(gè)DDS生成VI上,重置一下累加器標(biāo)志,即可使這3個(gè)DDS發(fā)生器同步生成具有指定相位偏移的信號(hào)。

圖9:生成3路具有相位偏移受控的同步正弦波形


7、DDS發(fā)生器主機(jī)接口(上位機(jī)PC控制)

????????為了更加靈活的控制下位機(jī)FPGA按照實(shí)際的項(xiàng)目需求產(chǎn)生指定的DDS信號(hào),這里有很多中間參數(shù)需要進(jìn)行計(jì)算和轉(zhuǎn)換,如果大家使用黑金的Spartan6開發(fā)板(AX516),可以直接在上位機(jī)通過(guò)FPGA Reference引用訪問(wèn)控件的方式來(lái)更新控制下位機(jī)FPGA VI;如果用戶使用的是ARTIX7或者KINTEX7開發(fā)板,可以將上位機(jī)PC端的參數(shù)通過(guò)串口、USB、網(wǎng)口或者PCIe下發(fā)給下位機(jī)FPGA。

????????下面給出了基于黑金超高性價(jià)比的Spartan6 FPGA開發(fā)板對(duì)應(yīng)的上位機(jī)PC端控制程序前面板,如圖10所示;對(duì)應(yīng)的程序框圖,如圖11所示。

圖10:上位機(jī)PC端調(diào)用和控制下位機(jī)FPGA DDS前面板參數(shù)
圖11:上位機(jī)PC端控制下位機(jī)FPGA DDS對(duì)應(yīng)的程序框圖

????????為了計(jì)算累加器增量,我們將所需的波形頻率乘以累加器的范圍,等于每秒的總相位累積,再除以更新循環(huán)的頻率,即可得到我們每次更新需要的增量。

????????舉例說(shuō)明:假設(shè)我們需要產(chǎn)生頻率為20kHz的波形,首先計(jì)算出累加器需要每秒向上計(jì)數(shù)20000×(2^32)>>85899345920000,然后除以前面板上的1MHz更新率,就得到了累加器增量值:85899346。

????????相移作為一個(gè)完整周期的比率,可以看做是累加器的范圍。45度相移是一個(gè)周期 (45/360)的0.125,所以對(duì)于累加器相移,可以換算出結(jié)果: 0.125*(2^32)=536870912。

????????信號(hào)幅度與實(shí)際的AO模擬輸出范圍相關(guān),比如16位的DAC模擬輸出電壓如果是±10V,那么要想輸出5V電壓,對(duì)于的16進(jìn)制整形DAC數(shù)值就是16384。

????????以上計(jì)算過(guò)程可以通過(guò)下面的程序框圖12,一目了然!最后,我們給出基于黑金Spartan6開發(fā)板+AD9767雙通道高速DAC模塊的完整FPGA DDS程序框圖,如圖13所示。

?

圖12:上位機(jī)波形參數(shù)下發(fā)給FPGA DDS VI的整形數(shù)值計(jì)算公式
圖13:基于黑金Spartan6開發(fā)板+AD9767模擬輸出模塊的FPGA DDS完整程序框圖


LabVIEW FPGA番外篇:實(shí)驗(yàn)67-基于LabVIEW FPGA的DDS波形發(fā)生器原理與實(shí)現(xiàn)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
库伦旗| 新平| 蕲春县| 白山市| 太康县| 青阳县| 邢台县| 巴楚县| 德钦县| 前郭尔| 富民县| 两当县| 青阳县| 庆元县| 辽阳县| 彭泽县| 祁连县| 建宁县| 鄢陵县| 安顺市| 象州县| 博客| 深圳市| 晋城| 崇明县| 库伦旗| 吴桥县| 勃利县| 磐石市| 游戏| 九江县| 萝北县| 阜康市| 会昌县| 隆德县| 顺义区| 青岛市| 开鲁县| 临武县| 宣恩县| 冷水江市|