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.

[参考译文] MSP430I2041:A/D 通道之间的串扰非常严重

Guru**** 2587365 points
Other Parts Discussed in Thread: MSP430I2041

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/842450/msp430i2041-nasty-crosstalk-between-a-d-channels

器件型号:MSP430I2041

我已经制作了一个包含 MSP430i2041的实验电路板
用于测试的芯片。  我使用驱动前3个 A/D 通道
电位器、我将第4个通道的输入都接地。

一切都正常、但两者之间存在巨大的串扰
通道。  改变任何通道可能会影响其他通道
20%!  有什么想法为什么会发生这种情况?  实验
电路板未采用任何方式进行屏蔽或保护、但它们很低
以及我们所讨论的直流输入。  我会的
通道之间的串扰为零(这是我看到的
与 ST Micro A/D 转换器的测试设置类似)。

请注意、我还尝试使用四个 A/D 通道中的三个
(第4个通道仍然接地)、第3个通道为
主通道。  没有区别。  欢迎所有意见。  我的代码
如下所示:

//初始化 A/D 转换器
SD24CTL   = SD24REFS;      //使用内部电压基准
SD24CCTL0 |= SD24GRP | SD24DF;   //通道#0与最后一个通道分组
SD24CCTL1 |= SD24GRP | SD24DF;   //通道#1与最后一个通道分组
SD24CCTL2 |= SD24GRP | SD24DF;   //通道#2与最后一个通道分组
SD24CCTL3 |= SD24IE | SD24DF;   //通道#3主通道
SD24CCTL3 |= SD24OSR_128;   //将过采样率设置为128
SD24CCTL3 |= SD24SC;      //开始转换

_interrupt void SD24_ISR (void)

