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.

[参考译文] ADS8691:器件配置和寄存器映射

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/684487/ads8691-device-configuration-and-register-maps

器件型号:ADS8691
主题中讨论的其他器件: TINA-TI

您好!

我按如下方式连接了 ADS8691:

1 DGND -> 0V                                  16 DVDD->3、3V

2 AVDD ->  5V                                15 RVS

3 AGND -> 0V                   14ALARM/SDO-1/GPO

4 REFIO ->+4、7uF ->接地       13 SDO-0 -> MISO

5 REFGND -> 1uF、10uF 和接地      12 SCLK -> SCLK

6 REFCAP -> 1uF+、10uF+               11 CONVST/CS -> GPIO 引脚

7 AIN_P ->                                        10 SDI -> MOSI

8 AIN_GND                                       9 RST -> GPIO 引脚  

出于某种原因、引脚10 (SDI)、假设是数字输入引脚的值为3、3V、即使与 MOSI 断开连接也是如此。 我只按上面所示连接了它。

这是正常的吗? 我还会在 SCLK 上遇到很多噪声。

此致

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

    尊敬的 Dukel:

    感谢您在 E2E 论坛上提出问题。

    SDI 连接正常、因为只有指定的操作码才能更改内部配置寄存器的内容、或者如果需要、也可以使用连接 DVDD 的上拉电阻器作为选项。

    干净的 SCLK 对于确保您对 ADC 的写入 和读取成功非常重要、因为对器件的任何数据写入操作都始终与 SCLK 引脚上提供的外部时钟同步、并且从器件读取的数据 与 SCLK 时钟同步 也是如此(读取 可能使用内部时钟、但仍需要 RVS 引脚上的时钟信号)。 SCLK、SDO 和 SDI 之间存在时序要求、请参阅数据表中的图3-7。

    顺便 说一下、REFCAP 和 REFGND 引脚之间必须放置一个10μF μ F 的最小电容。 μF 将另一个1 μ F 电容器尽可能靠近 REFCAP 引脚放置、以便对高频信号进行去耦、请参阅 图53和60了解详细信息。 您可以将原理图上传到 E2E 进行查看。

    希望这对您有所帮助。

    此致

    戴尔

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

    您好 Dale、

    我忘了写10uF、但它已经准备好了、我将其添加到了我的第一篇帖子中。

    我在 SCLK 上有这么多噪声的原因是我使用了来自 Raspberry 的3.3V 和5V 电源为 ADC 供电。 我现在使用的是外部5V 电压、SCLK 上不再有噪声。

    我将向 ADC 发送指定的操作码、但我认为配置不是很好。 您能否检查我的代码和响应。

    #include
    #include

    #include

    //输入命令字和寄存器写入操作
    #define CLEAR_HWORD 0X6000
    #define READ_HWORD 0xC800
    #define 读取0x4800
    #define WRITE 0xD000
    #define WRITE_MS 0xD200
    #define WRITE_LS 0xD400
    #define SET_HWORD 0xD800

    //设备配置和寄存器映射
    #define DEVICE_ID_REG 0x02 //器件 ID 寄存器
    #define RST_PWRCTL_REG 0x04 //复位和功率控制寄存器
    #define SDI_CTL_REG 0x08 // SDI 数据输入控制寄存器
    #define SDO_CTL_REG 0x0C //SDO-x 数据输入控制寄存器
    #define DATAOUT_CTL_REG 0x10 //输出数据控制寄存器
    #define RANGE_SEL_REG 0x14 //输入范围选择控制寄存器
    #define ALARM_REG 0x20 // ALARM 输出寄存器
    #define ALARM_H_TH_REG 0x24 //警报高阈值和迟滞寄存器
    #define ALARM_L_TH_REG 0x28 //警报低阈值寄存器


    #define CONVST 22 //引脚15 = BCM22以激活 ADC 上的读数
    #define RESET 18 //引脚12 = BCM18 RESET

    #define UINT32_t unsigned long


    //变量
    unsigned char bytes[4];
    uint32_t DATA_TO_Receive;
    uint16_t ADC_Command = 0;
    uint32_t temp;

    //测试 void 函数
    void Write_ADC (uint16_t ADC_Command、uint8_t 字节2、uint8_t 字节3)


    字节[0]=(uint8_t)(ADC_Command >> 8);//写入命令
    字节[1]=(uint8_t) ADC_Command;//寄存器地址
    字节[2]=(uint8_t)字节2;//
    字节[3]=(uint8_t)字节3;//2.5*Vref 和内部基准被启用
    spiXfer (0、(char *)(&bytes)、(char *)(&data_to_receive)、4);

    int main (int argc、char * argv[])


    gpioInitialize();//Initialize pigpio.h

    spiOpen (0、32000、0);
    gpioSetMode (CONVST、PI_OUTPUT);//芯片选择(ADC)
    gpioSetMode (RESET、pi_output);//复位 ADC

    while (1){
    //配置 ADC
    gpioWrite (CONVST、1);
    gpioSleep (pi_time_relative、0、50000);//0.5秒延迟

    //~//配置用于向器件写入数据的协议
    //~ gpioWrite (CONVST、1);//设置为高电平
    //~ gpioDelay (0.0095);
    //~ gpioWrite (CONVST、0);//拉低以启动数据传输帧
    //~ gpioDelay (0.0095);
    //~//开始转换
    //~ Write_ADC (write+SDI_CTL_REG、0x00、0x01);// CPOL=0和 CPHA=1
    //~//结束转换
    //~ gpioWrite (CONVST、1);//拉高以结束数据传输帧
    //~ gpioDelay (0.665);//在启动新的数据传输帧(665ns)之前等待 tCONV_max 的消失

    //~/*与复位模式相同
    //~//控制用于从 SDO-x 传输数据的数据协议
    //~ gpioWrite (CONVST、0);//拉低以启动数据传输帧
    //~ gpioDelay (0.0095);
    //~//开始转换
    //~ Write_ADC (WRITE+SDO_CTL_REG、0x00、0x00);// SDO_MODE 与 SDI 相同、SSYNC_CLK 外部、SDO1_CONFIG 三态、GPO_VAL 1位
    //~//结束转换
    //~ gpioWrite (CONVST、1);//拉高以结束数据传输帧
    //~ gpioDelay (0.665);//在启动新的数据传输帧(665ns)之前等待 tCONV_max 的消失
    //~*/

    //设置 ADC 输入范围和内部基准。 十进制值应为:349071649、二进制:1101 0000 0001 0100 0000 0000 0001
    gpioWrite (CONVST、0);//拉低以启动数据传输帧
    GpioDelay (0.0095);//0.0095
    //开始转换
    WRITE_ADC (WRITE+DEVICE_ID_REG、0x00、0x03);//range_SEL 2.5*Vref、INTREF_DIS 被启用
    //等待32位

    //结束转换
    gpioDelay (0.665);//在启动新的数据传输帧(665ns)之前等待 tCONV_max 的消失
    gpioWrite (CONVST、1);//拉高以结束数据传输帧

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

    看起来好像是将信息发送回 MCU、但 由于 SDO 始终处于高电平、即使未连接到 MCU、也无法读取任何内容。

    黄色:SCLK
    蓝色:SDO

    我是否需要在其上放置一个下拉电阻器?

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

     尊敬的 Dukel:

    您正在尝试设置 ADC 输入范围和内部基准(RANGE_SEL 2.5*Vref、INTREF_DIS 已启用)、但您正在写入 16至31位的 DEVICE_ID_REG (0x02)(如下所示)、该寄存  器中的16至19位仅在菊花链模式下可用、20至31位保留在此寄存器中。

    "WRITE_ADC (WRITE+DEVICE_ID_REG、0x00、0x03);//"

    这就是 您的配置失败的原因、我也没看到您有任何可用的读取命令来读取内部寄存器、因此您无法将任何内容返回到 MCU。

    此致

    戴尔

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

    您好 Dale、

    您说得对、我复制了错误的器件!

    这是我的代码、在下图中、您可以看到新的响应。 最上面一行(黄色)是 SDI、其运行方式类似于时钟或其他内容。

    gpioInitialize();//Initialize pigpio.h

    spiOpen (0、32000、0);
    gpioSetMode (CONVST、PI_OUTPUT);//芯片选择(ADC)
    gpioSetMode (RESET、pi_output);//复位 ADC

    字节[0]= 0;
    字节[1]= 0;
    字节[2]= 0;
    字节[3]= 0;

    while (1){
    //配置 ADC
    gpioWrite (CONVST、1);
    gpioDelay (0.0095);
    //gpioSleep (pi_time_relative、0、50000);//0.5秒延迟


    //设置 ADC 输入范围和内部基准。 十进制值应为:349071649、二进制:1101 0000 0001 0100 0000 0000 0001
    gpioWrite (CONVST、0);//拉低以启动数据传输帧
    GpioDelay (0.0095);//0.0095
    //开始转换
    WRITE_ADC (WRITE+RANGE_SEL_REG、0x00、0x03);//RANGE_SEL 2.5*Vref、INTREF_DIS 被启用
    //等待32位

    //结束转换
    gpioDelay (0.665);//在启动新的数据传输帧(665ns)之前等待 tCONV_max 的消失
    gpioWrite (CONVST、1);//拉高以结束数据传输帧
    GpioDelay (0.665);

    printf ("%llu first \n"、data_To_receive);
    gpioSleep (pi_time_relative、0、100000);

    //执行16位读取操作
    gpioWrite (CONVST、0);//拉低以启动数据传输帧
    gpioDelay (0.0095);
    //开始转换
    WRITE_ADC (READ_HWORD + RANGE_SEL_REG、0x00、0x00);//
    //结束转换
    GpioDelay (0.665);
    gpioWrite (CONVST、1);//拉高以结束数据传输帧
    gpioDelay (0.665);//在启动新的数据传输帧(665ns)之前等待 tCONV_max 的消失

    printf ("%llu second \n"、data_To_receive);
    gpioSleep (pi_time_relative、0、100000);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请帮帮我。 出于某种原因、SDO 发送时钟信号而不是数据、并且保持高电平、它仅变化1伏。

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

    您好 Dale、

    SDI 问题已解决。 它不再处理时钟、而是提供全范围输出。 他发送回的内容对我来说不清楚、但在下图中、您可以看到发送值:3490971649或二进制: 1101 0000 0001 0100 0000 0000 0000 0000 0001、命令为: WRITE_ADC (WRITE+RANGE_SEL_REG、0x00、0x01);  

    下图显示了它确实在向 ADC 发送正确的信息。

    如果我只发送: WRITE_ADC (WRITE+RANGE_SEL_REG、0x00、0x01);而不是接收此内容:(黄色是我要发送的内容)

    我尝试了以下代码、我希望在最后一条命令上收到代表 RANGE_SEL_REG 配置的16位。 我的读操作有什么问题。

    //设置 ADC 输入范围和内部基准。 十进制值应为:349071649、二进制:1101 0000 0001 0100 0000 0000 0001
    gpioWrite (CONVST、0);//拉低以启动数据传输帧
    GpioDelay (0.0095);//0.0095 = 9.5ns
    //开始转换

    WRITE_ADC (WRITE+RANGE_SEL_REG、0x00、0x01);//RANGE_SEL +-2.5Vref 启用 INTREF_DIS

    //等待32位

    //结束转换
    gpioDelay (0.665);//在启动新的数据传输帧(665ns)之前等待 tCONV_max 的消失
    gpioWrite (CONVST、1);//拉高以结束数据传输帧
    GpioDelay (0.665);

    printf ("%llu first \n"、data_To_receive);
    gpioSleep (pi_time_relative、0、100000);


    //执行16位读取操作
    gpioWrite (CONVST、0);//拉低以启动数据传输帧
    gpioDelay (0.0095);

    //开始转换
    WRITE_ADC (READ_HWORD + RANGE_SEL_REG、0x00、0x00);//

    //结束转换
    GpioDelay (0.665);
    gpioWrite (CONVST、1);//拉高以结束数据传输帧
    gpioDelay (0.665);//在启动新的数据传输帧(665ns)之前等待 tCONV_max 的消失

    printf ("%llu second \n"、data_To_receive);
    gpioSleep (pi_time_relative、0、100000);

    //读取在 READ_HWORD 之后发送的16位帧
    gpioWrite (CONVST、0);//拉低以启动数据传输帧
    gpioDelay (0.0095);

    //开始转换
    WRITE_ADC (READ_HWORD、0x00、0x00);//

    //结束转换
    GpioDelay (0.665);
    gpioWrite (CONVST、1);//拉高以结束数据传输帧
    gpioDelay (0.665);//在启动新的数据传输帧(665ns)之前等待 tCONV_max 的消失

    printf ("%llu thirth \n"、data_To_receive);
    gpioSleep (pi_time_relative、0、100000);

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

    尊敬的 Dukel:

    我很快会回来的。

    此致

    戴尔

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

    您好!

    我需要做些什么来接收应代表传感器模拟值的数字数据。 即使没有配置设备、默认情况下、它也应该已经将模拟值转换为数字值、对吧?

    我是否需要写入32乘以0、表示"无操作"、等于"所有其他输入命令组合"命令。 或者、我是否必须提供一个读取/读取_HWORD 命令、之后跟随某种地址才能通过 ADC SDO-0接收数字数据?

    现在我要发送(1100 1000 0000 0010 0000 0000 0000 0000 0000 0000)、它表示 Read_HWORD、后跟 RANGE_SEL_REG 和16乘以0
    在执行该命令以读取范围和基准的配置后、我通过 DE SPI 发送32次0。
    我认为这会导致首先通过 SDI 发送读取命令、然后在接下来的32位通过 SDO 返回配置。 这种解释是否正确?

    我还尝试仅发送 READ_HWORD、因此 :1100 1000 0000 0000 0000 0000 0000 0000会发送到 SDI 并在我的示波器上可见。 这会产生一个恒定值、该值会发送回我的 Raspberry Pi (也可以在我的示波器上看到)、但当我将传感器输入值更改为3V 或0V 时不会改变

    仅执行 spiRead、因此不发送任何内容、而是仅接收看起来像随机数的结果

    此致、
    Dukel

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

    尊敬的 Dukel:

    您可以在不对寄存器进行任何编程的情况下获取转换数据、ADC 和内部寄存器在上电后具有如下的默认状态:

    输入范围:   ±3×VREF

    基准:     启用内部基准

    SDI_MODE:  00b =标准 SPI、CPOL = 0且 CPHASE = 0

    如果您使用内部电压基准、请检查 REFIO 和 REFCAP 上的电压以确保它们为4.096V。 在使/CS 为低电平后、您需要发送 SCLK 时钟来将数据移出到 SDO 线路、在 SDI 上写入0是将 SCLK 写入 ADC 的好方法。 检查 RVS 是否有输出、请参阅数据表中图3或图4中的 SCLK、RVS 和/CS。

    在您的测试中:

    • 当发送“(1100 1000 0000 0010 0000 0000 0000 0000 0000 0000)”(代表 READ_HWORD 后跟 RANGE_SEL_REG 和16乘以0)时,您将尝试读取 DEVICE_ID_REG 寄存器,因为您要发送的寄存器地址是0x02h, 非 range_SEL_REG 的地址,您正在读取 DEVICE_ID_REG 寄存器的16-31位(保留位和 Device_ADDR 位),从 ADC 读回的所有0值都是正确的。 您为所需的寄存器发送了错误的地址。  
    • 当您发送“Read_HWORD only,SO: 1100 1000 0000 0000 0000 0000 0000 0000”时,您正在读取 Device_ID_REG 寄存器的0-15位,这些位都是保留位,从 ADC 读回的所有0值也是正确的。

    如果在帧 F 中发出有效的 Read/Read_HWORD 命令、则帧(F+1)的输出数据字包含8位/16位寄存器数据、后跟0。 请注意、您只能在下一个帧(F+1)中获取寄存器数据、而不能在帧 F 中获取

    此致

    戴尔

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

    您好 Dale、

    感谢你的答复。 我发现自己做的不对。 对于 READ_HWORD 和 RANGE_SEL_REG、这是否正确:

    (14h = 20、以十进制表示)

    1100 1000 0001 0100 0000 0000 0000 0000 = 33567320   

    1100 1000 0010 1000 0000 0000 0000 0000 = 3358064640 (因为地址是9位、LSB 被忽略)

    用于读取位7-0 = 14h 的地址

    当发送/读取数据时、RV 将变为低电平、因此这种情况会很好。

    是什么。 内部基准不等于4.096。 我将为 AVDD 提供5V 电压、为 DVDD 提供3.3V 电压。 REFCAP - REFGND 上的电压波动一个位、为4.6V

    此致、
    Dukel

     

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

    尊敬的 Dukel:

    1100 1000 0001 0100 0000 0000 0000 0000是读取 Range_SEL_REG 寄存器位0-15的正确命令。

    REFIO 引脚上的电压是多少?

    谢谢。

    此致

    戴尔

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

    您好 Dale、

    当 REFCAP- REFGND 之间的电压等于4.65V 时、REFIO 和接地端的电压为4.55V。 REFIO 和接地端之间连接了一个4.7uF 电容器。

    通过 REFCAP 运行电压时、REFGND 相当稳定(4.61V)、但转换为数字信号的精度不是很高。 当我将输入信号接地时、十进制结果大约在130849和124349之间波动。 这接近2^18的一半、即262144/2 = 131072、但我希望它更接近、更稳定  

    此致、

    Dukel

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

    尊敬的 Dukel:

      当使用内部基准电压时、REFIO 上的电压应为4.096V、您的电路有问题、您能否向我发送原理图?

    此致

    戴尔

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

    当然、就是这样。 在 TINA-TI 中找不到 ADS8691的模型。

    此致、

    Dukel

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

    尊敬的 Dukel:

    如果这是您的真实原理图、则在加电后、在 REFIO 引脚上测量的电压肯定应该大约为4.096V (外部电源+5V、Raspberry Pi 3嵌入式系统开发板+3.3V)、它不应该是如上所述的4.55V。 能否使用新的 ADS8691器件替换 ADC?

    此致

    戴尔

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

    我有另一个 ADS8691、因此我将交换 ADC 并检查 REFIO 是否测量4.096V

    是否可以将1V 的外部基准连接到 ADS8691、或者是否必须为4.096V?

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

    尊敬的 Dukel:

    要实现数据表中指定的性能、必须使用4.096V 外部电压基准或使用内部4.096V 基准、请参阅数据表中的以下要求屏幕截图:

    请查看数据表以了解更多详细信息、谢谢。

    此致

    戴尔

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

    您好 Dale、

    我查看了数据表、但关于外部基准的部分有点令人困惑。 最大额定值表示 REFIO 可以介于-0.3V - 7V 之间。

    现在可以清楚地看到、使用外部基准时、输入只能为4.046 - 4.146V

    我交换了 ADC、这仅在 REFIO 上提供1V 或更低电压。 我自己焊接了它、并执行了导通性测试、以检查是否所有引脚都已连接、引脚之间是否没有电桥。  
    AVDD = 4.76V

    我测量了新旧 ADS891上多个引脚之间的电阻。

    很旧
    与 上面的电路一样连接(无电源)
    SCLK AGND 53.3千欧姆 25、3k Ω
    REFCAP REFGND 6.14 Mohm 120千欧姆
    REFIO REFGND 1.2兆欧 42k Ω
    未连接
    SCLK AGND 17兆欧 9兆欧
    REFCAP REFGND >20Mohm 0.250Mohm
    REFIO REFGND >20Mohm 0.225Mohm

    我不知道为什么这是不同的。 我对 ADC 非常谨慎。 在连接到电源之前、请始终对 ESD 保护进行预处理并进行连续性测试。
    您能看一下您得到的读数是多少?

    其他的事情没有按照计划进行。

    在发送带有 RANGE_SEL_REG 的 READ_HWORD (1100100000010100000000000011将输入范围设置为1.25*Vref)时,我希望在下一帧中接收到结果(000000000011000000000000),这也会得到。 请参见下图(蓝色表示时钟、黄色 SDI)。

    但当我读取传感器结果时,0或5伏的电压值仍与默认模式中的电压值相同(3个 Vref)

    此致  

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

    您好!

    绝对最大额定值表针对不会对器件造成任何损坏的电压/电流进行了指定。 为了使 ADC 正常工作并获得数据表中的指定性能、您必须使用电气特性中的建议条件、如果内部电压基准(精度或漂移)可以满足您的要求、则可以使用内部电压基准、这是 ADC 上电后的默认条件、 如果  要检查 REFIO 引脚、您将获得4.096V (对于 TSSOP 为4.095V~4.097V)测量结果、此外、 您还可以通过将 RANGE_SEL_REG 寄存器的 INTREF_DIS 位设置为1来使用外部电压基准、该位将禁用内部电压基准、 您在 REFIO 引脚上施加 的外部基准电压限制在4.046至4.146之间(通常建议使用独立的4.096V)。 请注意、AVDD 应为+5V、 并且应限制在4.75V 至5.25V 之间。

    确保以下检查正确(分步检查)后、我建议您可以通过对内部寄存器进行编程来更改 ADC 的配置:

    1.加电后使用内部电压基准,检查 REFIO 上的电压是否为4.096V

    2.在 AIN_P 上应用直流精密信号、向 ADC 发送控制信号并根据时序图1进行几次转换、根据图3或4中的时序读取转换代码、 检查 转换代码是否正确并与直流输入电压匹配、此测试将确保您的硬件连接和时序 正确。

    然后、使用您需要的配置对内部寄存 器进行编程、请使用我们在上面向您推荐的正确命令和地址。

    4.再次在 AIN_P 上应用直流精密信号、检查转换代码是否与您的配置相匹配、这将演示您的寄存器编程是否正确。

    此致

    戴尔

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

    您好 Dale、

    再次感谢您的帮助、我非常感谢您的帮助!
    两个多星期以来、我一直在尝试您的所有建议、但我每次都遇到很多问题。

    我已经多次检查了时序、应该是好的、因为我的 SDI 发回了我尝试配置的配置。

    如果我将寄存器设置为3*Vref 并且我为 range_SEL_REG 发出 READ_HWORD、则我接收32次0。 这是我根据数据表预期的原因前16位应包含配置设置、而其他16位应被忽略。

    当我通过发送 WRITE、RANGE_SEL_REG、INTEREF ENABLE 和0011将寄存器配置为1.25*Vref (对于最后4位)(1101000000101000000000000000000000000011)十进制数: 3492282371 (请检查)
    如果我再次为 RANGE_SEL_REG 发出 READ_HWORD、我将接收000000000011 0000000000000000这表示寄存器设置为1.25Vref、因为在前16位的末尾显示了11位、而第二16位都是0端被忽略、对吧? 但即使在这之后、结果也不会改变、比率也会保持不变。 如果我要将范围设置为较低的值,那么3*Vref 对于相同的电压,我应该得到较高的值,因为它更接近最大值。

    我知道 Vref 应该为4.096V、但当我向 AVDD 精确施加5V 电压时、REFCAP 会变得更高、因此我将 AVDD 降低至4.80V。

    我在 ADC 的几个引脚上为您提供了电阻、也许您可以为我提供它们应该是什么。
    我有两个相同的 ADC、它们都无法按照数据表的要求正常工作。

    此致

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

    尊敬的 Dukel:

    在对内部寄存器进行编程之前、我想 确保 器件和硬件正确无误、降低电源电压不是在 REFIO 或 REFCAP 上获得正确电压的好方法、使用  +5V AVDD 电源时、这些引脚上不应出现错误电压、  建议在该 ADC 上为 AVDD 使用+5V 电压、并且应在数据表中指定的 REFIO 或 REFCAP 引脚上观察到~4.096V 电压、因此肯定是不正确的、我们应首先进行修复。

    使用11010000001010000000000000000011对 RANGE_SEL_REG 寄存器进行命令编程是错误的、应为1101_0000_ 0001_0100_0000_0000_0000_0000_0011、我已在 您在本论坛上的另一个查询中检查并确认您对该 ADC 的写入命令、如下所示、请再次查看:

    e2e.ti.com/.../2512805

    我希望在寄存器编程之前和之后看到您的转换代码、这些转换代码具有相同的恒定直流输入信号。

    我不确定您是如何测量 REFIO/REFCAP 和 REFGND 之间的电阻的、这不是使用万用表进行测量的好方法。 我将与设计团队核实我们是否有任何电阻数据。

    此致

    戴尔

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

    您好 Dale、

    你之前确实给了我答案、所以我很惊讶它现在不起作用、但这正是我现在使用的方法。

    读数: 1100 1000 0001 0100 0000 0000 0000 0000
    用于写入:  1101 0000 0001 0100 0000 0000 0000 0011以设置 Vref*1.25 (查看我是否正在对配置进行绝对更改)

    我不再在工作、但我现在可以复制其中的大部分内容。

    //配置 ADC
    gpioWrite (CONVST、1);
    gpioDelay (0.0095);//tDEN_CSDO 9.5ns


    gpioWrite (CONVST、0);//拉低以启动数据传输帧
    gpioDelay (0.0095);//tDEN_CSDO 9.5ns

    //开始转换
    写入: 1101 0000 0001 0100 0000 0000 0000 0011 //设置配置

    //等待32位  
    gpioDelay (0.0175)   //tht_CKCS + tDZ_CSDO 17、5ns

    //结束转换
    gpioWrite (CONVST、1);//拉高以结束数据传输帧
    gpioDelay (0.0095);//tDEN_CSDO 9.5ns
    gpioDelay (0.665); //tconv 665ns

    此致、

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

    尊敬的 Dukel:

    您的写入命令这次是正确的。

    正如我在前面的文章中所述、在具有内部电压基准和+5V AVDD 的 REFCAP 和 REFIO 引脚上应观察到~4.096V 电压、因为您没有看到正确的基准电压、所以出现了一些(硬件)错误。

    对于 REFIO/REFCAP 引脚、该器件连接了内部开关电容器、因此您可能会看到不同的阻抗、尤其是在基于 ADC 代码的转换阶段、因此这不是一种测量检查的好方法、也不是一种指定的方法、因此未对其进行表征。

    感谢 Regads

    戴尔