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.

[参考译文] TMS320F28377D:ADC 测量中的随机噪声

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1116847/tms320f28377d-random-noise-in-adc-measurements

器件型号:TMS320F28377D
主题中讨论的其他器件:TMS320F28379DLMV844REF3030THS4531

我们在自己的 PCB 上使用 F28377DPTPV 芯片、并且遇到 ADC 测量问题。

问题在于、当测量1.5V 左右的信号时、ADC 测量在某些样本中具有随机噪声。

要诊断问题:

  • 我们将测量1.5V 的恒定信号。
  • 我们在 ADCD 中仅使用 SOC0。
  • 我们将以大约300us 的恒定间隔触发测量。
  • 我们仅通过 SW 触发测量。
  • 我们使用 DAC 输出测量的信号、并使用示波器实时比较输入和输出。
    • 正如示波器测量的那样、输入引脚中的电压完全恒定。
    • DAC 不是问题、因为我们测试了一个恒定值、它的工作精度很高。

我们已经测试了多个采样保持比例因子。 在所有这些器件中、噪声都是类似的。

我们还在输入引脚中测试了多个电阻和电容器:输入信号失真非常小、但具有较高和中等值(当前为680欧姆、100nF)时、输入信号不失真、但测量仍有噪声。 我们的输入电路如下:电压跟随器->电阻->输入引脚56 (PTP 格式、ADCIN0)+电容接地。

我们认为这不是一个硬件问题、因为我们还在 Launchpad XL TMS320F28379D v2.0上进行了测试、结果类似。

