Quantcast
Channel: JH7UBCブログ
Viewing all articles
Browse latest Browse all 440

Si5251Aその11(位相制御)

$
0
0
 秋が日に日に深まっています。家の中にいる時間が増えてきました。

 久しぶりにArduino UNOを引っ張り出してきて、実験を始めました。

 まず、昨年12月にやっていた3チャンネルクロックジェネレータSi5351Aの実験の続きです。

 出力の位相を制御する実験です。昨年は、これがあまりよく分からなかったのですが、JA2GQP局のブログとそこで紹介されているTj Labのサイトを見て、ようやく理解できました。

 Si5351Aの位相制御(遅延制御)は、レジスタ」165(CLK0),166(CLK1),167(CLK2)のbit4~bit0の値で行います。

 その値は、次の式で与えられます。(マニュアルAN619 p10より)

 CLKx_PHOFF[4:0] = Round(Desired Offset (sec) × 4 × Fvco)  (FvcoはPLLの周波数)

 設定値をN,遅延時間をtdと書くと

 N = td * 4 * Fvco ・・・(1) ( 0<= N <=127 )となります。

 CLK1をCLK0に対して位相を90度遅らせる実験を行います。

 位相を90度遅らせるということは、出力信号の周期をTとするとT/4遅らせることです。

 出力の周波数をFoutとするとT=1/Foutですから

 td = 1/(4*Fout) ・・・(2)

 (2)を(1)に代入すると

 N = 1/(4*Fout) * 4 Fvco = Fvco/Fout となります。

 つまり、Fvco/Foutの値をレジスタ165~167にセットすれば良いことになります。

 具体的に実験します。

 当ブログのSi5351その9(マルチチャンネル化の実験)のプログラムを利用します。

 Fvco=PLL周波数は900MHzとし、Fout=10MHzとするとN=900/10 = 90 となります。

 スケッチの中では、dividerの値になります。

まず、
#define CLK0_PHOFF 165
#define CLK1_PHOFF 166
を加えて、setup()を次のように書き換えます。

void setup(){
  Wire.begin(); // Arduino is Master
  Si5351_init(); //Si5351 initialize
 
//PLLAのセット 900MHz,CLK0=10MHz
  frequency = 10000000;
  divider = 900000000 / frequency;
  if (divider % 2) divider--;
  PLL_Set('A',frequency,divider);
//CLK0の設定
  Si5351_write(CLK0_CTRL,0x4C); //CLK0 Sorce PLLA
  MS_Set(0,divider);
  Si5351_write(CLK0_PHOFF,0);//CLK0 delay 0
 
//CLK1の設定
  Si5351_write(CLK1_CTRL,0x4C); //CLK1 Sorce PLLA
  MS_Set(1,divider);
  Si5351_write(CLK1_PHOFF,divider);//CLK1 delay T/4 (90degree)
 
  Si5351_write(PLL_RESET,0xA0); //Reset PLLA and PLLB
}

 最初、PLL Resetをしないで実験をしたら、位相が変わりませんでした。
 CLK0,CLK1の設定の後、PLLをリセットしたら、位相が変わりました。

 CLK0(青)とCLK1(赤)の出力波形です。

イメージ 1

 確かに、90度(4分の1周期)ずれています。ただ、矩形波が出力されるはずなのですが、私のpico scopeが上限10MHzですので、波形がなまっているかもしれません。

 接続回路図です。

イメージ 3

 ブレッドボードです。

イメージ 2

 なお、以上をまとめて、JH7UBCホームページにも掲載する予定です。


 

Viewing all articles
Browse latest Browse all 440

Trending Articles