一、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;