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.

[参考译文] EK-TM4C1294XL:ADC 通道差分

Guru**** 2482225 points
Other Parts Discussed in Thread: LM94022, INA240

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/728622/ek-tm4c1294xl-adc-channel-differential

器件型号:EK-TM4C1294XL
主题中讨论的其他器件:LM94022、INA240

在对 ADC0 SS1步进0或1 FIFO1进行更多 kiss 测试后、数据似乎会在示波器小工具中产生差分信号。 但是、如果禁用了步骤0、步骤2或步骤3会产生如下所示的相同结果。 第1步的数字值读数 比 示波器小工具可以显示的值多得多。  

如何  在通道对上设置输入差分模式、例如、当未 通过软件配置时、步骤0或1? 如果 FIFO 被预触发以呈现下一个步骤的结果、那么在代码中、步骤0或1的相同差分输出结果。 在 AIN5、AIN2、AIN1上、同一信号中是否不存在差分信号? 这使我疯了、因为它不会增加匹配通道 Rs 阻抗的典型行为。 什么会导致 AIN 通道允许输入 信号低于其他通道? 这一问题似乎也会导致 VREFN 饱和无约束。

//MAP_ADCSequenceStepConfigure (ADC0_BASE、1、0、PIN_IPHASEA);
MAP_ADCSequenceStepConfigure (ADC0_BASE、 1、1、PIN_IPHASEA);// AIN5
MAP_ADCSequenceStepConfigure (ADC0_BASE、1、 2、PIN_IPHASEB);// AIN1
MAP_ADCSequenceStepConfigure (ADC0_BASE、1、3、 PIN_IPHASEC | ADC_CTL_END | ADC_CTL_IE);// AIN2 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    所以您不处于差分模式、对吧?

    我不确定您在这里要展示什么。 您能否创建一个 Excel 表格、清楚地显示哪些通道映射到哪个序列步长、对每个通道施加的电压以及从每个通道的 FIFO 中读取的电压。 从0v 或3.3V 等固定电压开始、如果您认为通道之间注入了噪声、则记录原始 FIFO 值。 例如、如果一个通道连接到3.3V、则预期值为4095。 您提出了许多通道可能会失去其精度的方案。 您在哪种确切情况下看到转换后的结果不等于4095?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

     任一 ADC 模块的正确 SS1未配置为差分 AINx 输入。 这并不意味 着差分配置不 会通过其他一些未知或未检测到的原因发生。   如果 差分模式在 默认采样的 FIFO 移位期间来回切换任何单个输入源、结果可能不会被注意到。 然而、当 非周期性信号被注入时、直接 AIN 输入为 VREFN 或 VREFP、例如0v 或3V3、 这两个电压之间没有任何输入、则会发生1/2 VREFP。  

      对于 单端 AINx 信号源、FIFO1读取数据的第一个或第二个配置步骤没有理由产生小工具中显示的示波器信号。  信号恰好是60Hz、数据表中的 SNR %在通道之间保持不一致(示波器小工具)、我们必须问自己为什么?  示波器小工具 表示、由于  未知原因、AD 转换中正在发生差分信号转换到 FIFO1。 即使 LM94002温度 FIFO1针对   配置为步骤0或1       的任何 AINx 输入重新调整1/2个完整 VREFP 值、就像合并一样、FIFO1解决方案中再次产生1/2 VREFP、表明差分 AINx 行为。 然而 、另一个以某种方式的直接指示器差分模式已针对 AIN 通道输入第0步或第1步进行配置、  而 Tivaware 未专门配置为执行此操作 、如 数据表序列发生器寄存器 POR 复位默认值所示。

    以 某种方式在差分通道模式下配置序列发生器的第0步或第1步 、并将 VREFP/2 (1.65v)值分频 、以便对 返回的 FIFO 数据进行任何第二步读取。 无论在 最后一步使用 AINx 输入源还是在最后一步 没有 AINx 输入源的情况下结束、都将发生这种情况。

    这个 问题 似乎更多地与序列发生器配置相关、 如何在 POR 后停止输入通道的默认设置为差分? 对于差分 FIFO 数据似乎不可能、但它同时出现在 ADC0 SS1步骤0/1和 ADC1 SS1步骤0/1中。  然而、相对于  所有已配置的序列发生器阶跃、差分(1/2 VREFP)似乎在下一个已配置的阶跃之后停止、而  这些阶跃与 第一个阶跃的 AINx 通道分配无关。 以上是示波器小工具在 上一帖子中的指示和 LM94022捕获的结果。  这两个都是应用中断中的周期性模拟信号 、这些中断处理相对于 AINx 源 的 FIFO 结果数据、以及 AD 转换器对 每个静态信号的采集。  

    难怪 LM94022传感器 的 FIFO 值无法 从任何 16:0 AIN 输入正确稳定、因为第二步 FIFO 数据 随机 为1/2 VREFP。  为 TI 提供了源代码、以调查 其发生方式。  这也解决       了当在读取 FIFO 数据的第2步中出现1/2 VREFP 值时、ADC0 SS1上的 INA240监控器无法产生正确电流读数的原因。   

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

    CCS 调试寄存器16 ADCSSCTL0为0x0、未设置 DN 位。 这是否意味着 GEL 文件正在正确读取寄存器、或者 CCS 调试显示实际配置? 例如、头指针和尾指针的值始终相等、100ms 寄存器刷新间隔、根本不能为真。 FIFO 下溢溢出的状态似乎只在调试应用程序运行缓慢期间发生、不会在调试寄存器视图中移动、只有通过 UARTprintf()我们知道它曾经发生过、但只有在调试期间下溢。

    在对 ADC0 SS1步长0-2进行测试后 、102Hz GPTM 输入信号被移至 每帧的下一个 AIN 输入。 奇数部分是清除的中断 、它似乎 在 FIFO 读取过程的每个步骤中都可重入。  根据 ODER 观察、FIFO 溢出似乎会在  下一个 FIFO 读取步骤(黄色框)中出现102Hz AIN 阶跃(红色框)。 通过读取 正在测试的 PWMENABLE 寄存 器位的应用程序和(如果、否则、如果、否则)每3次读取循环 FIFO 的每条指令时、这似乎是不可能的。  在对每个指令进行测试并匹配 PWMENABLE 寄存器位后、读取 C++数组变量之间的 FIFO 会被清空。

    如果  未通过未报告的未检测 FIFO 溢出来改变下一步/秒 FIFO 值(黄色框/秒)、该如何改变?  否则 、是否   实际设置了 DN 位(步骤0-1) ADCSSCTL0并且未报告? 如果 结果被认为 是专为限制串扰而设计的通道隔离、 则会想到可吸烟的后视镜。 第2步( 绿框)后的最后一列没有溢出数据第0步或第1步的特别注意事项、为什么?

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

    奇怪的是 、CH5第1个帖子中显示的示波器信号第0步可能与 状态下溢相关、但谁可以 考虑这种情况、数据表似乎 存在 披露空白。 模数转换器数字量程图15-9仅表示 生成无符号整数、但示波器小工具 显示负整数 是 由感知单端 AINx 通道上的交流信号输入产生的。  

    ADCUSTAT 和 ADCOSTAT (REG5/7) RWIC 似乎并不 总是 通过 OR equals (|=) 符号命名约定从 C++循环更新中断言。 这似乎 表明 ,图15-9并未说明 VREFP-VREFN 的全部真相。

    至于  上面显示的未报告 FIFO 溢出情况、捕捉 (ADCOSTAT) RWIC 位检查未报告 溢出发生  即使  在下  溢后 FIFO 漏电期间 也可能导致 无 符号整数的 FIFO 溢出转储到 下一个步骤中! 这可能是一个数据表事实、不仅在早期的 M3级 ADC 中、  而且在后续的 M4级 ADC 模块中都被忽略了。  

     有一个行为的答案 、Tivaware 也 没有接近正确处理用于 M4类 ADC 模块业务相关用途的 FIFO 数据。  TI 论坛的员工 建议 ACDSecquenceDataGet ()是卓越的或唯一支持 的读取 FIFO 数据的方法,这正使 TM4C1294社区成为一个独特的黑洞!  这条线程是 Kiss 在现实世界中的工作方式、使其工作正常!  

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

    在中断处理期间将 ADC1 SS1尾指针锁定到特定步骤会中断 ADC0 SS1第0步、使其具有差异性。 ADC0 SS1的第1步和第2步、然后级联值。

    FIFO1似乎在 ADC0和 ADC1的阶跃之间对采集进行分频。 当结束 IE 时、FIFO 尾指针会失去 ADC 模块 FIFO1所属/所属的基本视图。 如果 ADC1 SS1尾指针未按如下所示锁定、则 ADC0 SS1具有上面捕获中所示的行为。

    数据表和勘误文档中均未列出采用 SS1的奇数 ADC 模块行为。 因此、不能说 Tivaware ADCSequenceDataGet ()比 HWREG 宏 FIFO 读取的效果更好。 软件检查 ADCSSFSTATn 寄存器尾指针值是确保 FIFO 阶跃结果与存储数据的 ADC 模块基址0x4003.8000或0x4003.9000的目标数据和 ADC 模块基址0x4003.9000的目标数据对齐的正确方法。 在错误的时序下、ADC0和 ADC1模块之间似乎没有受限的 SS1扩展器。 因此、当 ADC0和 ADC1在它们之间共享 FIFO1但不正确时、很难将 SS1引脚降压。

    中断处理程序中的 ADC1 SS1受限 ADCSSFSTAT 代码:
    
    /*读取敏感原始采样序列步进 ADC1 FIFO-1。 //
    if (HWREG (((ADC1_BASE + ADC_SSFSTAT1_TPTR_M)= 0x0))
    {
    int16ADC1MOSTempLow[0]= HWREGI (ADC1_BASE + ADC_O_SSFIFO1)& 0x0FFF;
    }
    
    if (HWC1MOSTEMP+ADC1_BASE + ADC1_ADC1_STEMPTR
    
    
    
    
    )= 0xADC1_ADC1_SSEMPTR 0 + ADC1_STEMPTR 0 = 0xADC1_ADC1_ADC1_SSEMPTR 0 = 0xFF1 + ADC1_ADC0 = ADC1_ADC1_ADCSTEMPTR 0 = ADC0 = ADC0 TO_ADC1_ADC0 TO_ADC0
    
    //如果 A 相的第1代低侧处于活动状态,则启用
    // A 相模拟信号上的电流读数。
    if ((((ui16PWMEnable & 0x8)= 0x8)&&
    (HWREG (ADC0_BASE + ADC_SSFSTAT1_TPTR_M)= 0x0))
    {
    // PIN_IPHASEA 通道5 ADC0 SS1第0步
    /*相电流指数*/
    G_ucCurrentIndex = 0;
    
    //读取下一个样本进行电流计算。
    ui16PhaseRaw[0]= HWREGH (ADC0_BASE + ADC_O_SSFIFO1);
    
    //USBprintf (">I0->%i\n"、ui16PhaseRaw[0]);
    //GPIOPinWrite (GPIO_PORTB_BASE、GPIO_PIN_3、0x00);
    }
    

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

    无法通过上述代码中的 ADCSSFSTAT TPTR 位限制 ADC0和 ADC1 FIFO1、同时从 ACD0 SS1 FIFO 步骤检索任何数据。 使用 ADC1 SS1和 ADC0 SS1且步长重叠 且 AINx 不同的任何人似乎都没有获得应从用于模拟信号采样的实际序列发生器步长返回的结果、 仅在一个 ADC 模块中、而不是同时在这两个模块中。

    硬件是  ADC 模块共享 FIFO1的触发斩波序列发生器阶跃结果 与 ADCSSFSTAT TPTR 位的应用检查不同步!