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.

[参考译文] MSP430FR2355:在连续模式下使用计时器进行 PWM?

Guru**** 2536040 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1026319/msp430fr2355-pwm-using-timer-in-continuous-mode

器件型号:MSP430FR2355

你好。

我尝试在连续模式下对 TB1使用输出模式3 (图14-13 UG)。  根据是否为12、16等位、似乎建议 TBxR 计数到一个终端计数。 (TBxCTL 中的 CNTL 位)。  Resource Explorer 不显示连续模式 PWM 的示例。  我有以下代码、它会按预期设置所有寄存器。  有人能告诉我我哪些寄存器设置不正确吗?  我似乎得到的输出看起来像向上计数模式、而不是连续的、即使在寄存器中正确确认了该模式也是如此。

    TimerSetup.pTimerx = TIMERB1;
    TimerSetup.Timer_Config.Pwm[0] = PWM_CCR1;
    TimerSetup.Timer_Config.Pwm[1] = PWM_CCR2;
    TimerSetup.Timer_Config.PwmAction[0] = SET_RESET;
    TimerSetup.Timer_Config.PwmAction[1] = SET_RESET;
    TimerSetup.Timer_Config.PwmOnEdgeTime[0] = 3500;
    TimerSetup.Timer_Config.PwmOnEdgeTime[1] = 3000;
    TimerSetup.Timer_Config.TimerCountDirection = CONT;
    TimerSetup.Timer_Config.TimerSrc = ACLK;
    TimerSetup.Timer_Config.pTimer_Interval.Timer_Unit = MILLISECONDS;
    TimerSetup.Timer_Config.pTimer_Interval.Timer_Interval = 4000;
    TimerSetup.Timer_Config.IRQ = CCR0;

基本上、在4000ms 时、输出关闭、PWM_CCR1在3500ms 打开、CCR2在3000ms 打开。

谢谢

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

    跟进....

    将 Timer_Interval 更改为2100ms、PwmOnEdgeTime[0]= 1900和 PwmOnEdgeTime[1]= 1700不会改变任何东西.....

    根据 UG 图片、我期望脉冲为200ms、周期为4秒。  ACLK (32768)被2分频、因为2100ms 大于2s、因此在这种情况下、终端计数为4秒。  我在示波器上的结果显示了2100ms 的周期。

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

    在输出模式3中、当计数达到 CCR1-x 时、输出将开启、而当计数达到 CCR0时、输出将关闭。 (不是连续模式下的终端计数。) 计时器随后将继续递增计数、直至其回滚。 根据您的描述、它似乎正在执行该操作。

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

    你好,David。。

    是的、我知道应该这样做、但在我的情况下、它在到达 CCR0时关闭

        TimerSetup.pTimerx = TIMERB1;
        TimerSetup.Timer_Config.Pwm[0] = PWM_CCR1;
        TimerSetup.Timer_Config.Pwm[1] = PWM_CCR2;
        TimerSetup.Timer_Config.PwmAction[0] = SET_RESET;
        TimerSetup.Timer_Config.PwmAction[1] = SET_RESET;
        TimerSetup.Timer_Config.PwmOnEdgeTime[0] = 1900;
        TimerSetup.Timer_Config.PwmOnEdgeTime[1] = 1700;
        TimerSetup.Timer_Config.TimerCountDirection = UP;
        TimerSetup.Timer_Config.TimerSrc = ACLK;
        TimerSetup.Timer_Config.pTimer_Interval.Timer_Unit = MILLISECONDS;
        TimerSetup.Timer_Config.pTimer_Interval.Timer_Interval = 4500;
        TimerSetup.Timer_Config.IRQ = CCR0;
    

    使用上面的代码我的分频器到 ACLK (32768)为4 = 8192Hz……这意味着终端计数65535为8秒。  我的 TB1CCRx 寄存器如下所示:expected...see。  我的示波器显示 CCR2 (4500ms - 1700ms = 2.8秒)和 CCR1 (4500ms - 1900ms = 2.6秒)的正确导通时间。  但我不理解的是、示波器显示的波形周期为4.5秒(4500ms)、而不是8秒、这是终端计数。  问题是为什么? 我在这里出了什么问题?

    谢谢

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

    您可以看到计数器模式为"UP"。 这就是原因。

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

    哇……呃……… 非常感谢...这里有认真的监督。

    我正在获得预期的结果。。。