數字鎖相環的FPGA實現(一)

數字鎖相環的FPGA實現(一)

電賽著

開篇之前,感謝杜勇老師,和他所著的《數字通信同步技術的MATLAB與FPGA實現,Altera/Verilog版》


說到鎖相環,相信大家都熟悉.鎖相環路(Phase Locked Loop,PLL)是一個閉環的相位控制系統.這博客分成兩篇,第一篇講鎖相環的基本原理和參數設置,第二篇寫實戰.

鎖相環的環路模型

可以先看鎖相環的組成再跳回來看這裏.

假設輸入信號和本地振盪器的輸出信號是
ui(t)=Uisin[ωit+θi(t)]uo(t)=Uocos[ωot+θo(t)] \begin{aligned} u_{\mathrm{i}}(t) &=U_{\mathrm{i}} \sin \left[\omega_{\mathrm{i}} t+\theta_{\mathrm{i}}(t)\right] \\ u_{\mathrm{o}}(t) &=U_{\mathrm{o}} \cos \left[\omega_{\mathrm{o}} t+\theta_{\mathrm{o}}(t)\right] \end{aligned}

我們通過這個來得到他們的瞬時相差和瞬時頻差:
θc(t)=(ωiωo)t+θi(t)θo(t)=Δω0t+θi(t)θo(t)θ˙e(t)=(ωiωo)+θ˙i(t)θ˙o(t)=Δω0+θ˙i(t)θ˙o(t) \begin{array}{c}{\theta_{\mathrm{c}}(t)=\left(\omega_{\mathrm{i}}-\omega_{\mathrm{o}}\right) t+\theta_{\mathrm{i}}(t)-\theta_{\mathrm{o}}(t)=\Delta \omega_{0} t+\theta_{\mathrm{i}}(t)-\theta_{\mathrm{o}}(t)} \\ {\dot{\theta}_{\mathrm{e}}(t)=\left(\omega_{\mathrm{i}}-\omega_{\mathrm{o}}\right)+\dot{\theta}_{\mathrm{i}}(t)-\dot{\theta}_{\mathrm{o}}(t)=\Delta \omega_{0}+\dot{\theta}_{\mathrm{i}}(t)-\dot{\theta}_{\mathrm{o}}(t)}\end{array}

鎖定與跟蹤

總所周知,我們一般假設輸入信號的頻率和本地振盪器的初始頻率(也叫作自由振盪頻率)是不同的,也就是說在這種情況下兩者會存在固定頻差Δω0\Delta\omega_0,如果沒有進行相位追蹤的話,顯然兩信號的相差θe(t)\theta_e(t)就會爆炸.如果我們可以控制固定頻差在一個很小的範圍,就能保證兩個信號的相位差在2nπ2n\pi左右一個很小的範圍震盪,這個就是鎖相環路的捕獲過程,如下:

當瞬時相差θe(t)\theta_e(t)穩定在2nπ2n\pi附近,頻差接近爲0的時候,稱鎖相環進入同步狀態,或稱爲跟蹤狀態
所以我們可以定義同步態的定義爲:
θ˙e(t)εΔω,θe(t)2nπεθe \left|\dot{\theta}_{\mathrm{e}}(t)\right| \leqslant \varepsilon_{\Delta \omega}, \quad\left|\theta_{\mathrm{e}}(t)-2 n \pi\right| \leqslant \varepsilon_{\theta \mathrm{e}}

再定義兩個鎖相環的參量,捕獲時間和捕獲帶
a

環路的基本性能要求

如上所述,鎖相環路存在兩種狀態,捕獲狀態和同步狀態,就兩種不同的工作狀態下會有不同的性能參數:

  1. 捕獲狀態下的捕獲時間
    Tp=tat0T_p = t_a -t_0
    因爲捕獲時間其實和t0t_0是有關係的,畢竟不同時間切入的瞬時相差是不一樣的,在這裏我們取起始頻差等於Δωp\Delta\omega_p的初始狀態來計算最大捕獲時間
  2. 環路的捕獲帶Δωp\Delta\omega_p,即環路能通過捕獲狀態進入同步狀態的最大固有頻差Δω0max|\Delta\omega_0|_{max}
  3. 穩態相差,反映環路的跟蹤精度
    θe()=θi(t)εθemax\theta_{\mathrm{e}}(\infty)=\left|\theta_{\mathrm{i}}(t)-\varepsilon_{\theta e}\right|_{\max }
  4. 對已經鎖定的環路,若改變其固有頻差Δω0\Delta\omega_0環路所能最大穩定的頻率稱爲同步帶ΔωH\Delta\omega_H
    b
    我們可以看看捕獲帶和同步帶之間的關係,應該注意到在捕捉帶外,同步帶以內的頻帶,一旦出現失鎖,是不能夠重新捕獲的

