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.

[参考译文] ADC 满量程触发源 PWM0/GPTM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/731916/adc-full-scale-trigger-source-pwm0-gptm

器件型号:TM4C1294KCPDT
主题中讨论的其他器件:EK-TM4C1294XLINA240LM94022

对于  400mV-600mV 的模拟信号、当一致的周期样本返回十进制值20-33时、数据表中的图15-9似乎没有给出事实。 VREFP 满 量程  以某种方式变为 8096、 VREFP (1.65V)的一半、从而在  ADC 量程 变化的过程中实现203uV LSB 分辨率(8096/1v65)。  似乎 PLL 衍生的 SYSCLK (120MHz)和 ADC 采样 CLK (30MHz)与  分频 PWM 时钟(60MHz)完全不同步、在 配置中进行了进一步说明。

过去 在 M3 ADC/PWM 触发器方面的经验表明 、GPTM 的48000-57600 SYSCLK 节拍一次性触发  PWM 发生器80-25us 周期的采集脉冲、但确实如此!  配置的 PWM0 GEN0 ( PWM_TR_CNT_LOAD)的序列发生器触发时序与 ADC 采集的中心脉冲周期非常远、因此无法用作相电流检测的触发源! 这就是  为什么现在需要 GPTM 一次性 ADC 触发源来找到 PWM 周期中心、使 GEN0触发负载 为(异步)、 GEN0触发负载计数法 是业界首选  工程师的方法。  

证据表明,大量 的结算收购  被错过 ,同时规模也不正确,即使 未被错过也是如此。  在   从  不同配置 的 FIFO 中读取的 POP 数据中、仍有许多0被 AD 转换、这些 FIFO 来自   电感电流监控器的 PWM AD 转换。  但是、非常有限的不正确缩放 的零星 FIFO 数据可以  通过 配置为+3V3的内部 VREFP 构建1/2刻度(8096/2 +1v65)的单调比率度量斜率、从而产生困惑!  进一步证据表明、PWM0 GEN0触发源在   与 PWMCLK 同步/与 PWMCLK 同步的 ADC 模拟样本的目标中心正确工作(M3)代码后 、在具有典型配置 PLL 时钟的 M4代码中失败。

ADC 模块(120MHz) 和 PWM 模块(60MHz)分频时钟的时序如何区别开来、并导致 ADC 触发源 时序 问题、为什么?  对于   原始数据 POP 到 C++数组、VREFP 满量程如何距离正确(8096/2 +1v65)如此远?  经验证 、 线性和周期性模拟信号 会生成 非常低的结果数据、与内部基准 VREFP=3V3相反。  在 高速触发来自 GPTM、 PWM0甚至低速处理器的源的大多数已配置序列发生器步骤中、ADC 刻度是如何以及为何受到影响的?