SACOUNt16 = SD24MEM0;      //获取通道#0 16位结果
TVCOUNt16 = SD24MEM1;      //获取通道#1 16位结果
BVCount16 = SD24MEM2;      //获取通道#2 16位结果
Extra16  = SD24MEM3;      //获取通道#3 16位结果



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

    您好、user6131995、

    数据表中显示了转换器之间的串扰(典型值-120dB)、但结果是意外的。

    我们正在研究这个问题、但您能帮我澄清几点吗?

    -您好像在等待第4次转换(SD24INTDLY=0),对吗?

    -您使用的是 TI 电路板还是您自己的电路板?

    -当您说串扰~20%时、这是否超过16位的结果?

    您有任何屏幕截图吗?

    出于好奇、您是否在多次转换和/或不同 OSR 后获得了相似的结果?

    此致、

    Luis R

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

    >您好像在等待第4次转换(SD24INTDLY=0)

    您是否向后看?  我认为 SD24INTDLY=0意味着这一点
    我没有等待第4次转换。  无论如何、我没有
    位被置位、因为我正在运行持续转换直到结束
    因此我不关心前3个问题是否正确。  嗯、也许我不会
    完全正确理解 SD24INTDLY? :-)  

    我的理解是、对于128的 OSR、模数转换器
    平均128个样本。  如果 SD24INTDLY=0、则取128
    采样并对其求平均值、然后以向我报告结果
    中断。  如果 SD24INTDLY=1、那么它将获取131个样本、然后
    对样本4到131求平均值并将结果报告给我。  我认为
    无论我使用的是 SD24INTDLY、这种 SD24INTDLY 行为都是相同的
    单次转换或连续转换(在后一种情况下、
    延迟是不必要和浪费的)。  我弄错了吗?

    >在多次转换和/或之后是否获得相似的结果
    >不同的 OSR?

     我正在运行连续转换、是的、这就是我要做的
    多个通道。 :-) 并且我得到了类似的结果
    OSR。

    这是一个自制板、而不是 TI、没有屏幕截图;
    模数转换结果通过串行数据流输出。

    好的、下面是一些新信息:

    首先、我忘记告诉您一些可能非常重要的事情、
    也就是说、我的三个模拟输入都有一个通用基准
    (接地)。  我将这个公共接地连接到 A0 -和 A1 -
    和 A2 -并且未连接到任何其他设备。  (AVSS 已连接
    数字接地、但两者都未连接到公共接地
    模拟信号。)

    第二、我驱动这个东西太困难了。  使用进行测试
    示波器显示我无法实现数据包速率
    我需要(每秒5000个数据包)的连续 A/D 转换。
    我必须切换到单次转换(全部三次转换中的一个
    通道同时触发)、每次都由该计时器触发
    何时发送新的数据包。  因此、I
    将让计时器告诉我何时开始模数转换、以及
    让模数转换器 ISR 告诉我何时发送数据包。
    这应该可以正常工作、因为我愿意降低 OSR 直至
    我可以支持我需要的数据包速率。

    此外,我还应提及我的理由
    这个芯片的马力是它的"增强型"UART
    不理解标准的9位数据字符、因此我必须这样做
    输出数据包位移动(500、000波特)。  这个芯片
    我的工作将非常繁忙。 :-)

    -eNick


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

    您好、Nick、

    以下几点:

    [引用 user6131995]我认为 SD24INTDLY=0意味着这一点
    我没有等待第4次转换。[/引述]

    这有点令人困惑、但 SD24INTDLY=0 意味着您正在等待第4次转换开始生成转换中断:

    这通常在您启动 ADC 或修改 SD24INCTLx 寄存器(如上所述)时使用、以减少误差并提供更好的精度。

    [引用 user6131995]我的理解是、对于一个128的 OSR、模数转换器
    平均128个样本。  如果 SD24INTDLY=0、则取128
    采样并对其求平均值、然后以向我报告结果
    中断。  如果 SD24INTDLY=1、那么它将获取131个样本、然后
    对样本4到131求平均值并将结果报告给我。  我认为
    无论我使用的是 SD24INTDLY、这种 SD24INTDLY 行为都是相同的
    单次转换或连续转换(在后一种情况下、
    延迟是不必要和浪费的)。  我是否有这种错误?

    OSR (过采样率)定义为调制器频率与采样频率之比:

    因此、OSR 并不定义样本数量、而是定义每次采样之间的时间。 OSR 越高、样本之间的时间(或调制时钟周期)就越长。

    当 SD24INTDLY=0时、您将在 第4次转换后收到转换中断、直到您停止采样。 OSR 不会定义您将采集的样本数。

    [报价 USER="user6131995">多次 转换后是否获得类似结果[/QUERP]

    假设在启动后触发转换中断(SD24INTDLY=0)之前等待4次转换、是的、那么在多次转换后应该会得到类似的结果。  

    [报价用户="user6131995">OSR 不同?

    不同的 OSR 都应该为您提供相似的结果、但通常较高的 OSR 将提供更好的精度并降低结果中的噪声。

    关于最初的串扰问题:

    我想知道您的电路中是否可能存在改变共模电压并使其看起来像串扰。 一些可能值得尝试的测试:

    1.您是否能够将接地的 ADC 通道连接到 AVSS? 这可能值得测试。

    2.您能否将其中一个 ADC 通道的正极和负极端子短接在一起、并查看该通道是否仍然存在与以前相同的串扰?

    谢谢、

    Mitch

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

    >SD24INTDLY=0表示等待第4次转换

     我认为这只是一个文档错误!  看起来完全一样
    对我来说,但我相信你。 :-) 除了这一点
    仅影响精度、而不影响"串扰"。


    > OSR (过采样率)定义为的比率

     好的、我承认我不知道这意味着什么、我希望我从不需要。  这是
    我的第一个 Δ-Σ 转换器。  我的团队中还有其他成员会很高兴
    绝对精度。  (无论如何、我们只需要一个诚实的12位)。


    >您是否能够将接地的 ADC 通道连接到 AVSS? 这可能值得测试。

     第4个通道的输入短接在一起、并连接到 AVSS 和 DVSS。
    (同样、前三个通道具有公共连接、但未连接
    除 Ax 之外的任何其他器项。)


    >您能否将其中一个 ADC 通道的正负端子短接在一起
    >并查看该通道是否仍然存在与以前相同的串扰?

     好主意!  好的、我用回形针短接了三个活动通道中的每一个
    它们的读数受其他通道的影响。  但是、当我放置时
    通道上的相对高阻抗 DVM、该通道的 A/D 结果是肯定的
    受到其他通道上输入的严重影响、但 DVM 显示没有变化
    通道输入上的电压(从而使我的虚拟电位计设置变差?)。


     无论如何、这个 MSP430i2041没有足够的马力来完成我最初的任务
    因此我重新排列了代码、以便我只有一个中断服务
    例程。  现在、我有一个计时器中断、用于启动单次 A/D 转换(设置)、然后
    设置一个标志、告诉我的主程序循环何时发送另一个数据包。  时间
    主循环看到该标志、它等待 A/D 转换完成、然后
    然后读取通道值并以串行数据包的形式传输。  就是这样
    我的"串话"问题没有改善。  下面显示的是我的相关代码:

    //初始化 A/D 转换器
    SD24CTL   = SD24REFS;                   //使用内部电压基准
    SD24CCTL0 |= SD24SNGL | SD24GRP | SD24DF | SD24OSR_32;      //通道#0与下一个通道和二进制补码分组
    SD24CCTL1 |= SD24SNGL | SD24GRP | SD24DF | SD24OSR_32;      //通道#1与下一个通道和二进制补码分组
    SD24CCTL2 |= SD24SNGL |          SD24DF | SD24OSR_32;      //通道#2是主通道和二进制补码

    _interrupt void TA1_ISR (void)

    A2D_TOGGLE_PORT |= A2D_TOGGLE_BITP;                      //打开 A/D 切换信号
    SD24CCTL2 |= SD24SC;                   //再次启动 A/D 转换
    SendPtFlag = 1;                   //flag 是另一个 IR 输出数据包的时间
    return;     //(ISR 是否需要返回指令????)        //解除此中断


     对于(;)                          //永远,直到程序终止
       {
        if (SendPktFlag)                                       //如果是发送另一个 IR 数据包的时候了
          {
           SendPtFlag = 0;                   //下次清除标志
           while (!(SD24CCTL2和 SD24IFG){};             //等待主通道转换完成
       A2D_TOGGLE_PORT &=~A2D_TOGGLE_BITP;                   //关闭 A/D 切换信号
       SACOUNt16 = SD24MEM0;                   //从通道#0获取16位结果
       TVCOUNt16 = SD24MEM1;                   //从通道1获取16位结果
       BVCount16 = SD24MEM2;                   //从通道#2获取16位结果
          }

    嗨、Mitch、非常感谢您在这里的关注和帮助!

    -eNick


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

    这让我担心:"(同样、前三个通道具有一个公共连接、但除了 AX 之外、它没有连接到任何其他通道-在三个 A/D 通道上。)"

    如果不连接到 VSS、您就不知道这些差分输入上的共模电压是多少。 输入可承受的限制。

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


     没有任何共模电压。  模拟输入电压
    与芯片的电源和接地完全隔离。
    模拟输入电压由两节碱性电池生成
    串联、电池之间的连接视为
    并连接到 A 端子。  电位器
    连接在串联电池组上、以便雨刮器臂
    电位器的电压将介于-1.6V 和之间
    +1.6V。  每个模拟输入通道都有一个要切断的电阻分压器
    输入电压减半、以使其保持在-0.8V 至+0.8V 的范围内。
    这在我的测试设置中非常适用、但事实除外
    一个 A/D 通道的输入电压变化会导致较大的电压
    不带的相邻通道的 A/D 转换值变化
    测量相邻输入端子处的任何变化
    通道。
     我应该注意到、在现实世界的最终产品中、隔离是指隔离
    情况将会扭转。  模拟输入将连接到
    某些电压可能比接地高8000伏
    但在 A+和 A -之间具有较小的差分电压、
    引脚、而芯片的电源将通过进行隔离
    具有巨大空气间隙的无线充电方案、适用于30千伏。
    请注意、我们已经有这样的系统运行了很多年
    现在、由于产品淘汰、我们需要更换 A/D 供应商
    进行了比较。

    David、非常感谢您的关注。

    -eNick

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

    始终存在共模电压。 但是、从您的描述中可以看到测试设置不应超过限制。

    数据表中没有关于输入电路的太多信息。 当然不是 SAR ADC 的详细介绍。 但它确实表明差分输入阻抗为400K、从每个输入到 AVss 为200K。

    在此基础上、我构建了一个简单的 Spice 模型来使用。 我发现、更改一个通道上的电位计设置会更改另一个通道上的差分电压。

    我的模型可能无法准确地表示您正在执行的操作(我不知道您使用的电阻器值)、而站在模拟输入引脚上的电阻器只是一个猜测。

    我认为、从每个输入到 AVss 的200K 电流正是您在其中工作的原因。 当我将电源隔离到我的两个输入时、交互消失。

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


    >我认为从每个输入到 AVss 的200K 就是您的输入。

     我同意。 你完全相信我。  


    >当我将电源与我的两个输入隔离时,交互就会消失。

     我们无法在现实世界的产品中做到这一点、而是在互动中做到这一点
    当我将 A 引脚直接连接到我认为是的 AVSS 时、也会消失
    完全隔离的电源时、这是很好的。  我已经这么做了
    前面讲过、除我之外的其他人负责实际操作
    模拟电路、因此我很高兴地说我已经完成了
    进行了比较。  我愿意说我的问题已经解决了,但我将等待
    一天去看看其他人是否想在这里称重。

     David、非常感谢您抽出时间帮助我。

    -eNick

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

    很遗憾、您必须将这些出色的差分输入转换为单端输入。 至少输入电压范围低于 AVss。

    如果 TI 在用户指南中包含了 SD24模拟输入等效电路图、就像在 SAR ADC 中一样、您可能会更早地看到这个问题。

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


    我想我们将能够仅使用单端输入
    非常好、但我们绝对需要双极
    行为。  使用此芯片有望完全消除
    需要将整个东西(正如我们现在在当前产品中所做的那样)偏置到
    获得双极测量值。  我不知道任何其他 A/D 供应商
    具有这种真正的双极特性。

    不管怎样、我会很高兴离开。  再次感谢 David。

    -eNick