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.

[参考译文] TM4C1290NCPDT:定时器设置为 PWM 模式时出现问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/892230/tm4c1290ncpdt-there-is-a-problem-with-timer-setting-to-pwm-mode

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

全部降级:
       我将 TIMER1B 设置为 PWM 模式;配置的其余部分是相同的、除非使用不同的边沿来捕捉中断更新周期和占空比、这种现象是不同的;
       1、代码部分:PWM 周期值更改模式(ms):1 -> 2 -> 3 -> 4 -> 5 - 4 -> 3 -> 2 > 1 -> 2 ... ;占空比:50%

/*定时器配置*/
GPIOPinConfigure (GPIO_PL6_T1CCP0);
GPIOPinConfigure (GPIO_PL7_T1CCP1);
GPIOPinTypeTimer (GPIO_PORTL_base、GPIO_PIN_6|GPIO_PIN_7);

TimerConfigure (Timer1_base、 Timer_CFG_SPLIT_PAIR|TIMER_CFG_A_PWM|TIMER_CFG_B_PWM);
HWREG (Timer1_base + TIMER_O_TBMR)|=0x00000500;//在下一次超时更新。

TimerControlLevel (Timer1_base、timer_B、0);
TimerControlEvent (Timer1_base、timer_B、timer_event_POS_EDGE);//timer_event_NEG_EDGE);















{InterIntClear (Timer1_base、timer_CAPB_event);TimerIntEnable (Timer1_base、timer_CAPB_event);IntEnable (INT_TIMER1B);// timerStart */ TimerLoadSet (Timer1_base、timer_B、120000 & 0xFFFF);// 1ms TimerSet (Timerb_delay)、Timerbt (0x00_delay 1)、Timerbay Timerbt (Timerbay)、Timerb_timerbt (Timerb_delay)、Timerbt (Timerbay 1)、Timerbay Timerbt (timerbay 1)、Timerbay Timerbay 1、Timerbt (timerbay Timerbay 1)、Timerbay Timerb_timerbay 1、Timerb_timerbay 1、Timerbt (timerb_timerbay)、Timerbay Tim
静态 uint32_t 周期= 120000;// 1ms
静态 uint32_t Duty = 0;
静态 uint8_t inc_flag = 1;
// printf ("timer1B int\n");

如果(inc_flag)
{
期间+= 120000;
如果(周期>= 600000)
{
INC_FLAG = 0;
}
}
其他
{
期间-= 120000;
如果(周期<= 120000)
{
INC_FLAG = 1;
}
}

占空比=周期>> 1;
TimerLoadSet (Timer1_base、timer_B、Period&0xFFFF); //周期
TimerPrescaleSet (Timer1_base、Timer_B、(周期>> 16)&0xFF);
TimerMatchSet (Timer1_base、timer_B、Duty 和0xFFFF); //占空比
TimerPrescaleMatchSet (Timer1_base、Timer_B、(占空比>> 16)&0xFF);
// TimerIntClear (Timer1_base、timer_TIMB_TIMEOUT);
TimerIntClear (Timer1_base、timer_CAPB_event);
} 

2 μ s、下降沿模式时、正常波形如下:




3 μ s、上升沿模式时、异常和波形如下所示:




