Main Content

ループ整形設計を使用した位相同期回路の調整

この例では、パッシブ ループ フィルターのコンポーネントを調整し、位相同期回路 (PLL) システムのループ帯域幅を改善する方法について説明します。目的のループ周波数応答を取得するため、この例では Control System Toolbox™ ソフトウェアに提供されている固定構造調整法を使用してループ フィルター パラメーターを計算します。PLL システムは Mixed-Signal Blockset™ ライブラリの参照アーキテクチャ ブロックを使用してモデル化されます。

はじめに

PLL は、その入力信号の位相に依存する位相をもつ出力信号を生成する閉ループ システムです。次のブロック線図は、PLL 参照アーキテクチャ ブロック (Integer N PLL with Single Modulus Prescaler (Mixed-Signal Blockset)) とPLL Testbench (Mixed-Signal Blockset)ブロックを使った簡単なモデルを示しています。

SimplePLLModel.png

PLL ブロック内の閉ループ アーキテクチャは、位相周波数検出器 (PFD)、チャージ ポンプ、ループ フィルター、電圧制御発振器 (VCO)、およびプリスケーラーで構成されます。

PLL_Internal2.png

Mixed-Signal Blockset ライブラリには Simulink® で PLL システムを設計およびシミュレーションするための複数の参照アーキテクチャ ブロックが用意されています。パッシブ フィルターであるLoop Filter (Mixed-Signal Blockset)ブロックのコンポーネントを調整し、目的の開ループの帯域幅と位相余裕を取得できます。

Control System Toolbox ソフトウェアを使用して、目的のループ応答の形状を指定し、固定構造コントローラーのパラメーターを調整して、そのループ整形を近似できます。目的のループ整形を指定する方法の詳細については、ループ整形と安定余裕の仕様を参照してください。前述の PLL アーキテクチャ モデルで、ループ フィルターは固定次の固定構造コントローラーとして定義されます。ターゲットのループ整形を達成するために、ループ フィルターの抵抗と静電容量の値が調整されます。これにより、システムの開ループの帯域幅が改善され、その結果、測定されるロック時間が削減されます。

位相同期回路モデルの設定

モデルを開きます。

model = 'PLL_TuneLoopFilter';
open_system(model)

PLL ブロックは、ブロック パラメーターの [PFD][Charge pump][VCO]、および [Prescalar] タブに対し、Design and Evaluate Simple PLL Model (Mixed-Signal Blockset)で指定されたコンフィギュレーションを使用します。[Loop Filter] タブはタイプを 4 次フィルターとして指定し、ループの帯域幅を 100 kHz、位相余裕を 60 度に設定します。抵抗と静電容量の値は自動的に計算されます。

PLL の電流ループ ダイナミクスを確認するには、ブロック パラメーターの [Analysis] タブで、[Open Loop Analysis][Closed Loop Analysis] を選択します。ユニティー ゲイン周波数は 100 kHz です。閉ループ システムは安定しており、3-dB 帯域幅は 128.94 kHz です。

OpenLoopAnalysis_Initial.png

ClosedLoopAnalysis_Initial.png

モデルのシミュレーションを実行します。PLL Testbench ブロックに PLL ロック時間と位相ノイズのメトリクスが表示されます。位相ノイズ プロファイルをプロットして解析するには、PLL Testbench ブロック パラメーターの [Stimulus] タブで、[Plot phase noise] を選択します。測定されるロック時間は 2.30 マイクロ秒です。

open_system([model,'/Scope'])
sim(model);

ModelSimulation_Initial.png

LoopFilterOutput_Initial.png

PhaseNoisePlot_Initial.png

MATLAB® で閉ループ システムの構築に必要な PLL パラメーターを定義します。

PllKphi = 5e-3;     % Charge pump output current
PllKvco = 1e8;      % VCO sensitivity
PllN    = 70;       % Prescaler ratio

PllR2   = 88.3;     % Loop filter resistance for second-order response (ohms)
PllR3   = 253;      % Loop filter resistance for third-order response (ohms)
PllR4   = 642;      % Loop filter resistance for fourth-order response (ohms)
PllC1   = 8.13e-10; % Loop filter direct capacitance (F)
PllC2   = 1.48e-7;  % Loop filter capacitance for second-order response (F)
PllC3   = 1.59e-10; % Loop filter capacitance for third-order response (F)
PllC4   = 9.21e-11; % Loop filter capacitance for fourth-order response (F)

カスタムの調整可能なシステムの構築

ループ フィルターを調整可能な要素としてモデル化するには、最初に、各フィルター コンポーネントを表す調整可能なスカラーの実数パラメーター (realpを参照) を作成します。各パラメーターに対して初期値と範囲を定義します。また、パラメーターが自由に調整できるかどうかを指定します。

電流ループ フィルターの抵抗と静電容量の値を、調整可能なパラメーターの初期数値として使用します。

