お気に入りのSDR製作「Si5351Aを試してみる


 写真はPICマイコンに、Si5351モジュールを組み合わせた、実験ボード。少しずつ周辺回路を追加しながらソフトのデバックをすすめています。

2018.3.15

はじめに
 「お気に入りのSDR」をソフトも含めて自作しようとすると、新たな要素技術の習得が必要になります。全体の構成は不明確ながらも、必要な要素技術は はっきりしているので、しばらくはこれらの要素技術を習得していくことになります。

Si5351Aを試してみる
 SDRの場合、受信範囲はサウンドカードのサンプリング周波数で決まるので、せいぜい数十kHzしかありません。受信範囲を拡大するためには、ローカル周波数を 細かく分割して切り替える必要があります。ローカル周波数を水晶発振で用意するのは、コスト的に実現困難で、代替えとして、PLLのクロックジェネレータ(Si5351A) を検討してみます。
 本デバイスの周波数設定は、外部からマイコンで制御する必要がありますが、Webによればなかなか面倒な設定の様で、マイコンはアルディーノ での制御例が多いのですが、今回は開発環境上使い慣れたPICでの制御を試してみます。
 Si5351Aをモジュール化した製品が、秋月電子から出ています。詳細データーアプリケーションノートはこちらを参照してください。

PICで使ってみる
 Si5351Aを使った製作記事の多くは、アルディーノマイコンでSi5351を制御するためのライブラリーが 充実しているらしいのですが、PICマイコンでも、問題なく制御できます。
 Si5351を周波数設定するには、内部レジスターに設定値をI2Cで書き込むことで制御できます。設定レジスター数が多いのと、今回から使ったXC8コンパイラには I2Cの組み込み関数が無いので、スタートしずらく感じますが、慣れてしまえば問題ありません。

マイコンの選定
 使用するマイコンとしては、I2Cマスター機能があればOKですが、今回は、3.3V動作し、他にUARTも使うのでPIC16F886を選定しました。
 開発にはマイクロチップから無償で提供されているMPLAB X IDE、コンパイラにXC8、書き込みには秋月ライターを使います。

プログラムの構想
 今回はSi5351Aをとりあえず使ってみるということで、周波数は一波(36MHz)のみとし、レジスターの設定方法やI2Cのプログラムをマスターするという 目標で作成します。
 一波の制御が出来れば、後はレジスターに書き込む値を変えれば周波数可変も出来るはずです。

周波数設定方法
 

 周波数設定例として、出力36MHzで計算してみます。
 Xtalは25MHzなので、Fvco=25MHz x X1と36MHz=Fvco/X2の2式からX1=36、X2=25になります。ここでbを0と仮設定するとFvcoを求めるaは36に、Foutを求めるaは25 になります。
 bを0としたのでcは似意の値で良いことになるのでここでは1とします。
 次に、今求めたa〜cをパラメーターP1〜P3を求める式に代入すると、MSNA_P1は4096、P2は0、P3は1になります。MS0_P1は3200、P2は0、P3は1になり、それぞれ の値を2進数で各レジスターに書き込みます。  これらの値を求める計算ソフト、クロックビルダーも提供されていますが、使い方を理解するのも面倒なので手計算でやりました。

  ソフトの説明
ソースリストを参考まで、プログラムについての簡単な説明をします。
 プログラムはメイン関数の他、PIC初期設定、I2Cコマンド送信、I2Cアイドル待ち確認、I2C 1Byte送信関数から構成しています。

Config設定 以前のMPLAB IDEでは設定内容を記述していましたが、X IDEではエディター画面下のリストから選択すれば自動で作成してくれるソースをコピーすれば OKで、MPLAB IDEに比較して簡単になりました。

メイン関数 プログラムのメイン関数部です。PIC初期化を呼び出した後、Si5351Aの各レジスターのアドレスと、設定値を引数としてi2c_send関数の呼び出し をレジスター分繰り返しています。
 今回のソフトでは、出力周波数36MHzのみで、Si5351のPLL AとマルチシンセAのみ使用するので、それらのレジスターに設定値を書きこみます。PLL Bとマルチシンセ Bや分周器を使うとそれらのレジスターにも設定値を書きこむ必要があります。
 レジスターへの書き込み順には、指定があり詳細はアプリケーションノートAN-619に書かれています。
 プログラムの下部に500ms周期のLED点滅は、デバック確認用です。叉、設定をWhile文でループしていますが、動作確認のためで、実際には一回のみ設定すれば OKです。

PIC初期化関数 PICマイコンの初期設定部で、ポートの設定やI2C制御のレジスタ設定をしています。I2CのSDA/SDLで使用するRC3/RC4はそれぞれ 入力ポートに設定します。

I2Cコマンド送信関数 「PIC16F1ファミリー活用ガイドブック」の例を、ほぼそのまま使いました。CCS Cコンパイラでは組み込み関数が充実しているので PIC内部レジスタのビット設定まで記述することはありませんが、XC8コンパイラでは組み込み関数が無い分、PICレジスターを詳しく確認必要です。

プログラムのトラブル X IDEでは日本語のコメントが使えるようになりましたので、プログラム行頭やインデント(字下げ)に全角のスペースが入っている箇所 があり、ビルドエラーになってしまいます。このエラーを見つけるのに随分時間がかかってしまいました。

試験回路
 

 テスト回路を左図に示します。回路はとりあえずSi5351Aの制御部のみ実装していますが今後順次周辺回路を組み込んで動作確認していく予定です。、
 回路図のSi5351は秋月モジュールで、単体のICのピン配置と異なっています。Si5351は3.3V動作なのでマイコンも3.3V動作させています。

     今後の進め方
 第一ステップとして、Si5351AをPICで制御するプログラムの要素技術はできました。実機に組み込むにはもう少し周波数設定種類を増やす必要があり、PC本体からの コマンド制御を予定しています。
 次回はPIC〜PCのシリアル通信ソフトにTRY予定です。

   Top Menu