前言
DDS 是直接數(shù)字式頻率合成器(Direct Digital Synthesizer)的英文縮寫,是一項關鍵的數(shù)字化技術。與傳統(tǒng)的頻率合成器相比, DDS 具有低成本、低功耗、高分辨率和快速轉換時間等優(yōu)點,廣泛使用在電信與電子儀器領域,是實現(xiàn)設備全數(shù)字化的一個關鍵技術。作為設計人員,我們習慣稱它為信號發(fā)生器,一般用它產生正弦、鋸齒、方波等不同波形或不同頻率的信號波形,在電子設計和測試中得到廣泛應用
提示:以下是本篇文章正文內容,下面案例可供參考
一、pandas是什么?
DDS 技術是一種全新的頻率合成方法,其具有低成本、低功耗、高分辨率和快速轉換時間等優(yōu)點, 對數(shù)字信號處理及其硬件實現(xiàn)有著很重要的作用。DDS 的基本結構主要由相位累加器、相位調制器、波形數(shù)據(jù)表 ROM、 D/A 轉換器等四大結構組成,其中較多設計還會在數(shù)模轉換器之后增加一個低通濾波器。 DDS 結構示意圖
上圖是不含低通濾波器的 DDS 結構示意圖,圖中主要包括相位累加器、相位調制器、波形存儲器、數(shù)模(D/A)轉換器等四大結構。接下來我們會結合 DDS 結構示意圖,為大家講解一下 DDS 的工作原理。在講解之前,先來對其中各參數(shù)做一下說明。系統(tǒng)時鐘 CLK 為整個系統(tǒng)的工作時鐘,頻率為 fCLK;頻率字輸入 F_WORD,一般為整數(shù),數(shù)值大小控制輸出信號的頻率大小,數(shù)值越大輸出信號頻率越高,反之,輸出信號頻率越低,后文中用 K 表示;相位字輸入P_WORD,為整數(shù),數(shù)值大小控制輸出信號的相位偏移,主要用于相位的信號調制,后文用 P 表示;設輸出信號CLK_OUT,頻率為 fOUT。
圖中所展示的四大結構中,相位累加器是整個 DDS 的核心,在這里完成相位累加,生成相位碼。相位累加器的輸入為頻率字輸入 K,表示相位增量,設其位寬為 N,滿足等式K = 2N * fOUT / fCLK 。其在輸入相位累加器之前,在系統(tǒng)時鐘同步下做數(shù)據(jù)寄存,數(shù)據(jù)改變時不會干擾相位累加器的正常工作。相位調制器接收相位累加器輸出的相位碼, 在這里加上一個相位偏移值 P, 主要用于信號的相位調制, 如應用于通信方面的相移鍵控等, 不使用此部分時可以去掉, 或者將其設為一個常數(shù)輸入, 同樣相位字輸入也要做寄存。波形數(shù)據(jù)表 ROM 中存有一個完整周期的正弦波信號。假設波形數(shù)據(jù) ROM 的地址位寬為 12 位,存儲數(shù)據(jù)位寬為 8 位,即 ROM 有 212 = 4096 個存儲空間,每個存儲空間可存儲 1字節(jié)數(shù)據(jù)。將一個周期的正弦波信號,沿橫軸等間隔采樣 212 = 4096 次,每次采集的信號幅度用 1 字節(jié)數(shù)據(jù)表示,最大值為 255,最小值為 0。將 4096 次采樣結果按順序寫入 ROM的 4096 個存儲單元, 一個完整周期正弦波的數(shù)字幅度信號寫入了波形數(shù)據(jù)表 ROM 中。波形數(shù)據(jù)表 ROM 以相位調制器傳入的相位碼為 ROM 讀地址,將地址對應存儲單元中的電壓幅值數(shù)字量輸出。D/A 轉 換 器 將 輸 入 的 電 壓 幅 值 數(shù) 字 量 轉 換 為 模 擬 量 輸 出 , 就 得 到 輸 出 信 號CLK_OUT。輸出信號 CLK_OUT 的信號頻率 fOUT = K * fCLK / 2N。當 K = 1 時,可得 DDS 最小分辨率為: fOUT = fCLK / 2N,此時輸出信號頻率最低。根據(jù)采樣定理, K 的最大值應小于 2N /2。
對于 N 位的相位累加器,它對應的相位累加值為 2N,如果正弦 ROM 中存儲單元的個數(shù)也是 2N 的話,這個問題就很好解決,但是這對 ROM 的對存儲容量的要求較高。在實際操作中,我們使用相位累加值的高幾位對 ROM 進行尋址,也就是說并不是每個系統(tǒng)時鐘都對 ROM 進行數(shù)據(jù)取,而是多個時鐘讀取一次,因為這樣能保證相位累加器溢出時,從正ROM 表中取出正好一個正弦周期的樣點。因此,相位累加器每計數(shù) 2N 次,對應一個正弦周期。而相位累加器 1 秒鐘計數(shù) fCLK次,在 k=1 時, DDS 輸出的時鐘頻率就是頻率分辨率。頻率控制字 K 增加時,相位累加器溢出的頻率增加,對應 DDS 輸出信號 CLK_OUT 頻率變?yōu)?K 倍的DDS 頻率分辨率。
二、ROM 內波形數(shù)據(jù)寫入
1.MIF
我們設計的 DDS 簡易信號發(fā)生器想要實現(xiàn)正弦波、方波、三角波和鋸齒波 4 種波形的輸出,需要事先在波形數(shù)據(jù)表 ROM 中存入 4 種波形信號各自的完整周期波形數(shù)據(jù)。 ROM作為只讀存儲器,在進行 IP 核設置時需要指定初始化文件, 我們將波形數(shù)據(jù)作為初始化文件寫入其中,文件格式為 MIF 文件。使用 MatLab 繪制 4 種信號波形,對波形進行等間隔樣,以采樣次數(shù)作為 ROM 存儲地址,將采集的波形幅值數(shù)據(jù)做為存儲數(shù)據(jù)寫入存儲地址對應的存儲空間。
2.DDS 模塊參考代碼
代碼如下(示例):文章來源:http://www.zghlxwxcb.cn/news/detail-469334.html
//********************************************************************//
//fre_add:相位累加器
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1'b0)
fre_add <= 32'd0;
else
fre_add <= fre_add + FREQ_CTRL;
//rom_addr:ROM讀地址
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1'b0)
rom_addr <= 14'd0;
else
case(wave_select)
sin_wave:
begin
rom_addr_reg <= fre_add[31:20] + PHASE_CTRL;
rom_addr <= rom_addr_reg;
end //正弦波
squ_wave:
begin
rom_addr_reg <= fre_add[31:20] + PHASE_CTRL;
rom_addr <= rom_addr_reg + 14'd4096;
end //方波
tri_wave:
begin
rom_addr_reg <= fre_add[31:20] + PHASE_CTRL;
rom_addr <= rom_addr_reg + 14'd8192;
end //三角波
saw_wave:
begin
rom_addr_reg <= fre_add[31:20] + PHASE_CTRL;
rom_addr <= rom_addr_reg + 14'd12288;
end //鋸齒波
default:
begin
rom_addr_reg <= fre_add[31:20] + PHASE_CTRL;
rom_addr <= rom_addr_reg;
end //正弦波
endcase
//********************************************************************//
波形仿真
文章來源地址http://www.zghlxwxcb.cn/news/detail-469334.html
到了這里,關于基于FPGA的簡易 DDS 信號發(fā)生器的設計的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!