目录

银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-01-14 gingko 初次建立

实验三十三:

基于ARM+FPGA的高速AD采集传输实验(AD9226)

一、实验目的与意义

  1. 了解AD9226芯片工作原理和驱动方式。
  2. 掌握FPGA驱动AD9226芯片并采集转换数据的方法。
  3. 学习ARM和FPGA通过FSMC实现数据传输的思想。

二、实验设备及平台

  1. iCore3 双核心板( FPGA型号为EP4CE10F17,ARM型号为STM32F407IGT6)。点击购买
  2. 高速AD转换模块ADM9226。点击购买
  3. Blaster(或相同功能的)仿真器和USB线缆。点击购买
  4. QuartusII开发软件(本实验中使用的是13.1版本)和commix.exe。

图33-1	核心板和ADM9226模块连接图

注意事项1: 注意FPC转接板和核心板之间引脚要对齐(如图31-1中红圈中细节图所示,转接板和核心板排针连接处下边缘要对齐)。
注意事项2: 下载程序前请确认iCore3核心板引脚与PIN.tcl文件中绑定引脚相互对应。

三、实验原理

图33-2	ADM9226 采样时序图

图33-3	高速AD采样系统框图

四、代码讲解

FPGA代码讲解

图33-4 FPGA代码RTL视图

//wr和rd信号提取
	wire  rdn = fsmc_cs | fsmc_rd;
	wire  wrn = fsmc_cs | fsmc_wr;
//寄存器地址分配:0-50为通用控制寄存器;51——100为ad9226相关寄存器;
//接收地址56和57是两个
reg [23:0]address_reg;
 
always@(posedge fsmc_nadv or negedge rst_n)
	begin
		if(!rst_n)
			begin
				address_reg <= 24'd0;
			end
		else
			begin
				address_reg <= {fsmc_ab,fsmc_db};
			end
		end
/****************************************************************/
//0——50为通用寄存器;
//0:命令复位寄存器;1:开始采样寄存器;
reg sample_start_r;
 
always@(posedge wrn or negedge rst_n)
	begin
		if(!rst_n)
			begin
				sample_start_r <= 1'b0;
			end
		else
			begin
				case(address_reg)
				24'd0:begin
					sample_start_r <= 1'b0;
				end
				24'd1:begin//开始采样信号
					sample_start_r <= 1'b1;
				end
				default:begin
					sample_start_r <= 1'b0;
				end				
				endcase;
			end
	end
 
assign sample_start = sample_start_r;
/****************************************************************/
//提取开始采样信号的上升沿
reg sample_start_r1,sample_start_r2,sample_start_r3;
always@(posedge ad9226_clk or negedge rst_n)
	begin
		if(!rst_n)
			begin
				sample_start_r1 <= 1'd0;
				sample_start_r2 <= 1'd0;
				sample_start_r3 <= 1'd0;
			end
		else
			begin
				sample_start_r1 <= sample_start;
				sample_start_r2 <= sample_start_r1;
				sample_start_r3 <= sample_start_r2;
			end
	end
 
wire sample_up = (!sample_start_r3) & sample_start_r2;
 
/****************************************************************/
//提取读取开始信号的上升沿ad9226_read_start
reg read_start_r1,read_start_r2,read_start_r3;
always@(posedge ad9226_clk or negedge rst_n)
	begin
		if(!rst_n)
			begin
				read_start_r1 <= 1'd0;
				read_start_r2 <= 1'd0;
				read_start_r3 <= 1'd0;
			end
		else
			begin
				read_start_r1 <= ad9226_read_start;
				read_start_r2 <= read_start_r1;
				read_start_r3 <= read_start_r2;
			end
	end
 
wire read_up = (!read_start_r3) & read_start_r2;

五、操作流程和实验结果

  1. 连接iCore3核心板和ADM9226模块,确认连接正确后连接仿真器和USB线。
  2. 在ADM9226的输入通道接入模拟信号(正负5伏范围)。
  3. 打开PC端串口软件,并配置好串口参数,注意此处参数要跟STM32CubeMX设置UART时的参数相互对应上。
  4. 编译文件,无报错后给核心板上电,并下载程序到核心板的ARM芯片和FPGA芯片。
  5. 在串口软件发送区输入“set:1\CR\LF”字符,并点击发送,可以看到接收区返回的指令以及采样数据,如下图红框所示:

图33-5  串口发送指令及数据接收效果图

六、拓展实验

  1. 改变ADM9226的采样率。
  2. 实现双通道的独立读写控制。