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.

MSP430G2412用P1.2,P1.4输出PWM的问题?

Other Parts Discussed in Thread: MSP430G2412

MSP430G2412通过设置P1SEL1和P2SEL2 ,使P1.2,P1.4输出两路相位相反的PWM波,驱动MOS全桥电路,工作时没有问题,但是在停止PWM输出时,两路最后输出是一个高电平,一个低电平,这样MOS电路就电流非常大,简易烧坏。要两路同时是高电平或者同时是低电平,MOS电路才能正常。我想把p1.2,p1.4改为普通的I/O,设置输出,都失败。还是哪里的设置错了,有没有大侠指教一下。

  • jian chen9 说:

    MSP430G2412通过设置P1SEL1和P2SEL2 ,使P1.2,P1.4输出两路相位相反的PWM波,驱动MOS全桥电路,工作时没有问题,但是在停止PWM输出时,两路最后输出是一个高电平,一个低电平,这样MOS电路就电流非常大,简易烧坏。要两路同时是高电平或者同时是低电平,MOS电路才能正常。我想把p1.2,p1.4改为普通的I/O,设置输出,都失败。还是哪里的设置错了,有没有大侠指教一下。

    设置为带死区的PWM输出呢?

  • 怎样设置,能不能给个例子。

  • 你设置的pwm占空比是多少?减小占空比,就会出现两个io同时出现高电平或者低电平,应该就满足要求了

  • 50%的占空比,而且占空比是可调的。

  • 用带死区的PWM解决不了这个问题,也不是这样用的。建议在控制结束后关闭IO口的PWM功能。用IO输出控制IO口电平。如不能实现,贴代码上来看。

  • void PwmStart(void)
    {

      TACTL = TASSEL_2 + MC_1;           // ACLK, contmode, interrupt enabled
     
                           //  CCTL0 = OUTMOD_4;                  // CCR0 toggle, interrupt enabled
      CCTL2 = OUTMOD_3;                  // CCR1 toggle, interrupt enabled
      CCTL1 = OUTMOD_6;

      CCR0 = ccr0[0];
      CCR2 = ccr0[1];
      CCR1 = ccr0[1];
    }
    void PwmStop(void)
    {
     
      TACTL &= ~(TAIE+MC0);
      P1SEL &= ~(PWM1_BIT+PWM2_BIT);
      P1SEL2 &= ~(PWM1_BIT+PWM2_BIT);
     
      P1DIR |= PWM1_BIT+PWM2_BIT;
      SetPwm1_Low();
      SetPwm2_Low();
    }

    这样还是不行的,不知道为什么这样。