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.

[参考译文] MSP430G2553:MSP430中的计时器 A0问题

Guru**** 2582405 points
Other Parts Discussed in Thread: MSP430G2553

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/978177/msp430g2553-timer-a0-issue-in-msp430

器件型号:MSP430G2553

您好、论坛专家、

我们正在尝试在计时器 A0上运行两个外设(模块名称是 MSP430G2553)。 一个是 p3.0上的 PWM、另一个是一次性计时器。

一次性计时器使用 TA0CCR0、我们的 PWM 使用 TA0CCR2。 但是、当我运行代码时、我看到 PWM 占空比没有改变、为什么我会遇到这个问题?

MSP430g2553具有两个用于三个捕捉/比较寄存器的计时器、那么、为什么我无法同时配置这两个寄存器?

如果您遇到这种困难、请告诉我您的建议。

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

    假设数字正确无误、那么您就不能从单个计时器(本例中为 TA0)中获得"双占空比"。 我想知道为什么你提到第二个计时器(TA1)、因为从你的描述中你没有使用它。

    您能更具体吗? 有时、它所做的只是一个拼写错误。

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

    Bruce、您好!

    我们在应用中使用 Timer0_A3 (TA0)来生成单次触发时间(通用计时器)。 我们的主应用还使用电容式触控感应和 RO_PINOSC_TA0_WDTp 触控感应方法。 由于电容式触控感应使用 TA1、因此我们使用 TA0进行单次触发。 我们要实现的目标是、我们需要生成 PWM 来控制 LED、并生成单次触发时间来处理其他事件。 PWM 频率可介于100Hz 至1KHz 或~40KHz 之间。

    对于单次触发定时器、我们使用的是 TACCR0、但 PWM 模块也使用了 TACCR0 (周期)和 TACCR2 (占空比)。 我们尝试将 TACCR0配置为生成特定时间(单次触发计时器以及 PWM)、并将值加载到 TACCR2以更改占空比、但占空比不会更改。

    由于计时器模块有3个 CCR 寄存器、我们可以达到预期的效果吗?

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

    我用单次触发来表示你计算一些计时器(CCR0)周期,然后声明单次触发已完成--特别是你不是每次使用的启动和停止计时器。

    您更新 CCR2的频率如何? 一个简单的错误是更新它的速度比计时器循环的速度快、因此它永远不会有机会到达 EQU2事件。

    如果您可以发布一些相关代码、例如更新 CCR2的序列、可能有人会看到一些内容。

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

    您好、Bruce、

    在单次触发计时器中、每次在经过50ms 后设置 CCR0值时、该计时器仅在电路板的启动初始化期间启动一次、并且永不停止。

    CCR2根据外部事件进行更新、例如、我们仅在按下电容按钮时进行更新、否则 CCR2不会更新。

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

    我不太熟悉 CapSense、但根据《编程人员指南》(SLAA490D)表8、 RO_PINOSC_TA0_WDTp 使用 TA0、而不是 TA1。 我不确定如何使用 TA0.2生成 PWM。

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

    您好、Bruce、

    我们将 TA1用于基于 GPIO 的外部事件、并根据事件加载一些预定义值。 如果 RO_PINOSC_TA0_WDTp  使用 TA0、那么在这种情况下、我们的定时器不应该运行50毫秒、但它运行得很好。

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

    SLAA490D 第4.4.1节声称它在每次触摸轮询操作时保存和恢复计时器设置。 我可以想象、这可能会干扰预期长时间运行的 PWM 之类的东西。

    我了解了您的症状、您在 CCR2中设置了一些值 A、PWM 根据该值运行、但如果您随后将不同的值 B 放入 CCR2、PWM 将继续(无限期)运行、就像 CCR2中仍有 A 一样。 如果您阅读 CCR2、它实际上包含什么内容? 我想知道 CapSense 是否正在执行一些操作、将恢复到 CCR2中。  

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

    Bruce、您好!

    我们已经制作了一个单独的测试代码、其中使用两个计时器一个是50ms 的一次性计时器。 另一种是通用计时器、将 SMCLK 用作时钟源、并且是连续模式。我们使用 P3.0来生成 PWM。 CCR1值加载4000并设置 GPIO、在关断周期内、CCR1保持为1000。 它能够生成 PWM、但在特定的持续时间内会生成 PWM、然后再次将其设置为高电平300毫秒。 我们无法确定为什么我们看到该 GPIO 在300 mes 内处于高电平、并且它正在停止 PWM 的生成。

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

    如果您可以附上测试代码、我可能会更好地了解您的症状。

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

    您好、Bruce、

    请查找随附的 codee2e.ti.com/.../PWM_5F00_test.c

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

    > CCR0 += 50000;//将偏移添加到 CCR0

    > CCR1 += 4500;

    该程序使用"滚动 CCR0"方法来计时、这很好、但您需要记住、CCR1 (占空比)与其有效 PWM 周期相关、该周期由 CCR0 (正在移动)定义。 从概念上讲、您需要执行"CCR1 = CCR0 + 4500"之类的操作、但无法进行设置、因为它应该相对于下一个周期(直到稍后更新 CCR0时才会开始)。

    通过以比 CCR0慢的速度递增 CCR1、您最终得到元周期、这些元周期有时起作用、有时甚至不起作用。

    一个简单的解决方法是使用

    >CCR1 = CCR0 + 50000 + 4500; //相对于下一个周期的占空比

    其中50000是(众所周知)周期时间。

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

    您好、Bruce、

    即使按照您的建议进行操作后、我们也会在这两者之间获得闪烁状态。

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

    也许我误解了您的描述。 我认为您的问题是 CCR1信号相对于 CCR0信号漂移、但这可能是有意这样做的?

    仅仅在示波器上观察原始信号、我就没有在15分钟内看到任何300ms 脉冲。 此症状的发生频率如何?

    我还应该提到的是、我没有28引脚 G2553、所以我在20引脚 G2553上使用 P1.0/.6。 从测试代码来看、我看不到它与 P3.0/.1有何不同。

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

    您好、Bruce、

    感谢您的支持、但我们已经解决了这个问题。