1. 程式人生 > >第十四屆智能車培訓 PLL鎖相環

第十四屆智能車培訓 PLL鎖相環

技術分享 新的 tps 等待 技術 穩定 20M 最大 com

什麽是鎖相環?

PLL(Phase Locked Loop): 為鎖相回路或鎖相環,用來統一整合時脈訊號,使高頻器件正常工作,如內存的存取資料等。PLL用於振蕩器中的反饋技術。 許多電子設備要正常工作,通常需要外部的輸入信號與內部的振蕩信號同步。一般的晶振由於工藝與成本原因,做不到很高的頻率,而在需要高頻應用時,由相應的器件VCO,實現轉成高頻,但並不穩定,故利用鎖相環路就可以實現穩定且高頻的時脈沖訊號。

鎖相環主要作用:

單片機使用鎖相環(PLL)功能能夠獲得更高的總線頻率,這對於需要提高單片機運行速度的場合非常必要。

鎖相環相關寄存器簡介:

1、CRG時鐘合成寄存器(SYNR)

技術分享圖片

該寄存器低6位有效,有效值0~63

2、時鐘分頻寄存器(REFDV)

技術分享圖片

該寄存器有效位為寄存器的低4位,有效值為0~15

3、時鐘選擇寄存器(CLKSEL)

技術分享圖片

PLLSEL置1:Bus Clock = PLLCLK / 2 置0:Bus Clock = OSCCLK / 2)

設置鎖相環計算方法

配置鎖相環的主要目的是為了得到新的總線時鐘,其配置主要依據下面的三個公式:

技術分享圖片

Fosc系統總線時鐘頻率

Fpll鎖相環時鐘頻率

Fbus總線時鐘頻率

配置流程:

1. CLKSEL=0X00; // 在CLKSEL最高位為0時才能設置其他寄存器

2. 設置相關參數 SYNR ( 時鐘合成寄存器 ) REFDY ( 時鐘分頻寄存器 )

3. 等待 PLL 穩定 該部分用到的寄存器 CRGFLG_LOCK 當 CRGFLG_LOCK=1 表示時鐘頻率已經穩定

4、CLKSEL=0x80 ;//使用PLL時鐘

例程代碼:

void PLL_Init(void)
 {                                                 
  CLKSEL=0;  //時鐘選擇寄存器的最高位為0 Bus Clock(總線時鐘)= OSCCLK / 2)
             //                      為1 Bus Clock(總線時鐘)= PLLCLK / 2)
             // 在CLKSEL最高位為0時才能設置其他寄存器

  SYNR=0x44;//時鐘合成寄存器 0100 0100 因低六位有效所以最大為63
  REFDV=0x81
;//時鐘分頻寄存器 1000 0001因低四位有效所以最大為15 外部晶振fosc=8M,BUS clock=20M _asm(nop); //空操作 _asm(nop); while(!CRGFLG_LOCK==1); //當CRGFLG_LOCK!=1時 //CRGFLG_LOCK=1 表示時鐘頻率已經穩定 CLKSEL=0X80; //時鐘選擇寄存器的最高位 // 在CLKSEL最高位設置為1其他寄存器不允許設置 }
void PLL(void)
{
    SYNR=0x01;                            //時鐘主頻:PLL clock = 2*OSC CLOCK*(1+SYNR)/(1+REFDV)
    REFDV=0x00;                        // PLL clock = 32MHz       = 2*             8           *         2        /           1
    
    while(!(CRGFLG_LOCK==1));             //等待晶振穩定
    CLKSEL_PLLSEL=1;  //對時鐘主頻/2得到      //總線時鐘:BUS CLOCK = PLL CLOCK / 2 
                                                                                                        //BUS CLOCK =16MHz           =         32             /2
}
//ECT模塊的輸出比較功能設置
//通道0
//根據元件的工作頻率選擇單片機合適的主頻率
//system clock 8MHZ(系統時鐘)
void PLL(void)         //設定總線頻率     (超頻)
{   
    CLKSEL=0x00;                          //初始化PLL前先使用外部晶振(晶振時鐘)
    SYNR=0x01;                            //時鐘主頻:PLL clock = 2*OSC CLOCK*(1+SYNR)/(1+REFDV)
    REFDV=0x00;                           //got 32 MHZ  = 2*8*2/1
    while(!(CRGFLG_LOCK==1));             //等待晶振穩定(時鐘校正同步)
    CLKSEL_PLLSEL=1;//(CLKSEL=0x80;)      //BUS CLOCK 16 MHZ = PLL CLOCK / 2 (選定鎖相環時鐘)(PLLSEL置1:Bus Clock = PLLCLK / 2)              
}     

第十四屆智能車培訓 PLL鎖相環