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.
我们在自己的 PCB 上使用 F28377DPTPV 芯片、并且遇到 ADC 测量问题。
问题在于、当测量1.5V 左右的信号时、ADC 测量在某些样本中具有随机噪声。
要诊断问题:
我们已经测试了多个采样保持比例因子。 在所有这些器件中、噪声都是类似的。
我们还在输入引脚中测试了多个电阻和电容器:输入信号失真非常小、但具有较高和中等值(当前为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中连续获取测量结果。
信号看起来不同、但也有噪声。
以下是同时获取的结果:
此致、
Antón μ A
您好、Matthew、
我再次检查该程序、并意识到在我的上一篇文章中、我测量的是连接到 SOC0和 SOC1中相同直流值的两个不同引脚。
我已更改配置、以便从同一输入引脚在 SOC0和 SOC1中进行测量。 现在、即使大多数噪声测量位于不同的位置、信号看起来也更加相似。 在以下图像中、两个图形位于相同位置的样本会背靠背、从一个样本采集到下一个样本、则为200us。
SOC0:
SOC1:
此致、
安东
Anton、
感谢您进行本实验。 我不认为问题与内部 S/H 电容器的稳定时间有关、因为双采样通常有助于解决这些问题、因为电容器"预充电"的第2个采样的值相同。
这也符合您之前的观察、即更改 ACQPS 似乎没有帮助。
我想看看该噪声是否在不同的输入电压下持续存在、是否可以将强制电压更改为0.5V 和2.5V 的值。 我想离开转换器的中心点、看看这是否会改变任何噪声。
此外、我相信您曾提到过更改运算放大器输出端的电容;您是否也尝试更改电阻器? 680欧姆是相当大的值;不确定您是否尝试过更小的东西?
最棒的
Matthew
Anton、
我需要几天的时间来回答、 我在周四之前不上班。 我还想在该线程中添加一些其他内容。 当我回到办公室时、我会尽力答复。
尊敬的 Anton:
对迟交的反应表示真诚的道歉。 想知道您是在寻找解决方案还是已经解决了问题?
谢谢、此致、
桑托什
你好。
您是否看到与此主题中的视频类似的行为?
此致
您好、Pak、
不、我认为这是不同的。
在本例中、我们在单个样本上有尖峰(上升或下降)。 在视频中、我可以看到更像是周期性重复的噪声。
此致
Anton、
很抱歉、由于 TI 方面没有就此问题提供通信、我们在内部进行了讨论、但没有回复。 回到开头、这可能来自2个噪声源;或者来自目标通道上的主 S/H 电容器、或者如果在转换时外部基准发生一些扰动。
正如您提到的、您还可以在 LaunchPad 上看到这一点、因为这是我们的设计等、因此应将基准电路从公式中取出
ADC 结果的噪声量为~40LSB 或~29mV、正如您指出的、我们应该在输入波形/示波器图上看到这一点。
您看到的噪声幅度与模拟输入的引脚电平无关、双采样不会"过滤"该噪声。
我还有其他一些问题:
最棒的
Matthew
Matthew、您好!
关于您的问题:
我们不使用任何其他 ADC (A/B/C)。 仅 ADCD。
我们不配置除 ADCD 之外的任何 ADC。 我不知道是否有明确禁用其他 ADC 的方法。
根据您的建议、我们完成了以下测试:
测试1. 禁用除 ADCD 和2个 DAC 之外的所有 I/O 活动。 注释大多数与测量无关的代码。 使用释放模式并断开调试电缆与计算机的连接。 我们正在测量:
我们可以在 ADCD0和 ADCD1上看到与测量时始终相同的尖峰。
VREFHID 和 VREFLOD 具有低噪声、它们之间存在一些相关性、我们可以在放大的示波器上看到这一点。
测试2. 禁用除 ADCD 之外的所有 I/O 活动。 注释大多数与测量无关的代码。 使用调试模式。 我们正在测量:
结果与之前的测试完全相同。
我们在前面的测试中使用了自己的硬件。 从开始、我们已在 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