谢谢。

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

    您好!

    很好地呈现-让我的头脑绕过代码逻辑的"宽度和宽度"有点早。

    您是否可以考虑-至少作为"在增加洞察力的同时加快成功"的一种方法、使用 "至少一 个-也许两个宽定时器"、使您能够消除预分频器带来的额外复杂性和要求!   (请注意、ARM MCU 通常具有"丰富的计时器"、通过减少代码的广度和范围、您的关注点会受到适当限制、通常会带来更快、更出色的结果!)

    稍后-如果"保存计时器"被证明是可取的-您可以利用您的"宽计时器成功"来返回(现在"更好地设置")您之前使用的计时器...

    以上是"kiss"的图示-一个基本步骤-仔细监控和确认-然后才延伸...   多个"移动部件"-全部在"一步"中激活-很少会导致"快速、成功、无压力"结果...

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

    您好!

    [引用 user ="user4100895"]我将 TIMER1B 设置为 PWM 模式;其余配置是相同的,除非使用不同的边沿来捕获中断更新周期和占空比,这种现象是不同的;[/引用]

    我并不完全清楚这方面的问题。 当您更改周期值时、可能会出现占空比问题、您看到的是这样吗? 也许更详细地描述一下性能与您所期望的性能之间的确切差异会有所帮助。 现在、我不清楚您的图片中的框区域是什么意思。

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

    您好!

    感谢   您的回复

    我期望的是同时调整 PWM 周期和占空比、占空比为50%;但是、实际示波器测量的波形与我预期的波形不同。

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

    您好!

    感谢您的回复 、但我不明白您的意思。

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

    [引用用户="Wesley 曾 Ae"]我不明白您的意思。

    我的朋友、

    您选择使用"半定时器"和"预分频器"-这要求您和任何"将会"的帮助者都添加代码(和工作量)!

    您可以使用(而不是)任何消除了预分频器要求的"宽定时器"(32位)来简化(简化和加快代码)!

    不好意思、但我不知道如何(甚至)更好地解释...   您能否确定您不理解的内容?

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

    您好!

    我明白这是什么意思 、但当芯片的定时器设置为 PWM 模式时、这是唯一的方法、下面是芯片说明:

    此模式下的预分频器寄存器仅用于扩展 PWM 的周期值。

    我做了一些实验、发现它们与我的描述不符、上升和下降趋势事件都会触发 PWM 周期、但不一定会发生占空比。稍后、我只更新了 PWM 周期、而不是占空比。这样我就可以做更多的实验、而不会出现任何问题。

    周期寄存器: GPTMTnILR 和 GPTMTnPR

    占空比控制寄存器: GPTMTnMATCHR 和 GPTMTnPMR

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

    哎呀-你是对的-我错了。   我的"简化"方向与 MCU (实际)功能相一致。   (并且有一些 ARM Cortex MCU "提供"32位 PWM 功能-跟踪不同供应商的 MCU 中的此类精细细节-要求...)

    [编辑]:周日12:52 CST  ,迟到的员工评论说,“不是那么快,不是“Whoops”-在这种(罕见)场合-你(意思是 Moi)可能是对的!”   (我很清楚,“好笑”(因为我用幽默(或尝试)来“大努力”) …… 然而、"Prity Support"-这是全新的!)   我们的 MCU 手册注意:

    ■32/64位工作模式:
    –32位 PWM 模式、具有16位预分频器和软件可编程的 PWM 信号反相输出


    这来自 TM4C123手册-我们从未是'129系列的粉丝。   (低)但低成本的123—提供的产品是否超出了'129?

    现在我必须指出:

    [引用 user="Wesley 曾 aaaaae">我做了一些更多的实验、发现它们与我的描述不符。  上升趋势和下降趋势事件都会触发 PWM 周期、并且会发生占空比、但不一定如此。   稍后、我只更新了 PWM 周期、而不是占空比。   这样、我就可以进行更多的实验、而不会出现任何问题。

    正如您所指出的、您"体验过"的事实非常出色!   (我相信供应商代理和我们(感兴趣)外部人员会欣赏并赞扬您的"实验"。   几乎总是-一个"精心设计和实施的实验"产生了"真正的洞察和理解"-仅 MCU 手册和 API 使用-通常不能匹配!)   (即许多(包括 Moi)"做"(即四处偷走和试验!)"学习最好"

    ***明智之举:此类"实验"-有益-必须避免:    

    • 重新利用任何 JTAG 引脚(PC0-PC3)
    • 创建 系统时钟的任何形式的配置错误  (双次、三次检查-在进行(任何)更改之前!)

    (违反本"指南"可能会将您从 MCU 中"锁定"!)

    现在、尽管我们欢迎您的实验-问题揭示了:

    • "稍后、我只更新了 PWM 周期、而不是占空比。"

    您尚未解释"为什么您认为需要"更新 PWM 周期(频率)。   我认为、更新 PWM 频率-同时不更新占空比-将产生不正确的结果。   (即占空比(将或可能)继续保持上一组值(这不是您想要的值)、或者如果 PWM 频率"升高得太多"-"旧"占空比值可能"过大"-导致不必要的结果。)

    人们认为,"最佳做法"是:

    • 禁用计时器和预分频器  (似乎从未执行过!)
    • 配置为32位、PWM 模式  (除非'129 (无法)实现!   真遗憾!)
    • 输入新请求的 PWM 频率
    • 然后才能输入所需的占空比
    • 重新启用定时器/预分频器

    大多数应用以"fixed" PWM 频率运行-并且只有占空比会定期更新-这证明了实现起来容易得多。   您(真的)是否需要更改 PWM 频率?

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

    Wesley、您好!

    是否知道在中断上下文中动态重新配置 GPTM 时需要设置时间? 您似乎还在捕获边沿并配置2个 CCPn GPIO 输入、但只配置定时器 B、递减计数还是递增计数? 已对1294进行了勘误表、不确定1290的相关信息、请查看勘误表。 通过计时器中断更新占空比显然在1294上不能正常工作。 当修改占空比匹配计数寄存器时、例如对于20-25kHz 频率、它通常会毫无理由地停止更新。

    通过一个与 CCPn 边沿计数中断无关的独立周期间隔定时器来更新匹配计数是一个好得多的工作。   

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

    您好!

    我们的应用方向是电机控制、 PWM 用于控制电机脉冲、需要实时更改周期。

    我稍后还会尝试打开/关闭计时器、尽管这是我们应该避免的。

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

    您好、GI、

    感谢您的提醒、 我查看了芯片的勘误表 、如下所示:

    但芯片的 PWM 模式正在减少计数、勘误表未做任何说明。

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

    [引用用户="Wesley 曾 aa"]我们的应用方向是电机控制、 PWM 用于控制电机脉冲、需要实时更改周期。

    "电机和驱动负载"是否受惯性影响?   因此,在很大程度上取决于"实时"的定义--它不是吗?   

    您是否足够好地"识别"您的电机类型-这需要(两者)"常规 PWM 频率和占空比"更新?   同样、人们认为"定期占空比更新"更常见!"

    如果您的"电机控制"应用非常重要-您使用的"功能更强大(保护性更强)的 PWM 发生器"证明是(大多数)出色的选择!   (我的团队现在、"子弹外"-祝您好运...)

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

    对于1ms 时基、GPTM 似乎使用 PIOSC、请记住数据表中提到的内容。 CB1的最后一个要点具有最佳方法、除非 GPTM 意图是占空比的正弦波点。 边沿计数器在1Hz 时工作正常、不确定 PWM 占空比的可靠性。 忘记实时占空比更新无论更新模式如何、匹配计数负载都可能在某个时刻锁定计时器。 GPTM 60MHz 时钟源可能会在低频时导致问题。

    /*配置 GPTM-0 16MHz、62.5us 时钟源。*/
    MAP_TimerClockSourceSet (TIMER0_BASE、TIMER_CLOCK _PIOSC);
    /* GPTM ALTCFG 时钟源低频
    * PIOSC = 10kHz 最小值、33kHz 标称值、75kHz 最大值*/
    HWREG (SYSCTL_ALTCLKCFG)= SYSCTL_ALTCLK_PIOSC;