顯然,不介紹基本結構和動態方程之前談性能是沒意義的,所以:

鎖相環的組成

因爲我們需要鎖相環來實現相位跟蹤,最終的目的是爲了實現輸出信號和輸入信號的同步,出於此來考慮的話,我們需要這個系統的相位誤差是可收斂的,即鎖相環的系統模型是一個相位的負反饋控制系統,他的基本組成大家也清楚:
c
分別有:

  1. PD(Phase Detector)鑑相器
  2. LF(Loop Filter)環路濾波器
  3. VCO(Voltage-Controlled Oscillator,VCO)壓控振盪源

鑑相器(PD)

名副其實,鑑相器就是用來進行相位比較的,
比較常用的就是我們上課所講過的乘法器加低通濾波器所構成的正弦型特性的鑑相器:
d

但實際上到後面實現數字鎖相環的時候可能就有不一樣的方法了,敬請期待.

不妨推導一下:(設乘法器增益爲KmK_m)
Kmui(t)uo(t)=KmUisin[ω0t+θ1(t)]Uocos[ω0t+θ2(t)]=12KmUiUosin[2ω0t+θ1(t)+θ2(t)]+12KmUiUosin[θ1(t)θ2(t)] \begin{aligned} K_{\mathrm{m}} u_{\mathrm{i}}(t) u_{\mathrm{o}}(t)=& K_{\mathrm{m}} U_{\mathrm{i}} \sin \left[\omega_{0} t+\theta_{1}(t)\right] U_{\mathrm{o}} \cos \left[\omega_{0} t+\theta_{2}(t)\right] \\=& \frac{1}{2} K_{\mathrm{m}} U_{i} U_{\mathrm{o}} \sin \left[2 \omega_{0} t+\theta_{1}(t)+\theta_{2}(t)\right] \\ &+\frac{1}{2} K_{\mathrm{m}} U_{\mathrm{i}} U_{\mathrm{o}} \sin \left[\theta_{1}(t)-\theta_{2}(t)\right] \end{aligned}

經過LPF濾除2ω2\omega的高頻分量之後,得到:
ud(t)=12KmUiUosin[θ1(t)θ2(t)]=Udsinθe(t) u_{\mathrm{d}}(t)=\frac{1}{2} K_{\mathrm{m}} U_{\mathrm{i}} U_{\mathrm{o}} \sin \left[\theta_{1}(t)-\theta_{2}(t)\right]=U_{\mathrm{d}} \sin \theta_{\mathrm{e}}(t)
其中:
Ud=12KmUiUo U_d = \frac12 K_m U_i U_o

環路濾波器(LF)

環路濾波器具有低通特性,一方面起着LPF的作用,另一方面是調節鎖相環的參數的重要環節之一.對環路濾波器來說,他是一個線性電路,所以在時域分析中可用一個傳輸算子F(p)F(p)來表示,其實p是微分算子,在頻域中就可以用F(s)F(s)來表示:
e

在這裏我們不妨直接舉一個我們都熟知的又有源比例積分濾波器:
f
可用較爲輕鬆地算出他的傳輸算子:
F(p)=A1+pτ21+pτ1 F(p)=-A \frac{1+p \tau_{2}}{1+p \tau_{1}}
其中:
τ1=(R1+AR1+R2)C,τ2=R2C \tau_{1}=\left(R_{1}+A R_{1}+R_{2}\right) C, \quad \tau_{2}=R_{2} C
其中A爲運放開環增益,假設非常大,那麼我們可用代入進行一些近似:
F(p)=A1+pτ21+pτ1A1+pτ21+pAR1CA1+pτ2pAR1C=1+pτ2pR1C \begin{aligned} F(p) &=-A \frac{1+p \tau_{2}}{1+p \tau_{1}} \approx-A \frac{1+p \tau_{2}}{1+p A R_{1} C} \\ \approx-A \frac{1+p \tau_{2}}{p A R_{1} C} &=-\frac{1+p \tau_{2}}{p R_{1} C} \end{aligned}
所以經過近似後,我們可用得到:
F(p)=1+pτ2pτ1 F(p)=-\frac{1+p \tau_{2}}{p \tau_{1}}
其中:
τ1=R1C,τ2=R2C \tau_{1}=R_{1} C, \quad \tau_{2}=R_{2} C
這個簡化模型,特別如果有R1C>>1R_1 C >> 1的時候,性能會接近無源比例積分濾波器

壓控振盪器(VCO)

