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.

[参考译文] ads8689:无法获取正确的数据

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/660267/ads8689-can-not-get-correct-data

部件号:ADS8689

i|=SPI2_ReadWriteByte(0x00)<8;
i|=SPI2_ReadWriteByte(0x00);
SPI2_ReadWriteByte (0x00);
SPI2_ReadWriteByte (0x00);
ADS868X_CS=1;

printf ("\r\n%d\ti\r\n",i);

当我使用此命令,我将其设置为0-10.24v 时,我无法获得正确的ADC数据,就 像它返回1.6383万,而它是46.6mv一样

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我可以写寄存器,但无法获得正确的数据
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    在读取数据之前,必须确保将变量I初始化为所有零。每次读取数据时都必须执行此操作。
    另外,我建议尝试写一个寄存器,然后读那个寄存器,这将确保注册正确,并将显示您正在正确读取数据

    此致
    Cynthia
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哦,我明白了,谢谢,我就解决了
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我还想知道ADS8689在有转换时是否可以发送单个,如果没有,我应该读取转换的频率
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我还想知道ADS8689在进行转换时是否可以发送信号,如果不能,我应该读取转换的频率
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以使用RVS了解设备在对话 阶段的完成时间,请注意,RVS可能取决于所使用的输出协议。

    我建议查看 数据表,从第10页开始了解设备的计时要求。 您使用的频率取决于  您使用设备的方式,只需确保  在设备功能范围内。

    此外,如果您想了解ADC的更多信息, 有一个很好的资源,即Precision Labs- ADC ,可以提供真正的帮助

    此致

    Cynthia

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我知道数据不稳定。 就像我使用ads8689测量3.3V,,但我得到的数据是3.21v-3.54v
    ,甚至3.61v。我尝试每1毫秒,10毫秒,甚至100毫秒读取数据,但数据不稳定。如果我应该得到RVS信号,但我不知道如何使用它。
    ADS868X_CS=0;
    ADC_RateDataGroup[ADC_RateDataCount]=SPI2_ReadWriteByte(0x0000);
    SPI2_ReadWriteByte (0x0000);
    ADS868X_CS=1;
    我得到10个数据,然后得到它们的平均值
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看了第10页上的数据表。它告诉我可以每10个月读取一次数据
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Biao:

    您能否上传您的示意图和计时屏幕截图,其中包含CONVST/CS,SCLK,SDO和SDI的范围? 另外,请告诉我们您是如何 测试 的,例如您的信号源等。 这些将非常有助于解决问题,谢谢。

    此致

    戴尔

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

     e2e.ti.com/.../DT35_5F00_COM.zip

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

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

    您好,Biao:

    您的原理图对我来说很好,但有一些问题:

    1. 您的正在拆分地面 ,R22的接地连接点远离ADC, 而且您只使用两层PCB 板,而且模拟接地面积非常小。 您必须确保GND和AGND/REFGND之间的电压差小于+/-300mV,因此强烈建议使用实心接地平面,数据表中也提到了这一点。

    2. 双层PCB布局不容易实现16位ADC的性能,而且您的电路板尺寸很小,所有电路(包括DC-DC和MCU数字电路)都组合在一起。 有一个干净的布局非常重要,以避免从数字/电源到模拟电路的任何干扰。

    3. ADC的AVDD用于内部信号采集和转换,因此,拥有一个干净且旁路良好的电源非常重要。 低噪声LDO是 为ADC提供电源的良好解决方案,例如TPS7A47xx,这是我们的EVM板中非常常用的器件。

    有关详细信息,请参阅ADS8689数据表第61页中的布局指南。

    除了 上述布局建议之外  ,您能否告诉我们您的示意图中电阻器和电容器的值? 另外,请从范围上传您的计时屏幕截图,以便我们检查您的计时是否正确,如数据表中的图3。

    我所指的测试条件是:  

    您是否在Q2上应用了测试信号? 测试电压是多少 ?信号来自何处(精密信号发生器或其他)? 您从ADC获得的输出转换代码是什么? 等等

    谢谢。

    此致

    戴尔

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

    我 在Q2上应用测试信号 ,以及用于测试的电压 和来自PCB 3.3V,5V和SICK距离传感器的信号

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ADS868X_CS=0;
    ADC_RateDataGroup[ADC_RateDataCount]=SPI2_ReadWriteByte (0x0000);//发送读取ID命令
    SPI2_ReadWriteByte (0x0000);//发送读取ID命令
    ADS868X_CS=1;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Biao:
    当您将ADC输入范围设置为2.5xVref( 0-10.24v)时,如果您得到的转换码是1.6383万,则相应的电压约为2.56V [(1.6383万/65526)*ADC]<xmt-block0>6.5526万 10.24。 我建议您在不更改输入范围的情况下进行测试,以防您的数字信号计时出现任何潜在问题,在为ADC通电后,默认输入范围为±3×VREF (内部参考为4.096V时为±12.288V),请上传您的转换数据文件,我可以为您检查。
    请注意:
    1.请勿将电源用作输入测试信号,因为该代码对于嘈杂的电源来说将不稳定。
    2.让我知道您的电阻器和电容器(输入)在原理图中的值。
    3.从SCLK,/CS,SDO和SDI范围上传您的计时屏幕截图,以便我检查您的计时是否正确。

    顺便说一下,正如我在前面的答复中所提到的,您的双层PCB布局板和分割地面将是在ADS8689上实现性能的一个挑战,即使该功能在您完成上述测试后仍能正常工作。 如果可能,请重新设计您的PCB板。
    谢谢。

    此致
    戴尔

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

    我 现在重新设计我的PCB板,我 没有条件 测试计时,我只是一个学生。我可以将GND用作输入测试信号吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为我的计时正确,因为我可以写入和读取寄存器,例如range_sel_REG寄存器(地址= 14h)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我还想知道我是否需要可选主板

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ADS868X_CS=0;
    delay_ms (1); //延时ms
    SPI2_ReadWriteByte (0xD014);
    SPI2_ReadWriteByte (0x0009);
    ADS868X_CS=1;

    浮点ADC_FILTER (U16 *DATA,U16数字)

    U8 I=0;
    U16最大值=0,最小值=0;
    u32 sum=0;
    浮点平均值=0;

    最大=*(data+0);
    最小值=*(data+0);
    总和+=*(data+0);

    对于(i=1;i<num; i++)

    IF (最大<*(data+I))

    最大=*(data+I);
    }
    如果(最小值>*(data+I))

    最小值=*(data+I);
    }
    SUM +=*(data+I);
    }

    总和=总和-最大值-最小值;
    Average =(float)((float) sum/(float)(num-2));

    平均回报率 ;
    }

    void TIM3_IRQHandler(void)// TIM3中断

    静态U16 ADC_RateDataGroup[ADC_FILTER_NUM]={0};
    静态U16 ADC_RateDataCount=0;
    检查TIM3更新中断发生与否(TIM_GetITStatus (TIM3,TIM_IT_Update)!= RESET)//

    IF (ADC_RateDataRedy==0)

    ADS868X_CS=0;
    ADC_RateDataGroup[ADC_RateDataCount]=SPI2_ReadWriteByte (0x0000);//发送读取ID命令
    SPI2_ReadWriteByte (0x0000);//发送读取ID命令
    ADS868X_CS=1;
    ADC_RateDataCount++;
    IF (ADC_RateDataCount=ADC_FILTER_NUM)


    ADC_RateData =ADC_FILTER (ADC_RateDataGroup,ADC_FILTER_NUM)* 10.24 ADC/6.5535万; //100-600
    ADC_RateDataRedy=1;
    ADC_RateDataCount=0;
    }
    }
    TIM_ClearITPendingBit (TIM3,TIM_IT_Update);//清除TIMx更新中断标志

    }
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    /*设置量程0 - 2.5 * 4.096 */
    ADS868X_CS=0;
    delay_ms (1); //延时ms
    SPI2_ReadWriteByte (0xD014);
    SPI2_ReadWriteByte (0x0009);
    ADS868X_CS=1;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    /*设置量程0 - 2.5 * 4.096 */
    ADS868X_CS=0;
    delay_ms (1); //延时ms
    SPI2_ReadWriteByte (0xD014);
    SPI2_ReadWriteByte (0x0009);
    ADS868X_CS=1;


    浮点ADC_FILTER (U16 *DATA,U16数字)

    U8 I=0;
    U16最大值=0,最小值=0;
    u32 sum=0;
    浮点平均值=0;

    最大=*(data+0);
    最小值=*(data+0);
    总和+=*(data+0);

    对于(i=1;i<num; i++)

    IF (最大<*(data+I))

    最大=*(data+I);
    }
    如果(最小值>*(data+I))

    最小值=*(data+I);
    }
    SUM +=*(data+I);
    }

    总和=总和-最大值-最小值;
    Average =(float)((float) sum/(float)(num-2));

    平均回报率 ;
    }


    void TIM3_IRQHandler(void)// TIM3中断

    静态U16 ADC_RateDataGroup[ADC_FILTER_NUM]={0};
    静态U16 ADC_RateDataCount=0;
    检查TIM3更新中断发生与否(TIM_GetITStatus (TIM3,TIM_IT_Update)!= RESET)//

    IF (ADC_RateDataRedy==0)

    ADS868X_CS=0;
    ADC_RateDataGroup[ADC_RateDataCount]=SPI2_ReadWriteByte (0x0000);//发送读取ID命令
    SPI2_ReadWriteByte (0x0000);//发送读取ID命令
    ADS868X_CS=1;
    ADC_RateDataCount++;
    IF (ADC_RateDataCount=ADC_FILTER_NUM)


    ADC_RateData =ADC_FILTER (ADC_RateDataGroup,ADC_FILTER_NUM)* 10.24 ADC/6.5535万; //100-600
    ADC_RateDataRedy=1;
    ADC_RateDataCount=0;
    }
    }
    TIM_ClearITPendingBit (TIM3,TIM_IT_Update);//清除TIMx更新中断标志

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

    谢谢。

    我的原理图中电阻器和电容器的值

    我从ADC获得的输出转换代码:我得到平均10个数据。

    /*设置量程0 - 2.5 * 4.096 */
    ADS868X_CS=0;
    delay_ms (1);//延时ms
    SPI2_ReadWriteByte (0xD014);
    SPI2_ReadWriteByte (0x0009);
    ADS868X_CS=1;

    浮点ADC_FILTER (U16 *DATA,U16数字)

    U8 I=0;
    U16最大值=0,最小值=0;
    u32 sum=0;
    浮点平均值=0;

    最大=*(data+0);
    最小值=*(data+0);
    总和+=*(data+0);

    对于(i=1;i<num; i++)

    IF (最大<*(data+I))

    最大=*(data+I);
    }
    如果(最小值>*(data+I))

    最小值=*(data+I);
    }
    SUM +=*(data+I);
    }

    总和=总和-最大值-最小值;
    Average =(float)((float) sum/(float)(num-2));

    平均回报率;
    }

    void TIM3_IRQHandler(void)// TIM3中断

    静态U16 ADC_RateDataGroup[ADC_FILTER_NUM]={0};
    静态U16 ADC_RateDataCount=0;
    检查TIM3更新中断发生与否(TIM_GetITStatus (TIM3,TIM_IT_Update)!= RESET)//

    IF (ADC_RateDataRedy==0)

    ADS868X_CS=0;
    ADC_RateDataGroup[ADC_RateDataCount]=SPI2_ReadWriteByte (0x0000);//发送读取ID命令
    SPI2_ReadWriteByte (0x0000);//发送读取ID命令
    ADS868X_CS=1;
    ADC_RateDataCount++;
    IF (ADC_RateDataCount=ADC_FILTER_NUM)


    ADC_RateData =ADC_FILTER (ADC_RateDataGroup,ADC_FILTER_NUM)* 10.24 ADC/6.5535万;//100-600
    ADC_RateDataRedy=1;
    ADC_RateDataCount=0;
    }
    }
    TIM_ClearITPendingBit (TIM3,TIM_IT_Update);//清除TIMx更新中断标志

    }
    }

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

    您好,Biao:

    我想  通过电子邮件和电话与您沟通,我会直接与您联系。

    谢谢

    此致

    戴尔

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

    好,请告诉我如何 与 您沟通? 9.23190163亿@qq.com

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

     lbayy@my.swjtu.edu.cn ,这是我在大学的电子邮件

    我重新设计了一个PCB,它怎么样? 谢谢。  谢谢。

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

    您好,Biao:
    3月8日,我向您的lbayy@my.swjtu.edu.cn发送了电子邮件,但没有收到任何回复,您可以检查您的电子邮件箱或发回我的电子邮件吗? 我想让您的新sch和PCB数据库进行仔细检查,这里我无法通过两个简单的屏幕截图告诉您它是否良好,我需要检查您的接地,重要引脚上的连接等
    谢谢。
    此致
    戴尔