46_ZYNQ7020开发板驱动AD7606逻辑分析仪分析串口显示

一、AD7606模块参数
AD型号:AD7606
通道数:8通道
AD位数:16bit
最高采样频率:200ksps
输入电压:-5V~+5V
二、模块结构
在这里插入图片描述
三、AD7607简介
AD7606是一款8通道同步采样数据采集系统,片内集成输入放大器,过压保护电路,二阶模拟抗混叠滤波器、模拟多路复用器、16位200KPS SARADC和一个数字滤波器,2.5V基准电压源。
可以处理 ±10V与±5V真双极性输入信号。
四、AD7606功能图
在这里插入图片描述
五、AD7606时序图
在这里插入图片描述
AD7606可以对所有8路的模拟输入通道同步采样。当两个CONVST引脚(CONVSTA和CONVSTB)连在一起的时,所有通道同步采样。此共用CONVST信息的上升沿启动对所有模拟输入通道的同步采样(V1至V8)。
BUSY信息告知用户正在进行转换,因此当施加CONVST上升沿时,BUSY变为逻辑高电平,在整个转换过程结束时变成低电平。BUSY信号下降沿用来使所有八个采样保持放大器返回跟踪模式。BUSY下降沿还表示可以从并行总线DB[15:0]读取8个通道的数据。

AD7606的模拟输入信号为±5V或±10V,当**±5V输入范围时,1LSB=152.58uV**,当设置为**±10V输入范围,1LSB=305.175uV**。
在这里插入图片描述
ADC7606输出为二进制补码,ADC7606的LSB大小为FSR/65536,
在这里插入图片描述
六、接口定义
在这里插入图片描述
在这里插入图片描述

实验

一、在D:\4workspace\7020_Verilog\下新建“12_adc7606”文件
在这里插入图片描述
新建工程12_adc7606
在这里插入图片描述
选择器件型号点击完成

在这里插入图片描述
分别新建文件
在这里插入图片描述
新建如下文件并添加代码
在这里插入图片描述
在这里插入图片描述

顶层文件ad706_test.v