% Resistances
R2 = realp('R2',PllR2);
R2.Minimum = 50;
R2.Maximum = 2000;
R2.Free = true;

R3 = realp('R3',PllR3);
R3.Minimum = 50;
R3.Maximum = 2000;
R3.Free = true;

R4 = realp('R4',PllR4);
R4.Minimum = 50;
R4.Maximum = 2000;
R4.Free = true;

% Capacitances
C1 = realp('C1',PllC1);
C1.Minimum = 1e-12;
C1.Maximum = 1e-7;
C1.Free = true;

C2 = realp('C2',PllC2);
C2.Minimum = 1e-12;
C2.Maximum = 1e-7;
C2.Free = true;

C3 = realp('C3',PllC3);
C3.Minimum = 1e-12;
C3.Maximum = 1e-7;
C3.Free = true;

C4 = realp('C4',PllC4);
C4.Minimum = 1e-12;
C4.Maximum = 1e-7;
C4.Free = true;

これらの調整可能なパラメーターを使用し、Loop Filter (Mixed-Signal Blockset)ブロック リファレンス ページの [詳細] セクションで指定したループ フィルターの伝達関数方程式に基づいて、カスタムの調整可能なモデルを作成します。loopFilterSysR2R3R4C1C2C3and C4 でパラメーター化されたgenssモデルです。

Z(s)=R2C2s+1s(A4s3+A3s2+A2s+A1)A4=C1C2C3C4R2R3R4A3=C1C2R2R3(C3+C4)+C4R4(C2C3R3+C1C3R3+C1C2R2+C2C3R2)A2=C2R2(C1+C3+C4)+R3(C1+C2)(C3+C4)+C4R4(C1+C2+C3)A1=C1+C2+C3+C4

A4 = C1*C2*C3*C4*R2*R3*R4;
A3 = C1*C2*R2*R3*(C3+C4)+C4*R4*(C2*C3*R3+C1*C3*R3+C1*C2*R2+C2*C3*R2);
A2 = C2*R2*(C1+C3+C4)+R3*(C1+C2)*(C3+C4)+C4*R4*(C1+C2+C3);
A1 = C1+C2+C3+C4;

loopFilterSys = tf([R2*C2, 1],[A4, A3, A2, A1, 0]);

伝達関数表現を使用し、それぞれの周波数応答特性に基づいて、アーキテクチャ内の固定ブロック (charge pump、VCO、prescaler) を定義します [1]。

chargePumpSys   = tf(PllKphi,1);       % Linearized as a static gain
vcoSys          = tf(PllKvco,[1 0]);   % Linearized as an integrator
prescalerSys    = tf(1/PllN,1);        % Linearized as a static gain

各ブロックの入力名と出力名を定義します。信号名 (connectを参照) に基づいて要素を接続し、以下に示すように PLL アーキテクチャを表す調整可能な閉ループ システム (genss を参照) を作成します。

PLLexampleBlkdgm.png

chargePumpSys.InputName = 'pfd_out';                % Charge pump (fixed block)
chargePumpSys.OutputName = 'cp_out';

loopFilterSys.InputName = 'cp_out';                 % Loop filter (tunable block)
loopFilterSys.OutputName = 'lf_x';

AP = AnalysisPoint('X');                            % Analysis point does not change the architecture of closed-loop system
AP.InputName = 'lf_x';
AP.OutputName = 'lf_out';

vcoSys.InputName = 'lf_out';                        % VCO (fixed block)
vcoSys.OutputName = 'vco_out';

prescalerSys.InputName = 'vco_out';                 % Prescaler (fixed block)
prescalerSys.OutputName = 'prescaler_out';

pfd = sumblk('pfd_out = ref - prescaler_out');      % Phase-frequency detector (sum block)    

% Create a genss model for the closed-loop architecture
CL0 = connect(chargePumpSys,loopFilterSys,AP,vcoSys,prescalerSys,pfd,'ref','vco_out');

ループ整形設計

目的の開ループの帯域幅に対して、少なくとも 2 decade 下および 2 decade 上にターゲット ゲインを与えることにより、ループ ゲインを周波数応答データ モデルとして定義します。目的のロールオフは通常、より高いため、位相ノイズの減衰はより高くなります。

適切なターゲット ループ整形を指定することは、この設計の重要な側面です。調整可能な補償器は、1 つの積分器と 1 つのゼロをもつ 4 次システムであり、プラントは積分器を表します。ループ ゲインは開ループ構造の実行可能なターゲットでなければなりません。

ループ フィルターの調整では、積分動作、3 MHz 交差、および 40 dB/decade のロールオフ要件を指定するターゲット ループ整形に基づいて、調整目標を作成します。この目標は、目的の開ループの帯域幅に対して 3 decade 上および下に適用されます。

