1)實驗平臺:正點原子新起點V2開發板
2)平臺購買地址:https://detail.tmall.com/item.htm?id=609758951113
2)全套實驗原始碼+手冊+視頻下載地址:http://www.openedv.com/thread-300792-1-1.html
3)對正點原子FPGA感興趣的同學可以加群討論:994244016
4)關注正點原子公眾號,獲取最新資料更新

第三十六章雙路高速DA實驗
DAC(Digital to Analog Converter,即數模轉換器)是大多數系統中必不可少的組成部件,用于將離散的數字信號轉換成連續的模擬信號,它們是連接模電電路和數字電路必不可少的橋梁,在很多場合下, DAC的轉換速度甚至直接決定了整個系統的運行速度,本章我們將使用高速DA芯片實作數模轉換,產生正弦波模擬電壓信號,
本章包括以下幾個部分:
3535.1簡介
35.2實驗任務
35.3硬體設計
35.4程式設計
35.5下載驗證
36.1簡介
本章我們使用的雙路DA模塊是正點原子推出的一款雙路高速數模轉換模塊(ATK_DUAL_HS_DA),高速DA轉換芯片是由思瑞浦公司生產的3PD5651E芯片,
ATK_HS_AD_DA模塊的硬體結構圖如下圖所示,

圖 36.1.1 ATK_DUAL_HS_DA模塊硬體結構圖
由上可知,3PD5651E芯片輸出的是一對差分電流信號,為了防止受到噪聲干擾,電路中接入了低通濾波器,然后通過高性能和高帶寬的運放電路,實作差分變單端以及幅度調節等功能,使整個電路性能得到了最大限度的提升,最終輸出的模擬電壓范圍是-5V~+5V,
下面來介紹下這款芯片,
3PD5651E是3PEAK公司(思瑞浦微電子科技股份有限公司)生產的DAC系列數模轉換器,具有高性能、低功耗的特點,3PD5651E的數模轉換位數為10位,最大轉換速度為125MSPS(每秒采樣百萬次,Million Samples per Second),
3PD5651E的內部功能框圖如下圖所示:

圖 36.1.2 內部功能框圖
3PD5651E在時鐘(CLOCK)的驅動下作業,內部集成了+1.1V參考電壓(+1.10V REF)、運算放大器、電流源(CURRENT SOURCE ARRAY)和鎖存器(LATCHES),兩個電流輸出端IOUTA和IOUTB為一對差分電流,當輸入資料為0(DB9DB0=10’h000)時,IOUTA的輸出電流為0,而IOUTB的輸出電流達到最大,最大值的大小跟參考電壓有關;當輸入資料全為高點平(DB9DB0=10’h3ff)時,IOUTA的輸出電流達到最大,最大值的大小跟參考電壓有關,而IOUTB的輸出電流為0,
3PD5651E必須在時鐘的驅動下才能把資料寫入片內的鎖存器中,其觸發方式為上升沿觸發,3PD5651E的時序圖如下圖所示:

圖 36.1.3 芯片時序圖

圖 36.1.4 FPGA內部時序
如圖 36.1.3中的DBO-DB9和CLOCK是3PD5651E的10位輸入資料和為輸入時鐘,IOUTA和IOUTB為3PD5651E輸出的電流信號,由圖 36.1.3可知,資料在時鐘的上升沿鎖存,因此我們可以在時鐘的下降沿發送資料,這樣使DA芯片在資料的中央采樣,保證資料采樣的準確性,如圖 36.1.4所示,需要注意的是,CLOCK的時鐘頻率越快,3PD5651E的數模轉換速度越快,3PD5651E的時鐘頻率最快為125Mhz,
IOUTA和IOUTB為3PD5651E輸出的一對差分電流信號,通過外部電路低通濾波器與運放電路輸出模擬電壓信號,電壓范圍是-5V至+5V之間,當輸入資料等于0時,3PD5651E輸出的電壓值為5V;當輸入資料等于10’h3ff時,3PD5651E輸出的電壓值為-5V,
3PD5651E是一款數字信號轉模擬信號的器件,內部沒有集成DDS(Direct Digital Synthesizer,直接數字式頻率合成器)的功能,但是可以通過控制3PD5651E的輸入資料,使其模擬DDS的功能,例如,我們使用3PD5651E輸出一個正弦波模擬電壓信號,那么我們只需要將3PD5651E的輸入資料按照正弦波的波形變化即可,下圖為3PD5651E的輸入資料和輸出電壓值按照正弦波變化的波形圖,

