JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

Raspberry Pi Pico CircuitPython Si5351A テストその1

2022-05-10 20:23:46 | Raspberry Pi Pico
 Raspberry Pi Pico + CircuitPython + MuIDE環境で、3チャンネル・クロックジェネレーターSi5351Aのテストをします。

 CircuitPythonには、Si5351用のライブラリがありますので、CircuitPythonのLibrariesダウンロードページからmpyライブラリをダウンロードします。

  ダウンロードし、解凍したファイルのlibフォルダ内のadafrit_si5351.mpyをPicoのlibフォルダ内のコピーします。
 今回テストするのは、examplesフォルダ内のsi5351_simpletest.pyです。

 Raspberry Pi PicoとSi5351Aモジュール(秋月電子で販売しているもの)の接続回路図です。 I2C接続で、Pico側は、SCL=GP17,SDA=GP16とします。
このモジュールにはプルアップ抵抗がついていませんので、外付けで10KΩの抵抗でプルアップしました。

 スクリプトです。
 ファイル名は、code.pyとして、Picoのルートの保存し、実行します。
 実際のsi5351_simpletest.pyには、英文の説明が長々としてありますが、割愛して、簡単な説明を加えました。また、そのままでは動きませんでしたので、最初の部分を若干書き換えてあります。
--------------------------------------------------------------------------------
"""
si5351_simpletest.py
"""

from board import *
import busio

import adafruit_si5351

SCL = GP17
SDA = GP16

# Initialize I2C bus.
i2c = busio.I2C(SCL, SDA)

# Initialize SI5351.
si5351 = adafruit_si5351.SI5351(i2c)

#PLLA周波数設定 25MHz×36=900MHz
si5351.pll_a.configure_integer(36)  # Multiply 25mhz by 36
print("PLL A frequency: {0}mhz".format(si5351.pll_a.frequency / 1000000))

#PLLB周波数設定 25MHz×24 2/3=616.66667MHz
si5351.pll_b.configure_fractional(24, 2, 3)  # Multiply 25mhz by 24.667 (24 2/3)
print("PLL B frequency: {0}mhz".format(si5351.pll_b.frequency / 1000000))

#CLOCK0出力周波数 900MHz/8=112.5MHz
si5351.clock_0.configure_integer(si5351.pll_a, 8)
print("Clock 0: {0}mhz".format(si5351.clock_0.frequency / 1000000))

#CLOCK1出力周波数 616.66667MHz/(45 1/2)=13.55311MHz
si5351.clock_1.configure_fractional(si5351.pll_b, 45, 1, 2)  # Divide by 45.5 (45 1/2)
print("Clock 1: {0}mhz".format(si5351.clock_1.frequency / 1000000))

#CLOCK2出力周波数 616.66667MHz/900=0.68518519MHz
si5351.clock_2.configure_integer(si5351.pll_b, 900)

#CLOCK2ポストデバイダ設定 1/64  CLOCK2出力=685.18519KHz/64=10.706KHz
si5351.clock_2.r_divider = adafruit_si5351.R_DIV_64
print("Clock 2: {0}khz".format(si5351.clock_2.frequency / 1000))

# After configuring PLLs and clocks, enable the outputs.
si5351.outputs_enabled = True
# You can disable them by setting false.
--------------------------------------------------------------------------------
 SI5351Aのブロック図です。

 このスクリプトでは、CLOCK0は、PLLA(900MHz)をMS0で1/8して、112.5MHzにしています。
 CLOCK1は、PLLB(616.66667MHz)をMS1で45 1/2分周して、13.553115MHzにしています。
 CLOCK2は、PLLBをMS2で1/900して、685.18519KHzにして、更にポスト分周期R2で1/64にして、10.706KHzにしています。

 ブレッドボードです。

 Si5351Aの出力周波数を測定してみました。
 CLOCK0の出力です。理論値は112.5MHzです。


 CLOCK1の出力です。理論値は、13.553115MHzです。

 CLOCK2の出力です。理論値は、10.706KHzです。

 ほぼ、理論値通りの出力が得られました。
 
 今後、もう少し勉強して、OLED表示とロータリーエンコーダと組み合わせて、VFOを作ってみようと思っています。


最新の画像もっと見る

コメントを投稿