显然、这两个问题需要 TI 工程师进行实验、因为遇到  的问题是 ADC0、PWM0配置中的可重复 EK-TM4C1294XL。  在最终意识到上述问题之前、会通过几种不同的方式出现类似的症状、 并且在模拟采集期间(随机)缩小 VREFP 3V3满量程范围会发生变化、而不考虑 ADC 内部基准配置。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在大多数高于捕捉0-400mV 模拟信号的值中、VREFP 刻度关闭了近200个计数。 原始 POP 是循环完成的(序列发生器步骤0、1、2)、打印结果数据与 PWM0 PWMENABLE 寄存器相关、通过 GPTM4A 对 ADC 样本触发器进行对齐在触发转换中的 PWM GEN0、1、2脉冲中心 GPTM 一次性加载45000-57600 SYSCLCK 节拍(@8.333ns)。

    也许 PWM 模块计时仍然与 ADC 模块计时相差很远、使其在该过程中异步? 奇数部分是触发、应同步数据、但 AHB 似乎不关心模块间触发!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    BP101、

    你对我们的说法是非常严重的。 我们没有任何人提出过类似的主张。 您声称这些结果可在 EK-TM4C1294XL 上重现。 请提供我可以用来检查您的索赔的项目。 我怀疑您的软件或硬件配置中存在错误。

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

    尊敬的 Bob:

    我们必须首先意识到、由于多个帖子厌倦了使用102Hz GPTM 进行简单测试、从而导致假定的0-4096满量程分频为一半、因此会出现这种情况。 过去的修订版数据表建议2MSPS 为6096满量程、但对于 POP 返回的值而言、它似乎8096满量程更合适。 不良的 POP 值 怀疑 Thumb 根已扩展到 M3 StellarisWare 中、但 通过下面显示的软件调用进行了覆盖。 它通过在多个同名数组中将索引多个级别扩展到较深的位置来有效地创建堆叠的 POP 整数值。

    将 SYSCLK 配置为60MHz 以匹配 PWM 60MHz 和 ADC 在触发转换中没有任何不同、原始 POP 值位于 接近200范围的任何位置。     通过 PIOSC 的奇怪时钟序列发生器触发源 GPTM 即使 在使用120MHz SYSCLK 时也会锁定 MCU。  GEN0触发的转换与所产生的实际电感电流完全不同步。 我将研究 EK 示例、因为 现在我已经了解了导致 TI 在与 LMI 合并时认可的过去软件和 M3出现故障的原因。  

    您是否同意 、如果触发源无法创建任何单调跟踪 斜率 、它错过 了周期性模拟信号的采集稳定时间?    

    为   57K SYSCLK 节拍延迟设置 PWM 输出 GPTM 单次触发序列发生器触发器可使 电流斜率更接近实际 值。 该问题仍然 是低 采集值问题、但通过 LMI 软件通过  疯狂软件索引 POP ( 如下所示)累加阵列数据已解决。 该方法会导致不正确的闭环电流测量和过程中的混乱、但您可以看到值低于多少。

     G_psPhaseCurrent = ui16PhaseRaw [g_ucCurrentIndex]= g_sMotorCurrent;

    请回想 一下、下面的捕获 是示波器小工具中的700mA 峰值 LMI 代码 TM4C、但 DMM 为1.2-1.5安培  上面的弹出代码 将 g_sMotorCurrent 添加到 FIFO 数据中、 数字将被引信!   

       

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

    [引用 user="BP101"]使用102Hz GPTM 进行的简单测试会导致推定的0-4096满量程除以一半。

    TM4C1294内部没有有意这样做的电路。 如果您仅在低端刻度(200-600mV)上看到这一点、我认为更有可能的情况是您捕获噪声尖峰。 请记住、任何环路天线(包括 PCB 布线和跳线)都将在磁场变化的情况下收集感应电压。 导线中的开关电流将导致磁场变化。 切换大电流(如驱动电机)很可能会导致 ADC 转换产生电气噪声。 下面是一些问题、可帮助您验证您的结论是否正确。 在转换中点附近的电压(1.65V)时、您是否看到相同的刻度变化(2x 或4x)? 当您不开关电流时、您是否看到相同的变化?

    [引用 user="BP101"]过去的修订版数据表显示2MSPS 为6096满标量程,但似乎8096满标量程更合适

    您能给我指一下版本和位置吗? 是否是此器件数据表的过去修订版?

    BP101 说:
    POP 返回的值

    "POP"是指从 FIFO 中读取的值吗?

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

    PoP 是软件循环 FIFO 读取事件的数据表术语。 6096已通过数据表、并在后续版本中删除。 我可以使 POP 创建相同的高值、LMI 在 Widget 中创建毛刺线移动、通过 这种方法抽吸了几个磁盘驱动电机。 这不是真正的采集、 而是模拟比率放大器噪声满误差、类似于将 PWM 占空比乘以 小 值采集转换的数组数据。

    实际上需要 实现一个10mV/Amp INA 生成的正确测量值。 ADC 无法锁定、无论  NSH 值如何、采集峰值都在转换器视图中保持未稳定。  ADC 似乎 对整个信号进行采样、而不考虑 VREFP 3V3满量程是一个因素。

    将480添加到 POP 的 RMS 滤波器中、我们得到的仿真线性斜率最高可达4.6-4.8安培、在减速过程中仅低于该斜率可能为100mA。 对于小电机、200-400mA 必须添加十进制25作为基线。 最  重要的线索是、需要添加数字斜率并添加特定的十进制值来应对采集故障。 因此、在  示波器小工具中、将十进制25作为基值以4.6安的值相加将会像1.2安那样移动、因此必须添加480才能使其达到 DMM 显示的位置。

    理想情况  下、我们希望跟踪模拟信号后沿的电流上升/下降、但 ADC 似乎对低至 VREFN 的整个斜率进行采样、如小工具跟踪中所示。   我们不应该期望 在原始 FIFO 数据中获得更高的值?    在下面的 IDX 捕获中、除非可能发生过流/欠流、否则它不会被耗尽、调试该打印监视报告 。

    G_sMotorCurrent = ui16PhaseRaw [g_ucCurrentIndex]

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

    [引用 user="Bob Crosby"]切换大电流(如驱动电机)很可能会导致 ADC 转换中产生电气噪声[/引用]

    除了  外部滤波器之外 、您可能还没有看到 INA240具有 PWM 瞬态抑制功能、并且能够消除更大的分流噪声、甚至在 AINx 输入尝试之前更是如此。 请注意、这些是非常小的电流、 磁盘驱动电机 启动峰值为600mA。  

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

    尊敬的 Bob:

     再次备份到 EKXL/EVM 时、即使 是由来自 ADC0/1 SS1/SS2的 Tivaware 提供的 HWREG POP 也通常与 噪声相关(无电机)。  顶部捕获结果不 是如下所示的实际通道转换结果。  此外、在  中断期间、   可能发生任何3个 POP 中的1 个相对于 PWM REG 3 PWMENABLE 位同步到这些通道上的 GPTM 触发的采样数据后、不会消耗 FIFO2。 ADC0 SS1 AIN1、2、5具有10K 接地下拉电阻、 POP 数据与输入模拟信号不完全匹配。 其次 ,LM94022传感器需要整数来在温度降至零度以下时产生负符号,ADCSequenceDataGet () 甚至与(Int32_t)或(Int16_T)变量不兼容,方法是 强制通过 TPTR 进行 HWREG POP 调试,因为数据表建议在所有条件下都不一致。 这些 POP 问题 似乎与 C++语言相关 、Thumb 指令用于高速正确读取 FIFO 数据、或者  当外设之间的触发源在高速总线时 AHB 上发生未知的内部时序。  

     下面的第二个捕捉显示 了  一个只   通过 FIFO 的 POP 将 VREFP 4096满标量程8196加倍的可能性、此值被放入不与配置步骤的 ADCSSFSTAT TPTR 对齐的数组单元中。 这证明 、硬件可能会返回不正确的结果数据、这些数据 几乎没有参考  假设  正在发生的实际模拟通道样本。 同样  、ADCSequenceDataGet 中也使用的 Tivaware HWREG 在结束 IE 周期由 PWM0或 GPTM 高速触发时具有相同的 POP 问题的频率更高。 但是、下面的第二次捕获 发生在1秒间隔触发处理器中、但 POP 阵列单元对齐 ADC1 FFIO1 POP 到阵列单元的 目的 是在 步骤1上方设置1、 更频繁地产生(-1)显示、并且通常 会显示8193个原始 FIFO 数据 (红框)   在 AINx 的+3V3输入下运行几个周期。    

    EKXL/EVM:

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

    红色 POP 值序列发生器步骤0的部分原因是最近使用(X11引脚44)将 EKEVM 上的 AIN17 (PK1)切换为 AIN5 (PD6)进行测试。 此外、在 U4 OGT 功率模式的 USB0控制(GPIO_PD6_USB0EPEN)数字控制之前配置了 AIN5。 X11报头可能不应该提供 PD6、因为如果 AIN5分配给序列发生器阶跃、则可以了解如何在内部对 数字 USB0EPEN 信号进行反冲模拟多路复用器采样。

    因此删除了永远不能使用 X11引脚44的 AIN5配置。 发现发热忘记了 PD6是 USB0EPEN、但我们的定制 PCB 上没有 USB0EPEN 使用 PA6、PD6配置 AIN5。 当使用修改早期 EVM 配置对定制 PCB 的故障进行反向跟踪时、此 PD6会变得不必要的复杂。

    EVM 序列发生器第0步 AIN17 (PK1)的 POP 值保持高电平(300s) 10K 下拉 BP2-X6-12、即使在从第0步配置中删除 AIN5 PD6之后也是如此。 看起来甚至是 PK1也与其他一些引脚多路复用器配置相交叉、但在定制 PCB 或 EVM 上都找不到!

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

    另一部分 ADCSequencerDataGet ()未正确检查 REG 7 ADCUSTAT、REG5 ADCOSTAT 寄存器是否存在序列发生器 FIFO 数据无效的情况。 ADCUSTAT 的写入会丢弃数据并返回数据表大纲所示的0、已多次报告。 在对 FIFO 数据进行 POP 读取期间、Tivaware ADCSequencerDataGet ()不能正确检查状态寄存器。 上述 Tivaware 调用不是将 POP 数据返回到应用程序的可接受方法。

    如果不选中此条件,则可能会显示为不正确的数据字符串,即使在发生以下事件后状态被应用程序清除,也会将 POP 发送到应用程序中。 在产生转换数据的 ADC 触发源的下一个写周期间隔内、FIFO 可能不会复位。

    寄存器7:ADC 下溢状态寄存器(ADCUSTAT)、偏移量0x018
    本寄存器用于指示采样序列发生器 FIFO 中的下溢状况。 向相关位写入1即可清除相应的下溢条件。

    SSN FIFO 下溢
    此字段的有效配置如下所示。 向该位写1即可将其清零。
    值描述
    0 FIFO 没有下溢。
    1采样序列发生器的 FIFO 达到下溢条件、这意味着 FIFO 为空且请求读取。 有问题的读取不会移动 FIFO 指针、并且返回0。  
     
    寄存器5:ADC 上溢状态寄存器(ADCOSTAT)、偏移量0x010
    本寄存器用于指示采样序列发生器 FIFO 中的溢出情况。 一旦溢出条件已经由软件处理、通过写1到相应的位位置可以清除该条件。

    SSN FIFO 上溢
    值描述
    0 FIFO 没有溢出。
    1采样序列发生器2的 FIFO 达到溢出条件、即 FIFO 已满且请求写入。 当检测到溢出时、最近的写入被丢弃

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

    [引用 user="BP101"] ADCSequencerDataGet ()未正确检查 REG 7 ADCUSTAT、REG5 ADCOSTAT

    函数 ADCSequencerDataGet ()不能检查上溢和下溢状态。 为此提供了函数 ADCSequenceOverflow()和 ADCSequenceUnderflow()。

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

    尊敬的 Bob:

     某些发现的 FFIO 条件仍处于下溢状态、可能 会通过   设置 RWIC ADCOSTAT/USTAT 来影响 TPTR 标志、或者只需在 发生 POP 事件后清除状态之前耗尽 FIFO。  当  PWM0 GEN0是触发源时、必须排空 FIFO 并将 ADCOSTAT/USTAT 置位、否则 POP 无法将任何数据复制到 C++数组步骤0中。  清除 ADCOSTAT/USTAT 是 不可能实现比率电流斜率 的一部分、原因是 TPTR 在 SS1 或 SS2上冻结、即使 GPTM 是触发源也是如此。 即使   在调用 ADCSequenceDataGet ()时,也不会在 ADCUSTAT 标志事件中报告导致永久下溢的猜测。 仍然不清楚为什么 ADC0/1中只有 SS1和 SS2存在 TPTR 问题、而 当每个   中断周期清除 TPTR USTAT 时、SS0/SS3不存在 TPTR 问题。  

     序列发生器之间的行为似乎不一致、其中触发源 速度 以某种方式决定 了 USTAT 的处理方式。 奇怪 的溢出似乎永远不会发生、并且在没有 TPTR 索引移动的情况下正在流动会产生0x000的 POP 数据结果。    启用序列发生器后、除了触发转换、似乎没有任何对 FIFO 写入的控制。  启用 的序列发生  器始终对模拟通道进行采样、数据表中没有具体说明。  这似乎 是 SS1、SS2下溢的来源。  只要在   结束 IE 中断期间不清除 SS1或 SS2 USTAT/OSTAT 寄存  器、TPTR 就会移动索引(0x0-0x3)、并且实时数据结果来自序列发生器配置的通道。  在     所有已配置序列发生器的 POP 步骤 发生后、按顺序排空 FIFO1/2和/或清零 ADCUSTAT/OSTAT 是一个典型的过程、不应在流耗下导致永久性中断。     

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

    如果序列发生器 FIFO 在每个结束的 IE 周期后未耗尽、则 FIFO 十进制值向上增大、至少可以通过 在 AIN1、5、17通道上使用10k 下拉电阻器进行 EK/EVM 测试。 强制清除 USTAT/OSTAT (RW1C)会锁定 SS1、SS2中的 TPTR、但不锁定 SS0中的 TPTR。

    在不先禁用或重新启用序列发生器的情况下耗尽 FIFO、会使 FIFO 数字值保持不变。 当 FIFO 在触发事件之间自由运行时、FIFO 值可能会增加。 在所有源数据的 POPS 之后对 FIFO 进行漏电操作、使 FIFO 数字值与应用预期值保持一致。 数据表中未描述 FIFO 行为、序列发生器被使能为开路或 Rs 高阻抗 AINx 后、CADC 会发生什么情况。 Piccolo 具有在周期之间转储电荷的功能、被称为那些坚持使用 Cext 值进行欺骗的人。 Tivaware 可以添加 FIFO 漏极调用、以防止此电荷在样本触发器之间建立。

    问题是额外的 CADC 电荷来自哪里、因为 CH8 +3V3 via 100k 远不及 EK/EVM 测试的 CH1、2、17。 另一个奇怪的是 ADC1 ADCPP REG64表示24个 AIN 通道可用。