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.

关于MSP430定时器PWM输出问题

Other Parts Discussed in Thread: MSP430F2132

MSP430新手想请教各位一个问题,本人用的MSP430F2132。

现在想用Timer0输出一个频率215000hz的PWM脉冲波,占空比0.5,但要求定时器中断频率为21500,不知道能不能实现。

  •  没太明白您的意思。如果是要输出215KHZ的PWM是可以做不用定时器中断的。另外,您需要的21.5KHZ的中断频率是用于什么方面?

  • 可以使用Timer0输出一个频率215000hz的PWM脉冲波,占空比0.5,这里有一个例程,希望对你有帮助:

    //******************************************************************************

    //  MSP430F21x2 Demo - Timer_A, PWM TA1-2, Up/Down Mode, HF XTAL ACLK

    //

    //  Description: This program generates two PWM outputs on P1.2/1.3 using

    //  Timer0_A3 configured for up/down mode. The value in TA0CCR0, 128, defines the

    //  PWM period/2 and the values in TA0CCR1 and TA0CCR2 the PWM duty cycles.

    //  Using HF XTAL ACLK as TACLK, the timer period is HF XTAL/256 with a 75%

    //  duty cycle on P1.2 and 25% on P1.3.

    //  ACLK = MCLK = TA0CLK = HF XTAL

    //  //* HF XTAL REQUIRED AND NOT INSTALLED ON FET *//

    //  //* Min Vcc required varies with MCLK frequency - refer to datasheet *//

    //

    //               MSP430F21x2

    //            -----------------

    //        /|\|              XIN|-

    //         | |                 | HF XTAL (3 – 16MHz crystal or resonator)

    //         --|RST          XOUT|-

    //           |                 |

    //           |       P1.2/TA0_1|--> TA0CCR1 - 75% PWM

    //           |       P1.3/TA0_2|--> TA0CCR2 - 25% PWM

    //

    //  A. Dannenberg

    //  Texas Instruments Inc.

    //  April 2006

    //  Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.41A

    //******************************************************************************

    #include "msp430x21x2.h"

     

    void main(void)

    {

      volatile unsigned int i;

      WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

      BCSCTL1 |= XTS;                           // ACLK= LFXT1= HF XTAL

      BCSCTL3 |= LFXT1S1;                       // LFXT1S1 = 3-16MHz

     

      do

      {

        IFG1 &= ~OFIFG;                         // Clear OSCFault flag

        for (i = 0xFF; i > 0; i--);             // Time for flag to set

      }

      while (IFG1 & OFIFG);                     // OSCFault flag still set?

     

      BCSCTL2 |= SELM_3;                        // MCLK= LFXT1 (safe)

      P1DIR |= 0x0C;                            // P1.2 and P1.3 output

      P1SEL |= 0x0C;                            // P1.2 and P1.3 TA1/2 otions

      TA0CCR0 = 128;                             // PWM Period/2

      TA0CCTL1 = OUTMOD_6;                       // TA0CCR1 toggle/set

      TA0CCR1 = 32;                              // TA0CCR1 PWM duty cycle

      TA0CCTL2 = OUTMOD_6;                       // TA0CCR2 toggle/set

      TA0CCR2 = 96;                              // TA0CCR2 PWM duty cycle

      TA0CTL = TASSEL_1 + MC_3;                  // ACLK, up-down mode

     

      __bis_SR_register(LPM0_bits);             // Enter LPM0

    }

  • 1.PWM是硬件实现的,不需要进Timer中断

    2.你是需要在中断中修改PWM占空比吗?

  •         确实想看看可调的实现方法。

  • 是同一个Timer既用来做PWM,又来产生timer中断吗?

    如果是这样用,没有问题,可以实现。

    或者是做BLDC的项目?也可以实现。