锁相环仿真(基于MATLAB)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
锁相环仿真
1.锁相环的理论分析
1.1锁相环的基本组成
锁相环路是一种反馈控制电路,简称锁相环(PLL,Phase-Locked Loop)。锁相环的特点是:利用外部输入的参考信号控制环路内部振荡信号的频率和相位。因锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来。锁相环通常由鉴相器(PD,Phase Detector)、环路滤波器(LF,Loop Filter)和压控振荡器(VCO,Voltage Controlled Oscillator)三部分组成,锁相环组成的原理框图如图示:
锁相环中的鉴相器又称为相位比较器,它的作用是检测输入信号和输出信号的相位差,并将检测出的相位差信号转换成u
(t)电压信号输出,该信号经低通滤
D
(t),对振荡器输出信号的频率实施波器滤波后形成压控振荡器的控制电压u
C
控制。
1.2锁相环的工作原理
1.2.1鉴相器
锁相环中的鉴相器(PD)通常由模拟乘法器组成,利用模拟乘法器组成的鉴相器电路如图示:
鉴相器的工作原理是:设外界输入的信号电压和压控振荡器输出的信号电压分别为:
为压控振荡器在输入控制电压为零或为直流电压时的振荡角频率,称式中的ω
为:
为电路的固有振荡角频率。则模拟乘法器的输出电压u
D
1.2.2 低通滤波器
低通滤波器(LF)的将上式中的和频分量滤掉,剩下的差频分量作为压控振荡器
的输入控制电压u
C (t)。即u
C
(t)为:
式中的ω
i 为输入信号的瞬时振荡角频率,θ
i
(t)和θ
O
(t)分别为输入信号
和输出信号的瞬时位相,根据相量的关系可得瞬时频率和瞬时位相的关系为:
即
则,瞬时相位差θ
d
为
对两边求微分,可得频差的关系式为
上式等于零,说明锁相环进入相位锁定的状态,此时输出和输入信号的频率和相
位保持恒定不变的状态,u
c
(t)为恒定值。当上式不等于零时,说明锁相环的
相位还未锁定,输入信号和输出信号的频率不等,u
c
(t)随时间而变。
1.2.3 压控振荡器
压控振荡器(VCO)的压控特性如图示
该特性说明压控振荡器的振荡频率ω
u 以ω
为中心,随输入信号电压u
c
(t)线
性地变化,变化的关系如下:
上式说明当u
c (t)随时间而变时,压控振荡器(VCO)的振荡频率ω
u
也随时间
而变,锁相环进入“频率牵引”,自动跟踪捕捉输入信号的频率,使锁相环进入
锁定的状态,并保持ω
0=ω
i
的状态不变。
2.信号流程图
锁相环的原理框图如下:
其工作过程如下:
(1)压控振荡器的输出Uo经过采集并分频;
(2)输出和基准信号同时输入鉴相器;
(3)鉴相器通过比较上述两个信号的频率差,然后输出一个直流脉冲电压Ud;(4)Ud进入到滤波器里面,滤除高频成分后得到信息Ue;
(5)Ue进入到压控震荡器VCO里面,控制频率随输入电压线性地变化;(6)这样经过一个很短的时间,VCO的输出就会稳定于某一期望值。
3.二阶环仿真源程序代码及仿真结果
3.1 程序代码:
% File: c6_nltvde.m
w2b=0; w2c=0; % initialize integrators
yd=0; y=0; % initialize differential equation
tfinal = 50; % simulation time
fs = 100; % sampling frequency
delt = 1/fs; % sampling period
npts = 1+fs*tfinal; % number of samples simulated
ydv = zeros(1,npts); % vector of dy/dt samples
yv = zeros(1,npts); % vector of y(t) samples
%
% beginning of simulation loop
for i=1:npts
t = (i-1)*delt; % time
if t<20
ydd = 4*exp(-t/2)-3*yd*abs(y)-9*y; % de for t<20
else
ydd = 4*exp(-t/2)-3*yd-9*y; % de for t>=20
end
w1b=ydd+w2b; % first integrator - step 1
w2b=ydd+w1b; % first integrator - step 2
yd=w1b/(2*fs); % first integrator output
w1c=yd+w2c; % second integrator - step 1 w2c=yd+w1c; % second integrator - step 2 y=w1c/(2*fs); % second integrator output
ydv(1,i) = yd; % build dy/dt vector
yv(1,i) = y; % build y(t) vector
end % end of simulation loop
plot(yv,ydv) % plot phase plane
xlabel('y(t)') % label x axis
ylabel('dy/dt') % label y zxis
% End of script file.
% File: pllpost.m
%
kk = 0;
while kk == 0
k = menu('Phase Lock Loop Postprocessor',...
'Input Frequency and VCO Frequency',...
'Input Phase and VCO Phase',...
'Frequency Error','Phase Error','Phase Plane Plot',...
'Phase Plane and Time Domain Plots','Exit Program');
if k == 1
plot(t,fin,'k',t,fvco,'k')
title('Input Frequency and VCO Freqeuncy')
xlabel('Time - Seconds');ylabel('Frequency - Hertz');pause elseif k ==2
pvco=phin-phierror;plot(t,phin,t,pvco)
title('Input Phase and VCO Phase')
xlabel('Time - Seconds');ylabel('Phase - Radians');pause elseif k == 3
plot(t,freqerror);title('Frequency Error')
xlabel('Time - Seconds');ylabel('Frequency Error - Hertz');pause elseif k == 4
plot(t,phierror);title('Phase Error')
xlabel('Time - Seconds');ylabel('Phase Error - Radians');pause elseif k == 5
ppplot
elseif k == 6
subplot(211);phierrn = phierror/pi;
plot(phierrn,freqerror,'k');grid;
title('Phase Plane Plot');xlabel('Phase Error /Pi');
ylabel('Frequency Error - Hertz');subplot(212)
plot(t,fin,'k',t,fvco,'k');grid
title('Input Frequency and VCO Freqeuncy')
xlabel('Time - Seconds');ylabel('Frequency - Hertz');subplot(111) elseif k == 7