alinx001 发表于 2021-3-4 13:18:06

【紫光同创国产FPGA教程】【第二十章】AD9767双通道正弦波...

本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处(http://www.alinx.com)。适用于板卡型号:PGL22G/PGL12G1. 实验简介本实验练习使用AN9767模块,实验中使用的模块是采用ANALOG DEVICES公司的AD9767芯片,支持独立双通道、14位、125MSPS的数模转换。在教程中介绍了利用该模块与FPGA开发板相连输出双通道14位的正弦波,然后通过示波器查看把输出的正弦波的波形。AN9767模块实物照片如下:https://pic4.zhimg.com/80/v2-dd4c965b3562b9f070b124029108be3b_720w.jpgAN9767模块正面图https://pic2.zhimg.com/80/v2-6c4210e72a3f2776faa1d8b51c7afa99_720w.jpgAN9767模块背面图AN9767双通道DA模块的详细参数:
[*]DA转换芯片:AD9767;
[*]通道数:2通道;
[*]DA转换位数:14bit;
[*]DA更新速率:125 MSPS;
[*]输出电压范围:-5V~+5V;
[*]模块PCB层数:4层,独立的电源层和GND层;
[*]模块接口:40针2.54mm间距排座,方向向下;
[*]工作温度:-40°~85°模块使用芯片均满足工业级温度范围
[*]输出接口:2路BNC模拟输出接口(用BNC线可以直接连接到示波器);
2. 实验原理2.1 AN9767模块原理框图AN9767模块的原理设计框图如下:https://pic2.zhimg.com/80/v2-596bcb1dc68ff8a8baac6d5bba4d9f29_720w.jpg2.2 AD9767芯片简介AD9767是双端口、高速、双通道、14位CMOS DAC,芯片集成两个高品质TxDAC+®内核、一个基准电压源和数字接口电路,采用48引脚小型LQFP封装。器件提供出色的交流和直流性能,同时支持最高125 MSPS的更新速率。AD9767的功能框图如下:https://pic1.zhimg.com/80/v2-d722845de2d58f2452c845d94b6d78f8_720w.jpg2.3 电流电压转换及放大AD9767的两路DA输出都为补码形式的电流输出IoutA和IoutB。当AD9767数字输入为满量程时(DAC的输入的14位数据都为高),IoutA输出满量程的电流输出20mA。IoutB输出的电流为0mA。具体的电流和DAC的数据的关系如下公式所示:https://pic1.zhimg.com/80/v2-18508fd6a8dc78f8d5fe0fc1ff06e770_720w.jpg其中IoutFS=32 x Iref,在AN9767模块设计中, Iref的值由电阻R16的值决定,如果R16=19.2K,那Iref的值就是0.625mA。这样IoutFS的值就是20mA。AD9767输出的电流通过第一级运放AD6045转换成-1V~+1V的电压。具体的转换电路如下图所示:https://pic1.zhimg.com/80/v2-eca9b7387318a7c09f7d13ac3cd67014_720w.jpg第一级运放转换后的-1V~+1V的电压通过第二级运放变换到更高幅度的电压信号,这个运放的幅度大小可以通过调整板上的可调电阻来改变。通过第二级运放,模拟信号的输出范围高达-5V~+5V。https://pic4.zhimg.com/80/v2-be0010e2c08a9f5224a0ec0a8a1a075b_720w.jpg下表为数字输入信号和各级运放输出后的电压对照表:
DAC数据输入值AD9767电流输出第一级运放输出第二级运放输出
3fff(14位全高)+20mA-1V+5V
0(14位全低)-20mA+1V-5V
2000(中间值)0mA0V0V
AD9767芯片的数字接口可以通过芯片的模式管脚(MODE)来配置成双端口模式(Dual)或者交叉(Interleaved)模式。在AN9767模块设计中,AD9767芯片是工作在双端口模式,双通道的DA数字输入接口是独立分开的。双端口模式(Dual)的数据时序图如下图所示:https://pic1.zhimg.com/80/v2-bc5c92cdbd63fe0ac9beec5f7152b848_720w.jpg给AD9767芯片的DA数据通过时钟CLK和写信号WRT的上升沿输入到芯片进行DA转换。3. 程序设计例程中提供了AN9767模块的DA测试程序,通过AN9767模块来实现正弦波信号的输出。正弦波测试程序是通过读取FPGA内部的一个ROM中存储的正弦波数据,然后把正弦波的数据输出到AN9767模块进行数模的转换,从而得到正弦波的模拟信号。正弦波测试程序的示意图如下:https://pic4.zhimg.com/80/v2-9ba7c25658d4aa606909d1bfa9f7f49f_720w.jpg3.1 生成ROM初始化文件程序中我们会用到一个ROM用于存储1024个14位的正弦波数据, 首先我们需要准备ROM的初始化文件。以下为生成正弦波ROM数据文件的方法:在软件工具及驱动文件夹下找到工具,其图标如下所示:https://pic2.zhimg.com/80/v2-1a831e38b6ef0102761237e5fd0e1285_720w.jpg
[*]双击.exe打开工具,打开界面如下:
https://pic3.zhimg.com/80/v2-0795846ee1d863e908609cde4edd3502_720w.jpg2. 可以根据需要自选波形,本例程中选择正弦波,数据长度1024,数据位宽14,其它默认:https://pic2.zhimg.com/80/v2-4e8b24fb711c9d9f8762575cfee0fce1_720w.jpg3. 点击保存按钮,将生成的数据文件保存到工程目录文件下(注意保存的文件类型.dat):https://pic2.zhimg.com/80/v2-d503541a0d581406972b53da783c1d6d_720w.jpg4. 保存后点击确定后关闭工具https://pic4.zhimg.com/80/v2-abfa694acadf3d68e16e17a860f44df3_720w.jpg将 .dat文件保存到生成的Rom IP核中即可,在字符显示实验教程中已做介绍,这里不再重复。3.2 双通道正弦波发生程序`timescale1ns/1ps////////////////////////////////////////////////////////////////////////////////////Two sine wave outputs -10V ~ +10V//////////////////////////////////////////////////////////////////////////////////module ad9767_test(input sys_clk,//input clock50Mhzoutput da1_clk,//AD9767 CH1 clockoutput da1_wrt,//AD9767 CH1 enableoutput[13:0] da1_data,//AD9767 CH1 data outputoutput da2_clk,//AD9767 CH2 clockoutput da2_wrt,//AD9767 CH2 enableoutput[13:0] da2_data      //AD9767 CH2 data output);reg[9:0] rom_addr;wire[13:0] rom_data;wire clk_125M;assign da1_clk=clk_125M;assign da1_wrt=clk_125M;assign da1_data=rom_data;assign da2_clk=clk_125M;assign da2_wrt=clk_125M;assign da2_data=rom_data;//DA output sin waveformalways@(negedge clk_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 addra.douta(rom_data)// output 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模块输出的模拟信号的波形了。https://pic3.zhimg.com/80/v2-24f9406d4c38461155a91f3e8c8e1242_720w.jpgAN9767与开发板连接图3)示波器上看到的正弦波如下:https://pic3.zhimg.com/80/v2-4342491fe1611c05f70364bf5dbae0da_720w.jpg4)我们可以把程序中的地址修改成+4的方式,如下修改,这样一个正弦波的输出的点为256个,输出的正弦波的频率会提高4倍:https://pic4.zhimg.com/80/v2-2ad804329723688c41ce62e85e69b44f_720w.jpg程序修改后,重新下载FPGA后,正弦波的频率变高,示波器显示的波形如下:https://pic2.zhimg.com/80/v2-fe0bea286832733ecbb47ddee9f65549_720w.jpg用户也可以通过调节AN9767模块上的可调电阻来改变2个通道输出波形的幅度。https://pic3.zhimg.com/80/v2-eee70926d1a16f1cdfb69c8026ba10d6_720w.jpg
页: [1]
查看完整版本: 【紫光同创国产FPGA教程】【第二十章】AD9767双通道正弦波...