本原創教程由芯驛電子科技(上海)有限公司(ALINX)創作,版權歸本公司所有,如需轉載,需授權并注明出處(http://www.alinx.com)。
適用于板卡型號:
PGL22G/PGL12G
1. 實驗簡介
本實驗練習使用AN9767模塊,實驗中使用的模塊是采用ANALOG DEVICES公司的AD9767芯片,支持獨立雙通道、14位、125MSPS的數模轉換。在教程中介紹了利用該模塊與FPGA開發板相連輸出雙通道14位的正弦波,然后通過示波器查看把輸出的正弦波的波形。
AN9767模塊實物照片如下:
AN9767模塊正面圖AN9767模塊背面圖
AN9767雙通道DA模塊的詳細參數:
-
DA轉換芯片:AD9767;
-
通道數:2通道;
-
DA轉換位數:14bit;
-
DA更新速率:125 MSPS;
-
輸出電壓范圍:-5V~+5V;
-
模塊接口:40針2.54mm間距排座,方向向下;
-
工作溫度:-40°~85°模塊使用芯片均滿足工業級溫度范圍
-
輸出接口:2路BNC模擬輸出接口(用BNC線可以直接連接到示波器);
2. 實驗原理
2.1 AN9767模塊原理框圖
AN9767模塊的原理設計框圖如下:
2.2 AD9767芯片簡介
AD9767是雙端口、高速、雙通道、14位CMOS DAC,芯片集成兩個高品質TxDAC+?內核、一個基準電壓源和數字接口電路,采用48引腳小型LQFP封裝。器件提供出色的交流和直流性能,同時支持最高125 MSPS的更新速率。AD9767的功能框圖如下:
2.3 電流電壓轉換及放大
AD9767的兩路DA輸出都為補碼形式的電流輸出IoutA和IoutB。當AD9767數字輸入為滿量程時(DAC的輸入的14位數據都為高),IoutA輸出滿量程的電流輸出20mA。IoutB輸出的電流為0mA。具體的電流和DAC的數據的關系如下公式所示:
其中IoutFS=32 x Iref,在AN9767模塊設計中, Iref的值由電阻R16的值決定,如果R16=19.2K,那Iref的值就是0.625mA。這樣IoutFS的值就是20mA。
AD9767輸出的電流通過第一級運放AD6045轉換成-1V~+1V的電壓。具體的轉換電路如下圖所示:
第一級運放轉換后的-1V~+1V的電壓通過第二級運放變換到更高幅度的電壓信號,這個運放的幅度大小可以通過調整板上的可調電阻來改變。通過第二級運放,模擬信號的輸出范圍高達-5V~+5V。
下表為數字輸入信號和各級運放輸出后的電壓對照表:
DAC數據輸入值 | AD9767電流輸出 | 第一級運放輸出 | 第二級運放輸出 |
3fff(14位全高) | +20mA | -1V | +5V |
0(14位全低) | -20mA | +1V | -5V |
2000(中間值) | 0mA | 0V | 0V |
AD9767芯片的數字接口可以通過芯片的模式管腳(MODE)來配置成雙端口模式(Dual)或者交叉(Interleaved)模式。在AN9767模塊設計中,AD9767芯片是工作在雙端口模式,雙通道的DA數字輸入接口是獨立分開的。雙端口模式(Dual)的數據時序圖如下圖所示:
給AD9767芯片的DA數據通過時鐘CLK和寫信號WRT的上升沿輸入到芯片進行DA轉換。
3. 程序設計
例程中提供了AN9767模塊的DA測試程序,通過AN9767模塊來實現正弦波信號的輸出。
正弦波測試程序是通過讀取FPGA內部的一個ROM中存儲的正弦波數據,然后把正弦波的數據輸出到AN9767模塊進行數模的轉換,從而得到正弦波的模擬信號。正弦波測試程序的示意圖如下:
3.1 生成ROM初始化文件
程序中我們會用到一個ROM用于存儲1024個14位的正弦波數據, 首先我們需要準備ROM的初始化文件。以下為生成正弦波ROM數據文件的方法:
在軟件工具及驅動文件夾下找到工具,其圖標如下所示:
-
雙擊.exe打開工具,打開界面如下:
2. 可以根據需要自選波形,本例程中選擇正弦波,數據長度1024,數據位寬14,其它默認:
3. 點擊保存按鈕,將生成的數據文件保存到工程目錄文件下(注意保存的文件類型.dat):
4. 保存后點擊確定后關閉工具
將 .dat文件保存到生成的Rom IP核中即可,在字符顯示實驗教程中已做介紹,這里不再重復。
3.2 雙通道正弦波發生程序
`timescale1ns/1ps////////////////////////////////////////////////////////////////////////////////////Twosinewaveoutputs-10V~+10V//////////////////////////////////////////////////////////////////////////////////modulead9767_test(inputsys_clk,//inputclock50Mhzoutputda1_clk,//AD9767CH1clockoutputda1_wrt,//AD9767CH1enableoutput[13:0]da1_data,//AD9767CH1dataoutputoutputda2_clk,//AD9767CH2clockoutputda2_wrt,//AD9767CH2enableoutput[13:0]da2_data//AD9767CH2dataoutput);reg[9:0]rom_addr;wire[13:0]rom_data;wireclk_125M;assignda1_clk=clk_125M;assignda1_wrt=clk_125M;assignda1_data=rom_data;assignda2_clk=clk_125M;assignda2_wrt=clk_125M;assignda2_data=rom_data;//DAoutputsinwaveformalways@(negedgeclk_125M)begin rom_addr<=?rom_addr?+1'b1;//The?output?sine?wave?frequency?is?122Khz//?rom_addr?<=?rom_addr?+?4?;??????????????//The?output?sine?wave?frequency?is?488Khz//?rom_addr?<=?rom_addr?+?128?;????????????//The?output?sine?wave?frequency?is?15.6Mhz????????????????????????? endROM?ROM_inst(.clka(clk_125M),//?input?clka.addra(rom_addr),//?input?[8?:?0]?addra.douta(rom_data)//?output?[7?:?0]?douta);PLL?PLL_inst(//?Clock?in?ports.clk_in1????(sys_clk????????),//?IN//?Clock?out?ports.clk_out1???(),//?OUT.clk_out2???(clk_125M???????),//?OUT//?Status?and?control?signals.reset??????(1'b0),//?IN.locked?????());endmodule
程序中通過一個PLL IP來產生125M的DA輸出時鐘,然后就是循環讀取存放在ROM中的1024個數據,并同時輸出到通道1和通道2的DA數據線上。程序中可以通過地址的加1,加4, 或者加128來選擇輸出不同的頻率的正弦波。
4. 實驗現象
1)將AN9767模塊插入開發板擴展口J8,注意1腳對齊,不要插錯、插偏,不能帶電操作。
2)用我們提供的BNC線連接AN9767的輸出到示波器的輸入如下圖,然后開發板上電,下載程序就可以從示波器上觀察從DA模塊輸出的模擬信號的波形了。
AN9767與開發板連接圖
3)示波器上看到的正弦波如下:
4)我們可以把程序中的地址修改成+4的方式,如下修改,這樣一個正弦波的輸出的點為256個,輸出的正弦波的頻率會提高4倍:
程序修改后,重新下載FPGA后,正弦波的頻率變高,示波器顯示的波形如下:
用戶也可以通過調節AN9767模塊上的可調電阻來改變2個通道輸出波形的幅度。
-
FPGA
+關注
關注
1626文章
21671瀏覽量
601901 -
正弦波
+關注
關注
11文章
638瀏覽量
55263 -
adc
+關注
關注
98文章
6438瀏覽量
544113 -
數模轉換
+關注
關注
3文章
106瀏覽量
28974 -
紫光同創
+關注
關注
5文章
82瀏覽量
27488
發布評論請先 登錄
相關推薦
評論