`timescale 1ns / 1ps
//
// Module Name:    ad706_test 
//
module ad706_test(
   input        clk,                  //50mhz
	input        rst_n,
	
	input [15:0] ad_data,            //ad7606 采样数据
	input        ad_busy,            //ad7606 忙标志位 
   input        first_data,         //ad7606 第一个数据标志位 	    
	output [2:0] ad_os,              //ad7606 过采样倍率选择
	output       ad_cs,              //ad7606 AD cs
	output       ad_rd,              //ad7606 AD data read
	output       ad_reset,           //ad7606 AD reset
	output       ad_convstab,        //ad7606 AD convert start
	
	input        rx,
	output       tx
		

    );


wire [15:0] ad_ch1;
wire [15:0] ad_ch2;
wire [15:0] ad_ch3;
wire [15:0] ad_ch4;
wire [15:0] ad_ch5;
wire [15:0] ad_ch6;
wire [15:0] ad_ch7;
wire [15:0] ad_ch8;

wire [19:0] ch1_dec;
wire [19:0] ch2_dec;
wire [19:0] ch3_dec;
wire [19:0] ch4_dec;
wire [19:0] ch5_dec;
wire [19:0] ch6_dec;
wire [19:0] ch7_dec;
wire [19:0] ch8_dec;

wire [7:0] ch1_sig;
wire [7:0] ch2_sig;
wire [7:0] ch3_sig;
wire [7:0] ch4_sig;
wire [7:0] ch5_sig;
wire [7:0] ch6_sig;
wire [7:0] ch7_sig;
wire [7:0] ch8_sig;


ad7606 u1(
	.clk              (clk),
	.rst_n            (rst_n),
	.ad_data          (ad_data),
	.ad_busy          (ad_busy),	
	.first_data       (first_data),	
	.ad_os            (ad_os),	
	.ad_cs            (ad_cs),
	.ad_rd            (ad_rd),	
	.ad_reset         (ad_reset),
	.ad_convstab      (ad_convstab),
	.ad_ch1           (ad_ch1),           //ch1 ad data 16bit
	.ad_ch2           (ad_ch2),           //ch2 ad data 16bit
	.ad_ch3           (ad_ch3),           //ch3 ad data 16bit
	.ad_ch4           (ad_ch4),           //ch4 ad data 16bit
	.ad_ch5           (ad_ch5),           //ch5 ad data 16bit
	.ad_ch6           (ad_ch6),           //ch6 ad data 16bit
	.ad_ch7           (ad_ch7),           //ch7 ad data 16bit
	.ad_ch8           (ad_ch8)            //ch8 ad data 16bit

	
    );

/**********电压转换程序***********/
volt_cal u2(
	.clk              (clk),
	.ad_reset         (ad_reset),
	.ad_ch1           (ad_ch1),           //ch1 ad data 16bit (input)
	.ad_ch2           (ad_ch2),           //ch2 ad data 16bit (input)
	.ad_ch3           (ad_ch3),           //ch3 ad data 16bit (input)
	.ad_ch4           (ad_ch4),           //ch4 ad data 16bit (input)
	.ad_ch5           (ad_ch5),           //ch5 ad data 16bit (input)
	.ad_ch6           (ad_ch6),           //ch6 ad data 16bit (input)
	.ad_ch7           (ad_ch7),           //ch7 ad data 16bit (input)
	.ad_ch8           (ad_ch8),           //ch8 ad data 16bit (input)
	
	.ch1_dec           (ch1_dec),         //ch1 ad voltage (output)
	.ch2_dec           (ch2_dec),         //ch2 ad voltage (output)
	.ch3_dec           (ch3_dec),         //ch3 ad voltage (output)
	.ch4_dec           (ch4_dec),         //ch4 ad voltage (output)
	.ch5_dec           (ch5_dec),         //ch5 ad voltage (output)
	.ch6_dec           (ch6_dec),         //ch6 ad voltage (output)
	.ch7_dec           (ch7_dec),         //ch7 ad voltage (output)
	.ch8_dec           (ch8_dec),         //ch8 ad voltage (output)
	
   .ch1_sig           (ch1_sig),         //ch1 ad 正负 (output)
	.ch2_sig           (ch2_sig),         //ch2 ad 正负 (output)
	.ch3_sig           (ch3_sig),         //ch3 ad 正负 (output)
	.ch4_sig           (ch4_sig),         //ch4 ad 正负 (output)
	.ch5_sig           (ch5_sig),         //ch5 ad 正负 (output)
	.ch6_sig           (ch6_sig),         //ch6 ad 正负 (output)
	.ch7_sig           (ch7_sig),         //ch7 ad 正负 (output)
	.ch8_sig           (ch8_sig)          //ch8 ad 正负 (output)
	
    );

/**********AD数据Uart串口发送程序***********/
uart u3(
		.clk50           		    (clk),	
		.reset_n           		 (rst_n),	

		.ch1_dec                 (ch1_dec),         //ad1 BCD voltage
		.ch2_dec                 (ch2_dec),         //ad2 BCD voltage
		.ch3_dec                 (ch3_dec),         //ad3 BCD voltage
		.ch4_dec                 (ch4_dec),         //ad4 BCD voltage
		.ch5_dec                 (ch5_dec),         //ad5 BCD voltage
		.ch6_dec                 (ch6_dec),         //ad6 BCD voltage
		.ch7_dec                 (ch7_dec),         //ad7 BCD voltage
		.ch8_dec                 (ch8_dec),         //ad8 BCD voltage		
	
		.ch1_sig                 (ch1_sig),          //ch1 ad 正负
		.ch2_sig                 (ch2_sig),          //ch2 ad 正负
		.ch3_sig                 (ch3_sig),          //ch3 ad 正负
		.ch4_sig                 (ch4_sig),          //ch4 ad 正负
		.ch5_sig                 (ch5_sig),          //ch5 ad 正负
		.ch6_sig                 (ch6_sig),          //ch6 ad 正负
		.ch7_sig                 (ch7_sig),          //ch7 ad 正负
		.ch8_sig                 (ch8_sig),          //ch8 ad 正负		
		
		.tx                      (tx)
		
	
    );   
//实例化ila逻辑分析仪
ila_0 ila_0_inst (
	.clk	(clk	), 
	.probe0	(ad_ch1	), 
	.probe1	(ad_ch2	),
	.probe2	(ad_data) 
);


endmodule

新建ad7606.v

`timescale 1ns / 1ps
//
// Module Name:    ad7606 
//
module ad7606(
   input        		clk,                  //50mhz
	input        		rst_n,
	
	input [15:0] 		ad_data,            //ad7606 采样数据
	input        		ad_busy,            //ad7606 忙标志位 
   input        		first_data,         //ad7606 第一个数据标志位 	    
	output [2:0] 		ad_os,              //ad7606 过采样倍率选择
	output reg   		ad_cs,              //ad7606 AD cs
	output reg   		ad_rd,              //ad7606 AD data read
	output reg   		ad_reset,           //ad7606 AD reset
	output reg   		ad_convstab,         //ad7606 AD convert start

	output reg [15:0] ad_ch1,              //AD第1通道的数据
	output reg [15:0] ad_ch2,              //AD第2通道的数据
	output reg [15:0] ad_ch3,              //AD第3通道的数据
	output reg [15:0] ad_ch4,              //AD第4通道的数据
	output reg [15:0] ad_ch5,              //AD第5通道的数据
	output reg [15:0] ad_ch6,              //AD第6通道的数据
	output reg [15:0] ad_ch7,              //AD第7通道的数据
	output reg [15:0] ad_ch8               //AD第8通道的数据	
	
		

    );