顯然,對壓控振盪器來說,他的本徵方程是:
ωv(t)=ω0+K0uc(t) \omega_{\mathrm{v}}(t)=\omega_{0}+K_{0} u_{\mathrm{c}}(t)
其中ωv(t)\omega_{\mathrm{v}}(t)表示輸出瞬時角頻率,K0K_0爲控制靈敏度或增益係數,單位是rad/sVrad/s \cdot V

我們可以輕鬆看出,他的控制特性依然是線性的.
而壓控振盪器輸出到鑑相器中,我們所需要考慮的是他所變化的相位情況,即:
0tωv(τ)dτ=ω0t+K00tuc(τ)dτθ2(t)=K00tuc(τ)dτ=K0puc(t) \begin{array}{l}{\int_{0}^{t} \omega_{\mathrm{v}}(\tau) \mathrm{d} \tau=\omega_{0} t+K_{0} \int_{0}^{t} u_{\mathrm{c}}(\tau) \mathrm{d} \tau} \\ {\theta_{2}(t)=K_{0} \int_{0}^{t} u_{\mathrm{c}}(\tau) \mathrm{d} \tau=\frac{K_{0}}{p} u_{\mathrm{c}}(t)}\end{array}

所以我們可以看出鑑相器輸出的相位誤差信號和壓控振盪器的電壓控制信號中存在一個積分關係,而這個積分關係自然而然是在壓控振盪源中完成的,對鎖相環整體的性能也有比較大的影響.

鎖相環的動態方程

現在要把剛剛介紹的三個部分綜合起來一個系統來看了

非線性相位模型

鎖相環在時域上的傳輸流程是這樣的
g
在考慮相位模型前,我們可以先反過來考慮穩態相差的問題,因爲這涉及到鎖相環穩定的可能性.顯然在鎖相環捕獲的時候ωv(t)\omega_v(t)會逐步接近ωi(t)\omega_i(t)到同步狀態的時候有ωv(t)=ωi(t)\omega_v(t) = \omega_i(t),但是兩個信號間存在穩態誤差(相位)使得控制電壓uc(t)u_c(t)不爲0,從而使輸出頻率在輸入頻率間震盪.但實際上對理想二階環(A無窮大)來說,當環路鎖定時,穩態相差理論上爲0.但具體的分析還看後頭

從上述模型中不難得出:
θe(t)=θ1(t)θ2(t) \theta_e(t) = \theta_1(t)-\theta_2(t)
θ2(t)=K0UdF(p)psinθe(t) \theta_2(t) = K_0U_d\frac{F(p)}{p}sin \theta_e(t)

代入得鎖相環路動態方程的一般形式:
(*)pθe(t)=pθ1(t)K0UdF(p)sinθe(t) p \theta_{\mathrm{e}}(t)=p \theta_{1}(t)-K_{0} U_{\mathrm{d}} F(p) \sin \theta_{\mathrm{e}}(t)\tag{*}
不妨定義環路增益
K=K0UdK = K_0U_d
顯然這個環路增益表示的是VCO的最大頻偏量,因爲UdU_d是誤差信號的最大值,K0K_0是增益係數(見上)

因爲經過環路濾波器之後輸出的誤差信號是直流的,所以穩態誤差很容易就可以解出:
θe()=arcsinΔω0KF(j0) \theta_{\mathrm{e}}(\infty)=\arcsin \frac{\Delta \omega_{0}}{K F(j 0)}
這時考慮環路濾波器的傳遞因子F(p)F(p),當A>>0時,有下列近似
F(p)=1+pτ2pτ1 F(p)=-\frac{1+p \tau_{2}}{p \tau_{1}}
其中:
τ1=R1C,τ2=R2C \tau_{1}=R_{1} C, \quad \tau_{2}=R_{2} C

所以容易得F(j0)=F(j0) = \infty,這也是剛剛所說的理想二階環沒有穩態誤差的來源.
但是實際上,因爲A不可能無窮大,上式也只是近似得來的,所以上面的式子成立的可能性幾乎也爲0…

不妨將F(p)F(p)代入鎖相環的動態方程:
p2τ1θe(t)=p2τ1θ1(t)K(1+pτ2)sinθe(t) p^{2} \tau_{1} \theta_{\mathrm{e}}(t)=p^{2} \tau_{1} \theta_{1}(t)-K\left(1+p \tau_{2}\right) \sin \theta_{\mathrm{e}}(t)
因爲環路濾波器只有一個極點,傳輸算子是一階的,所以相應的環路動態方程是二階非線性微分方程,所以這種鎖相環路稱爲二階鎖相環路.本博客缺少了對RC積分濾波器和無源比例積分濾波器的分析,有興趣的pong友可以自行回去看書

線性相位模型

