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.
工具/软件:Code Composer Studio
我一直在开发基于28069 MCU 的数据采集硬件、发现12位 ADC 存在一些问题、想知道是否有人可以解释。
我的 ADC 配置:
AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1;//启用非重叠模式
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;//延迟中断脉冲
AdcRegs.INTSEL1N2.bit.INT1E = 1;//启用 ADCINT1
AdcRegs.INTSEL1N2.bit.INT1CONT = 1;//启用 ADCINT1连续模式
AdcRegs.INTSEL1N2.bit.INT2E = 1;//启用 ADCINT2
AdcRegs.INTSEL1N2.bit.INT2CONT = 1;//启用 ADCINT2连续模式
AdcRegs.INTSEL1N2.bit.INT1SEL = 0;//设置 EOC0以触发 ADCINT1触发
AdcRegs.INTSEL1N2.bit.INT2SEL = 1;//设置 EOC1以触发 ADCINT2触发
AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;//将 SOC0通道选择设置为 ADCINA0
AdcRegs.ADCSOC1CTL.bit.CHSEL = 8;//将 SOC1通道选择设置为 ADCINB0
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0;//在 cputimer1上设置 SOC0启动触发器,但最初关闭
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 0;//在 cputimer1上设置 SOC1启动触发器,但最初关闭
AdcRegs.ADCINTSOCSEL1.ALL = 0x0;
AdcRegs.ADCINTSOCSEL2.ALL = 0x0;
AdcRegs.ADCSOC0CTL.bit.ACQPS = 8;//将 SOC0 S/H 窗口设置为9个 ADC 时钟周期,
AdcRegs.ADCSOC1CTL.bit.ACQPS = 8;
1、不同的 SR 给出的 ADC 结果略有不同。
在大约一半的 Vref 提供输入时、我扫描了不同的 SR (100KHz 至3MHz)。 某些 SR 与正常的12位代码相差3-4 LSB。 不确定是否正常?
2.在较高的 SR (例如1.5MHz)下、我必须对两个通道都使用重叠、在这种情况下、通道 A 和 B 将相互影响。 例如、如果我打开或关闭其中一个通道、则另一个通道的 ADC 结果可能更高或更低。 因此、我必须使用非反向 LAP、且 ACQPS >7来消除这种情况、从而降低 SR。
3.当我测量小信号时,我可以观察到至少3-4LSB 的 ADC 结果不正确。 例如、我为 ADCIN 提供50mV 1KHz 正弦信号、该正弦信号以1024mV (Vref=2048mV)为中心、每当信号超过大约1024mV 的中值时、结果波形就像一个位(至少3-4 LSB)振荡、而不是波形平滑、然后变为正常。
4、当 SR = 2MHz 时、设置 ACQPS=6或7不起作用、结果波形变得相当糟糕、极大的失真。 但对于其他采样率来说、这是可以的、即使对于较高的 SR=3MHz 也是如此。 因此我设置 ACQPS=8、没关系。
ADC 是否存在这些已知问题? 还是由糟糕的布局造成的? 或者我的 ADC 配置不正确?
非常感谢有人能给我一些线索。
[引用用户="Wang Ning]1. 不同的 SR 会产生稍微不同的 ADC 结果。
在大约一半的 Vref 提供输入时、我扫描了不同的 SR (100KHz 至3MHz)。 某些 SR 与正常的12位代码相差3-4 LSB。 不确定是否正常?
这并不是普通的事。 不同的运行条件应该会产生小幅的结果变化。 总体性能应满足 数据表 规格。
[引用用户="Wang Ning]2. 在较高的 SR (例如1.5MHz)下、我必须对两个通道都使用重叠、在这种情况下、通道 A 和 B 将相互影响。 例如、如果我打开或关闭其中一个通道、则另一个通道的 ADC 结果可能更高或更低。 因此、我必须使用非反向 LAP、且 ACQPS >7来消除这种情况、从而降低 SR。
3.当我测量小信号时,我可以观察到至少3-4LSB 的 ADC 结果不正确。 例如、我为 ADCIN 提供50mV 1KHz 正弦信号、该正弦信号以1024mV (Vref=2048mV)为中心、每当信号超过大约1024mV 的中值时、结果波形就像一个位(至少3-4 LSB)振荡、而不是波形平滑、然后变为正常。
4、当 SR = 2MHz 时、设置 ACQPS=6或7不起作用、结果波形变得相当糟糕、极大的失真。 但对于其他采样率来说、这是可以的、即使对于较高的 SR=3MHz 也是如此。 因此我设置 ACQPS=8、这是可以的。[/QUERP]
确保您的输入信号得到适当调节(例如使用缓冲器)、以便它能够在 ACQPS 窗口内为 S/H 电容器完全充电。 从数据表中:
您还可以查看 已知 问题的勘误表。
我在 ADCIN 和运算放大器缓冲器之间有一个 RC 用于带限。 R = 50欧姆、C = 10nF。 您认为这是原因吗?
王宁
RC 截止可能会导致问题。 您需要将 RC 截止频率与 ACQPS 窗口内为 S/H 电容器充电所需的带宽相匹配。
请注意、每个 ADC 通道的组(A 和 B)只有一个 S/H 电容器、因此 S/H 电容器的启动电压与该组的最新转换值直接相关。
Tommy
因此 、RC = 50 Ω* 10nF = 0.5us、而 ACQPS 窗口= 10*(1/45MHz)= 0.2us。 RC Tau 应明显小于 ACQPS 窗口
我的理解是否正确? 如果是、我应该将 RC 滤波器放在缓冲器之前。
宁
宁
正确、假设缓冲器具有足够的带宽来响应 S/H 充电曲线、将 RC 滤波器放置在缓冲器的输入端应能提供更快的稳定时间。
如果缓冲器无法跟上 ACQPS 窗口的步伐、您还可以考虑更改 RC 值、以便电容器能够快速向 ADC 的 S/H 电容器提供大部分所需的电荷。 缓冲器将负责在采样之间对大电容器进行缓慢充电。 一个很好的尝试起点是~47nF。
Tommy
[引用 user="tlee"]
宁
正确、假设缓冲器具有足够的带宽来响应 S/H 充电曲线、将 RC 滤波器放置在缓冲器的输入端应能提供更快的稳定时间。
如果缓冲器无法跟上 ACQPS 窗口的步伐、您还可以考虑更改 RC 值、以便电容器能够快速向 ADC 的 S/H 电容器提供大部分所需的电荷。 缓冲器将负责在采样之间对大电容器进行缓慢充电。 一个很好的尝试起点是~47nF。
Tommy
[/报价]
另一个问题:
如果我在 ADC 运行期间修改 ADC 寄存器、这是否会成为问题?
我已经观察到、更改 nonVERLAP 位将导致 ADC 停止工作、结果寄存器中没有数据。 因此、在更新该位之前、我必须停止 ePWM SOC、然后重新启动 ePWM 计数、然后它工作正常。
是否需要复位 ADC 以更新 ADC 配置? 正如我看到的、如果我更改采样率或打开/关闭一个通道、数据会发生位改变。
另一个问题:
如果我在 ADC 运行期间修改 ADC 寄存器、这是否会成为问题?
我已经观察到、更改 nonVERLAP 位将导致 ADC 停止工作、结果寄存器中没有数据。 因此、在更新该位之前、我必须停止 ePWM SOC、然后重新启动 ePWM 计数、然后它工作正常。
是否需要复位 ADC 以更新 ADC 配置? 正如我看到的、如果我更改采样率或打开/关闭一个通道、数据会发生位改变。
宁
应避免在转换器处于活动状态时更改全局 ADC 设置。 如您所见、最简单的方法是禁用 ADC 触发器并在 ADC 空闲时更新设置。 无需重置。
如果修改的 SOC 没有待处理的触发器、则可以更新 SoC。
Tommy