瑞安 网站建设培训班,竞价网站单页面,公共资源交易中心网,企业网站制作与维护目录1、前言2、AD7606数据手册解读输入信号采集范围输出模式选择过采样率设置3、AD7606串行输出采集4、AD7606并行输出采集5、vivado仿真6、上板调试验证7、福利#xff1a;工程代码的获取1、前言
AD7606是一款非常受欢迎的AD芯片#xff0c;因为他支持8通道同时采集数据工程代码的获取1、前言
AD7606是一款非常受欢迎的AD芯片因为他支持8通道同时采集数据采样深度16位已经很不错了虽然采样率只有200 kSPS但对电压等低速数据源的采集而言已经完全足够了该芯片在电压检测等项目中有着广泛应用。 本文详细描述了设计方案工程代码编译通过后上板调试验证可直接项目移植适用于在校学生、研究生项目开发也适用于在职工程师做项目开发可应用于AD数据采集领域 提供完整的、跑通的工程源码和技术支持 工程源码和技术支持的获取方式放在了文章末尾请耐心看到最后
2、AD7606数据手册解读
AD7606英文原版数据手册只有37页但真正看懂的兄弟却很少下面解读一下这个手册 DAQ7606 是 16 位 8 通道同步采样模数数据采集系统(DAS)。 AD7606 内置模拟输入箝位保护、二阶抗混叠滤波器、跟踪保持放大器、16 位电荷再分配逐次逼近型 ADC、灵活的数字滤波器、2.5V 基准电压源、基准电压缓冲以及高速串行和并行接口。AD7606 采用 5V 单电源供电可以处理±10V 和±5V 真双极性输入信号同时所有通道均能以高达 200 kSPS 的吞吐速率采样。输入箝位保护电路可以耐受最高达±16.5V 的电压。无论以何种采样频率工作AD7606 的模拟输入阻抗均为 1 MΩ。它采用单电源工作方式具有片内滤波和高输入阻抗因此无需驱动运算放大器和外部双极性电源。AD7606 抗混叠滤波器的 3 dB 截止频率为 22 kHz当采样速率为 200 ksps 时它具有 40 dB 抗混叠抑制特性。灵活的数字滤波器采用引脚驱动可以改善信噪比(SNR)并降低 3 dB 带宽。 写了这么多你看懂了吗 我猜你应该是云里雾里下面举例说人话让你听得懂 AD7606芯片框图如下 红线即是信号输出输出的数据通路
输入信号采集范围
AD7606可以处理±10V 和±5V 真双极性输入信号即输入信号可以是±10V 和±5V由RANGE引脚上下拉决定 下拉处理±5V 信号 上拉处理±10V 信号 一旦选择了输入信号范围就别乱给信号源了否则烧板子了。。。 原文如下
输出模式选择
红线以通道1为例 输入数据位单端模拟数据进过复杂的转换后可输出串行数字信号或者并行数据信号 如果你的板子设计引脚资源有限则选择串行输出串行输出的优点是节约IO缺点是采集时序复杂些 如果你的板子设计引脚足够多则选择并行输出并行输出数据线占用16个IO口并行输出的优点是采集时序简单缺点是费IO可自行选择 输出模式选择通过PAR/SER/BYTE SEL引脚的上下拉决定 上拉选择串行输出 下拉选择并行输出 具体的时序细节放在后面的章节 原文如下
过采样率设置
过采样率设置由OS的三个引脚上下拉决定可以固定用电阻上下拉这种模式就定死了除非飞线也可以用FPGA引脚给高低电平配置具体配置模式如下图 作为FPGA开发者需要知道这些就行了具体的时序细节放在后面的章节
3、AD7606串行输出采集
AD7606串行采集时钟的范围要求如下 这里我们选择16.666MHz时钟不高也不低 系统参考时钟选择100M那个1个时钟周期就是1000÷10010ns 采集时钟是16.666M那个1个时钟周期就是1000÷16.66660ns 记住这两个时钟周期很重要 串行输出流程时序图如下 这张图采用边转换边读取的方式还有转换完成后再读取的方式既然可以边转换边读取为何还要等转换完成后再读取呢所以我们直接用这种方式。 并行采集使用的则是转换完成后再读取的方式。 第一步拉高RESET引脚至少至少50ns数据手册规定如下 第二步拉低CONVSTA或者CONVSTB持续最多0.5ms(500ns)注意这里是最多所以在代码里只需一个参考时钟周期足以比如你用的100M一个参考时钟周期就是10ns当然CONVSTA和CONVSTB也可同时拉低这样就是8个通道同时采集时间由数据手册得知如下 CONVSTA开启V1-V4通道的转换 CONVSTB开启V5-V8通道的转换 原文如下 第三步等待BUSY为高后拉低CS这个BUSY是AD7606输出给用户的表征AD转换正在进行他有一个最大时间我们一定要满足他的最大时间不然人家还没转换完你就结束采集了岂不唧唧了那么CS在什么时刻拉低呢既然前面我们已经选择了边转换边读取的方式所以在BUSY拉高的期间CS拉低数据手册最大推荐4.15us代码里直接设置5ms由数据手册得知如下 流程看完了来看具体的采集时序 采集时序如下 首先用户拉低CS并给出SCLK到AD7606AD7606在CS为低期间在SCLK的上升沿输出数据但根据时序图我感觉是SCLK高电平期间输出的一个通道一次转换后输出16位采样数据 既然AD7606是在SCLK上升沿输出那么FPGA就应该在SCLK下降沿采集或者低电平采集 AD7606有8个模拟输入通道串行输出模式下只有两个数字输出通道每个输入通道输出16位采样数据 DOUTA对应CH1、CH2、CH3、CH4四个输出通道 DOUTB对应CH5、CH6、CH7、CH8四个输出通道 因为每个输入通道输出16位采样数据需要16个SCLK周期所以4个输入通道输出16位采样数据需要64个SCLK周期那个我们需要一个计数器计数到64时输出64位的采集数据呢么采集到的每个通道数据对应如下 wire [15:0] ad_ch1 ad_out_a[63:48]; wire [15:0] ad_ch2 ad_out_a[47:32]; wire [15:0] ad_ch3 ad_out_a[31:16]; wire [15:0] ad_ch4 ad_out_a[15: 0]; wire [15:0] ad_ch5 ad_out_b[63:48]; wire [15:0] ad_ch6 ad_out_b[47:32]; wire [15:0] ad_ch7 ad_out_b[31:16]; wire [15:0] ad_ch8 ad_out_b[15: 0]; 转换状态机部分源码如下
always (posedge i_sys_clk) beginif(o_ad_rst||!i_rstn) beginad_convst 1b1; AD_S 2d0; endelse begincase(AD_S) 2d0: beginif(p_ad_sclk) begin //开启8通道转换 ad_convst 1b0;AD_S 2d1;endend 2d1: beginif(p_ad_sclk)begin //转换时间最大500ns,这里60ns即可ad_convst 1b1; AD_S 2d2;endend 2d2: beginif(p_ad_sclki_ad_busy) AD_S 2d3; //BUSY拉高,进入采集数据状态 end2d3: beginif(cycle_end) AD_S 2d0; //转换结束,重新采集 enddefault: ;endcase end
end串行采集代码顶层接口代码如下
module helai_ad7606_ser#(parameter SYS_CLK 100_000_000, //系统时钟parameter SPI_CLK 16_666_666 //AD采集时钟
)
(input i_sys_clk , //系统时钟 input i_rstn , //系统复位,低有效input i_ad_cha , //AD7606串行输出通道Ainput i_ad_chb , //AD7606串行输出通道B input i_ad_busy , //输入BUSYoutput [2:0] o_ad_os , //输出采样率配置output o_ad_cs , //输出片选output reg o_ad_sclk , //输出采样时钟output o_ad_rst , //输出复位output o_ad_convsta, //输出开启V1-V4通道采集output o_ad_convstb, //输出开启V5-V8通道采集output o_ad_range , //输入信号范围配置output [15:0] o_ad_ch1 , //输出通道1output [15:0] o_ad_ch2 , //输出通道2output [15:0] o_ad_ch3 , //输出通道3output [15:0] o_ad_ch4 , //输出通道4output [15:0] o_ad_ch5 , //输出通道5output [15:0] o_ad_ch6 , //输出通道6output [15:0] o_ad_ch7 , //输出通道7output [15:0] o_ad_ch8 , //输出通道8output o_ad_rxdone //输出数据有效信号高有效);4、AD7606并行输出采集
并行采集时序由于官方画的图太繁琐我直接重画了一个图来表示如下 第一步拉高RESET引脚至少至少50ns和串行采集一样 第二步拉低CONVSTA或者CONVSTB持续最多0.5ms(500ns)和串行采集一样 第三步等待转换完成再读取数据即采用转换完成后再读取的方式 第四步拉低CS片选信号 第五步拉低RD信号在RD和CS同时为低时即可依次读取V1-V8通道的数据 相应的时间问题也是重要的具体查看手册 并行采集代码顶层接口代码如下
module helai_ad7606_par(input clk , //系统时钟,100M input rst_n , //系统复位,低有效input [15:0] ad_data , //输入并行数据input ad_busy , //输入BUSYinput first_data , //未用到此信号output [2:0] ad_os , //输出采样率配置output reg ad_cs , //输出片选output reg ad_rd , //输出读数据output reg ad_reset , //输出复位output reg ad_convstab , //输出开启V1-V8通道采集output ad_data_valid, //输出数据有效信号高有效output reg [15:0] ad_ch1 , //输出通道1output reg [15:0] ad_ch2 , //输出通道2output reg [15:0] ad_ch3 , //输出通道3output reg [15:0] ad_ch4 , //输出通道4output reg [15:0] ad_ch5 , //输出通道5output reg [15:0] ad_ch6 , //输出通道6output reg [15:0] ad_ch7 , //输出通道7output reg [15:0] ad_ch8 //输出通道8
);5、vivado仿真
仅提供了串行采集的仿真文件如下 vivado仿真如下
6、上板调试验证
请参考我之前写的基于zynq7100使用AD7606进行电压监测的文章点击查看AD7606工程
7、福利工程代码的获取
福利工程代码的获取 代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式私或者文章末尾的V名片。 网盘资料如下