This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ADS8331使用问题

Other Parts Discussed in Thread: ADS8331, ADS8332

你好,我设计中选用ADS8331芯片作为信号采集,下载的芯片手册里边没有找到时序图,如上电后我应该如何读取数据,如何设置寄存器CFR、CMR,能否提供详细时序图或者源代码

  • 为什么没人回复?

  • 您好,不好意思让您等久了,负责数据转换器的同事在出差,我们马上内部沟通一下,尽快给您回复!

  • 你好,请查看www.ti.com/.../ads8331.pdf,第9页就是时序图。

  • 按照第9页的时序图

    CONVST :由CPU控制作为输出管脚,管脚一直输出高电平

    RST: 由CPU控制作为输出管脚,管脚一直输出高电平

    EOC:由CPU控制作为输入管脚,监测发现管脚一直为低电平

    CS、SCLK、SDI、SDO与CPU的SPI功能管脚互连,SPI设置CPOL = '1', CPHA = '0'.,频率1MHz

    按照时序图,先发送2字节设置命令(Write CFR,芯片手册27页的命令),0xEC,0xFD

     

    发送完后,再发送2字节读取数据(Read data),0xD0,0x00,由时序图所示应该是再发送读取数据2个字节的命令的同时SDO回传AD采样数据,用示波器观察,发现SDO管脚一直处于低电平,没有数据出来。

    是哪个地方的时序没写好,还是命令有所错误。

  • 你降低频率试试看,请注意我们的器件是500kSPS的

  • 我指的频率是时钟频率CLOCK为1MHz,采样频率目前只有3.6KHz

    目前SDO管脚在进行SPI通讯时一直处于高电平,仍无正常数据输出

  • 按照你的配置,实际上采样率是500KSPS,因为你的转化时钟采用内部11MHZ时钟,21个转化周期,就是500KSPS,这样你1MHZ的SPI肯定读不出来。既然你的采样频率不高,我建议你转化时钟CCLK采用你的SCLK,即D10=0.同时我建议你上电之后对ADS8331进行复位操作。

  • 我在上电时对RST进行了复位操作的,目前我将(Write CFR,芯片手册27页的命令),写入0xEFFD命令时,每次先将CONVST置为高电平,然后等待EOC为高电平时发送0xD000(16个CCLK)读取数据,读取一个通道后将CONVST置为低电平,然后再置高电平,等待EOC为高电平再读取下一通道数据,以此循环读取数据,数据均能正常读取,但是码值波动较大,16位分辨率最大波动200个字,请问此种读取数据的方式是否正确,AD码值的有效值为多少?

    目前使用外部时钟CCLK约1.4MHz,采样频率为2K,时序图与手册第九页Figure 1.一致

    按照你说的方式,我将D10 = 0,即CFR = 0xBFD或0x1FD或0x3FD或0xAFD时读取数据均不正常,所有通道的值都一样

    如果我想按照手册第九页Figure 2. (Auto-Trigger Mode at 500 kSPS)进行调试,CFR寄存器应该设为多少合适?SPI的CCLK是否需要大约11MHz才可以?

  • 根据手册上的AC特性,在5V时,输入1KHz正弦波,SNR=91.5dB,则有效位ENOB=91.5-1.76/6.02=14.9bit。你这种读的方式是正确的,码值波动在200已经很大,请问你的ADC电路设计方便提供么,尤其是前端输入和参考源部分怎样设计,这两部分的设计和ADC的精度关系密切。

    我所建议你采用的D10=0是因为在自动模式下,可以使得采样率等于SPI时钟频率/21,这样方便你使用比内部时钟低很多的SPI读出数据。

    如果采用自动模式,我建议你试试0x8fd试试。

  • 电路设计基本是按照手册第34页设计的,其中VA = 5V,VBD = 3.3V,Vref = 5V,DGND、AGND、COM脚均为同一个地,数模非隔离。

    目前设计SPI时钟改为18MHz,采样频率为25K

    按照你的建议,将CFR设为0x8FD,时序为RST复位后,CONVERT一直为高电平,然后写入CFR = 0x8FD,然后CONVERT一直保持高电平,然后发送4个0xD000(16个CCLK)读取4通道数据,在读取过程中我试过直接发送读取或者等待EOC管脚为低电平后再读,均出现同一问题,四个通道的码值一直相同,而且都为上电同一时刻读取的值,运行过程中改变输入信号大小,码值也不跟随改变。

    按照手册第9页Figure 2图中,CONVERT管脚一直为高,在EOC管脚为低时读取通道码值。目前设计时序与手册时序相同,但仍无法得出正确码值。

    目前我只有将CFR设为0xEFD或0xFFD,使用Manual-Trigger:读取完一个通道后将CONVERT置低后再置高读取通道数据能够进行正常读取,设计为Auto-Trigger时不论按照何种方式读取,仍不对。

  • 请帮忙给予解答

  • 请将时序图截图下来。SAR ADC的电路设计有点讲究,在输入级上和参考源上的设计上如果不注意,会大大提高整个噪声。输入级至少有一个RC滤波器,RC中的C应该为AD采样电容的20倍,以保持采样的稳定,由18页可知8331的采样电容为40p,则RC中的C应该为1nf,再根据感兴趣的频率范围确定R。在参考源上最好选择精密低温飘的参考源,可参考AD8331EVM的电路图。www.ti.com/.../sbau176a.pdf

  • 您好!请问您那里有源代码?我现在用LPC2368驱动ADS8331,不知道怎么回事也不行!

  • MCU_CS_ADS8332_1_LOW;
    delay_nS(1);
    STM_SPI1_SendByte(channel);
    delay_nS(1);
    MCU_CS_ADS8332_1_HIGH;
    /*(2)*********convert start********/
    MCU_CONVST1_LOW;
    delay_nS(10); 
    MCU_CONVST1_HIGH;
    /*(3)******wait for convert end**********/
    while(WAITCONVERTTIME<50)
    {
    WAITCONVERTTIME++; 
    }
    if(GPIO_ReadInputDataBit(MCU_EOC1_GPIO_PORT,MCU_EOC1_PIN)==1)
    WAITCONVERTTIME=0;
    delay_nS(2);
    /*(4)******receive data**********/
    MCU_CS_ADS8332_1_LOW;
    delay_nS(1);
    receivedata=STM_SPI1_SendByte(CMD_ReadData);
    delay_nS(1);
    MCU_CS_ADS8332_1_HIGH;
    /*(5)******return data**********/

    Timer_1mS_Enable();
    return receivedata;

  • 我采用的是LPC1768的mcu控制,硬件SPI通讯,为什么就不行呢?程序就在附件中麻烦您能帮我看看!非常非常感谢了……

    ads8331_1 - 副本.rar
  • 你好,我现在的问题是能够读出数据且正确,但是不能够选择通道,cfr设置的是0x4BD,读进来的数据是通道1的数据,不能够选择其他通道,即使选择了,读取的还是通道1的数据(不是通道0)。请解答一下。

  • 你好。我用ADS8332,只想用SPI四条线来控制,其他几根数字线(CONVST,EOC/INT/CDI,RESET)不使用是否可以?因为IO口非常有限。谢谢!

  • RESET 可以上电复位

    EOC/INT/CDI 可以不要延时读取ADC值,不去判断转换结束标志

    CONVST 可能必须要用……

  • RESET 可以上电复位---------同意。

    EOC/INT/CDI 可以不要延时读取ADC值,不去判断转换结束标志----------不确定,但内部有一个EOS信号和EOC反相似乎可以用于判断,但是手册表述不够详细。

    CONVST 可能必须要用-------------如果我使用自动触发模式是可以不用的。

    以上是我个人理解。欢迎共同探讨。谢谢!

  • 这个需要设置mfr吗?请问你的代码可以分享一下吗?

  • 你好 请问ADS8331发送C000 读回来FFFF 是对的吗?看手册里感觉应该读回CFFF...