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.

[参考译文] CCS/TM4C123GH6PM:将 PWM 与 TivaWare_C 结合使用

Guru**** 2457760 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/642762/ccs-tm4c123gh6pm-using-pwm-with-tivaware_c

器件型号:TM4C123GH6PM

工具/软件:Code Composer Studio

你好!!

我需要有关将 PWM 与 TivaWare_C 配合使用的建议

当 PWM 计数器达到0时、我将尝试更新 PWM 周期和脉宽值。

我认为使用下面这样的函数会起作用、但我不确定。

------

PWMGenConfigure (PWM1_base、PWM_GEN_2、PWM_GEN_MODE_DOWN|PWM_GEN_MODE_SYNC);

------

我是否必须 使用其他函数或标志、或者仅在上述句子中没有问题?

期待得到答案。

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    仅当您需要同步多个 PWM 通道时、"PWM_GEN_MODE_SYNC"参数才会出现。 只有当计数器的值为零时、周期或脉宽的任何变化才会自动发生。 如果同时改变周期和脉冲宽度、我建议您在基于计数器等于零的中断例程中执行该操作。 然后、除非您有较长的中断延迟、否则这两个中断都将在下一次计数器到达零时更新。 您可能需要查看 TivaWare 中的示例例例例程序:
    C:\ti\TivaWare_C_Series-2.1.4.178\examples\peripherals\PWM\reload _interrupt.c
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Young Yoing"]当 PWM 计数器达到0时,我正在尝试更新 PWM 周期和脉宽值。

    我通常同意供应商的指导、但他(温和)要求您"违反 kiss "、并添加中断造成的(IMO)"太早"复杂问题。

    相反-我会指导您重点查看"外设库驱动程序用户指南"-其中详细介绍了该供应商广泛的"API"(应用程序编程)、并一定会建议和确保您的进度。

    您寻求了两个特定的 PWM "目标"-您的审核(如刚才所述)将快速/轻松地记录2个(精确回答)功能:

    • PWMPeriodSet()

    • PWMPulseWidthSet()

    请注意、这两个函数都不会"将您绑定"到中断-作为"亲吻"的长期信徒/信徒-我觉得这是"好事"。    Kiss 教人们"关注一个小目标-实现目标-然后-添加"改进的风险"。   在这里和许多论坛/学科中、尝试过多的尝试-"一次又一次"-证明了"时间与时间"-从而破坏、延迟甚至破坏-用户士气和努力!

    列出的手册指定了每个函数所需的参数字段。   在您掌握了这两个功能后、我们可以转到将 PWM 更新绑定到特定的触发器。   (现在我和  Kiss 一起站在一边——以及由此带来的速度和简单性——这推动了(甚至是本记者)——“有时”成功...)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我是否可以建议在运行时更简单、避免更新周期。 虽然我需要这种能力、但我不需要定期这样做。

    在运行期间更新周期很棘手、尤其是缩短周期。 如果出现任何错误、您可以获得非常长的脉冲宽度。

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

    啊... 是的-这将是"违反亲吻"-因此 CB1会升高、"现在-由他自己的 petard 引起的。。。"

    实际上、在我们的"电机优化运行"期间、我们确实会"改变 PWM 频率"、但在电机停止时、"始终且仅限"!   正如您 所注意到的那样-这样做"现场/动态"会引入非常"非亲吻"的潜在"不愉快!"

    我们的海报未具体说明 HIS 为"电机应用"、但损坏的可能性-从"超长脉冲"喷出-也可能导致(其他-非电机)设备或设备损坏。   像往常一样,“安全战胜索瑞!”    (如果有的话,我会喜欢的!)

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

    [引用 USER="CB1_MOBIT)]实际上-在我们的"电机优化运行"期间、我们确实会"改变 PWM 频率"-但当电机停止时、"始终且仅限"!   正如您 所注意到的那样-这样做"现场/动态"会引入非常"非亲吻"的潜在"不愉快!"

    我必须做的一次是、在需要极低占空比且只能通过降低频率来实现的情况下、进行制动。 使其正常工作所需的优化(超出 HW PWM 工作范围)非常有趣。 在该运行阶段、生成的 PWM 具有接近随机频率的输出。

    Robert

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

    [引用用户="Robert Adsett">我不得不做的一次(改变 PWM 频率"实时")涉及制动、此时需要非常低的占空比、并且只能通过降低频率来实现。 [/报价]

    这是一个非常好的结构-适当地指出-但我(非常轻微)可以这样说:".通过降低频率,必须有低占空比-并且只能获得-并且"只有在那时证明是足够的"。   

    如果我"正确读取您的应用"-您需要"足够的制动器导通时间"-但又标有"制动器关闭"-以便(同时)机械和电气(功率)级在"制动"期间保持在各自的"安全工作区域"-同时保持减速(和停止)规格。 遇到了...

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

    [引用 USER="CB1_MOBIT"]如果我"正确阅读您的应用程序"-您需要、"足够的制动器导通时间"-但散布"制动器关闭"

    是的、关闭。 限制因素是死区不允许控制更短的导通时间、因此有必要增加关断时间、以使占空比能够可控且反复较小。

    虽然通常的故障模式有时会产生非常令人愉快(尽管不可控)的制动、但实际上不会损坏任何东西、但对 SOA 来说还是相当正确的。 制动强度及其是否引起电流限制在很大程度上取决于电机。

    Robert

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

    作为您的(额外供应商... 例如、"Inspired")标签说明-此类"电机插入"可能由以下因素引起:

    • 过于激进的电机制动(过于苛刻、过于持久-或(RIP 亲爱的电机)!
    • 电机反转-速度时(尤其是在负载下)

    这种"堵塞"可能(实质上)对 BLDC 电机的转子进行"退磁"-必须避免!   

    正如朋友 Robert 所指出的-(非常)快速而准确的"电流监控/限制"-并且将"电机反转"限制在仅被视为"安全"的那些(较低)速度-提供了针对此类电机销毁的最佳防护...

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

    [引用 USER="CB1_MOBILE"]

    这种"堵塞"可能(实质上)对 BLDC 电机的转子进行"退磁"-必须避免!

    [/报价]

    请注意、我指的是牵引电机。 这些是没有磁体和独立磁场控制的直流电机。 在这种电机中、至少在我们所针对的应用中 、堵塞是主要的制动机制(是的、在满负载时)。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对"牵引电机"的限制使我无法识别...
    我介绍的指南对 BLDC 电机"非常重要"。 (在"多个"应用领域中获得极大的普及...)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我还想在零中断例程处更新周期和脉宽值是一种时间依赖性太强的方法、

    因此、当发生比较匹配和加载中断时、我将更新两个向下比较匹配中断时的值、并通过其他独立引脚控制 GPIO。

    你认为我的方式不会违反亲吻吗?

    如果有更简单的使用方法、我们将感谢您的帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你的答复。
    我还有另一个问题要问。

    我想在向下比较匹配时停止 PWM 并复位 PWM 发生器计数器。
    因此、我检查了数据表和 TivaWare、发现 PWMSyncTimeBase 函数使用 PWMSYNC 将计数器复位为0。

    但是、当我尝试使用 PWMSyncTimeBase 时、计数器没有返回到0值。
    是否有必要的条件、如发电机应被启用或其他条件?

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

    Young Yoon、您好!

    CB1/Robert 指出、PWM 发生器的最佳做法是首先与 Kiss 成为朋友。

    要回答 您的最后一个问题 、对 所有发生器计数进行突然和野生的更改 、可能会导致直流逆变器产生灾难性的结果。 即击穿、必须  通过准确及时的受控软件/硬件限制来逮捕1/2桥析构器。  匹配计数 GEN 更新 COMP 最初 可能看起来是一个不错的选择、结果可能会以不良的方式影响外部电流控制环路。

    通过在    所需 PWM 频率下添加(逐渐)脉宽更新周期(1-2ms)的外部控制环路、死区 的定时控制 可以在增加 PWM 波形生成精度的同时防止 ST。   

    例如、C2000 添加了 CPU 清理周期、以在闭环系统中获得 PWM 精度。 TM4C1294 利用 CPU 速度(120MHz)在 PWM 占空比更新中保持外部环路被处理、而不会跳过或缺失更新周期。

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

    [引用 user="Young Yoyo"]我也认为在零中断例程处更新周期和脉宽值是一种与时间相关的方法,[/引用]

    让我更好地解释我的建议。 如果您需要同时更新周期和脉冲宽度、那么存在的危险是、如果它们不同时更新、您可以创建"太长" 或"太短"脉冲。 例如、如果您需要增加周期、但也希望通过增加脉冲宽度来使占空比大致保持相同、则可能会发生这种情况。 由于实际变化只发生在计数器=0 (递减计数)时、如果在计数器到达零前同时调用 PWMPeriodSet()和 PWMPulseWidthSet()、则没有问题。 但是,如果不以某种方式将软件与计数器同步,则可能会导致对 PWMPeriodSet()的调用在计数器到达零之前,而对 PWMPulseWidthSet()的调用在计数器到达零之后。 然后、您将有一个具有新周期的脉冲、但旧脉冲宽度。

    一种简单但效率低下的方法是读取计数器。 如果该值足够大、则更新周期和脉冲宽度。 如果该值太小、请在循环中等待、直到重新加载计数器。 第一个问题是、如果您选择的计数器值太大、通常会浪费 CPU 时间。 第二个问题是、大小足够大? 这可能很难确定、尤其是系统是否正在使用中断运行。

    好的、下面是它的实际实现方式。 (是的、这是一种温和的微动、可以超越亲吻、但您可以逐步做到这一点。) 编写一个用于更新周期和宽度的小例程、该周期和宽度将所需的周期和宽度存储在静态变量中、并在计数器等于零时启用 PWM 中断。 然后、在 PWM 中断例程中、您使用静态变量中的值快速调用 PWMPeriodSet()和 PWMPulseWidthSet()。 这遵循了中断例程应较短的原则。 实际上、您有整个周期来设置新的周期和脉冲宽度、这比使用向下比较中断的时间要长。 这种方法的缺点是、在更新新值之前需要一个额外的周期。

    您可以混合使用这两种方法。 如果计数值为高电平,只需立即调用 PWMPeriodSet()和 PWMPulseWidthSet()。 如果该值太低、请启用中断以执行该操作。 这样、您就可以快速更新、而不会浪费时间。

    最后、如果您只更新脉冲宽度或仅更新周期、则无需执行任何调用适当例程的操作。