通过DSP采集AD7606的转换结果

本文介绍了如何使用DSP读取AD7606外部AD芯片的转换结果,详细讲解了AD7606的工作原理、引脚配置以及DSP的相关配置。通过设置GPIO引脚控制转换开始、读取数据,并展示了主程序的实现,确保DSP能够正确接收到AD转换数据。
摘要由CSDN通过智能技术生成
  • 前情提要

       DSP芯片中自带的AD转换芯片为12位,而在实际应用中,我们常会使用精度更高、转换速率更快的AD芯片,我们使用DSP读取片外AD芯片的转换结果。下面我们以AD7606为例,介绍其工作原理、引脚配置以及主程序。

  • 工作原理

        AD7606为16位AD芯片,其可接受8路输入信号,将其转化为16位二进制数输出。本例中我们使用其并行输出模式。

        在配置引脚之前,我们需要知道AD7606相关重要引脚的作用。

 

        上图所示为AD7606的原理图,我们将从上至下,从左至右介绍其引脚。

        OS0~2:为过采样(over sample)配置引脚,下图为其电平配置与过采样倍数的对应关系。

        因此注意到,上图中R2,R3,R4和R8,R11,R13不能同时焊接,否则DSP可能辨别不出OS引脚电平是0还是1(至少我是这么猜测的,没有试过)。我们目前设置为000,即无过采样。

        STBY:待机模式输入。目前电路板上取下了R41,保留R15(这个没仔细探究,反正目前这样就能用)

        PAR:并行/串行/字节接口选择输入。该引脚与低电平相连的时候,选择并行接口;与高电平相连,选择串行接口;高电平且DB15/BYTE SEL为低电平,选择并行字节接口。我们使用并行功能,因此将该引脚接地。

        RANGE:选择芯片量程。与高电平相连,测量范围为±10V,反之为±5V。目前我们保留了R19,故测量范围为±5V。

        CONVSTA/B:开启信号,高电平时开启。AB控制不同的输入口,但我们常将其短接在一起。我们使用F28335的GPIO62对其电平进行控制,因此我们将GPIO62设置为输出引脚。

        FRSTDATA:FRSTDATA输出信号指示何时在并行、字节或串行接口上回读第-通道V1。虽然原理图上该引脚与GPIO57相连,但是DSP不接收信号好像也能读数,因此我们在程序里也没有进行配置。

        RESET:复位信号。注意该信号必须为一个正脉冲,即低-高-低,否则AD7606不工作(这个问题卡了我们好久)

        RD:读信号。在并行模式下,RD和CS为低电平时启动输出总线,可以读到数据。在串行模式下,此引脚用作传输的串行时钟输入。该信号由AD发出,不用配置DSP引脚。

        CS:片选信号(chip selection?)。此低电平有效逻辑输入使能数据帧传输。在并行模式下,如果CS和RD均处于逻辑低电平,则会使能输出总线DB[15:0],使转换结果输出在并行数据总线上。在串行模式下,利用CS使能串行数据帧传输,并逐个输出串行输出数据的最高有效位(MSB)。注意到该引脚上面标注了IC1_XZCS6,代表该芯片转化得到的结果可以在ZONE6中访问。我们目前使用的AD7606芯片将数据存在了ZONE7,查看F28335.cmd可知(不同的程序.cmd中的配置可能不一样,得具体看),ZONE7的首地址为0x20FC00,在后面AD数据的读取中我们会用到。

        BUSY:忙信号,高电平时表示芯片正在进行转换,低电平时表示转换结束,可以读取结果。

        DB0~15:并行输出口,连接到DSP的异步接口,对应GPIO64~78,在Xintf函数中进行相应设置。

        左下角几个引脚不用管。

        AVCC:供电端口,3.3V。

        Vdrive:逻辑电源输入,接3.3V。

        V1~8:模拟输入。AD芯片需要转换的模拟量即从此处输入。

        右下角为地端口。

  • 引脚配置

        高低电平等不需要在CCS中设置的引脚其配置在原理图和第二部分中已经说明,下面我们阐述DSP相关引脚的配置。

        GPIO62:发送开启信号。在void InitGpioset(void)函数中,按下图将该引脚配置为输出。

 

        GPIO49:发送复位信号,该信号可以在每次转换完8路输出之后发出,也可以只在最开始复位一次,配置如下。

         IC1_XZCS7:告诉我们数据存于ZONE7对应的地址中。我们在程序中用指针对数据进行访问,故设置指针如下。

         地址的来历不再赘述。

         GPIO48:读取BUSY电平,设置为输入,配置如下。

         DB0~15:在void InitXintf16Gpio(void)函数中进行配置,一般模板中自带,不用改动,如下所示。

void InitXintf16Gpio(void)