圖 36.1.5 3PD5651E正弦波資料(左)、電壓值(右)
由上圖可知,資料在0至1023之間按照正弦波的波形變化,最終得到的電壓也會按照正弦波波形變化,當輸入資料重復按照正弦波的波形資料變化時,那么3PD5651E就可以持續不斷的輸出正弦波的模擬電壓波形,需要注意的是,最終得到的3PD5651E的輸出電壓變化范圍由其外部電路決定的,當輸入資料為0時,3PD5651E輸出+5V的電壓;當輸入資料為1023時,3PD5651E輸出-5V的電壓,
由此可以看出,只要輸入的資料控制的得當,3PD5651E可以輸出任意波形的模擬電壓信號,包括正弦波、方波、鋸齒波、三角波等波形,
36.2實驗任務
本節實驗任務是使用新起點開發板及雙路高速DA擴展模塊(ATK_DUAL_HS_DA模塊)實作數模轉換,首先利用FPGA產生正弦波變化的數字信號,經過DA芯片后轉換成模擬信號,然后通過示波器觀察模擬信號的波形是否按照正弦波波形變化,
36.3硬體設計
ATK_DUAL_HS_DA模塊由2個型號為3PD5651E 的DA轉換芯片組成,3PD5651E的原理圖如下圖所示,

圖 36.3.1 芯片原理圖
由上圖可知,3PD5651E輸出的一對差分電流信號先經過濾波器,再經過運放電路得到一個單端的模擬電壓信號,圖中右側的RP1為滑動變阻器,可以調節輸出的電壓范圍,推薦通過調節滑動變阻器,使輸出的電壓范圍在-5V至+5V之間,從而達到DA轉換芯片的最大轉換范圍,
ATK_DUAL_HS_DA模塊的實物圖如下圖所示,

圖 36.3.2 ATK_DUAL_HS_DA模塊實物圖
本實驗中,各埠信號的管腳分配如下表所示,
表格 36.3.1 雙路高速DA轉換實驗管腳分配

36.4程式設計
根據本章的實驗任務,FPGA需要連續輸出正弦波波形的資料,才能使3PD5651E連續輸出正弦波波形的模擬電壓,如果通過撰寫代碼使用三角函式公式運算的方式輸出正弦波資料,那么程式設計會變得非常復雜,在工程應用中,一般將正弦波波形資料存盤在RAM或者ROM中,由于本次實驗并不需要寫資料到RAM中,因此我們將正弦波波形資料存盤在只讀的ROM中,直接讀取ROM中的資料發送給DA轉換芯片即可,
圖 36.4.1是根據本章實驗任務畫出的系統框圖,ROM里面事先存盤好了正弦波波形的資料,DA資料發送模塊從ROM中讀取資料,將資料和時鐘送到3PD5651E芯片的輸入資料埠和輸入時鐘埠,
雙路高速DA實驗的系統框圖如圖 36.4.1所示:

圖 36.4.1 雙路高速DA系統框圖
頂層模塊的原理圖如下圖所示:

