原创 最新的良子USB2.0开发板3_AD7980数据采集开发2

2016-6-30 21:33 3838 38 38 分类: MCU/ 嵌入式 文集: USB2.0开发板

      接上一篇。     

      这一篇介绍FPGA驱动单个AD7980的开发过程,驱动多个AD7980的级联模式可以查阅后面的帖子。单个AD7980的驱动时序图如下:

 

ad7980_liangziusb_4.jpg
1、确定SCLK频率的上限。上图中SCK的周期为Tsck,查数据手册得知在3.3V为12nS,对应频率的上限为80多M。为了方便开发,直接将FPGA开发板上的48M时钟,经过PLL直接输出C0为10M,周期为100nS,远大于12nS;
2、SDI引脚直接接FPGA引脚,置高电平1。
3、确定状态机为三个状态,分别是AD7980_IDLE、AD7980_CONVERSION和AD7980_AQUISITION。这三个状态分别对应上图中的第3个波形,3个状态的命名也是按照上图来命名的。AD7980_IDLE状态,芯片处于等待状态;AD7980_CONVERSION状态,需要使能AD7980_CNV=1,启动ADC转换;AD7980_AQUISITION状态,使能AD7980_CNV=1,同时输出确定的16个时钟信号AD7980_SCK,同时在AD7980_SCK下降沿将AD7980_SDO串行输出采集进来。
4、3个状态的转换如下:
parameter AD7980_IDLE                 =3'b001;
parameter AD7980_CONVERSION =3'b010;
parameter AD7980_AQUISITION    =3'b100;
case(nstate)
   AD7980_IDLE:
        输出控制;
        if (AD7980_EN)
              nstate<= AD7980_CONVERSION;
        else
              nstate<= AD7980_IDLE;
        end
    AD7980_CONVERSION:
         begin
             输出控制;
             conversion_count<=conversion_count + 1'b1;
             if(conversion_count==4'd10)
                  nstate<= AD7980_AQUISITION;
             else
                  nstate<= AD7980_CONVERSION;
            end
    AD7980_AQUISITION:
          begin
               输出控制;
               if(aqusition_count==7'd0)
               begin
                    AD7980_SCK<=1'b0;
               end
               else if (aqusition_count==7'd33)
                      nstate<= AD7980_IDLE;
               else
                    输出控制;
SIGNALTAP II捕获的波形如下:
 
正在更新,,,,,
 
淘宝店铺:http://liangziusb.taobao.com 
良子.2016年 承接USB开发工程 
 QQ:1345482533

文章评论0条评论)

登录后参与讨论
我要评论
0
38
关闭 站长推荐上一条 /2 下一条