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.

[参考译文] TMS320F280049C:有关基于 CMPSS 的 ePWM 跳闸配置中 500 计数偏移量的查询

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1644944/tms320f280049c-query-regarding-500-count-offset-in-cmpss-based-epwm-trip-configuration

器件型号: TMS320F280049C

我正在 使用 CMPSS 模块在代码中配置 ePWM 跳闸

我已配置此跳闸路径所需的模块:

  • CMPSS 模块
  • ePWM X-BAR
  • ePWM 数字比较和跳闸区域寄存器

跳闸是根据 CMPSS DACHCAL 基准值进行配置的。 但我可以看到所配置的 DAC 基准与实际发生跳闸的 ADC 原始值之间存在恒定偏移。

DACHCAL 为 1000、则行程时的 ADC 原始值为-> 500

DACHCAL 为 2000、则行程时的 ADC 原始值为-> 1500。  

DACHCAL 为 3000、则行程时的 ADC 原始值为-> 2500。  

我还验证了 CMPSS、ePWM X-BAR 和 ePWM 跳变寄存器配置、但问题仍然存在。

Im 共享用于配置的代码。  

这是什么原因?  

    //测试
    AnalogSubsysRegs.CMPHPMXSEL.bit.CMP2HPMXSEL  = 1;       //对于 ADC C1
    Cmpss2Regs.COMPCTL.bit.COMPDACE         = 1U;      //启用 CMPSS 模块
    Cmpss2Regs.COMPCTL.bit.COMPHSOURCE        = 0U;      //高电平比较器负输入= DAC |正输入=外部 CMPSS 模拟输入
    Cmpss2Regs.COMPCTL.bit.COMPHINV         = 0U;      //不反转高电平比较器输出
    Cmpss2Regs.COMPCTL.bit.CTRIPHSEL         = 0U;      //为 CTRIPH 选择异步比较器输出|这可提供最快的跳闸响应
    Cmpss2Regs.COMPCTL.bit.CTRIPOUTHSEL       = 0U;      //为 CTRIPOUTH 选择异步比较器输出
    Cmpss2Regs.COMPDACCTL.bit.SELREF         = 0U;      // DAC 基准= VDDA
    Cmpss2Regs.COMPDACCTL.bit.DACSOURCE       = 0U;      // DAC 值源=影子寄存器
    Cmpss2Regs.COMPDACCTL.bit.SWLOADSEL       = 0U;      //在 SYSCLK 上加载 DAC
    Cmpss2Regs.DACHVALS.bit.DACVAL          = 3000U;      //设置 DAC 高阈值= ADC 中值
    Cmpss2Regs.DACHVALA.bit.DACVAL          = 3000U;
    Cmpss2Regs.COMPSTSCLR.bit.HLATCHCLR       = 1U;      //如果更早使用、请清除 CMPSS 高电平比较器锁存器
    Cmpss2Regs.COMPCTL.bit.COMPLSOURCE   = 0;    //由 dac5 驱动的反相输出
    Cmpss2Regs.DACLVALS.bit.DACVAL      = 0;    //不使用较低的 DAC   

  EPwmXbarRegs.TRIP4MUX0TO15CFG.BITS.MUX2 = 0U;    //将 CMPSS1 CTRIPH 路由到 ePWM XBAR TRIP4
    EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX2 = 1U;      //为 TRIP4 启用 MUX0

    EPwm4Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 3U;
    EPwm4Regs.TZDCSEL.bit.DCAEVT1 = TZ_DCAH_HI;  //当 DCAH 为高电平时生成事件
    EPwm4Regs.DCACTL.bit.EVT1SRCSEL = DC_EVT1;   //使用原始/未滤波的 DCAEVT1 信号
    EPwm4Regs.DCACTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC;//异步跳闸路径
    EPwm4Regs.TZSEL.bit.DCAEVT1 = 1U;        //启用 DCAEVT1 作为一个跳闸源

    EPwm4Regs.TZCTL.BIT.TZA = TZ_FORCE_LO;
    EPwm4Regs.TZCTL.BIT.TZB = TZ_FORCE_LO;

    //清除旧的行程标志
    EPwm4Regs.TZCLR.bit.DCAEVT1 = 1U;
    EPwm4Regs.TZCLR.bit.OST  = 1U;
    EPwm4Regs.TZCLR.bit.INT  = 1U;

 

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

    您好 Ankita、

    感谢您提供详细信息。 您在 CMPSS DACHCAL 设置和跳闸时 ADC 原始值之间观察到的 500 个计数偏移是预期行为、而不是配置错误。

    根本原因是 CMPSS DAC 和 ADC 模块使用不同的基准电压配置、这会导致其数字代码产生不同的比例因子。

    具体情况如下:

    CMPSS DAC 具有 12 位分辨率(0-4095 次计数)、并使用 VDDA 作为基准。 ADC 也具有 12 位分辨率、但可通过不同的基准电压或输入调节进行配置。 当您将 DACHVALL 设置为特定计数时、CMPSS 会生成模拟电压。 但是、当 ADC 对相同模拟电压进行采样时、它使用自己的基准将其转换回数字代码、这可能会产生不同的计数值。

    所有测试点 (1000→500,2000→1,500,3000→2500) 上的一致 500 计数偏移表示两个模块之间存在系统缩放差异。

    要解决此问题、您有两个选项:

    1. 将软件校正因子应用于 DACHCAL 设置以考虑偏移:

      #define DAC_OFFSET 500
      uint16_t desired_adc_trip = 2500;
      Cmpss2Regs.DACHVALS.bit.DACVAL = desired_adc_trip + DAC_OFFSET;
      Cmpss2Regs.DACHVALA.bit.DACVAL = desired_adc_trip + DAC_OFFSET;
    2. 验证 ADC 基准配置是否与 CMPSS DAC 基准匹配。 检查两者是否都使用 VDDA、以及 ADC 输入范围是否与 CMPSS 输出范围匹配。

    此外、请验证:

    • 您的 ADC 基准电压配置(内部或外部基准)
    • 连接到 ADCC1 的 ADC 通道的电压范围设置
    • CMPSS 和 ADC 输入之间是否应用任何信号调节或调节

    您的 CMPSS 和 EPWM 跳闸配置看起来正确。 问题纯粹是 DAC 输出解释和 ADC 输入解释之间的缩放不匹配。

    如果您需要帮助确定正确的比例因子、或者在应用校正后偏移是否仍然存在、请告诉我。

    此致、
    Zackary Fleenor

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

    您好 Ankita、

    我想跟进上周讨论的 CMPSS DAC 偏移问题。 您是否有机会研究 CMPSS DAC 和 ADC 模块之间的基准电压配置?

    为了帮助推动这一目标的实现、请提供:

    1. ADC 配置详细信息:

      • 您的 ADC 使用什么基准电压(VDDA、VREFHI,内部或外部)?
      • ADCC1 通道的 ADC 输入电压范围配置是什么?
      • 您能否共享相关的 ADC 配置代码(类似于您为 CMPSS 共享的代码)?
    2. 电压测量:

      • 如果可能、当发生跳闸时、能否探测 CMPSS2 输入引脚上的模拟电压?
      • 这将帮助我们验证 500 计数偏移是由基准调节还是实际电压差引起。
    3. 澄清:

      • 您是将 CMPSS DACHVALL 直接与同一模拟信号的 ADC 读数进行比较、还是这两个单独的信号?
      • ADC 是对 CMPSS 输入引脚还是您的电路中的其他节点进行采样?

    一致的 500 计数偏移强烈建议两个模块之间出现基准电压不匹配。 了解您的 ADC 配置后、我们就可以计算出您需要的精确校正因数。

    如果您已解决此问题或向不同方向移动、请告诉我、以便我可以适当地关闭该主题。

    期待您的答复。

    此致、
    Zackary Fleenor