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.

[参考译文] ADS8332:ads8332分辨率读数存在问题

Guru**** 652440 points
Other Parts Discussed in Thread: ADS8332, REF6050, REF02
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/913454/ads8332-problem-with-ads8332-resolution-reading

器件型号:ADS8332
主题中讨论的其他器件: REF6050REF02

您好!

我尝试将 ADC ADS8332与 SPI 通信结合使用。

它似乎工作得很好。

我能够配置 CFR 寄存器(配置为0b0111111111);

我还尝试使用手动触发器读取数据值。 但我对该部件有问题。 我读取了一个16位数据、但数据上没有噪声。 数据上有一步、比如我加入的曲线

我尝试插入一些延迟以减缓采集过程。 但我始终具有相同的结果。

我在自动触发中也遇到了问题。

此外、有时当我将 CONVST 置为低电平时、EOC 不会变为低电平。 因此、我必须将 CONVST 恢复为高电平和低电平。

例如、这是我用于读取通道1的代码

uint16_t ADC_READ_CHANNEL ()
{

长 t =毫秒;
while (millis - t <5);

CONVST_CLEAR();

while (EAP_INT_CDI_Get ()!=0)
{
CONVST_SET();
CONVST_CLEAR();
}

while (EAP_INT_CDI_Get ()=0);
CONVST_SET();



uint8_t SENSE[4]={READ_DATA、0、};
uint8_t 接收[3]={0};
CS_ADC_CLEAR ();
SPI1_WriteRead (发送、2、接收、3);
CS_ADC_SET ();

if (receive[2]==32)
sys_console_print ("%i \n\r\n"、(uint16_t)(receive[0]<8)+ receive[1]);


返回((uint16_t)(receive[0]<<8)+ receive[1]);
} 

和原理图

感谢您的帮助、抱歉我的英语不好!

此致、

Anthony

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Anthony、

    您的通信中似乎存在时间问题。  如果您可以使用逻辑分析仪或示波器捕获波形、这会很有帮助。

    如果我正在正确读取您的代码、则会显示您已将/CONVST 反转。  /CONVST 应保持高电平、当您准备好开始转换时、请将其设置为低电平、然后再次设置为高电平。  等待 EOC 返回高电平、然后读取您的数据。  此外、您在转换时尝试读取数据(EOC 低电平)、这要求您在转换结束之前读取数据。  由于我无法分辨您使用的频率、我建议您在采样时根据数据表中的图1进行读取。

    请按如下方式调整您的代码:

    1. 将/CONVST 置为低电平、然后返回高电平以启动转换。
     2.延迟~1uS
    3. 监视 EOC 并等待其返回高电平
    4. 一旦 EOC 返回高电平、将/CS 置为低电平并为转换结果计时(SDI 为0x1101000000000000b 的16SCLK)
    5. 返回/CS 高电平
    6. 重复步骤1

    此外、REF02输出不能直接驱动 ADC 输入、也不能接近 ADC 的噪声性能。  您应该根据数据表中的图51添加一个基准缓冲器、或者使用 REF6050、其中包括一个适合驱动 ADS8332的 REF 输入的高速缓冲器。

    此致、
    Keith Nicholas
    精密 ADC 应用

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    感谢你的帮助。

    我像这样更改代码。

    long t = 0;
    CONVST_CLEAR();
    CONVST_SET();
    
    
    
    t =微秒;
    while (micros - t <10);//wait 10us
    
    while (EAP_INT_CDI_GET()!=1) SYS_CONTOK_PRINT ("等待");
    
    uint8_t SEND[2]={0xD0、0x00};
    uint8_t 接收[3]={0};
    CS_ADC_CLEAR ();
    SPI1_WriteRead (发送、2、接收、3);
    CS_ADC_SET ();
    
    if (receive[2]==32)
    sys_console_print ("%i %i %i %i\n"(uint16_t)( receive[0][8)+receive[1])、receive[0]、receive[1]、receive[2]);
    
    

    我具有相同的结果

    这里有数据选项卡(ADC (MSB+LSB)、  MSB、LSB、TAG 的值)

    我们只有三个可能的 LSB 值.... 我不知道为什么。

    3107 12. 35. 32
    3139. 12. 67 32
    3331. 13. 3. 32
    3331. 13. 3. 32
    3587 14. 3. 32
    3843 15. 3. 32
    4099 16. 3. 32
    4227. 16. 131. 32
    4355 17. 3. 32
    4611. 18 3. 32
    5187. 20. 67 32
    5187. 20. 67 32
    5251. 20. 131. 32
    5251. 20. 131. 32
    5379 21. 3. 32
    5635 22. 3. 32
    5763. 22. 131. 32
    6147 24 3. 32
    6275 24 131. 32
    6403 25 3. 32
    7235. 28. 67 32
    7235. 28. 67 32
    7235. 28. 67 32
    7299 28. 131. 32
    7299 28. 131. 32
    7427. 29. 3. 32
    7427. 29. 3. 32
    76883 30 3. 32
    7939. 31. 3. 32
    8195 32 3. 32
    8195 32 3. 32
    9283. 36. 67 32
    9283. 36. 67 32

    我将尝试使用逻辑分析仪捕获信号。

    Anthony

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用数字分析仪进行捕获。  

    我使用微控制器进行读取

    19523 76 67 32.

    19523 76 67 32.

    19523 76 67 32.

    19523 76 67 32.

    19523 76 67 32.

    19523 76 67 32.

    19523 76 67 32.

    19523 76 67 32.

    19523 76 67 32.

    19523 76 67 32.

    19523 76 67 32.

    19523 76 67 32.

    这似乎是正确的?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Anthony、

    EOC、/CS 和 SCLK 之间的时序看起来都正确。  但是、相对于 SCLK 边沿、我无法判断 SDI 是否满足时序要求。

    您能否提供上面显示前16个 SCLK 和 SDI 线路的数据的放大版本?

    此外、SCLK 的频率是多少?

    此致、
    Keith