ADC简介
位数n:一定范围的模拟量能分成2^n份;其中某个模拟量由n位二进制数表示。n越大,精度越高。
采样率:
原理分析
-
FPGA通过什么管脚控制ADC
-
用什么时序来控制管脚?
依据SPI时序图
DOUT输出这一次通道转换的数据,DIN控制下一次要转换数据的通道和其他设置( ADD控制通道序数)
留意时序规格:结合两张图,可以看出sclk下降沿ADC自动采集DIN,所以需要在上升沿送入DIN。同样sclk下降沿读取DOUT。
-
控制通道与工作模式
通过控制寄存器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;
计数器部分
这三个计数器的时钟(周期)实际上是不同的,但这里并没有用不同频率的时钟信号分别生成计数器,而是统一在系统时钟下,保证了时序上不出问题
加 |