2014年10月19日 星期日

淺談 PLL - 鎖相環(PLL: Phase-locked loops)

淺談 PLL - 鎖相環(PLL: Phase-locked loops)
以下為小弟個人的理解方式來討論:
很多人還依然對 PWM 或是 OPA 或 BJT 依然茫然,
是因為在純軟體設計上很少會接觸到實際電路的問題,
小弟本身對許多軟體也是不了解的多...
而相鎖部份小弟希望用軟體的角度去說明這個技術,
由維基找到的資料我們可以在圖中看到幾個區塊:
鑑頻鑑相器
低通濾波器
壓控振盪器
反饋迴路
而透過程式中的部份呢 P 相位 L 鎖定 L 迴圈 <= 第三個最簡單我們先用程式寫下
while (1) <= L 迴圈完成 
而相位鎖定部份先解說與舉例其原理和用途,
PLL 在實際上電路產品的運用範圍很廣範,比如電視的 TUNER
選台器,而選台器是一種什麼樣的設計和原理?!
如果你已經具備了如超外差接收器的觀念,對於 IF 中頻、本振等等部份已經了解,那麼... 很棒,但是我會用更簡單的方式說明,
一個影像是由 6MB 的頻寬所組成:
這裡面包括了 3.58 MHZ 的色載波訊號,也被稱為繫色訊號,
以及 1 MHZ 的音頻訊號,調變訊號,
而傳輸這 6MB 的訊號是由 數十MB到上GHZ 的載波訊號來傳輸,而我們所說的 TUNER 正是解這個載波訊號部份,而取的 6MB 我們要的影音資料,
因此 PLL 也就是用在這部份,TUNER 的原理是產生出一個本振頻然後去跟載波混合,然後會產生出一個 IF 中頻,然後做中頻放在再解出訊號資料,過去中放是很難做的一種技術,而載波頻率太高並且訊號非常微弱,可能是 -90DB 以下,所以把訊號降到中頻率後再放大到幾十萬倍,就可以進行處理了,所以 TUNER 的主要功能是把一本地振盪訊號,和外來訊號加到混波器中,會出現 A+B 和 A-B 及 A 與 B 四種訊號,IF 中頻訊號即是 A-B 訊號,
而這裡我們會用到相鎖環,當我們產生出的本振訊號過高或是過低於某一頻率的載波時,TUNER 裡面的鎖定訊號就會沒抓到,那我們就進行微調將頻率上一點或是下一點,所以 LOCK 鎖定部份我們需要一個判斷式來幫忙,IF( detect(LOCK) ) <= 這部份就產生了,所以我們把式子加到一起去變成:
while(1)
{
if ( detect(LOCK) )
}
但是我們不知道要往上調是鎖住還是往下調才能鎖住?!
假定我們先將一個數值範圍給設定住,比如頻率部份只能夠用2個BYTE去控制,第一個BYTE是粗調整後一個BYTE是細調整,而我們所要找到的載波是 55.25 MHZ 第 1 臺的位置,那麼可能我們在粗調整部份已經找到是 10 的值給進去,細調整部分我們則給 255 或是 0,然後一直往上調上去,一直到鎖定訊號後完成,再往上追 15 個或是 20 個值再往下調整到鎖定,把下範圍與上範圍的值加起來除 2,得到中央值,
那我們可以這樣完成式子:
int val_up, val_down, val_lock;
while(1)
{
lock_val--;
if ( detect(val_lock) )
break;
}
val_up=val_lock;
val_lock-=20;
while(1)
{
lock_val++;
if ( detect(val_lock) )
break;
}
val_down=val_lock;
val_lock=(val_up+val_down)/2;
最後我們得到一個 val_lock 值,是我們所需要的,
在以上的範例中並不是 PLL 的實際應用,而是調頻器的應用,
但是程式的部份是相同以及觀念部份是相同的,而把頻率改為相位,
超前或是落後,就是 PLL 的實際應用,
DRAM 的頻率調整也類似這樣的方式,程式中的 P 相位我們可以看成是 DETECT() 而 L 鎖定則是 IF( DETECT(LOCK) ) 最後環 L 就是 WHILE(1)
是有點奇怪啦... 總之... 就醬子~

沒有留言:

張貼留言