2019年10月24日木曜日

Si5351A最後の罠にはまる!?

Silicon Labs社製のSi5351Aはすっかりアマチュア無線自作関連では定番となりました。

マイコンと組み合わせればVFOとして十分実用になるし安価に手に入るため、お手軽な発振器として従来のDDSにとって代わってしまったようです。

自分もVNシリーズの発振源として重宝していますが、そろそろ新しいプロジェクトということで高い周波数の発振テストを行いました。以前50MHz台のテストを行い問題なく設定周波数で発振したのを確認したので今度は144MHz帯を狙いテストしたところ、なぜか90MHz台と設定値と異なる出力周波数でした。

いろいろと設定周波数を変えながら検証していくと、どうやら80MHz以上を設定した場合ダメらしいことが分かりました。

そこで原因を探るべくまずはSi5351Aの設定パラメータの関係と、周波数設定の考え方について以前の記事をみながら再度おさらいすることにしました。

Si5351Aの周波数設定式

1.VCO周波数設定(PLLA, PLLB)
 fvco = fXTAL x (a + b / c)
    a...15~90, b...0~1048575, c...1~1048575, fXTAL = 25MHz or 27MHz
 fvco = 375MHz~900MHz

2.VCO分周設定(MultiSynth0,1,2,...)
 fout = fvco / (d + e / f)
    d...4~900, e...0~1048575, f...1~1048575

3.設定周波数とパラメータ値の関係


a(16~32(36)) c d R
80~180MHz 2F 500000 5 0
40~80MHz 4F 250000 10 0
36~40MHz 8F 125000 20 0
16~36MHz F 1000000 25 0
8~16MHz 2F 500000 50 0
4~8MHz 4F 250000 100 0
2~4MHz 8F 125000 200 0
1~2MHz 16F 62500 400 0
0.5~1MHz 16F 62500 400 2
0.25~0.5MHz 16F 62500 400 4
0.125~0.25MHz 16F 62500 400 8
62.5~125kHz 16F 62500 400 16
31.25~62.5kHz 16F 62500 400 32
15.625~31.25kHz 16F 62500 400 64
8~15.625kHz 16F 62500 400 128

さてこれらのパラメータの設定値、一見問題なさそうに見えますが、あらためてSi5351Aのレジスタマップ説明書AN619でおそらく最新版Rev.0.7の記述をたどってみると・・・


なんと2.でいうところの d + e / f 値は8以上でないとダメだということです。つまり分周比を整数にするため e / f を0にすると、d値は8以下を設定できないことになります。これは気が付きませんでした。つまりいままでの設定アルゴリズムでは80MHz以上の場合d値が5と設定できない値であったため、期待どおりの周波数が出力されなかったというわけですね。
では80MHz以上設定するにはどうしたらいいでしょうか?
解は下のほうの記述にありました。


 この設定でd値を4とすることによって200MHzまで設定が可能になるということです。
以上を踏まえ改定版設定表を作ってみました。
(追記(2019.11.1):80MHzから100MHzまでの設定を変更しました)


a(16~32(36)) c d R
100~200MHz※
80~100MHz
4/25 F
8/25 F
625000
312500
4
8
1
1
40~80MHz 4/10 F 250000 10 1
36~40MHz 8/10 F 125000 20 1
16~36MHz F 1000000 25 1
8~16MHz 2F 500000 50 1
4~8MHz 4F 250000 100 1
2~4MHz 8F 125000 200 1
1~2MHz 16F 62500 400 1
0.5~1MHz 16F 62500 400 2
0.25~0.5MHz 16F 62500 400 4
0.125~0.25MHz 16F 62500 400 8
62.5~125kHz 16F 62500 400 16
31.25~62.5kHz 16F 62500 400 32
15.625~31.25kHz 16F 62500 400 64
8~15.625kHz 16F 62500 400 128

注:36MHz以上は10Hzステップ
※・・・2.の条件に依らずP1=0, P2=0, P3=1, MSx_INT=1, MSx_DIV4=3に設定

この設定表を基にコードを書き直し実機でテストしてみました。(144.10000MHzに設定)

というわけで、設定どおりの周波数で出力できました。(右上の青い周波数値)

4 件のコメント:

  1. こんばんは。こちらはLF/MFの移動運用はお休みしています。最近Si5351もいじり始めました。ところで改定版設定で80~200MHzのa=4F/25だと80MHzでVCOの発振周波数が320MHzとなって仕様の375MHz以下になってしまうのでは?あと改定前の設定でR=0はもちろん改訂版と同じR=1ですよね?良さそうなので何に使おうかと考え中です。

    返信削除
    返信
    1. JH1GYEさん、こんばんは。コメント&ツッコミありがとうございます。
      仰る通り改定版の設定表では80MHzのVCO周波数が低すぎますね。後ほど追記するつもりでしたが、80MHzから100MHzまでは、a = 8F/25, c = 312500, d = 8に設定するとVCOの発信周波数範囲におさまります。また、Rについては改定前の“0”は間違いで“1”が正しいです。
      修正したコードをコンパイルしてインストールしましたら、一応8kHzから200MHzまで発振可能になりました。是非ご参考になさってください。

      削除
  2. 了解です。あとでプログラム教えて下さい。高い周波数で使う時、周波数確度を上げるためにデーターシートをよく見たらX'tal端子から外部入力できますね。でも25~27MHzでないとダメそう。GPS DOの10MHzからではちょっと工夫が必要です。X'tal端子のところにバリキャップを入れてVCXOにできればFBですが・・・。

    返信削除
    返信
    1. コードはVNシリーズの流用でC言語でPIC用に書いたものですが、I2C通信が出来ればほかのマイコンでも動くと思います。当該部分を抜粋したファイルをメールでお送りすることは可能です。

      削除