LPC1788單沿pwm原理和配置

LPC1788單沿pwm原理和配置

        pwm的基本功能:以一定的週期頻率,輸出不同佔空比可調的方波。

        Lpc1788中的pwm的時鐘(頻率)來源於APB總線的時鐘(頻率),首先要進行分頻,或者說預分頻,不然直接由APB頻率也太大了,肯定是需要通過分頻才能達到我們需求的pwm週期頻率。
        寄存器PWMPR 和PWMPC兩個寄存器提供了APB頻率分頻到PWM中的頻率,手冊上講的預分頻,也是有道理的,因爲到了pwm之後還要進行一次分頻,第二次分頻纔是真正pwm的週期頻率。我們把第一次分頻得到頻率暫且命名爲prepwmclk。
        第二次分頻是通過PWMMR0進行的,通過對prepwmclk的分頻,這樣得到了我們要的pwm的週期。
        還要去配置佔空比,這個又是怎麼做到的?
        Lpc1788出現了PWMMR1- PWMMR6,依照第二次分頻的原理。
       比如PWMMR0配置爲100,得到週期,那PWMMR1設置爲50,得到1/2的佔空比。當然

       PWMMR1- PWMMR6對應的是6個不同的輸出管腳,以此類推。

給個簡單的例子:

PINSEL_ConfigPin (1, 18, 2);     //p1[18] as pwm1_1

    rPCONP |= 0x1<<6;     //使能PWM1外設  

    rPWM1IR = 0x73F;    //初始化PWM相關控制寄存器 

    rPWM1TCR = 0; 

    rPWM1CTCR = 0; 

    rPWM1MCR = 0; 

    rPWM1CCR = 0; 

    rPWM1PCR = 0; 

    rPWM1LER = 0; 

     

   // CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER) / ((uint32_t)38000);

   /*實際頻率計算方法:

       rPWM1PR = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER) / ((uint32_t)38*1000*rPWM1MR0)

    */

rPWM1PR = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER) / ((uint32_t)3800000); 

  //CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER) / ((uint32_t)38000);PLCK上升沿,TC遞增

 

rPWM1MR0 = 100;    //頻率即100rPWM1PR配置得到的頻率爲一週期所以如果需要38Khz的頻率

rPWM1PR = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER) / ((uint32_t)38*1000*rPWM1MR0)

    rPWM1LER |= 0x1; 

   

    rPWM1MR1 = 50;    //佔空比即50rPWM1PR配置得到的頻率爲一週期中的高電平

    rPWM1LER |= 0x1<<1; 

 

    rPWM1MCR = 0;  

  

     

    rPWM1TCR |= 0x1<<1;   //復位TCPC  

    rPWM1TCR &= ~(0x1<<1); 

     

    rPWM1TCR |= 0x1;    //PCTC計數使能

    rPWM1PCR |= 0x1<<9; //PWM1-1使能輸出

    rPWM1TCR |= 0x1<<3; //PWM模式使能

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章