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.

[参考译文] TMS320F28027:ePWM SOCA 过早触发 ADC 转换

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1324784/tms320f28027-epwm-soca-triggering-adc-conversion-too-soon

器件型号:TMS320F28027
主题中讨论的其他器件:C2000WARE

我已将 EPWM3配置为向上计数并通过 CMPB 上的 SOCA 触发 ADC。

CMPB 配置为立即加载模式(EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_IMMEDIATE;)

最初、我禁用了 SOCA、因此不应该进行任何转换。  此时 CMPB 为"0"。

在 ePWM 周期开始(TBCNT=0)时、在 ISR 中:

I 设置 CMPB = somevue、例如、500

I 启用 SOCA

由于 CMPB 加载模式是立即的、我的期望是 SOCA/ADC 触发将在 EPWM 周期的晚些时候在 CMPB (TBCNT=500)发生

相反、我看到的是、SOCA/ADC 触发会立即发生、

为什么 SOCA/ADC 触发立即发生?

谢谢!

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

    尊敬的 Mark:

    您需要回答的一些初始问题:

    • 为了说明这一点、您是说 SOCA 在您开始 ePWM 周期(计数器= 0)后立即触发吗?
    •   与 PWM 时基计数器的值相比、ETFLG 寄存器的 SOCA 标志在哪里设置?  
    • 此外、我能不能问您为什么在开始时将 CMPB 值设置为0而不是500?  ISR 是何时调用的?
    • 如果您配置 ETPS 寄存器的 SOCAPRD 位以使 SOCA 发生在第2个或第3个事件上、您会看到不同的行为吗?

    此致、

    艾里森

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

    尊敬的 Allison:

    要首先回答第三个问题、我要在每次调用 ePWM ISR 时更新 CMPB。  ISR 在 TBCTR=TBPRD 下被调用。

    I 从 SOCAPRD=1ST 开始、CMPB=0且 SOCAEN=0。

    在第一个 ISR 上、我设置 CMPB 为500 (例如)、SOCAEN=1。  TBCTR 仍在递增。

    只要我将 CMPB 设置为500 (作为示例)且 SOCAEN=1、就会触发 SOCA。  TBCTR 尚未达到500。

    如果在第二个 ISR 上我将 CMPB 设置为500、则在 TBCTR = 500时按预期触发 SOCA。

    我还没有尝试过不同的 SOCAPRD 值。  我明天可以这样做。

    谢谢。

    标记

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

    仅供参考。。。我尝试过其他一些事情、但行为没有变化:

    启动时:

    EPWM SHDWBMODE = CC_IMMEDIATE

    SOCAPRD =第1次
    CMPB = 0

    开始时 ADC TRIGSEL=0 (新)

    ETSEL。 SOCAEN= 0

    在第一个 PWM ISR 上:

    CMPB = 500

    有关。 TRIGSEL = 9 (EPWM3A SOCA)

    ETCLR。 SOCA = 1 (新)

    ETSEL。 SOCAEN = 1

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

    尊敬的 Mark:

    感谢您提供信息和更新。 您能否分享您的 EPWM 配置以便我来看一下?

    如何进行测量以确定 SOC 的时序? (您是否能够分享一些示波器屏幕截图来显示 SOC 相对于其他信号的计时?)

    此致、

    艾里森

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

    在每个 EPWM3脉冲的上升沿、都是一个 ISR (在 INTSEL = ET_CTR_PRD 处)。   为了进行调试、我在 EPWM3 ISR 中设置 GPIO2。  我在 ADC ISR 中清除 GPIO2。  对于测试、我只是将 CMPB 设置为 DUTY/2、因此 ISR 应处于高电平时间脉冲的中间。

    以下是逻辑捕获:

    您可以看到 GPIO2在第一个脉冲上几乎立即变为低电平、但在其他脉冲的中间变为低电平。  

    在第一个 EPWM3 ISR 处、CMPB 在进入时为0、而 ISR 将其设置为 DUTY/2。

    如果项目有所帮助、我可以通过 PM 将其发送给您。

    谢谢!

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

    尊敬的 Mark:

    感谢您提供有用的图像! 您是否能够将 CMPB 初始化为另一个值(例如500)而不是0以查看这是否与加载相关? 是的、如果您可以通过能够正常工作的 PM 发送配置!

    此致、

    艾里森

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

    您好 Allison、 我将 CMPB 设定为一个非零值(应为~1500)、并且我看到相同的结果、ADC ISR 立即触发。   我还修改了项目以禁用 ADC 触发、清除 EPWM SOCA 标志、ADC INT 标志、而不进行任何更改。  我将尽量把这个项目精简为一个小示例供大家分享。

    谢谢。

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

    尊敬的 Allison:   

    进一步测试:

    我让 CMPA 生成 EPWM 中断、而 CMPB 触发 ADC 转换、进而产生中断。

    我已将 CMPA 和 CMPB 均设置为立即加载模式。

    ePWM SOCA 触发器最初被禁用  ETSEL。 SOCAEN= 0

    在 CMPA ISR 中、我清除任何 SOCA 标志 ETCLR。 SOCA= 1、然后启用 SOCA 触发器 ETSEL。 SOCAEN= 1

    启动时、如果 CMPA = 1500且 CMPB = 3000、则会在 t=1500处看到 EPWM3/CMPA 中断、然后在 t=3000处看到 ADC ISR 中断(CMPB)。  这符合预期。

    而在启动时、如果 CMPA = 3000且 CMPB = 1500、则在*第一个 PWM 周期*我会在 t=3000处看到 EPWM3/CMPA 中断、然后在 t=3000处看到 ADC ISR 中断(CMPB)。  这是意料之外的。  我期望 ADC ISR 中断会在下一个 PWM 周期的 t=1500时发生。  在第一个 PWM 周期之后、ADC ISR 会在每个新 PWM 周期的 t=1500处发生。

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

    尊敬的 Mark:

    非常感谢您的最新调查结果。 由于 CMPB < CMPA 时似乎会发生该问题 、我想可能计数器命中 CMPB 事件的标志未正确清除、因此一旦您启用 SOCA、它就会触发 ADC ISR。  很遗憾、我今天未能对此进行测试、但明天我会详细介绍并进行更新。  

    此致、

    艾里森

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

    仅供参考...启动时、我首先要做的是将 PWM3计数器模式设置为 TB_FREEZE。  在启动脉冲时、 我将模式设置为 TB_COUNT_UP。  在将 MODE 设置为 TB_COUNT_UP 之前设置断点后、ADC 不会显示触发标志(ADCSOCFLG1为零)或溢出标志(ADCSOCOVF1为零)、并且 EPWM3 ETFLG 为零。  因此、ADC 转换似乎没有触发等待。

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

    尊敬的 Mark:

    仍然在查看代码、但 认为我也想问您是否已经在 C2000Ware 中引用 ADCSOC 示例-如果您要查看 {C2000Ware}\device_support\f2802x\examples\structs\adc_soc 或在 DINT 处实现一些初始化、可能更容易使用此示例隔离问题; PIE 初始化在那里进行是彻底的。

    另一个想法是、您可以尝试在稍后的代码(ePWM ISR)中将 ADC 中断使能更改为其他内容吗?

    此致、

    艾里森

x 出现错误。请重试或与管理员联系。