2013-03-08 82 views
1

我已經編寫了一個代碼,該筆記本從筆記本電腦獲取兩位數字,並將PWM佔空比更改爲該數字。這是我需要通過UART控制電機速度的更大要求的一部分。使用筆記本電腦控制MSP430 PWM

#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 DUTY_CYCLE)函數是第一次它產生在P1.6正確的PWM,下,如果它被給予它改變PWM到DC的值的問題,但是我不能回到較低的DC。

代碼中的fisrt 2 PWM功能發生改變以更正佔空比PWM(5),PWM(15),然後其餘PWM值不會產生所需佔空比。

我無法解決我錯在哪裏,可以幫助嗎?

感謝

回答

1

好像我的一個愚蠢的錯誤..

TA0CCR1 | =(DUTY_CYCLE * 100);

代替

TA0CCR1 =(DUTY_CYCLE * 100);