[求助] MSP430F6736 PWM 無法調整頻寬

alien1026   2015-12-29 17:15 楼主

各位大大:
      以下是我的source code ,照理說當我調整 TA1CCR1 的數據時頻寬就會隨之改變,但是不管我數值改多少一直都是一樣的情況,會是我clock選擇的問題嗎?
在麻煩各位前輩幫幫我看一下了>< 謝謝.

int main(void)
{
  // Stop watchdog
  WDTCTL = WDTPW + WDTHOLD;
  UCS_init();
  P8DIR |= BIT4;
  P8SEL |= BIT4;              

  InitSystemCLK();
  TA1CCR1 = 0;
  __enable_interrupt();
  // LPM0 (shut down the CPU) with interrupts enabled
  __bis_SR_register(CPUOFF | GIE);

}



// This will be called when timer counts to TACCR1.
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
{
  int new_ccr1 = 2000;

  // Clear interrupt flag
  TA1CCTL1 &= ~CCIFG;

  TA1CCR1 = new_ccr1 ;
}



void UCS_init(void)
{
   // Set Vcore to accomodate for max. allowed system speed
   PMM_setVCore(PMM_BASE,PMMCOREV_3);  // Used PMM_CORE_LEVEL_3

  // Initialize LFXT1
    UCSCTL6 &= ~(XT1OFF);                   // Enable XT1
    UCSCTL6 |= XCAP_3;                      // Internal load cap 12pF

  // Loop until XT1 fault flag is cleared
    do
    {
        UCSCTL7 &= ~XT1LFOFFG;             // Clear XT1 fault flags
    } while (UCSCTL7 & XT1LFOFFG);         // Test XT1 fault flag

  // Use 32.768kHz XTAL as reference
  //  LFXT_Start(XT1DRIVE_3);

  // Setup UCS
    UCSCTL3 |= SELREF_0;                   // Set DCO FLL reference = REFO
    UCSCTL4 |= SELA_0;                     // Set ACLK = REFO

  // Initialize DCO to 2.45MHz
    __bis_SR_register(SCG0);               // Disable the FLL control loop
    UCSCTL0 = 0x0000;                      // Set lowest possible DCOx, MODx
    UCSCTL1 = DCORSEL_7;                   // Set RSELx for DCO = 24 MHz
    UCSCTL2 = FLLD_0 | 611;                 // Set DCO Multiplier for 20MHz
                                                            // (N + 1) * FLLRef = Fdco
                                                             // (611 + 1) * 32768 = 20MHz
                                                             // Set FLL Div = fDCOCLK/2

    __bic_SR_register(SCG0);               // Enable the FLL control loop

  // Worst-case settling time for the DCO when the DCO range bits have been
  // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
  // UG for optimization.
  // 32 x 32 x 12 MHz / 32,768 Hz = 375000 = MCLK cycles for DCO to settle
  __delay_cycles(625000);

  // Loop until XT1, XT2 & DCO fault flag is cleared
  do
  {
      UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG);
      // Clear XT2,XT1,DCO fault flags
      SFRIFG1 &= ~OFIFG;                 // Clear fault flags
  } while (SFRIFG1 & OFIFG);             // Test oscillator fault flag

     __no_operation();  
}

void InitSystemCLK(void)
{
   // Setup TA1
   // PWM period
    TA1CCR0 = 4500;  
    TA1CTL = TASSEL_2 | MC_1 ;       // SMCLK, upmode, clear TAR
    TA1CCTL0 = OUTMOD_7 | CCIE;      // CCR0 interrupt enabled



}


回复评论 (10)

居然有那么多用繁体提问的。。。
说说你的程序思路吧,一样的情况是怎么个一样法?
点赞  2015-12-29 22:56
模式7我记得好像是PWM,比值决定的,要调脉宽得调CCR0吧
点赞  2015-12-30 08:46
引用: qiushenghua 发表于 2015-12-29 22:56
居然有那么多用繁体提问的。。。
说说你的程序思路吧,一样的情况是怎么个一样法?

好的
就是不管TA1CCR1調整多少 她的duty cycle都是固定不變的....
我之前大部分都是用G2553來寫 clock選擇比較單純 功能也是正常的
第一次用F6736來寫 clock複雜蠻多的 所以才會想說是不是clock我沒有寫好的問題
点赞  2015-12-30 08:55
引用: 数码小叶 发表于 2015-12-30 08:46
模式7我记得好像是PWM,比值决定的,要调脉宽得调CCR0吧

我記得的模式7 是這樣的
計時器 從0開始計時 電位在高電位
當計時到CCR1時 電位改成低電位
在計時到CCR0 在改為高電位
並將計時器歸0
CCR0 > CCR1
有錯 在煩請糾正><
点赞  2015-12-30 08:59
引用: alien1026 发表于 2015-12-30 08:55
好的
就是不管TA1CCR1調整多少 她的duty cycle都是固定不變的....
我之前大部分都是用G2553來寫 clock ...

我一般也是用G2553来写,我感觉和clock没什么关系,既然能够输出pwm,那么clock就是正常的。

CCR0一般是周期,CCR1或者CCR2是占空比。

会不会你改错一个量了?比如你的输出是由CCR2控制占空比,你却一直修改的CCR1?或者你用的是TimerA1输出,实际修改的却是TimerA0的CCR1?

我觉得应该从这方面去检查。从你的描述看来,已经输出PWM了,说明定时器已经正确配置了,修改不了占空比,很有可能就是改错一个寄存器了。
点赞  2015-12-30 10:39
引用: alien1026 发表于 2015-12-30 08:59
我記得的模式7 是這樣的
計時器 從0開始計時 電位在高電位
當計時到CCR1時 電位改成低電位
在計時到CC ...

好着,没错啊,所以要改频宽应该改CR0啊
点赞  2015-12-30 11:35
引用: 数码小叶 发表于 2015-12-30 11:35
好着,没错啊,所以要改频宽应该改CR0啊

我猜频宽的意思是脉宽
调整CCR0改变的是周期
点赞  2015-12-30 11:42
引用: 数码小叶 发表于 2015-12-30 11:35
好着,没错啊,所以要改频宽应该改CR0啊

要改频宽不就是改周期么????
点赞  2015-12-30 12:06
引用: qiushenghua 发表于 2015-12-30 10:39
我一般也是用G2553来写,我感觉和clock没什么关系,既然能够输出pwm,那么clock就是正常的。

CCR0一般 ...

哈哈,
感謝幫忙,問題以解決了
点赞  2015-12-30 13:51
引用: alien1026 发表于 2015-12-30 13:51
哈哈,
感謝幫忙,問題以解決了

问题出在哪?分享一下呗!
点赞  2015-12-30 15:22
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复