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.

[参考译文] TMS320F28069:在不使用同步链的情况下对齐 EPWM 的偏移值

Guru**** 2587345 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/912282/tms320f28069-offset-value-to-align-epwms-without-using-sync-chain

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

感谢您的支持。 我解决了我之前的问题、但现在我的问题略有不同

我正在使用6个 ePWM (ePWM1至 ePWM6)、所有 PWM 目前都以60kHz 的频率工作并进行同步。 我想在20kHz 时使用 ePWM5、所有频率均为60kHz。 已禁用 ePWM5的同步链。 但为了保持同步效果、我想为 ePWM5引入偏移值。 是否有任何计算偏移值的方法? 当我从 WA 值中减去246 (基于60kHz)时、所有 PWM 都正确对齐。 但我对此数字没有任何理由。 这可能是每个 ePWM 之间的延迟。

此致

Sajin Arakkan

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

    Sajin、

    请原谅我、因为我不是嵌入式编码器的专家。

    为了启用一个 C 代码客户、我建议他们在开始使用 TBCLKSYNC 执行时同步所有 PWM。 因为您只想在主 PWM 和 ePWM5之间保持0度时钟相位。 两个 PWM 共用一个时钟、因此它们不会随着时间的推移而漂移。  

    看看嵌入式编码器、我认为它不支持此功能。 不过、您可以使用 TBPHS 来同步 PWM。 我假设您已经意识到、对于连续 PWM 逐周期同步、您将需要最慢的 PWM 作为主器件。  

    因此、要回答您的问题、如果您使用同步链、我预计只会有几个周期的延迟。 如果嵌入式编码器在其他 PWM 之后的某个时间刚刚启用 PWM5、我无法保证该值将保持一致。 它可能取决于软件执行时间、这可能随编译器版本而变化。 这实际上取决于 Embedded Coder 如何转换为 C 代码。

    您是否知道 Embedded Coder 是如何同步它们的、它是否只是随机延迟?

    此致、
    Cody

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

    您好、Cody、

    感谢您提供此提示。 请告诉我如何在 c 代码中使用 TBCLKSYNC。 我稍后将了解如何在嵌入式编码器中使用它。

    此致

    Sajin

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

    您好、Cody、

    我从事与 Sajin 相同的项目。 背景是该项目是一个双向 DCDC 转换器。 ePWM 1-4控制功率 FET、ePWM5控制制动电阻器。

    我正在尝试在28069 Piccolo launchpadXL 上使用 C 来解决该问题。 这是为了查看此问题是否可以在低层面上解决。 如果我们可以使其正常工作、则可以使用 Simulink 进行申请。

    重新迭代我们的要求(由于硬件被冻结)

    ePWM 1-4 (同步且全部以60kHz 的频率运行)

    ePWM 5 (与上述4同步并以20kHz 的频率运行)

    ePWM 6 (与60kHz ePWM 1-4同步的 ADC SoC 触发器)。

    我想在您之前的帖子中、您说无法将60k PWM 与20K 同步。 只能达到20K 至60K。 如果是这种情况、那么我们没有现有硬件的解决方案。 你同意吗?

    您还提到了用于同步的 PHSEN。 我不理解这是因为它用于相移不同步?

    感谢你的帮助

    此致、

    Graham

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

    Sajin、

    要在代码开始时对齐信号、只需使用 TBCLKSYNC。

    格雷厄姆

    [引述 USER="Graham Hunt]我想在您之前的帖子中、您说无法将60万 PWM 与20万 PWM 同步。 只能达到20K 至60K。 如果是这种情况、那么我们没有现有硬件的解决方案。 您同意吗?[/引述]

    您的理解接近、但并不完全正确。 更清楚的是、20kHz 信号无法以60kHz 的速率接收同步信号、这将在20kHz 的时基计数器每个周期达到其最大值之前将其复位。  

    您可以在以下位置找到使用更高频率 PWM 同步较低频率 PWM 时的问题说明: https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/623241/2299699#2299699 

    如果您在60kHz 和20kHz 信号之间进行相移、上述问题只是一个大问题。 如果它们具有某种恒定相位关系、您可以同步一次 ePWM1和 ePWM5、并且由于它们共享时钟、因此它们将始终与您同步到的任何偏移保持同步。(如果您愿意、您可以同步到0偏移)

    [引用 USER="Graham Hunt)]您还提到了用于同步的 PHSEN。 我不理解这一点、因为这是用于相移不同步?

    因此、当一个 SYNC 信号进入时、C2000 PWM 内部发生的情况是:TBCTR (时基计数器)寄存器被载入 TBPHS (时基相位)寄存器中的值。 这使得用户能够在不同 PWM 之间保持一个复杂的相移关系。 如果您希望 PWM 同步、嗯、这只是0度相位偏移、所以将 TBPHS 加载为0。(它的默认值) Simulink 将其中的一些信息提取出来、那么您最好查看技术参考手册、该手册对这些概念进行了全面介绍!

    你们提出了所有正确的问题、我很有信心你们能顺利解决这个问题。

    此致、
    Cody  

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

    您好、Cody、

    感谢您的快速回复。 我同意、我们即将来到这里、感谢您的专家帮助。

    我已将 Simulink 从环路中取出、并使用28069 launchpadXL 来控制 ePWM 1和2。 当 ePWM1为60K、ePWM2为20K 时、当我连接它们时、ePWM2会始终保持高电平、这是您建议的原因。 它正以 ePWM1的较快频率复位。

    当我切换频率(ePWM1 = 20k 且 ePWM2 = 60k)时、一切正常。 因此、我们将使用 TBCLKSYNC o.k。

    因此、我认为这是可以理解和证明的。

    但是、我们仍然存在硬件配置方式的问题(与往常一样、我们公司希望软件随着硬件冻结以及生产和要求发生变化而发生变化)。

    查看您之前提到的帖子、我在下面以黄色突出显示了您建议的一种可能的解决方案。 由于硬件原因、选项1不是选项。

    e2e.ti.com/.../TI-support-material.docx

    我是对的吗? 这是否需要使用中断例程、该例程将在60k 信号的第3个周期为 EPWM5启用 SYNC?我们不需要在实际应用中对 ePWM5 wrt ePWM1进行相移。 ePWM5用作制动电阻器、HW 家伙希望它与 ePWM1-4同步、以实现 EMC。 但是、如上所述、当我在 ePWM1 = 60k 和 ePWM = 20k 的 launchpadXL 板上尝试时、我会在初始化期间进行同步、但它们不同步。 我根本不会进行相移。

    总之、我认为我需要调查2. 以黄色突出显示。

    此致、

    Graham

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

    格雷厄姆

    为了演示其工作原理、我建议先使用 C 代码进行尝试。

    是的、您可以按照所述进行操作、并每三个周期同步20kHz 信号。 不过,我认为这是没有必要的。  


    返回本实验:

    [引用用户="Graham Hunt ] ePWM1在60K 时、ePWM2在20K 时、当我连接它们时、ePWM2会始终保持高电平、这是您建议的原因。 它正以 ePWM1更快的频率复位。[/QUERP]

    这次尝试禁用 ePWM2的 TBPHSEN 寄存器将解决您的恒定高输出问题、因为周期性同步脉冲不再影响 ePWM2。 现在、让我们尝试在 ePWM1和 ePWM2之间添加一个相位同步。 但是、如上所述、在设置 PWM 时、不要像之前那样使用同步链、而是尝试使用 TBCLKSYNC 技巧。 实际上、如果您从 C2000Ware 示例开始、我怀疑已经为您完成此操作。

    现在看看您的信号、它们是否同步?(它们应该是)

    此致、
    Cody
     

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

    您好、Cody、

    是的、尝试使用 TI 示例在 C 语言中实现这一切。

    我尝试在60k 信号的每3个脉冲上应用一个中断的 SWSYNC、但无法使其正常工作。 我对任何可用的示例都感兴趣。

    与一些硬件人员讨论后、我在所有 PWM 初始化完成后返回 TBCLKSYNC。 这起作用了。 我可以看到、在脉冲开始时、它们是对齐的、并且保持对齐。

    我的问题是、当我在 ePWM1上执行60K 和20K 并触发时(60k)、那么2个波形将不同步(如示波器上所示、当 ePWM1被触发时)。 ePWM2四处走动)。 一旦我将触发器移动到 ePWM2 (20k)、2个信号就处于同步状态。 (两个信号在示波器上都是静态的)

    这是我之前尝试在 ePWM1上使用示波器触发器20k 和60k 时感到困惑的地方。 它工作正常。 然后、当我应该将 ePWM1移动到 ePWM2时、我切换到60k/20K 并保持 ePWM1上的示波器触发。

    要解决的下一个问题是如何在 Simulink 中的初始化代码之后添加 TBCLKSYNC 设置、但这是一个 MathWorks 问题、可帮助我们解决。

    感谢你的帮助。 很高兴这个问题得以解决

    此致、

    Graham

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

    格雷厄姆

    我不知道有任何示例准确地显示了该代码。 不过、应该可以进行写入。

    很好、我很高兴您能做到这一点! 您将在 Mathworks 论坛上打开一个主题吗? 如果是、我想查看他们的回答、您能在此处链接一下吗?

    在硬件定义后、偶尔会捕获这种高频 PWM 同步低频 PWM 问题。 如果 Mathworks 能够支持此修复程序、那将会更好。 我听说过一些用户使用嵌入式编码器合成他们的代码、然后再调整 C 代码。 这可能是您的选择。

    此致、
    Cody  

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

    您好、Cody、

    来自 Mathworks 应用工程师的以下回复、该回复解决了我们的问题。 我们将 TBCLKSYNC 设置添加到 ePWM TLC 文件的开始部分。 这实际上会将代码放入初始化部分。

    ######################################################################################

    块本身的源代码不在支持包中提供。 但是,根据您描述的内容,您实际上不需要它,因为它不会改变模拟中的行为。

     

    c2802xpwm.tlc 文件完全控制如何将 PWM 块转换为代码。 如果要将几行 C 代码添加到生成的初始化函数中,只需将该 C 代码放在 tlc 文件中的正确位置(在“start”函数中,从第106行开始,具体取决于版本) 它将为您编写。

     

    我建议您在进行修改之前备份原始文件,并考虑将修改后的版本放在项目中(在 MATLAB 路径上较高位置),这样您的版本就可以使用,而无需触摸已安装的版本。 这使得通过签出项目来确保其他人都具有相同的设置更加容易、并且不必触摸已安装的文件。