reg [15:0]  cnt;
reg [5:0] i;
reg [3:0] state;

parameter IDLE=4'd0;
parameter AD_CONV=4'd1;
parameter Wait_1=4'd2;
parameter Wait_busy=4'd3;
parameter READ_CH1=4'd4;
parameter READ_CH2=4'd5;
parameter READ_CH3=4'd6;
parameter READ_CH4=4'd7;
parameter READ_CH5=4'd8;
parameter READ_CH6=4'd9;
parameter READ_CH7=4'd10;
parameter READ_CH8=4'd11;
parameter READ_DONE=4'd12;

assign ad_os=3'b000;

//AD 复位电路
always@(posedge clk)
 begin
    if(cnt<16'hffff) begin
        cnt<=cnt+1;
        ad_reset<=1'b1;
      end
      else
        ad_reset<=1'b0;       
   end

always @(posedge clk) 
 begin
	 if (ad_reset==1'b1) begin 
			 state<=IDLE; 
			 ad_ch1<=0;
			 ad_ch2<=0;
			 ad_ch3<=0;
			 ad_ch4<=0;
			 ad_ch5<=0;
			 ad_ch6<=0;
			 ad_ch7<=0;
			 ad_ch8<=0;
			 ad_cs<=1'b1;
			 ad_rd<=1'b1; 
			 ad_convstab<=1'b1;
			 i<=0;
	 end		 
	 else begin
		  case(state)
		  IDLE: begin
				 ad_cs<=1'b1;
				 ad_rd<=1'b1; 
				 ad_convstab<=1'b1; 
				 if(i==20) begin
					 i<=0;			 
					 state<=AD_CONV;
				 end
				 else 
					 i<=i+1'b1;
		  end
		  AD_CONV: begin	   
				 if(i==2) begin                        //等待2个clock
					 i<=0;			 
					 state<=Wait_1;
					 ad_convstab<=1'b1;       				 
				 end
				 else begin
					 i<=i+1'b1;
					 ad_convstab<=1'b0;                     //启动AD转换
				 end
		  end
		  Wait_1: begin            
				 if(i==5) begin                           //等待5个clock, 等待busy信号为高
					 i<=0;
					 state<=Wait_busy;
				 end
				 else 
					 i<=i+1'b1;
		  end		 
		  Wait_busy: begin            
				 if(ad_busy==1'b0) begin                    //等待busy信号为低
					 i<=0;			 
					 state<=READ_CH1;
				 end
		  end
		  READ_CH1: begin 
				 ad_cs<=1'b0;                              //cs信号有效	  
				 if(i==3) begin
					 ad_rd<=1'b1;
					 i<=0;
					 ad_ch1<=ad_data;                        //读CH1
					 state<=READ_CH2;				 
				 end
				 else begin
					 ad_rd<=1'b0;	
					 i<=i+1'b1;
				 end
		  end
		  READ_CH2: begin 
				 if(i==3) begin
					 ad_rd<=1'b1;
					
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值