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**** 2443910 points
Other Parts Discussed in Thread: TM4C123GH6PM, TM4C123BH6ZRB

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/627308/tm4c123gh6pm-timer-pwm-for-delayed-single-shot-pulse

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

你(们)好

我将 TM4C123 Launchpad 用于项目。

现在、我尝试在其中一个 MCU I/O 上执行单个延迟脉冲、而无需 CPU 干预。 为此、我选择了一个 CCP 管脚、并将分配的定时器配置为在 PWM 模式下工作。 对于正常 PWM、这是完全正常的。 但是、如果我将定时器模式寄存器(TAMR)配置为在单次触发模式而不是周期模式下工作、那么它只在未使用预分频器的情况下工作。 此外、我无法在匹配时驱动高电平、因此除非我启用反相选项、否则可能会出现延迟、因为在脉冲之后、输出保持高电平、因此不起作用。 我看到计时器 PWM 可能不是用于单次触发模式、但您如何使用计时器执行延迟脉冲?  还是仅适用于 PWM 模块?

感谢您的任何建议

此致

Lothar

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

    您是否无法使用两个计时器-一个(完全)如您所述(设置为 PWM 模式)、另一个(添加的)计时器设置为"单次触发"和"完成时中断(或超时)?   只有在进入(添加了定时器的单次触发完成 ISR)后、您才能启用您的独立 PWM 模式定时器。   请注意、这第二个(添加的)计时器提供您所寻求的"延迟"。

    并且-根据 PWM 的周期-然后"禁用并重置"(PWM 模式)计时器-它会强制它"一个且仅"一个 PWM 脉冲输出。"  (DISABLE & RESET 使其成为"就绪"、可(再次)响应"下一个触发"事件。)

    的确-这是(一些)猴子运动-但可能会引发你自己或其他人更好的想法-激发这个最近无样论坛...

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

    您好、Lothar、

     它应根据数据表(摘录如下所示)工作。 您指定了什么引脚操作?

    Timer_CFG_A_ACT_TOINTD -屏蔽计时器 A 的超时中断

    Timer_CFG_A_ACT_NONE -对于计时器 A 的超时没有额外的操作

    TIMER_CFG_A_ACT_TOGGLE -在定时器 A 超时时时时切换 CCP

    Timer_CFG_A_ACT_setto -在计时器 A 超时时时设置 CCP

    Timer_CFG_A_ACT_CLRTO -在计时器 A 超时时时清除 CCP

    Timer_CFG_A_ACT_SETTOGTO -立即设置 CCP、然后在超时时切换

    计时器 A

    Timer_CFG_A_ACT_CLRTOGTO -立即清除 CCP、然后在超时时时切换

    计时器 A 的说明

    Timer_CFG_A_ACT_SETCLRTO -立即设置 CCP、然后在超时将其清除

    计时器 A

    Timer_CFG_A_ACT_CLRSETTO -立即清除 CCP、然后在超时设置它

    计时器 A

    定时器比较操作模式

    定时器比较模式是 GPTM 现有单次触发和周期模式的扩展。 这种情况

    当应用在未来的某个时间需要改变引脚状态时、可以使用模式、

    无论处理器状态如何。 当 PWM 模式为时、比较模式不工作

    并且与 PWM 模式是互斥的。 比较模式在 TAMR 时启用

    该域设置为0x1或0x2 (单次触发或周期)、TnAMS 位为0 (捕获或比较模式)、以及

    在 GPTM Timer n 模式(GPTMTnMR)寄存器中、TCACT 域不为零。 具体取决于

    TCACT 编码时、计时器可以在相应的 CCPn 引脚上执行置位、清零或切换

    发生计时器匹配。 在16位模式中、相应的 CCP 管脚可以应用一个动作、但是

    在32位模式下运行时、此操作只能应用于偶数 CCP 管脚。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的快速回复。 是的、这肯定是一个解决方案、但在我看来、使用中断来实现一点延迟脉冲并不是一个好的解决方案。 计时器将有一个等待触发选项、因此只需要一个中断、但在使用 PWM 模式时、根据勘误表对其进行了处理。 非常感谢。
    此致。
    Lothar
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好,查尔斯
    感谢您的建议。 我将在下周尝试、并在完成后单击验证按钮。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好,查尔斯
    我更详细地了解了您描述的方法、但似乎我们可能没有相同的硬件。 TM4C123GH6PM 和 TM4C123BH6ZRB (我稍后将使用)都没有 TCACT 域。 但是、我在 hw_timer.h 中找到它、根据定义、它应该是 TnMR 寄存器中的位[13:15]、但这可能是传统的。 最后、我找到了用户指南的修订历史记录、其中指出、TCACT 位字段已于2014年6月删除。
    此致
    Lothar
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    也许(现在)之前建议的"通过综合你的函数求解"(通过几个"简单函数"的组合)从死区中上升。

    请注意、(过去) StellarisWare 9453已经证明非常稳健和稳定-避免了供应商新产品的(许多)变动/更改(尚未列出)...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Lothar、
    很抱歉、我必须参考 TM4C129数据表而不是 TM4C123来为您提供错误信息。 重新阅读 TM4C123数据表、我不能真正发现处于单次触发模式的硬件在匹配时能够按照您的预期方式自动设置(或反转)引脚。

    CB1有一个很好的解决方案供您考虑。 让我们知道这是否起作用。

    将引脚置为有效所需的延迟精度如何? 在发生匹配中断时、您能否设置 GPIO 引脚并在 ISR 中完成计时器超时时清除 GPIO 引脚? 与 CB1的解决方案相比、这种情况下的延迟不会精确。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何配置从存储器中的固定位置/值到该 GPIO 地址的 uDMA 传输?
    传输可以与定时器的完成相关联。
    换言之、计时器耗尽、触发中断、而不是调用 IRS、触发从存储器到存储器的 DMA。 如果(MY)存储器为我提供服务、则此传输不需要超过2个周期(TM4C123最大时钟下为25ns)。
    此类解决方案需要几个小时的理解时间、并且可能只需要5行编码...
    布鲁诺
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    µDMA μ A 的巨大复杂性远远超过(简单得多)的使用:两个 MCU 定时器-每个定时器被配置为"单次触发"-检测到第一个定时器的到期时间(很可能通过中断)并触发第二个定时器。 (也是"一次性")

    注"单句"(上面)定义/描述了完整的实现!     (证明简单)新提议的"µDMA "方法需要多少句话?   (您是否应该知道...)

     "背靠背"使用计时器还可能提供精确度和重复(精度)海报所需的信息-通过"许多不同的、可变的定时、互锁和多条路径"(难以(甚至)解释/详细信息)µDMA 进行的信息也是如此。

    葡萄牙,KISS 规则-即使是小技术的规则...   也注意到: [引用用户="Bruno Saraiva"]而不是调用 IRS[/引用]复杂的“µDMA”不可能“调用美国” 内部收入服务"(真正的"IRS"

    当使用"两个简单计时器"(很久以前建议/供应商批准)时、Gov't 机构不需要"警报"!

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

    感谢您提出的许多建议。
    [引用用户="Charles Tsaaa"]将引脚置为有效所需的延迟有多精确?
    实际上、它不必如此精确、延迟和脉冲持续时间也不是如此。 使用计时器中断执行延迟脉冲肯定不会有问题。 我更喜欢在硬件中执行类似这样的简单任务、而不会干扰内核。 通过在 PWM 模式下使用定时器并将其配置为单次触发定时器、它几乎可以工作。 唯一缺失的是将高电平时间移动到周期结束的标志、如下所示:
    _________                                 _________
    |       |              -->                 |       |
    |       _________________      _________________ |       |
    ^ SW 触发              ^ SW 触发

    我所做的是 CB1_mobil 建议的方法、使用计时器执行延迟并在超时时触发脉冲。 这样、我确实只需要一个中断、而不是两个中断。 需要考虑的是、在将定时器配置为单次触发 PWM 时、预分频寄存器不起作用、因此在使用定时器(非宽定时器)@80MHz 时、脉冲不能超过~1ms。

    [引用 user="Bruno Saraiva"]如何配置从存储器中的固定位置/值到该 GPIO 地址的 uDMA 传输?
    我真的很喜欢使用 DMA 执行激励模式、读取存储器中的某个位置的表并将其移动到 I/O 寄存器、尤其是在使用了许多 I/O 进行激励的情况下、但在这种情况下、它看起来有点过冲。 无论如何都谢谢。

    此致
    Lothar

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

    谢谢、我的朋友-谢谢。

    简单有多种好处-用"kiss"表示、这是一种很好的纪念。   (太奇怪了,错误地说,“禁止在这里”——就像这样。)  

    现在-虽然主要客户将我的公司限制为"StellarisWare 9453"(由于其"已知无故障"且稳定)- 但通过供应商的(可怕的名称)更新版本引入了改进/增加。  (认为 TiVo)

    请考虑以下函数:TIMER_CFG_A_ACT_CLRSETTO -该函数声称:"立即清除 CCP、然后计时器 A 超时时时设置它"

    通过我的读取-这将启用一个"单定时器(Timer_A)"来(二者)提供初始延迟(通过其单次触发)函数-然后自动驱动"CCP 高电平"-正如您所需要的!

    未显示的是"只是如何"关闭此 CCP 输出!"   我的扫描找不到"熄灭计时器输出"API 函数。   查看计时器寄存器应显示一种(或多种)此类方法...