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.

[参考译文] MSP432P401R:MSP432P401R Launchpad 不稳定的 ADC 读取问题。

Guru**** 2564220 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/605792/msp432p401r-msp432p401r-launchpad-unstable-adc-reading-issue

器件型号:MSP432P401R

大家好、

我正在尝试使用 PT100 RTD 和 msp432p401r launchpad 来实现温度传感器。 为了感测 RTD 上的电压、我使用了由运算放大器构建的电压跟随器。 我当前面临的问题是 ADC 读数不一致。

下面列出了 ADC 设置、

1:ADC 转换启动每10ms 触发一次。

ADC 设为14位、ADC 时钟频率为48MHz/6=8MHz、采样保持时间为128位、约为21.33us。

ADC 的电压基准为1.2V。

我尝试读取 ADC 结果20次、并将其存储在数组中。 我发现最大值和最小值之间的差值大于100、这表示大约7mV 的电压差。

我的问题是、是否有任何方法可以减少不一致性?  

此致、

David

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

    您能否分享您拥有的外部电压跟随器电路原理图、PTD 的输出电压范围?

    如果您提供恒定直流电压、则不使用电压跟随器的输出、结果是什么? 还请分享您正在使用的程序代码?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您只是偶尔读取一次读数、则可以放入 RC 滤波器以使读数变得平滑。

    虽然您的20个读数的最大-最小值可能是100、但标准偏差是多少? 您能否将运行平均值保持在20个读数中?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amit、您好!

    感谢您的回复。

    随附了电压跟随器的原理图。 输出电压范围约为100mV~400mV。 我用万用表测试了输出电压、非常稳定。

    起初、我没有使用电压跟随器进行缓冲。 我认为不稳定的读数可能与分压器的阻抗有关。 但是、在我添加电压跟随器后、它没有太大帮助。 我想可能我没有正确设置控制器。

    用于设置 ADC 外设的代码是、

    ADC14->CTL0 &=~(ADC14_CTL0_ENC);
    
    /*将基准电压设置为1.2V 并启用基准*/
    Ref_A_setReferenceVoltage (REF_A_VREF1_2V);
    Ref_a_enableReferenceVoltage();
    Ref_a_enableReferenceVoltageOutput();
    
    ADC14->CTL0 |= ADC14_CTL0_SHP;
    ADC14->CTL0 |= ADC14_CTL0_DIV_8;
    ADC14->CTL0 |= ADC14_CTL0_ssel_3;
    ADC14->CTL0 |= ADC14_CTL0_CONSEQ_1;
    ADC14->CTL0 |= ADC14_CTL0_SHT1__128;
    ADC14->CTL0 |= ADC14_CTL0_SHT1__128;
    ADC14->CTL0 |= ADC14_CTL0_MSC;
    
    ADC14->CTL0 |= ADC14_CTL0_ON;
    
    // A0 ADC 输入选择、P5.5;Vref=1.2V
    ADC14->MCTL[0]|= ADC14_MCTLN_INCH_0;
    ADC14->MCTL[0]|= ADC14_MCTLN_VRSEL_1; 

    此致、
    David
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您为何要启用基准电压输出?

    '将基准电压输出到输出引脚。
    此函数用于将生成的基准电压输出到输出引脚。 请
    请注意、输出引脚特定于器件。 请注意、为 ADC12模块提供对的控制
    REF 模块、基准电压作为引脚输出的状态取决于控件
    模块的功能。 请注意、如果 REF_A_isRefGenBusy ()返回 REF_A_BUSY、则此"

    您是否将其用于其他用途? 如果没有、是否有任何东西连接到该引脚?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Jian:

    感谢您提供布线原理图。 遗憾的是、DMM 的采样率非常低、因此万用表可能无法检测到任何快速移动信号。 您是否尝试将恒压源连接到 P5.5引脚?

    此外、您还使用直接寄存器访问而不是 driverlib 函数(必然会出现一些问题、例如 ADC14_CTL0_SHT1__128正在设置两次)。 相反、您必须为您的样本所在的 MEM0设置 ADC14_CTL0_SHT0___128。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Keith、

    我不确定100个差值是否为标准差。

    我将20个读数从小到大进行排序、并将中间的10个读数平均进行排序。 但是、我仍然无法获得满意的结果。 我每隔1秒尝试比较平均结果。 它仍然不是很稳定。

    我尝试使用截止频率为1Hz 的 RC 滤波器。 这没用。 实际上、ADC 输入端的电压非常稳定。

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

    为了获得我提到的测试结果、基准引脚上没有连接。

    我想 LaunchPad 的3.3V 电压可能不是很稳定。 因此、我想使用基准电压作为分压器的电源。 这可能会给我带来更好的结果。

    此致、
    David
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我非常确定基准输出是缓冲的、因此应该可以。 但是、如果您在引脚上放置滤波器、并且 DMM 没有变化、那么3.3变化似乎不太可能成为问题。

    您可能会看到50Hz / 60Hz 电力线干扰、处于直流模式的 DMM 在滤除时非常适合使用 DMM 测量交流电压。

    您是否曾尝试绘制20个样片(或更多!) 看看是否有像正弦波这样的模式?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amit、您好!

    感谢您处理该错误、我已更改了该错误。

    我拥有的恒定电压源是 LM336 2.5V 电压基准。 我将 ADC 基准更改为 AVCC 3.3V。 最小值和最大值之间的差值约为20。 这确实会减小差异。

    我想我会尝试构建具有不同截止频率的低通滤波器。

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

    我的样本显示随机模式。 我将尝试添加更多筛选器、看看结果是什么。

    此致、
    David