基于FPGA的AD7928驱动

ADC简介

位数n:一定范围的模拟量能分成2^n份;其中某个模拟量由n位二进制数表示。n越大,精度越高。
采样率:

原理分析

  1. FPGA通过什么管脚控制ADC
    在这里插入图片描述

  2. 用什么时序来控制管脚?
    依据SPI时序图
    在这里插入图片描述
    DOUT输出这一次通道转换的数据,DIN控制下一次要转换数据的通道和其他设置( ADD控制通道序数)
    留意时序规格:结合两张图,可以看出sclk下降沿ADC自动采集DIN,所以需要在上升沿送入DIN。同样sclk下降沿读取DOUT。
    在这里插入图片描述

  3. 控制通道与工作模式
    通过控制寄存器DIN,根据需求选择;如果不懂,或者没有要求,就用默认,最简单的形式。
    在这里插入图片描述
    在这里插入图片描述
    50分频;PM=11; SEO SHADOW=00; RANGE=0,响应0-5V; CODING=1;

代码实现

实现步骤:
1、根据功能要求,在给出clk的波形图上,画出输入和输出的波形;(时序图已给出)
2、标出需要计数的信号,在给出clk的波形图上画出计数器
3、确认各计数器的加1条件、结束条件(加1条件:计数器数什么;结束条件:计数器周期数多少个,不同值时用变量法。 )。
4、其它信号变化点条件(其他信号即输出或内容信号;变化点∶ 0变 1、1变0的点,何时写入/读取)。
5、写出计数器代码和其他信号变量代码

参数声明部分

module ad7928_ctr(
    input clk         , //系统时钟
    input rst_n       , //复位信号
	input adc_dout //adc输出给fpga的串行信号	,
	output reg adc_cs       , //控制adc是否工作的片选信号
    output reg adc_sclk     , //adc的工作时钟
    output reg adc_din      , //fpga控制adc工作参数的信号,勿混淆成要转换的信号
    output reg [15:0] dout      ,	//fpga最终输出的16位并行信号
    output reg dout_vld    ,//转换数据有效指示信号
  
      
);

parameter        WRITE = 1'b1;
parameter        PM    = 2'b11;
parameter        SEQ   = 1'b0;
parameter        SHADOW= 1'b0;
parameter        RANGE = 1'b0;
parameter        CODING= 1'b1;

计数器部分

这三个计数器的时钟(周期)实际上是不同的,但这里并没有用不同频率的时钟信号分别生成计数器,而是统一在系统时钟下,保证了时序上不出问题

  • 7
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值