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.

[参考译文] AM2434:AIN7处的 AM24x ADC0测量

Guru**** 2392905 points
Other Parts Discussed in Thread: AM2434

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1500190/am2434-am24x-adc0-measurement-at-ain7

器件型号:AM2434

工具/软件:

我们使用 Sitara AM2434 (ALV)运行设置、希望测量低电平信号。 我们使用 AIN4到 AIN7、AIN4和5可以正常工作、没有失调电压、但 AIN6具有很小的失调电压、AIN7相对于1.8V 基准的失调电压约为15mV。

我们断开了实际信号源、刚刚离开了一个820 Ω 电阻器从 AIN7连接到 GND。 采用此设置时、失调电压仍然存在。 在将电阻器短路后、ADC 的测量值实际为0mV。

我们测量了多个器件的相同行为。 根据设计、AIN7 (和 AIN6)的漏电流是否可能比其他 ADC 输入更高? 是否有必要更改 PCB 设计以使用另一个 AIN 测量低电平信号?

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

    您好 Robert Czech、

    感谢您的查询。

    您能否确认这是定制电路板。

    Unknown 说:
    我们断开了实际信号源、并留下了一个820 Ω 电阻器、从 AIN7连接到 GND。 采用此设置时、失调电压仍然存在。 在我们将电阻器短路后、ADC 的测量值实际为0mV。

    输入漏电流应小于10uA。  因此、在通过820欧姆电阻器将输入连接到 VSS 时、它们不应测量15mV 的电压。  当我们假设最坏情况下的输入泄漏电流为10uA 流经820欧姆电阻器时、他们应测量的最大值为 V = I * R = 10uA * 820欧姆= 8.2mV。

    如果820R 增加到1.5K 或2K、偏移是否会增加。

    以下是一些想法  

    我怀疑这是由其他原因造成的。  您能否 确认 ADC 时钟速率。  ADC 应以60MHz 运行。

    VDDA_ADC0、ADC0_VREFN 和 ADC0_VREFP 引脚是如何连接的?

    您能否分享原理图以进行快速检查。

    此致、

    Sreenivasa.

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

    您好 Kallikuppa Sreenivase、

    我检查了 ADC0的时钟源、实际上它仍然连接到 HFOSC0_CLKOUT、该时钟为25MHz (与寄存器默认值类似)。 我添加了将其设置为 MAIN_PLL1_HSDIV6_CLKOUT 的代码。  

    /* Set ADC clock source to PLL1_HSDIV6 */
            static const uint32_t CLK_SOURCE_PLL1_HSDIV6 = 0x1U;
            CSL_REG32_WR(CSL_CTRL_MMR0_CFG0_BASE + CSL_MAIN_CTRL_MMR_CFG0_LOCK2_KICK0, 0x68EF3490);
            CSL_REG32_WR(CSL_CTRL_MMR0_CFG0_BASE + CSL_MAIN_CTRL_MMR_CFG0_LOCK2_KICK1, 0xD172BC5A);
            CSL_REG32_WR(CSL_CTRL_MMR0_CFG0_BASE + CSL_MAIN_CTRL_MMR_CFG0_ADC0_CLKSEL, CLK_SOURCE_PLL1_HSDIV6);

    这改进了测量。 AIN6现在没有失调电压误差、但 AIN7在1.8V 基准下仍测量到6.8mV

    除了此次调查之外、我发现我们没有在代码中配置 PLL1、但如果我读出"时钟配置树工具"的所有寄存器、则 REF_DIV 在我们的器件中设置为5、该工具会将其标记为不正确。 您是否知道这是否是 AM2434的默认情况、在手册中、该值以1作为默认值给出。 或者您知道此 PLL1将设置在哪里? 这可以在 sys_firmware 部分中完成吗?

    在布局中、VDDA_ADC0和 ADC0_VREFP 均 连接到1.8V。 ADC_VREFN 连接到 GND (所有电压的通用 GND)。

    如果您向我发送电子邮件、我可能会将原理图的部分内容以屏幕截图的形式分享。

    我还将更改电阻器以检查行为并告诉您结果。

    此致、
    Robert Czech

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

    你好 Kallikuppa Sreenivasa,

    如果我将电阻器从820 Ω 更改为1k6 Ω(无任何信号的 AIN7至 GND)、仍然存在的6.8mV 失调电压会从~6.8mV 增加到~15.7mV。

    此致、
    Robert


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

    您好 Robert Czech

    感谢您的意见。

    我们的器件预计通道之间的偏移不会有所不同。

    AN7靠近任何其他引线或连接器、使该通道 易受 EOS 或任何其他事件的影响。

    我知道您在多个电路板上进行了测试。

    是否有方法可以在其中一块电路板上使用新器件进行测试?

    此致、

    Sreenivasa.

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

    你好 Kallikuppa Sreenivasa,

    我们现在发现 AIN7的最后一个问题:

    SDK 9.1 adc.h 中的注释具有误导性、驱动程序使用错误:

    /**
     * \brief   This API is used to initialize the ADC module.
     *
     * \param   baseAddr        Base Address of the ADC Registers.
     * \param   errCorrection   Error Correction is enabled if it is TRUE.
     *                          Error Correction is disabled if it is FALSE.
     * \param   errOffset       Write 0 to use internal calibration.
     *                          Write 1 to use EFUSE code.
     * \param   calibration     Writing 0 does not start internal calibration.
     *                          Writing 1 starts internal calibration.
     */
    void ADCInit(uint32_t baseAddr,
                 uint32_t errCorrection,
                 uint32_t errOffset,
                 uint32_t calibration);


    在我们的代码中、我们用以下命令调用了这个函数:

                uint32_t calibration = 1;
                uint32_t errOffset = 1;
                /* Do the internal calibration */
                ADCInit(adcBaseAdr_, FALSE, errOffset, calibration);


    但如果我们看一下 init 的实际实现:
    void ADCInit(uint32_t baseAddr,
                 uint32_t errCorrection,
                 uint32_t errOffset,
                 uint32_t calibration)
    {
        uint32_t initMask = 0x0U;
    
        /* Calculate mask used for ADC init */
        initMask = (calibration << ADC_MISC_AFE_SPARE_INPUT_SHIFT);
    
        /* ADC Initialization */
        HW_WR_FIELD32(baseAddr + ADC_MISC, ADC_MISC_AFE_SPARE_INPUT, initMask);
    }


    校准没有执行任何操作、但 spare_input 配置为0以外的值。

    使用调试器直接通过寄存器将该值设置回0后、偏移就会消失、所有 ADC 通道现在都在工作、没有任何偏移误差。

    除此之外、我们发现、PLL1设置的时钟树错误消息由 SysFW 配置、由 SDK 9.2的新 SysFW 修复  

    所以这个问题现在已经为我解决了。

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

    您好 Robert Czech

    很高兴听到问题得到解决、感谢您分享解决方案、非常感谢。

    此致、

    Sreenivasa.