用笔记本电脑控制MSP430 PWM



我写了一个代码,从笔记本电脑中获取两位数,并将PWM占空比更改为该数字。这是一个更大的要求的一部分,我需要在UART上控制电机速度。

#include "io430g2553.h"
#include <stdint.h>

void PWM(uint8_t duty_cycle);
void PWM_Config();

int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
   WDTCTL = WDTPW + WDTHOLD;
  BCSCTL1 = CALBC1_1MHZ;                  // Run at 1 MHz
  DCOCTL = CALDCO_1MHZ;                   // Run at 1 MHz
   PWM_Config();
   PWM(5);
   __delay_cycles(5000000);
   PWM(15);
    __delay_cycles(5000000);
   PWM(25);
   __delay_cycles(5000000);
   PWM(50);
    __delay_cycles(5000000);
    PWM(25);
    __delay_cycles(5000000);
     PWM(15);
    __delay_cycles(5000000);
     PWM(5);
   while(1)
   {}

}

void PWM_Config()
{
  P1OUT &= 0x00; // Clearing P1OUT 
  P1SEL |= BIT6 ;
  P1SEL2 &= ~BIT6 ;
  P1DIR |= BIT6; // Configuring P1.6 as Output
}
void PWM(uint8_t duty_cycle)
{
 TA0CTL =0;
 TA0CTL |= TACLR; 
 TA0CCR1 |= (duty_cycle*100);
 TA0CCR0 |= 10000; 
 TA0CTL |= TASSEL_2 + MC_1 + ID_0;// Register TA0CTL -> SMCLK/8, Up mode
 TA0CCTL1 |= OUTMOD_7 ;//Set/Reset Mode
 TA0CCTL0 &= ~CCIE; // Interrupt Disabled}

空PWM(uint8_t占空周期)函数的问题是,它第一次在P1.6处生成正确的PWM,然后如果它给定一个值,它将PWM更改为该DC,但我不能回到较低的DC。

代码中的前2个PWM功能更改为正确的占空比PWM(5),PWM(15),然后其余PWM值不产生所需的占空比。

我不能排除我错在哪里,有人可以帮助吗?

谢谢

似乎是我犯了一个愚蠢的错误。

TA0CCR1 |= (duty_cycle*100);

代替

TA0CCR1 = (duty_cycle*100);

最新更新