LoopGain = frd([100,10,1,1e-2,1e-4],2*pi*[1e4,1e5,3e6,3e7,3e8]);    % frd uses response data and corresponding frequencies in rad/s     
LoopShapeGoal = TuningGoal.LoopShape('X',LoopGain);                 % Use AnalysisPoint as location where open-loop response shape is measured  
LoopShapeGoal.Focus = 2*pi*[1e3, 1e9];                              % Enforce goal in frequency range (use rad/s)
LoopShapeGoal.Name = 'Loop Shape Goal';                             % Tuning goal name

MarginsGoal = TuningGoal.Margins('X',7.6,60);
MarginsGoal.Focus = [0 Inf];
MarginsGoal.Openings = {'X'};
MarginsGoal.Name = 'Margins Goal';

ターゲット ループ整形を基準にして、PLL システムの電流の開ループ整形を観察します。S は逆感度関数を表し、T は相補感度関数を表します。既定では、Control System Toolbox は rad/s を周波数単位として使用します。周波数単位を Hz に変更する方法の詳細については、ツールボックス基本設定を参照してください。

figure 
viewGoal(LoopShapeGoal,CL0)

systune を使用して固定構造フィードバック ループを調整します。これにより、ターゲット ループ整形に基づいて柔軟な設計目標を満たすように、抵抗と静電容量の値が計算されます。調整可能なスカラーの実数パラメーターの作成時に定義された初期値に加え、5 つの異なる初期値セットで調整アルゴリズムを実行します。

Options = systuneOptions();
Options.SoftTol = 1e-5;      % Relative tolerance for termination
Options.MinDecay = 1e-12;    % Minimum decay rate for closed-loop poles
Options.MaxRadius = 1e12;    % Maximum spectral radius for stabilized dynamics
Options.RandomStart = 5;     % Number of different random starting points     

[CL,fSoft,gHard,Info] = systune(CL0,[LoopShapeGoal; MarginsGoal],[],Options);
Final: Soft = 2.85, Hard = -Inf, Iterations = 50
Final: Failed to enforce closed-loop stability (max Re(s) = 3.1e+04)
Final: Failed to enforce closed-loop stability (max Re(s) = 6.8e+04)
Final: Failed to enforce closed-loop stability (max Re(s) = 6.2e+04)
Final: Failed to enforce closed-loop stability (max Re(s) = 8e+04)
Final: Failed to enforce closed-loop stability (max Re(s) = 4.9e+04)

systune は調整された閉ループ システム CL を一般化された状態空間形式で返します。

アルゴリズムは乱数の初期値で収束せず、電流ループ フィルター コンポーネント値が初期条件として選択された場合にのみ実行可能解を提供します。3 次ループ フィルターなど、あまり複雑でない問題を調整する場合、アルゴリズムは初期条件の影響を受けにくく、ランダム化開始点はパラメーター空間を調査して実行可能解に収束する効果的な手法です。

ターゲット ループ整形を基準にして、調整された開ループ整形を確認します。調整されたループ整形はターゲットを満たしませんが、同じ高周波数の減衰をループで維持したまま、開ループの帯域幅が増えることを観察します。

figure 
viewGoal(LoopShapeGoal,CL)

Simulink モデルへの結果のエクスポート

調整されたループ フィルター コンポーネント値を抽出します。

Rtuned = [getBlockValue(CL,'R2'),...
          getBlockValue(CL,'R3'),...
          getBlockValue(CL,'R4')];

Ctuned = [getBlockValue(CL,'C1'),...
          getBlockValue(CL,'C2'),...
          getBlockValue(CL,'C3'),...
          getBlockValue(CL,'C4')];     

この例に含まれる補助関数 setLoopFilterValue を使用して、調整されたループ フィルター コンポーネント値を PLL ブロックに書き込みます。

blk = [model,'/Integer N PLL with Single Modulus Prescaler'];
setLoopFilterValue(blk,Rtuned,Ctuned);

Integer N PLL with Single Modulus Prescaler ブロック パラメーターの [Analysis] タブから [Open Loop Analysis] プロットと [Closed Loop Analysis] プロットを観察します。ユニティー ゲイン周波数と 3-dB 帯域幅には改善が示され、それぞれ 341.4 kHz と 511.72 kHz になりますが、ループは同じ位相ノイズ プロファイルを維持します。

OpenLoopAnalysis_Tuned.png

ClosedLoopAnalysis_Tuned.png

モデルをシミュレートし、PLL テストベンチ測定値と、調整されたコンポーネントをもつループ フィルター出力を取得します。

sim(model);

ModelSimulation_Tuned.png

LoopFilterOutput_Tuned.png

PhaseNoisePlot_Tuned.png

参考文献

[1] Banerjee, Dean. PLL Performance, Simulation and Design. Indianapolis, IN: Dog Ear Publishing, 2006.

参考

関連する例

詳細