在下面、我包含一个使用示波器拍摄的图像、其中 C2是 ADC 输入引脚中的信号、C1是 DAC 输出引脚中的信号。

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

    Anton、

    您能评论一下您的设置中 ADC 是处于16位模式还是12位模式吗?  我尝试将您看到的噪声与 ADC 的某个水平相关联、而不是仅将原始电压误差相关联。  它看起来与示波器图中的+/-30mV 相似。

    您能否为您用于电压跟随器的运算放大器提供 PN、以便我也可以查看其规格?

    最棒的

    Matthew

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

    您好、Matthew、

    我们使用12位模式。

    用于电压跟随器的运算放大器是 LMV844。

    此致、

    安东

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

    Anton、

    很抱歉、我方面的延迟、我需要更多时间来研究这一点。  我将尽最大努力在明天,也就是15日之前作出答复。

    最棒的

    Matthew

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

    Anton、

    您是在系统中使用 ADC 的内部基准还是外部基准。  如果我可以正确地回忆一下、对于12位模式、我们可以使用内部或外部模式;在上述情况下、您曾经使用过的参考模式、您是否可以切换到另一种模式并查看其是否有任何影响。

    此外、您是否能够读取 ADC 结果值并看到相同的行为?  在本例中、了解通过 BUFDAC 实现这一点对于调试很有帮助、但我想确保我们不会处理 BUFDAC 上的一些噪声与 ADC 采样噪声。

    最棒的

    Matthew

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

    您好、Matthew、

    我们使用的是外部基准。 我已经查看了数据表、我认为无法使用内部基准。

    我们使用的外部基准电路基于技术参考手册(第11.15.4章设计外部基准电路)中的基准电路:

    我们使用 REF3030、LMV844、Rx = 0.1Ω Ω、Cx = 22uF。 VREFLOx 直接接地。

    此外、REF3030输出端还有一个100nF 电容器接地。

    通过使用调试模式、我们可以在 ADC 值上看到相同的行为。 在下面、我附加一个从 CCS 中的调试图中获取的图像。

    此致、

    安东

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

    您好、Matthew、

    问题是否可能来自 ADC 配置错误?

    我们正在尝试、找不到任何可以解决该问题的方法。

    此致、

    安东

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

    Anton、

    您能否共享 ADC 设置代码、以及 ADC 的触发方式(如适用)、即 PWM 或 SW 等   

    代码可能会回答以下问题、但是否有多个 ADC 与上述通道同时激活/采样?

    最棒的

    Matthew

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

    您好、Matthew、

    我们由 SW 触发 ADC、在 ADCD 中仅由 SOC0触发。

    下面是我们用于 ADC 的配置代码:

    void ConfigureADC(void)
    {
        EALLOW;
    
        /*
         * write configuration ADCIND
         */
        AdcdRegs.ADCCTL2.bit.PRESCALE = 6; //set ADCCLK divider to /4
        AdcSetMode(ADC_ADCD, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
    
        //Set pulse positions to late
        AdcdRegs.ADCCTL1.bit.INTPULSEPOS = 1;
        //power up the ADCs
        AdcdRegs.ADCCTL1.bit.ADCPWDNZ = 1;
        //delay for 1ms to allow ADC time to power up
        DELAY_US(1000);
    
        //Select the channels to convert and end of conversion flag
        AdcdRegs.ADCSOC0CTL.bit.CHSEL = 0;  //SOC0 will convert pin D0
        AdcdRegs.ADCSOC0CTL.bit.ACQPS = 99; //sample window is 99 + 1 SYSCLK cycles (minimum 75ns)
    
        AdcdRegs.ADCINTSEL1N2.bit.INT2SEL = 0; //end of SOC0 will set INT2 flag
        AdcdRegs.ADCINTSEL1N2.bit.INT2E = 1;   //enable INT2 flag
        AdcdRegs.ADCINTFLGCLR.bit.ADCINT2 = 1; //make sure INT2 flag is cleared
    
        EDIS;
    }

    这里是测量的代码。 此代码位于每200us 运行一次的 CPU 定时器中断内。

            // launch and measure channel Ir convert, wait for completion, and store results
            //start conversions immediately via software, ADCD
            AdcdRegs.ADCSOCFRC1.all = 0x0001; //SOC0
    
            //wait for ADCD to complete, then acknowledge flag
            while(AdcdRegs.ADCINTFLG.bit.ADCINT2 == 0);
            AdcdRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;
    
            //store results
            ADCD0result = AdcdResultRegs.ADCRESULT0;
            DacbRegs.DACVALS.all=AdcdResultRegs.ADCRESULT0; // debugadc: adc measurement to dac

    此致、

    安东

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

    Anton、

    我认为代码看起来正常、我仍在通过采样网络。

    是否可以稍微更改代码以将2个输入信号样本带回位;即、像设置 ADCSOC0CTL 一样设置 ADCSOC1CTL。 您需要将 ADC 中断移至 SOC1。  然后将0x0003写入 ADCSOCFRC1寄存器。  当 ISR 到来时、使用 ADCRESULT1值并查看噪声是否仍然存在?

    如果你有足够的缓冲空间、你可以记录这两个缓冲空间来并排比较 ADCRESULT0/1。

    最棒的

    Matthew

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

    您好、Matthew、

    我更改了代码、以便在两个引脚中使用相同的常量值从 SOC0和 SOC1中连续获取测量结果。

    信号看起来不同、但也有噪声。

    以下是同时获取的结果:

    • SOC0:
    • SOC1:

    此致、

    Antón μ A

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

    您好、Matthew、

    我再次检查该程序、并意识到在我的上一篇文章中、我测量的是连接到 SOC0和 SOC1中相同直流值的两个不同引脚。

    我已更改配置、以便从同一输入引脚在 SOC0和 SOC1中进行测量。 现在、即使大多数噪声测量位于不同的位置、信号看起来也更加相似。 在以下图像中、两个图形位于相同位置的样本会背靠背、从一个样本采集到下一个样本、则为200us。

    SOC0:

    SOC1:

    此致、

    安东

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

    Anton、

    感谢您进行本实验。  我不认为问题与内部 S/H 电容器的稳定时间有关、因为双采样通常有助于解决这些问题、因为电容器"预充电"的第2个采样的值相同。  

    这也符合您之前的观察、即更改 ACQPS 似乎没有帮助。

    我想看看该噪声是否在不同的输入电压下持续存在、是否可以将强制电压更改为0.5V 和2.5V 的值。  我想离开转换器的中心点、看看这是否会改变任何噪声。

    此外、我相信您曾提到过更改运算放大器输出端的电容;您是否也尝试更改电阻器?  680欧姆是相当大的值;不确定您是否尝试过更小的东西?

    最棒的

    Matthew

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

    Matthew、您好!

    很抱歉我的回答延迟。

    我现在尝试使用0.5V 和2.5V、结果与噪声方面的1.5V 非常相似。

    以下是这两种情况的一些图像:

    0.5V:

    2.5V:

    关于电阻器、我记得先有一个较小的电阻器、然后对其进行更改、但我不记得确切的情况、因此我们将再次进行测试。

    此致、

    安东

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

    Matthew、您好!

    我们将运算放大器输出端的电阻器从680欧姆更改为56欧姆、结果不好。

    我们仍然有随机峰值、但现在基线测量的噪声更大。

    是否有可能通过 SW 的硬件代替来触发测量来解决此问题? 还是完全不相关? 该项目处于高级阶段、因此我们愿意尝试任何可能的解决方案。

    此致、

    安东

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

    Anton、

    我需要几天的时间来回答、 我在周四之前不上班。  我还想在该线程中添加一些其他内容。   当我回到办公室时、我会尽力答复。  

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

    尊敬的 Anton:

    对迟交的反应表示真诚的道歉。 想知道您是在寻找解决方案还是已经解决了问题?

    谢谢、此致、

    桑托什

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

    您好 Santosh、

    感谢您再次与我们联系。

    作为一种临时解决方案、我们每次采集3个样本并使用中值。 然而,我们仍在寻求解决这个问题的办法,以便找到一个更方便的永久性解决办法。

    此致、

    安东

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

    你好。

    您是否看到与此主题中的视频类似的行为?

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1158649/tms320f28388d-strong-oscillation-noise-on-adcinb3-and-adcind3/4356675#4356675

    此致

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

    您好、Pak、

    不、我认为这是不同的。

    在本例中、我们在单个样本上有尖峰(上升或下降)。 在视频中、我可以看到更像是周期性重复的噪声。

    此致

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

    Anton、

    很抱歉、由于 TI 方面没有就此问题提供通信、我们在内部进行了讨论、但没有回复。  回到开头、这可能来自2个噪声源;或者来自目标通道上的主 S/H 电容器、或者如果在转换时外部基准发生一些扰动。

    正如您提到的、您还可以在 LaunchPad 上看到这一点、因为这是我们的设计等、因此应将基准电路从公式中取出

    ADC 结果的噪声量为~40LSB 或~29mV、正如您指出的、我们应该在输入波形/示波器图上看到这一点。

    您看到的噪声幅度与模拟输入的引脚电平无关、双采样不会"过滤"该噪声。

    我还有其他一些问题:

    • 确认任何其他 ADC (A/B/C)未采样、或者如果采样、它们与上面 ADC D 上的采样一致
      • 如果其他 ADC 未使用、您能否确保它们在软件中被禁用、以查看这是否有任何影响
    • 在与上述相同的转换过程中是否可以对 VREFHID/VREFLOD 引脚进行示波?
    • 您之前提到过代码使用、是否可以创建一个在采样期间具有最少软件活动的简单测试?
    • 与上述情况相关、C2000附近是否有任何(引脚或 PCB 走线) GPIO 活动?

    最棒的

    Matthew

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

    Matthew、您好!

    关于您的问题:
    我们不使用任何其他 ADC (A/B/C)。 仅 ADCD。
    我们不配置除 ADCD 之外的任何 ADC。 我不知道是否有明确禁用其他 ADC 的方法。

    根据您的建议、我们完成了以下测试:

    测试1. 禁用除 ADCD 和2个 DAC 之外的所有 I/O 活动。 注释大多数与测量无关的代码。 使用释放模式并断开调试电缆与计算机的连接。 我们正在测量:

    • ADCD0 (C1、黄色)、被连接至恒定1.5V
    • ADCD1 (C3、红色)、被连接至恒定1.5V
    • VREFHID (C4、蓝色)、大约3.005V
    • VREFLOD (C2、绿色)约为0.002V

    我们可以在 ADCD0和 ADCD1上看到与测量时始终相同的尖峰。

    VREFHID 和 VREFLOD 具有低噪声、它们之间存在一些相关性、我们可以在放大的示波器上看到这一点。

    测试2. 禁用除 ADCD 之外的所有 I/O 活动。 注释大多数与测量无关的代码。 使用调试模式。 我们正在测量:

    • ADCD0、被连接至恒定1.5V
    • ADCD1、被连接至恒定1.5V
    • VREFHID (C4、蓝色)、大约3.005V
    • VREFLOD (C2、绿色)约为0V

    结果与之前的测试完全相同。

    我们在前面的测试中使用了自己的硬件。 从开始、我们已在 launchpad 上测试了 C2000 SDK 随附的示例 ADC_ex1_SoC_software。 该程序已被修改、仅用于连续采集样本并将其存储在数组中。 我们在内置3.3V 和 GND 之间使用了分压器、以在 ADC 引脚上创建恒定电压。

    我们观察到高水平的基极噪声、但几乎没有其他测试中的尖峰。 大约1 in 3000测量值与该值非常不一致、而在我们的硬件中、我们发现每100次测量有1次错误。
    在本示例中、这是我们应该在 LaunchPad 中看到的行为吗?

    此致

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

    Anton、

    正如您提到的、ADCIN 衍生形式的电压总线将有一些固有的噪声电源耦合到它、这使得 ADC 结果具有一些基线噪声、但我们也有尖峰进入。

    我将更仔细地查看问题中的引脚、并希望在此验证更多方面:

    1) D0/D1也与比较器7共用输入。  我想确保它是关闭的(如果您根本不配置它、它应该从复位状态关闭)

    2)您能否更改代码以使用 A0/A1/B1作为采样通道、然后使用内部 DAC 来驱动引脚上的电压?  这将为我们提供一个已知良好的参考、以在两个平台上进行采样

    3)我建议将电压馈入 THS4531、但我认为#2将在这里实现我所需的、而无需将信号重新接线/路由到该放大器(它也是差分放大器、因此这将有点卷积以采样 SE)。  只是想说明一下、以防它给您任何想法

    4)我们一直关注 VREFHI、如果您可以为其中一个运行在 VDDA 上放置一个示波器、只是为了确认电源上没有会很好的奇数尖峰。  DS 定义的条件是 VREFHI 不能大于 VDDA。  这两种电路板上都不应该出现、但至少对于 LP、我知道我们将电源调节为3.3V、因此不应该出现这种情况;但值得检查。

    5)我知道我们限制了数字活动、但希望确保代码中的某个位置未启用 XCLKOUT。

    最棒的

    Matthew