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.

[参考译文] TM4C123GH6PM:PWM 计数器复位以立即应用新的频率设置

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/619615/tm4c123gh6pm-pwm-counter-reset-to-apply-new-frequency-settings-instantly

器件型号:TM4C123GH6PM
主题中讨论的其他器件: TM4C123

您好 Tiva 社区、

 当我尝试立即施加新的 PWM 周期(即 PWM 输出的新频率)时、我的 TM4C123GH6PM 控制器出现问题。 情况是、我们以100Hz 的输出频率运行 PWM、然后我们希望立即将输出频率更改为100kHz、而不会延迟。 问题在于、PWM 会一直等到计数器恢复为零后再应用新频率、这对于我们来说太长了、因为计数器的频率为100Hz (我们需要在初始状态下设置)。  

我们尝试的解决方案是重置计数器、该计数器应立即应用新设置、但遗憾的是、它不起作用。 我们将 PWM 配置为"PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN |PWM_GEN_MODE_DBG_RUN| PWM_GEN_MODE_NO_SYNC | PWM_GEN_MODE_GEN_NO_SYNC);"、下面是我们尝试更改 PWM 频率的方法:

PWMSyncTimeBase (PWM0_BASE、PWM_GEN_0_BIT); //将计时器复位为零

PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、CYCLE 时间);
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、5);

PWMSyncUpdate (PWM0_BASE、PWM_GEN_0_BIT); //在下次定时器到达零时更新周期变化

PWMSyncTimeBase (PWM0_BASE、PWM_GEN_0_BIT); //将计时器复位为零



