2023年5月1日月曜日

Si5351Aクロックジェネレータ(秋月電子例)

JH7UBCサイト[3CHクロックジェネレータSi5351Aの実験]を使い秋月電子Si5351A取扱説明書の例をテストを行いました。http://jh7ubc.web.fc2.com/arduino/Si5351A.html
●取扱説明書PDF
秋月電子通商 Si5351A取扱説明書PDF:【chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://akizukidenshi.com/goodsaffix/AE-Si5351A.PDF





■概要
・Silicon Laboratories社製Si5351Aを使用したクロックジェネレータモジュールです. 
・2.5kHz~200MHzの周波数を出力することができます. 
・3チャネル出力があり,それぞれ異なる周波数を出力することができます.
    (PLL回路が2回路なので,完全に独立ではありません.) 
・出力周波数はI2Cで設定します. 
・出力波形は矩形波(方形波)です.

●PLL周波数の計算PLL周波数は
 fvco = fxtal × ( a + ( b / c ) ) (aは15~90,bは0~1048575,cは1~1048575)
(いずれも整数)これらを設定用パラメータP1,P2,P3,に変換します(x=Aor B)
 MSNxP1[17:0] = 128 * a + Floor( 128 * ( b / c ) ) - 512 
 MSNxP2[19:0] = 128 * b – c * Floor( 128 * ( b / c ) ) 
 MSNxP3[19:0] = c
 以上のレジスタMSNA_P1~MSNB_P3をI2Cで転送します.

●出力分周器の設定レジスタMSx_SRCでPLLAもしくはPLLBのどちらを使用するか決めるこ   とができます.デフォルトでPLLAを使用するようになっています.
 出力周波数はfout = fvco / ( a + ( b / c ) ) 
(ただし( a + ( b / c ) )の結果は6~1800の間であること)
これらを設定用パラメータP1,P2,P3,に変換します(x=0~2)
 MSxP1[17:0] = 128 * a + Floor( 128 * ( b / c ) ) - 512 
 MSxP2[19:0] = 128 * b – c * Floor( 128 * ( b / c ) ) 
 MSxP3[19:0] = c
以上のレジスタMS0_P1~MS2_P3をI2Cで転送します.




●例PLL400MHz,出力20MHz PLL周波数の計算    
 fvco=25*(15+(1/1)) =400   
 MSNAP1=128*15+(128*(1/1))-512 = 1,536   
 MSNAP2=128*1-1*(128*(1/1)) = 0   
 MSNAP3=1 
[P1=600,P2=0,P3=1(HEX)]
 ●出力分周器の設定    
 fout=400/(15+(5/1))   = 20       
 MS0P1=128*15+(128*(5/1))-512 = 2,048   
 MS0P2=128*5-1*(128*(5/1) = 0   
 MS0P3=1   
[P1=800,P2=0,P3=1(HEX)]  


EXcel

























回路図



【CLK0】20MHzの発信確認できました。
CLK0 20MHz



プログラム Arduino IDE【ボード:Raspberry Pi Pico】
#include <Wire.h>

const byte Si5351_ADDR = 0x60;

void setup()
{
Wire.setSDA(12);  //SDA 
Wire.setSCL(13);  //SCL  
Wire.begin(); // Arduino is Master.
Si5351_write(3,0xFF); //Disable Output
Si5351_write(16,0x80); //CLOCK0 Power down
PLLA_set();
MS0_set();
Si5351_write(177,0xA0);//Reset PLLA and PLLB
Si5351_write(16,0x4F); //CLOCK0 Power up 8mA
Si5351_write(3,0xFE); //Enable CLOCK0
}

void loop()
{
}

void Si5351_write(byte Reg , byte Data)
{
  Wire.beginTransmission(Si5351_ADDR);
  Wire.write(Reg);
  Wire.write(Data);
  Wire.endTransmission();
}

void PLLA_set()
{
Si5351_write(26,0); //MSNA_P3[15:8]
Si5351_write(27,1); //MSNA_P3[7:0]
Si5351_write(28,0); //MSNA_P1[17:16]
Si5351_write(29,0b00000110); //MSNA_P1[15:8]
Si5351_write(30,0); //MSNA_P1[7:0]
Si5351_write(31,0); //MSNA_P3[19:16]MSNA_P2[19:16]
Si5351_write(32,0); //MSNA_P2[15:8]
Si5351_write(33,0); //MSNA_P2[7:0]
}


void MS0_set(){
Si5351_write(42,0); //MS0_P3[15:8]
Si5351_write(43,1); //MS0_P3[7:0]
Si5351_write(44,0); //MS0_P1[17:16]
Si5351_write(45,0b00001000); //MS0_P1[15:8]
Si5351_write(46,0); //MS0_P1[7:0]
Si5351_write(47,0); //MS0_P3[19:16]MS0_P2[19:16]
Si5351_write(48,0); //MS0_P2[15:8]
Si5351_write(49,0); //MS0_P2[7:0]
}


0 件のコメント:

コメントを投稿

Raspberry Pi Donkey Car スマートカー

  2020年に製作したDonkey Car スマートカー について記事にしました。 Donkey CarはRaspberry Pi のカメラからコースを ディープラーニングさせ自動走行を行います。(動画は白線上を自動走行)   動画