{

     EALLOW;

     GpioCtrlRegs.GPCMUX1.bit.GPIO64 = 3;  // XD15

     GpioCtrlRegs.GPCMUX1.bit.GPIO65 = 3;  // XD14

     GpioCtrlRegs.GPCMUX1.bit.GPIO66 = 3;  // XD13

     GpioCtrlRegs.GPCMUX1.bit.GPIO67 = 3;  // XD12

     GpioCtrlRegs.GPCMUX1.bit.GPIO68 = 3;  // XD11

     GpioCtrlRegs.GPCMUX1.bit.GPIO69 = 3;  // XD10

     GpioCtrlRegs.GPCMUX1.bit.GPIO70 = 3;  // XD19

     GpioCtrlRegs.GPCMUX1.bit.GPIO71 = 3;  // XD8

     GpioCtrlRegs.GPCMUX1.bit.GPIO72 = 3;  // XD7

     GpioCtrlRegs.GPCMUX1.bit.GPIO73 = 3;  // XD6

     GpioCtrlRegs.GPCMUX1.bit.GPIO74 = 3;  // XD5

     GpioCtrlRegs.GPCMUX1.bit.GPIO75 = 3;  // XD4

     GpioCtrlRegs.GPCMUX1.bit.GPIO76 = 3;  // XD3

     GpioCtrlRegs.GPCMUX1.bit.GPIO77 = 3;  // XD2

     GpioCtrlRegs.GPCMUX1.bit.GPIO78 = 3;  // XD1

     GpioCtrlRegs.GPCMUX1.bit.GPIO79 = 3;  // XD0



     GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 3;  // XREADY

     GpioCtrlRegs.GPBPUD.bit.GPIO35 = 1;   //Enable pull up

     GpioCtrlRegs.GPBDIR.bit.GPIO35 = 1;

    GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 0;      //

     GpioCtrlRegs.GPBMUX1.bit.GPIO38 = 3;  // XWE0



     GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 3;  // XZCS0

     GpioCtrlRegs.GPBMUX1.bit.GPIO37 = 3;  // XZCS7

     GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 3;  // XZCS6



     EDIS;

}
  • 主程序

        以上所示引脚,其时序配置等各有不同,自己设置即可。

        程序主体部分如下所示。

if(GpioDataRegs.GPBDAT.bit.GPIO48==0)//AD_BUSY

          {

              addat[0] = *(AD_ASTART);     // M_I1

              addat[1] = *(AD_ASTART);     // M_V1

              addat[2] = *(AD_ASTART);     //

              addat[3] = *(AD_ASTART);     // M_V2

              addat[4] = *(AD_ASTART);     // M_V3

              addat[5] = *(AD_ASTART);     // M_I3

              addat[6] = *(AD_ASTART);     // M_V4

              addat[7] = *(AD_ASTART);     // M_I4

          }

          for(i=0;i<BUF_SIZE;i++)

             {

                exadc[i]=addat[i]*SCALE/32768.0;

             }

        其中BUF_SIZE8,代表8个输入量,SCALE5,代表量程。

  • 总结

        按如上配置,DSP可以接收到AD7606转换的数据,转换值经验算也没有问题。

        我此前并没有接触过DSP,只在课程中略学过一些单片机的知识,因此错误在所难免,希望大家不吝赐教。另,《STM32F407-基于AD7606进行多路数据采集》中对AD7606引脚功能的介绍十分专业和详细,对我的调试工作提供了很大的帮助。

DSP28335 AD7606是一种嵌入式系统中使用的芯片。根据引用,可以看出这是一个由研旭公司生产的芯片。该芯片具有高精度的模拟数字转换功能,通常用于数据采集和信号处理应用中。 然而,根据引用的描述,使用DSP28335 AD7606供电时可能会遇到一些问题。原文提到,在初始使用时,将A5V和AGND连接,但数据显示不正确。经过尝试,将AGND改为GND后,数据开始正确显示。尽管芯片原理图上显示应该连接AGND,但实际上使用GND才能正常工作。这个问题的原因还不清楚。 另外,引用指出,DSP28335自带的延时函数只有微秒级别的精度。而AD7606的时序要求在纳秒级别。为了实现纳秒级的延时,作者创建了一个自减函数,但该函数的精度取决于系统的主频和指令执行速率,并不是完全准确的。 综上所述,DSP28335 AD7606是一种由研旭公司生产的芯片,用于嵌入式系统中的数据采集和信号处理应用。在使用过程中,可能会遇到供电和延时的相关问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [DSP28335 AD7606 研旭](https://download.csdn.net/download/qq_26933231/10506610)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [DSP-F28335与AD7606的并行模式调试问题](https://blog.csdn.net/weixin_61282734/article/details/124266140)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值