当观察示波器、在我们发送命令更改频率时捕获并捕获实际 PWM 输出时、我们仍然最多得到0.01秒的延迟、这是计数器在100Hz 时恢复为零所需的时间、 这太长了、我们希望将延迟至少降低10倍。

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

    让我们知道我没有尝试过这个-但它看起来(逻辑上)是正确的。   您可以尝试-然后报告吗?

    您是否应该已经使用了函数"PWMOutputUpdateMode()"-具有最终参数"PWM_output_mode_no_sync"

    相信您使用"同步模式"-更新和时基-导致了您的(不需要的)延迟。

    PWMGenPeriodSet()和 PWMPulseWidthSet()-正如您已经列出的那样-应该"实现您的目标"、添加了"PWMOutputUpdateMode() "参数、正如我已经指出的那样...  

    避免使用(任一)同步功能-它们已在您的问题中升至"极可疑"级别...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、很遗憾、这不起作用。 我们已经尝试了不同的"同步模式"组合、根据 driverlib、这些组合应该会解决这个问题、但当它没有解决时、我们感到很惊讶。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您不提供关于"您如何相信这一点-不是为了工作!"的详细信息。    减去您的代码列表-如何确认您的实施?

    PDL"用户指南"- I (刚刚)注-中的说明显示:"此功能仅在 Snowflake 类器件上可用。"   当然、"Snowflake class definition (Snowflake 类定义)"被该供应商"隐藏得很好"。

    让我们"说明"使用此函数"的理由。   TM4C-DRL-UG 针对"PWM_OUTPUT MODE_NO_SYNC"参数化进行了如下陈述: "启用/禁用更改以立即生效。"   这就是"你所寻求的-这不是真的吗?

    该函数是否可用于 TM4C123 -您无法查看该函数的(提供的)源代码-以查看是否可以设计(部分)解决方案?   (如果您开始该流程-员工和我将尽最大努力"帮助您取得成功"。

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

    我有一个会议要参加、但我相信您必须快速响应新的电话、以便:

    PWMGenPeriodSet()和 PWMPulseWidthSet()   (更新 PWM 频率和占空比时需要这些参数)

    调用 PWMOutputState()(   恰好在2个调用之后-上面)

    在所有这些函数调用之前 -您必须使用"PWMOutputUpdateMode()"和我列出的参数(之前的)...

    请实施并提供建议。   (我看不到会阻止此函数在"4C123"下执行的"特殊寄存器"(快速看一下后)

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

    您好、Samy、

    TM4C 中有一条注释、内容如下:"通过清除 ENABLE 位禁用 PWM 不会清除 PWMnCOUNT 寄存器的 COUNT 域。  在重新使能 PWM (ENABLE = 0x1)之前、COUNT 域 应通过 系统控制模块中的 SRPWM 寄存器复位 PWM 寄存器来清零。"

    基于此、我怀疑甚至 PWMSyncTimeBase 也不能用于在某种计数周期(在本例中为唯一的计数周期)完成之前强制计数器为零。 它看起来不会立即生效、并且会立即清除计数器、这样在用于单个 PWM 通道时、新周期就可以接管。

    因此、我使用以下代码来复位 PWM 外设并重新配置它。 这提供了请求的所需即时计数频率变化。 请查看这是否足以满足您的应用需求。

    SysCtlPeripheralReset (SYSCTL_Periph_PWM0);
    
    SysCtlPeripheralEnable (SYSCTL_Periph_PWM0);
    
    PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN|PWM_GEN_MODE_NO_SYNC);
    
    PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、new_period);
    PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、new_dutycycle);
    
    PWMOutputState (PWM0_BASE、PWM_OUT_0_BIT、TRUE);
    
    PWMGenEnable (PWM0_BASE、PWM_GEN_0); 

    (是的 CB1、我首先尝试了使用  PWMOutputUpdateMode 的方法-它也不具有所需的效果。 我尝试了很多逻辑组合、但不幸的是没有结果。)

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

    @ Ralph、

    感谢您的尝试-您的善意(提及)和努力(尝试中的努力-甚至是"相当多的逻辑组合")都值得赞赏。

    毫无疑问、您实现的"详尽、完全、外设复位"将会成功。   但是-这是(有点)"粗暴"- 使器件接收到 PWM 信号、在全部七种情况下的"组合执行持续时间"内"处于损失状态-添加了 PWM 功能!

    硬回 TM4C-DRL-UG -声明:"PWM_OUTPUT MODE_NO_SYNC"参数化: "启用/禁用更改以立即生效。"    种(声称的)即时性是"我们的海报所订购的",除非"错误和/或过度说明",否则可能(仍然)有希望。   返回到"主页"后、我将"执行"指令组合过程-看看" PWM 控制的即时性"是否可能"被"淘汰"。   (我知道我们已经通过其他 Cortex M4实现了这样的"PWM 即时性"、而实施可能会有所不同-(一些)事实/方法/发现可能会"重叠"-从而实现了利用!

    感谢您的"跳进"-您是否能够检查并确定 DRL-UG (我列出的)中的相关"功能描述"是否已被"拒绝/放弃?"   感谢您的时间/关注...

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

    我不反对这种方法有些残忍,也许我可以更详细地解释一下为什么我的结论为我对萨米提出的问题的解释提供了一个解决办法。

    根据我的测试、PWM_output_mode_no_sync 的立即部分是当 PWM 计数器达到计数0时(在这种单次递减计数的情况下)、根据您所述的原因、我可以肯定地说、这是预期的用例 (不会让器件对 PWM 信号为什么在周期中停止存在疑问)、但是、Samy 发表了以下评论: "问题是、PWM 会一直等到计数器恢复为零后再应用新频率、当计数器的频率为100Hz (我们需要在初始状态下设置)时、这对我们来说太长了。 "

    在这种前提下、我发现的唯一不等待 PWM 完成计数到零的解决方案是使用完全外设复位的压摆锤方法、它会在其轨道中停止 PWM、并允许非常快速的频率翻转。

    我也同意这样一个前提,即这确实可能会使较差的目标器件由于突然的情况而有所不同,这取决于器件的情况可能并不理想。 但是、这样的"立即"响应不会等待当前的完成期限、无论如何都会引发该问题-同样、这也是 Samy 所要求的。 如果这适用于 Samy 的应用和目标器件、我们要问谁-或者我的思维模式。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    说得好(再说一次)拉尔夫-谢谢。

    话虽如此-这是否不是(继续)"直接飞行"的"DRL-UG"-(多年来)一直是众多(尤其是 Moi)的"关键技术(解释性)参考"?

    我已经介绍(未更改)该"PWMUpdateOutputMode()函数的"意图"-当使用"不同步"参数时。   遗憾的是、到目前为止、无论是您还是海报、都没有发现要实现的(正确的)序列(强烈建议)、而且经常需要"立即 PWM 解决方案!"

    还有一个关键/关键点-提供"一般解决方案"是否不是最好的、虽然"满足海报需求"、但它足够广泛、足以满足(许多)"后续线程阅读器"的更广泛需求-谁会涉及稍微不同的操作细节?   (显然是- Mais oui?)    因此-我们"接受"一 个"低于标准"的 PWM 更新功能 -(勉强满足)"这张海报的独特需求"-无法真正(近乎普遍)满足!    这应该是我们的真正目标-这不是真的吗?   (并且证明最适合您的公司-同样-性能受损总是 令人不快!)

    "DRL-UG"的某些部分是否"存在争议"(减去任何工厂通知)、如果是、我们"如何以及何时"知道?    

    这些不是(完全)"您的"问题-但仍然"沉默"-而"明亮(无脂日光)"(在这里展示) 证明是最好的、 "标识符/消毒剂"-它不是吗?

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

    当我有机会记录这些方法时(今天我不太愿意执行此任务)、我将发布有关所有相关方法的一些逻辑捕获、看看我们是否能够就每个选项对更改 PWM 的影响达成共识。 如果我对您的建议的编码解释未能提供您预期的结果、您也可以通过这些采集结果向我提供反馈! 无论哪种方式、只要我提供这些信息、我就认为我们能够解决关于 DRL-UG 是否准确的争论、因为这应该有利于每个人。 敬请期待。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ralph、

    [报价用户="Ralph Jacobi"]请继续关注

    我会-提供我的"PLL 驱动 CAN 通道"不会、"漂移关闭!"   (不应如此张贴的"编织"证----和接受----一种"类似?")

    我也是"Behind the 8-ball (8球背后)"、因为我想自动执行"函数调用序列"、尝试"消除" DRL-UG 函数的"现实"-(如文所示)直接满足海报的要求。

    同样、解决"一张海报(有限)的目标证明是好的"-解决多人(更一般)的需求-证明是很好的!   这是一个"更具挑战性、更恰当(几乎受到启发)的目标"-这不是吗?

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

    我的同事 Samy 一直在度假。 因此,我代表他对迟交的答复表示歉意。

    我刚刚实现了你的算法 Ralph、外设复位、它运行得很好。 它将我们的延迟从50ms 降低到大约0.2ms。

    非常感谢大家花时间和精力解决我们的问题。 我们衷心感谢您的参与。

    此致、
    Alan Goran
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们也要感谢你--戈兰先生吗? (很少得到感谢)

    "确定"的是、" PWM 输出损失"-即使很短-也不会造成有害影响吗? (此类伤害不能立即"到达或被注意"!)

    我仍然计划自动执行代码序列(和监控)-并采用 DRL 的特殊 PWM 功能-这完全"满足您的需求"(接近瞬时的 PWM 频率变化)-同时避免" PWM 输出丢失!"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    不确定它是否会造成任何有害影响、因为我尚未对它进行任何广泛的测试、但一切看起来都不错、功能合理。

    具有"即时 PWM 频率变化"功能将是一个很好的功能! 正如我之前提到的、由于这个原因、我们有50ms 的延迟、这是相当长的时间。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Alan Goran">实现"即时 PWM 频率变化"功能将是一个很好的功能! 正如我之前提到的、由于这个原因、我们有50ms 的延迟、这是相当长的时间。[/引述]

    同样、也是0.2mS 的延迟、尤其是当 DRL 清楚地显示"存在立即 PWM 更新功能!"时    (将负载从100Hz 转换为"无输出"、然后转换为100KHz 不是"好"、这与"教科书"太远了!)   [甚至从100Hz 到100KHz 的转换-立即完成-关注... (笑声) 首选是"一系列增量更改"-但始终具有"无磁 PWM "-而不是蛮力破解、"关闭!"]  

    我们"未被告知"""负载或器件、即"PWM 控制"、但如果它是"正常"负载、"中间缓冲器/升压电路"和(许多)负载都会对更渐进的变化做出更好的响应...

    您(和他人)/我们的"最后/唯一"(最佳)希望-功能序列的某种组合可能会"淘汰"供应商 DRL 承诺的即时 PWM 更新!   (和"卓越的表现...")