芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 3326|回复: 0

【智多晶FPGA-040】【开发流程】AD7606串口数据传输实验

[复制链接]
  • TA的每日心情
    开心
    2022-5-11 16:38
  • 24

    主题

    25

    帖子

    163

    积分

    初级会员

    Rank: 3Rank: 3

    积分
    163
    发表于 2022-6-2 16:23:08 | 显示全部楼层 |阅读模式
      
    工程源码
      
    |----01_设计实例
      
    |--------AC208_ad7606_spi_driver_uart.zip
    相关视频课程
    暂无相关视频课程
    本实验对各开发板支持情况
    开发板型号
    AC208()
    是否支持


    文档所涉及文件说明
    本次实验配套的文件压缩包名为AC208_ad7606_spi_driver_uart.zip,解压后可得到配套的工程文件,说明文档和调试工具。

    image.png
    n AC208_ad7606_spi_driver_uart.zip:基于AC208开发板智多晶平台AD7606串行数据采集系统源工程
    n ADCdata_to_wave_v1_1.m:基于MATLAB的采样结果数据处理函数
    n sscom5.13.1: 串口调试工具

    n 实验说明手册

    导读
    本节介绍了基于FPGA的AD7606串行驱动数据采集系统实验步骤。案例基于智多晶系列FPGA,结合ADI公司的16位8通道并行采样ADC芯片,通过开发板上串口,实现对AD7606型8通道16位ADC的数据转换控制并输出。
    数据采集系统主要内容分为数据采集、数据处理、数据存储和数据传输几个部分。就整个系统而言,为了实现数据的控制采集,系统一般需要包括采集器,A/D转换模块,数据采集控制器,PC端,通信线路等一系列硬件支持。
    其中AD转换模块,对模拟信号进行转换输入,采集控制部分控制采集数据的参数量,PC端数据分析,对采集的数据进行收集分析。
    image.png

    系统的模块设计大多基于原有工程进行设计,这里不在做过多的介绍,这里新设计AD7606串行驱动模块。下面我们对此模块的设计进行介绍。

    若要通过串行接口从AD7606回读数据。在串行模式下CS和SCLK信号用来传输AD7606的数据。AD7606有两个串行数据输出引脚: DoutA和DoutB。可通过单或双串行线路从AD7606回读数据。对于AD7606,通道V1至V4的转换结果首先出现在DoutA上,通道V5至V8的转换结果则首先出现在DoutB。
    image.png
    image.png

      
    接口名称
      
    I/O
    功能描述
    Clk
    I
    驱动模块工作时钟信号50MHz,四分频可得到模块工作时钟
    Reset_n
    I
    模块复位信号,低电平复位
    Speed_Set
    I
    采样频率控制参数输入
    Dout_A
    I
    AD7606模块数据采集串行输入A,输入1—4通道数据
    Dout_B
    I
    AD7606模块数据采集串行输入B,输入5—8通道数据
    ad7606_cs_n_o
    O
    在串行模式使能串行数据帧传输,低电平有效,并逐个输出串行输出数据的最高有效位(MSB)。
    ad7606_rd_n_o
    O
    在串行模式下,此引脚用作数据传输的串行时钟输人。
    ad7606_os_o
    O
    过采样模式引脚,不使用过采样
    ad7606_convst_o
    O
    转换有效信号,用来启动模拟输人通道转换。本模块默认短接。引脚从低电平变为高电平时,相应模拟输人的前端采样保持电路被设置为保持。
    ad7606_db15
    O
    BYTE SEL引脚。当PAR/SER/BYTESEL = 1时, BYTE SEL引脚用来在串行接口模式与并行字节接口模式之间做出选择。串行模式设置为0。
    ad7606_db14_9
    O
    在串行模式下这些引脚设置为与AGND相连
    ad7606_db6_0
    O
    在串行模式下这些引脚设置为与AGND相连
    ad7606_frstdata
    I
    FRSTDATA输出信号指示何时在并行、字节或串行接口上回读第一通道V1。在串行模式下,FRSTDATA在CS下降沿变为高电平,因为此时将在DoutA上输出V1的MSB。在CS下降沿之后的第16个SCLK下降沿,它恢复低电平。
    ad7606_reset_o
    O
    复位输人。当设置为逻辑高电平时,RESET上升沿复位模块。
    data_flag
    O
    数据采集通道有效标志信号
    data_a
    O
    1—4通道数据输出
    data_b
    O
    5—8通道数据输出
    data_1-8
    O
    通道数据单独输出


    进行数据采样频率控制,在默认设置下SCLK_CNT计数到130完成一次数据采集。进行驱动逻辑设计,在第一个下降沿开始获取数据
      
            always@(posedge Clk or  negedge Reset_n)
      
            if(!Reset_n)begin
      
                    ad7606_cs_n_o  <= 1;
      
                    data_a  <= 16'd0;
      
                    data_b  <= 16'd0;
      
                    ad7606_convst_o  <= 1;
      
                    ad7606_reset_o  <= 0;
      
                    data1  <= 0;
      
                    data2  <= 0;
      
            end
      
            else begin
      
                    case(SCLK_CNT)
      
                             0:
      
                                      begin
      
                                               ad7606_cs_n_o  <= 1;
      
                                               data_a  <= data_a;
      
                                               data_b  <= data_b;
      
                                               ad7606_convst_o  <= 0;
      
                                               ad7606_rd_n_o  <= 1;
      
                                      end
      
                             1:begin
      
                                         ad7606_convst_o <= 1;
      
                                               ad7606_cs_n_o  <= 0;
      
                                               ad7606_rd_n_o  <= 1;
      
                               end
      
                             2:begin
      
                                               ad7606_rd_n_o  <= 1;
      
                                               ad7606_cs_n_o  <= 0;
      
                               end
      
      
                             4 ,6 ,8 ,10,12,14,16,18,20,22,24,26,28,30,32,
      
                              36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,
      
                             68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,
      
                             100,102,104,106,108,110,112,114,116,118,120,122,124,126,128:
      
                             begin         
      
                                      ad7606_rd_n_o  <= 1;
      
                             end
      
                             3, 35,67,99:begin data1[15]<=  Dout_A;data2[15]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             5, 37,69,101:begin data1[14]<=  Dout_A;data2[14]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             7, 39,71,103:begin data1[13]<=  Dout_A;data2[13]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             9, 41,73,105:begin data1[12]<=  Dout_A;data2[12]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             11,43,75,107:begin data1[11]<=  Dout_A;data2[11]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             13,45,77,109:begin data1[10]<=  Dout_A;data2[10]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             15,47,79,111:begin data1[9]<=  Dout_A;data2[9]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             17,49,81,113:begin data1[8]<=  Dout_A;data2[8]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             19,51,83,115:begin data1[7]<=  Dout_A;data2[7]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             21,53,85,117:begin data1[6]<=  Dout_A;data2[6]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             23,55,87,119:begin data1[5]<=  Dout_A;data2[5]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             25,57,89,121:begin data1[4]<=  Dout_A;data2[4]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             27,59,91,123:begin data1[3]<=  Dout_A;data2[3]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             29,61,93,125:begin data1[2]<=  Dout_A;data2[2]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             31,63,95,127:begin data1[1]<=  Dout_A;data2[1]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             33,65,97,129:begin data1[0]<=  Dout_A;data2[0]<= Dout_B;ad7606_rd_n_o  <= 0;end
      
                             34,66,98,130:begin data_a <=  data1;data_b <= data2;ad7606_rd_n_o  <= 1;end
      
                             default:
      
                                      begin
      
                                               ad7606_cs_n_o  <= 1;
      
                                               data_a  <= data_a;
      
                                               data_b  <= data_b;
      
                                               ad7606_convst_o  <= 1;
      
                                               ad7606_reset_o  <= 0;
      
      
                                               data1  <= data1;
      
                                               data2  <= data2;
      
                                      end
      
                    endcase
      
            end                                      
      
    endmodule
      

    基于PFGA开发板的功能测试
    对系统功能设计完成并仿真验证通过之后,准备好硬件设施,连接好硬件,就可以对设计的工程进行板级验证测试实验功能。
    系统所需硬件
    1、  对应实验开发板。
    2、  AD9606模块。
    3、  电源线。
    4、  程序下载线。
    5、  串口线。
    6、  信号发生器。
    硬件连接
    根据前面的描述准备好硬件,我们可以进行连接:
    1、  连接好ACM7606发板。
    2、  信号发生器的输出端连接到ACM7606道输入端,可根据设置连接不同通道。
    3、  连接好FPGA开发板串口线
    4、  连接好开发板电源。
    5、  连接好开发板下载器。
    6、  修改acm7606上的键帽 如下图()靠近灯的那个拔出连接左边两个引脚

    040-1.jpg 040-2.jpg
    最终全图
    040.jpg


    在以上所有模块和线路连接好之后就可以打开开关,开始下载程序。

    在信号发生器上设定好采样频率,可使用示波器对信号发生器输入的数据进行观察,确认输入数据是否正常,和采集的数据进行对比验证。
    数据采集与分析
    用户可以在电脑上发送特定格式的串口数据帧来设置FPGA中与控制功能相关的寄存器。FPGA中共设计了4个寄存器。以下为寄存器介绍:

      
    名称
      
    地址
    位宽
    功能简介
    RestartReq
    0
    1
    重新开始采集请求寄存器,向该寄存器写入任意值即可启动新一轮的采样存储传输。
    ChannelSel
    1
    8
    通道设置寄存器,共8位,对应了8个通道的数据存储开关,如果某通道对应的设置位为1,则该通道的采样结果就会被存入FIFO并通过串口发送
    DataNum
    2
    16
    数据个数寄存器,设定总共采集传输多少个数据。注意,该寄存器设置的是总共采集的数据个数,假设设置采集100个数据,而且设置了ChannelSel0000_0011b,则实际每个通道采样的次数就是502个通道的数据加起来是100个。假设设置采集100个数据,而且设置了ChannelSel0011_0011b,则实际每个通道采样的次数就是254个通道加起来采集100个数据
    ADC_Speed_Set
    3
    32
    ADC采样速率设置寄存器。该寄存器用来设置ADC每多久执行一次转换。由于ADC的最大采样速率为200Ksps,所以可以通过设置该寄存器的值来让ADC的采样速率在1~200Ksps范围内调整,以适应不同的应用场景。该寄存器的值与采样速率关系为:ADC_Speed_Set  = 1000000000/20/speed 130,其中speed就是实际要设置的采样速率。

    串口一次发送的数据内容为1个字节,为了实现通过串口修改这些寄存器的值,需要发送多个字节才能实现,为此,设计了简单的串口数据帧,该帧一帧数据共8个字节,包含帧头、帧尾、地址段、数据段。帧格式如下所示:

      
    数据
      
    D0
    D1
    D2
    D3
    D4
    D5
    D6
    D7
    功能
    帧头0
    帧头1
    地址
    data[31:24]
    data[23:16]
    data[15:8]
    data[7:0]
    帧尾
    0x55
    0xA5
    xx
    xx
    xx
    xx
    xx
    0xF0

    每帧数据共8个字节,分别用D0~D7表示,其中,D0和D1两个数据作为帧头,其值分别为固定的0x55、0xA5,D7作为帧尾,其值为固定的0xF0。D2则为要操作的寄存器地址,D3为要写入寄存器的数据的24~31位,D2为要写入寄存器的数据的16~24位,D2为要写入寄存器的数据的8~15位,D0为要写入寄存器的数据的0~7位。例如,PC端要设置采样数据个数(DataNum寄存器,地址为2)为16000(0x3E80)个,则发送的数据帧内容为:0x55 0xA5 0x02 0x00 0x00 0x3E 0x80 0xF0。
    例如,PC端要设置采样速率(ADC_Speed_Set寄存器,地址为3)为100K,则对应的ADC_Speed_Set值为1000000000/20/100000– 1 = 499(0x000001F3)个,则发送的数据帧内容为:0x55 0xA5 0x03 0x00 0x00 0x01 0xF3 0xF0。
    当上述设置都设置完成后,就可以向0号寄存器写入任意值,来开始一次采样传输了。数据帧内容可以为0x55 0xA5 0x00 0x00 0x00 0x00 0x00 0xF0。



    打开sscom5.13.1串口调试工具。点击多字符串,点击勾选四个指令栏,填入指令:
    n采8192个的数据,则设置为:55A5 02 00 00 20 00 F0
    n采样通道为第一通道,则设置为:55 A5 01 00 00 00 01 F0
    采样通道为第二通道,则设置为:55 A5 01 00 00 00 02 F0
    n采样的速率为50M,指令设置为:55 A5 0300 00 00 00 F0,
    采样的速率为5k,指令设置为:55 A5 03 00 00 27 0F F0

    n 采集使能指令帧设置为:55 A5 00 00 00 00 00 F0

    AC208_ad7606_spi_driver_uart.zip (2.38 MB, 下载次数: 568)

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

    GMT+8, 2024-5-4 13:43 , Processed in 0.112686 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表