您好、论坛专家、
我们正在尝试在计时器 A0上运行两个外设(模块名称是 MSP430G2553)。 一个是 p3.0上的 PWM、另一个是一次性计时器。
一次性计时器使用 TA0CCR0、我们的 PWM 使用 TA0CCR2。 但是、当我运行代码时、我看到 PWM 占空比没有改变、为什么我会遇到这个问题?
MSP430g2553具有两个用于三个捕捉/比较寄存器的计时器、那么、为什么我无法同时配置这两个寄存器?
如果您遇到这种困难、请告诉我您的建议。
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.
您好、论坛专家、
我们正在尝试在计时器 A0上运行两个外设(模块名称是 MSP430G2553)。 一个是 p3.0上的 PWM、另一个是一次性计时器。
一次性计时器使用 TA0CCR0、我们的 PWM 使用 TA0CCR2。 但是、当我运行代码时、我看到 PWM 占空比没有改变、为什么我会遇到这个问题?
MSP430g2553具有两个用于三个捕捉/比较寄存器的计时器、那么、为什么我无法同时配置这两个寄存器?
如果您遇到这种困难、请告诉我您的建议。
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 寄存器、我们可以达到预期的效果吗?
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 的生成。
> CCR0 += 50000;//将偏移添加到 CCR0
> CCR1 += 4500;
该程序使用"滚动 CCR0"方法来计时、这很好、但您需要记住、CCR1 (占空比)与其有效 PWM 周期相关、该周期由 CCR0 (正在移动)定义。 从概念上讲、您需要执行"CCR1 = CCR0 + 4500"之类的操作、但无法进行设置、因为它应该相对于下一个周期(直到稍后更新 CCR0时才会开始)。
通过以比 CCR0慢的速度递增 CCR1、您最终得到元周期、这些元周期有时起作用、有时甚至不起作用。
一个简单的解决方法是使用
>CCR1 = CCR0 + 50000 + 4500; //相对于下一个周期的占空比
其中50000是(众所周知)周期时间。