圖 36.4.2 頂層模塊原理圖
FPGA頂層模塊(hs_dual_da)例化了以下三個模塊:DA資料發送模塊(da_wave_send)、ROM波形存盤模塊(rom_1024x10b)和時鐘模塊(clk_wiz_0),
DA資料發送模塊(da_wave_send):DA資料發送模塊輸出讀ROM地址,將輸入的ROM資料發送至DA轉換芯片的資料埠,
ROM波形存盤模塊(rom_1024x10b):ROM波形存盤模塊由Vivado軟體自帶的Block Memory Generator IP核實作,其存盤的波形資料可以使用波形轉存盤檔案的上位機來生成.coe檔案,
頂層模塊的代碼如下:
1 module hs_dual_da(
2 input sys_clk , //系統時鐘
3 input sys_rst_n , //系統復位,低電平有效
4 //DA芯片介面
5 output da_clk , //DA驅動時鐘,最大支持125Mhz時鐘
6 output [9:0] da_data , //輸出給DA的資料
7
8 //DA芯片介面
9 output da_clk1 , //DA驅動時鐘,最大支持125Mhz時鐘
10 output [9:0] da_data1 //輸出給DA的資料
11 );
12
13 //wire define
14 wire [9:0] rd_addr; //ROM讀地址
15 wire [9:0] rd_data; //ROM讀出的資料
16 //*****************************************************
17 //** main code
18 //*****************************************************
19
20 assign da_clk1 = da_clk;
21 assign da_data1 = da_data;
22
23 pll u_pll(
24 .inclk0 (sys_clk),
25 .c0 (clk));
26
27 //DA資料發送
28 da_wave_send u_da_wave_send(
29 .clk (clk),
30 .rst_n (sys_rst_n),
31 .rd_data (rd_data),
32 .rd_addr (rd_addr),
33 .da_clk (da_clk),
34 .da_data (da_data)
35 );
36
37 //ROM存盤波形
38 rom_1024x10b u_rom_1024x10b(
39 .address (rd_addr),
40 .clock (clk),
41 .q (rd_data)
42 );
43
44 endmodule
在代碼的第23至25行例化了時鐘模塊,倍頻出125M時鐘給DA芯片采樣用,
DA資料發送模塊輸出的讀ROM地址(rd_addr)連接至ROM模塊的地址輸入端,ROM模塊輸出的資料(rd_data)連接至DA資料發送模塊的資料輸入端,從而完成了從ROM中讀取資料的功能,
在代碼的第38至42行例化了ROM模塊,由ROM IP核配置生成,在“高速ADDA試驗”中已經講解過rom的初始化,這里不再講解,
DA資料發送模塊的代碼如下:
1 module da_wave_send(
2 input clk , //時鐘
3 input rst_n , //復位信號,低電平有效
4
5 input [9:0] rd_data , //ROM讀出的資料
6 output reg [9:0] rd_addr , //讀ROM地址
7 //DA芯片介面
8 output da_clk , //DA驅動時鐘,最大支持125Mhz時鐘
9 output [9:0] da_data //輸出給DA的資料
10 );
11
12 //parameter
13 //頻率調節控制
14 parameter FREQ_ADJ = 10'd0; //頻率調節,FREQ_ADJ的越大,最終輸出的頻率越低,范圍0~255
15
16 //reg define
17 reg [9:0] freq_cnt ; //頻率調節計數器
18
19 //*****************************************************
20 //** main code
21 //*****************************************************
22
23 //資料rd_data是在clk的上升沿更新的,所以DA芯片在clk的下降沿鎖存資料是穩定的時刻
24 //而DA實際上在da_clk的上升沿鎖存資料,所以時鐘取反,這樣clk的下降沿相當于da_clk的上升沿
25 assign da_clk = clk;
26 assign da_data = rd_data; //將讀到的ROM資料賦值給DA資料埠
27
28 //頻率調節計數器
29 always @(posedge clk or negedge rst_n) begin
30 if(rst_n == 1'b0)
31 freq_cnt <= 10'd0;
32 else if(freq_cnt == FREQ_ADJ)
33 freq_cnt <= 10'd0;
34 else
35 freq_cnt <= freq_cnt + 10'd1;
36 end
37
38 //讀ROM地址
39 always @(posedge clk or negedge rst_n) begin
40 if(rst_n == 1'b0)
41 rd_addr <= 10'd0;
42 else begin
43 if(freq_cnt == FREQ_ADJ) begin
44 rd_addr <= rd_addr + 10'd1;
45 end
46 end
47 end
48
49 endmodule
在代碼的第14行定義了一個引數FREQ_ADJ(頻率調節),可以通過控制頻率調節引數的大小來控制最終輸出正弦波的頻率大小,頻率調節引數的值越小,正弦波頻率越大,頻率調節引數調節正弦波頻率的方法是通過控制讀ROM的速度實作的,頻率調節引數越小,freq_cnt計數到頻率調節引數值的時間越短,讀ROM資料的速度越快,那么正弦波輸出頻率也就越高;反過來,頻率調節引數越大,freq_cnt計數到頻率調節引數值的時間越長,讀ROM資料的速度越慢,那么正弦波輸出頻率也就越低,由于freq_cnt計數器的位寬為10位,計數范圍是01023,所以頻率調節引數FREQ_ADJ支持的調節范圍是01023,可通過修改freq_cnt計數器的位寬來修改FREQ_ADJ支持的調節范圍,
WaveToMem軟體設定ROM深度為1024,倍頻系數為1,而輸入時鐘為125Mhz,那么一個完整的正弦波周期長度為10248ns = 8192ns,當FREQ_ADJ的值為0時,即正弦波的最快輸出頻率為1s/8192ns(1s = 1000000000ns) ≈ 122.0Khz,當我們把FREQ_ADJ的值設定為5時,一個完整的正弦波周期長度為5120ns(5+1) =49152ns,頻率約為20.35KHz,也可以在WaveToMem軟體設定中增加倍頻系數或者增加AD的驅動時鐘來提高正弦波輸出頻率,
36.5下載驗證
將雙路高速DA模塊插入新起點開發板的P6擴展口,連接時注意擴展口電源引腳方向和開發板電源引腳方向一致,
新起點開發板硬體連接實物圖如下圖所示:

圖 36.5.1 新起點開發板硬體連接實物圖
接下來我們將下載器一端連接電腦,另一端與開發板上對應埠連接,連接電源線并打開電源開關,將工程生成的sof檔案下載到新起點開發板中后,然后使用示波器測量DA輸出通道的波形,首先將示波器帶夾子的一端連接到開發板的GND位置(可使用杜邦線連接至開發板上的任一的GND管腳),然后將另一端探針插入雙路高速DA模塊的DA通道中間的金屬圓圈內(注意將紅色的保護套拿掉),如圖 36.5.2所示,

圖 36.5.2 DA模擬電壓測量孔位
此時觀察示波器可以看到正弦波的波形,如果觀察不到波形,可查看示波器設定是否正確,可以嘗試按下示波器的“AUTO”,再次觀察示波器波形,示波器的顯示界面如下圖所示:

圖 36.5.3 示波器顯示界面
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/355404.html
標籤:其他