線性相位模型就是將 非線性相位模型 近似得出的,因爲顯然動態方程是一個高階的非線性微分方程(特別是加上噪聲之後),而又由於瞬時相差一般是很小的,回顧一下高等數學的等價無窮小,我們容易想到sin(x)~x:
h
也就是說,我們可以把正弦換成:
ud(t)=Udsinθe(t)Kd=dud(t)dθc(t)θe=0=Udcosθe(t)θe=0=Ud(V/rad) \begin{array}{c}{u_{\mathrm{d}}(t)=U_{\mathrm{d}} \sin \theta_{\mathrm{e}}(t)} \\ {K_{\mathrm{d}}=\left.\frac{\mathrm{d} u_{\mathrm{d}}(t)}{\mathrm{d} \theta_{\mathrm{c}}(t)}\right|_{\theta_{e}=0}=U_{\mathrm{d}} \cos \theta_{\mathrm{e}}\left.(t)\right|_{\theta_{e}=0}=U_{\mathrm{d}}(\mathrm{V} / \mathrm{rad})}\end{array}
斜率是KdK_d的直線代替,代入()(*)式得:
pθe(t)=pθ1(t)K0KdF(p)θe(t) p \theta_{\mathrm{e}}(t)=p \theta_{1}(t)-K_{0} K_{\mathrm{d}} F(p) \theta_{\mathrm{e}}(t)
再令環路增益:
K=K0Kd K =K_0 K_d
則得到線性模型:
pθc(t)=pθ1(t)KF(p)θe(t) p \theta_{\mathrm{c}}(t)=p \theta_{1}(t)-K F(p) \theta_{\mathrm{e}}(t)

環路的傳遞函數

事先說明一點就是,這裏對環路傳遞函數的建模是基於線性模型的,也就是說他同樣存在上述的等價無窮小代換問題,所以不適應瞬時相差過大的情況.

不妨對線性模型做拉普拉斯變換:
sθe(s)=sθ1(s)KF(s)θe(s) s \theta_{\mathrm{e}}(s)=s \theta_{1}(s)-K F(s) \theta_{\mathrm{e}}(s)

  1. 考慮開環狀態下(無反饋支路),輸入相位θ1(t)\theta_1(t)驅動所引起的輸出相位θ2(t)\theta_2(t)的響應:
    s(θ1(s)θ2(s))=sθ1(s)KF(s)θ1(s) s (\theta_{\mathrm{1}}(s)-\theta_{\mathrm{2}}(s))=s \theta_{1}(s)-K F(s) \theta_{\mathrm{1}}(s)
    解得:
    H0(s)=θ2(s)θ1(s)openloop=KF(s)s H_0(s) = \frac{\theta_2(s)}{\theta_1(s)}\big |_{open loop} = K\frac{F(s)}{s}
  2. 考慮閉環狀態下,輸入相位θ1(t)\theta_1(t)驅動所引起的輸出相位θ2(t)\theta_2(t)的響應:
    s(θ1(s)θ2(s))=sθ1(s)KF(s)(θ1(s)θ2(s)) s (\theta_{\mathrm{1}}(s)-\theta_{\mathrm{2}}(s))=s \theta_{1}(s)-K F(s) (\theta_{\mathrm{1}}(s)-\theta_{\mathrm{2}}(s))

H(s)=θ2(s)θ1(s)closeloop=KF(s)s+KF(s) H(s) = \frac{\theta_2(s)}{\theta_1(s)}\big |_{close loop} = \frac{K F(s)}{s+K F(s)}

  1. 考慮閉環狀態下,輸入相位θ1(t)\theta_1(t)驅動所引起的誤差相位θe(t)\theta_e(t)的響應:
    sθe(s)=sθ1(s)KF(s)θe(s) s \theta_{\mathrm{e}}(s)=s \theta_{1}(s)-K F(s) \theta_{\mathrm{e}}(s)
    He(s)=θe(s)θ1(s)closeloop=ss+KF(s) H_e (s) = \frac{\theta_e(s)}{\theta_1(s)}\big |_{close loop} = \frac{s}{s+K F(s)}

不妨將不同的環路濾波器的傳遞函數代入得下表:
i

顯然此時的二階系統經線性化後變成二階線性系統,這個的話我們在學校學的知識就已經足以應付了(特別是電路),此時定義描述二階線性系統的兩個系統常量:無阻尼振盪頻率ωn\omega_n和阻尼係數ξ\xi來描述系統的響應,對應關係見下表:
j

結語

這裏先省略鎖相環的性能分析,搞這個有點累,放到下一篇(或下幾篇)博客再討論,或者邊實戰邊討論吧.因爲電賽這次做得題目最多就做一個位同步而已,根本就沒有這麼多的東西要看.我也只是先做一點基礎鋪墊,以免後面出問題.

讚賞通道

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