AVRを使ったエアバンド用PLL-VFOの実験
「PLL-VFOを使ったエアバンド受信機の製作」で実際に使用しています。ただ、VCO単体の安定度の問題と思われる現象で苦労しました。このコンテンツを参考にされる場合は、VCO単体について十分なテストをお勧めします。(2009-05-24)
「AVR-DDSでPLL-VFOの実験」シリーズでPLL-VFOの基礎実験を行いました。これで短波ラジオでも・・と考えていましたが、なかなか手がつきません。・・・・なのに・・また、PLL-VFOの実験に手を出してしまいました。今度は、エアバンド受信機用のPLL-VFOを実験します。AVR-DDSのPLL-VFOは、DDSの仕様からあまり高い周波数のVFOまでは対応できません。ここは専用のPLL-ICを使用しました。
PLL-ICとして選択したのは、富士通製CMOS-PLL周波数シンセサイザのMB87001Aです。最近(・・・・といっても、これまでPLL-ICに特別興味があったわけではないので、Webで得た情報の受け売りですが・・・)は、専用PLL-ICの入手性が悪いようで、電子部品店や通販で購入するのが難しいようです。
現在、製造されているPLL-ICは、プリスケーラも内蔵されて機能的は高性能ですが、携帯機器用にパッケージングが極小化されているのと、使用電圧も3V以下と使いづらくなっています。また、対応周波数が800MHz以上に対応したものが多く、VHF帯では利用できません。
MB87001Aは、とっくにディスコンIC(製造終了)なので普通には入手できないのですが、yahooオークションでよく出品されています。しかも価格は1個辺りの単価100円程度で入手できます。ただ、安いのには理由があります。よく調べてみるとプリスケーラが内蔵されていないため、外部にデュアル・モジュラス・プリスケーラが必要となります。
外部プリスケーラは、周波数カウンターを作るときに入手したMB504があるのでこれを使用します。MB87001Aのデータシートにも同じシリーズのMB501Lを使用した例が掲載されています。MB501を使用すると1.1GHzまで、MB504では、520MHzまで対応可能です。
MB87001Aは、(周波数を可変するために)内部分周器を設定するのに3線式のシリアル通信を利用します。この3線式シリアルによる設定は、他のPLL-ICでも同じような方法を採用しています。このため、単純にPLL-ICのみでPLLを構成することは難しく、周波数可変のためには、PICやAVRなどのワンチップマイコンを使用するのが一般的です。
今回は、AVRを使用してシリアル信号を送出します。AVRは、標準でシリアル通信機能を搭載していますが、残念ながら、そのままでは対応できません。しかし、簡単なプログラムで標準ポートをON/OFF制御してシリアル通信を行うことができます。
MB87001Aの設定に必要なのは7ビットのスワローカウンターと10ビットのプログラミングカウンターの連続した17ビットのデータ列です。このデータ列をMSBファーストでPORTDのPD6で送出します。送出は、PORTDのPD5にクロックを流しながら同調して送出する必要があります。17ビット送出したら、PORTDのPD7にワンパルス送出して17ビットのシフトレジスタから17ビットラッチへ転送します。
こうやって動作を書くと複雑に見えるかもしれませんが、タイムチャートとプログラムをみていただければ、単純で簡単なことがわかると思います。
上の波形は、プログラミングカウンタ値に290、スワローカウンタ値に42を送出したものをオシロスコープで見たものです。
PLL-ICの周波数設定は、
N プログラムカウンタ値 : 上の波形では290 (0100100010) A スワローカウンタ値 : 上の波形では42 (0101010) M 外部プリスケーラ分周比 : 64 fosc 基準周波数 : 12.8MHz R 基準分周比 : 2048
とした場合、設定されるVCOの出力周波数fvcoは、
fvco = ((N * M) + A) * (fosc / R)
で計算できます。よってこの例で設定される周波数は、
(290 * 64 + 42) * (12800000 / 2048) = 116262500Hz
となります。
基準周波数foscを基準分周比Rで割った値(今回は6250Hz)が可変できる最小周波数ステップとなります。基準分周比もシリアル通信で設定できるPLL-ICが多いのですが、MB87001Aは、ICのピン3個を利用して3ビットの固定設定となっています。この3ビットをAVRで制御し、基準分周比を可変して周波数ステップを変動する方法もありますが、今回は、基準分周比を固定としてソフトウェアで周波数ステップを可変(6250Hz単位と50KHz単位の2種類)としています。
シリアル通信のタイミングは、データシートに詳しく記載されています。MB87001Aは、クロックの立ち上がりからDATAの変化までのタイミングが1μs以上となっています。プログラムでは、安全を見込んで各種タイミングを2μsとしました。この一連のデータ列が、ロータリーエンコーダを回して周波数を可変すると連続して送出されます。手順を取らずに単方向で一方的に送出するので、あまり助長なウエイトをかけないようにすべきだと思います。
下の図が実験回路です。PLL-ICとAVRのクロックは、12.8MHzを共有しています。VCO制御のためのPLL-ICからの出力は、内蔵チャージポンプの出力Doを使用せずに、位相比較器の出力ΦPとΦRを使用しています。これは、VCOの制御電圧をPLL-ICの供給電圧5Vより高くするために利用しています。
PLLのアンロック状態をAVRで読み取ってLCDに表示するようにしていますが、ソフトウェアで周波数可変範囲を制限すれば特に必要な機能ではありません。
プッシュスイッチは、周波数ステップの切替です。6250Hzと50KHzとトグル切替します。エアバンドはおおむね50KHzステップで問題ないようです。
いつものようにブレッドボードで実験しました。AVRはATmega88を使用しています。AVRやMB7001A、MB504は、ロジック動作なのでブレッドボードで問題ないと思いますが、無理とは思いつつも、VCOもブレッドボード上に組み立てました。^^;
PLLの動作としては安定しています。周波数カウンタで見る限りは正確な周波数で可変を実現できています。ループバックフィルタを適当に組んでいるのでジッタやロックタイム等が使用に耐えるかどうかは不明です。(・・・が、受信機の場合は、あまり影響が無いと判断しています。)
VCO部分のクローズアップです。抵抗やコンデンサのリードも長いまま。^^;
ハートレー発振回路やコルピッツ発振回路等を色々と試したのですが、ブレッドボード上では、安定して動作させるのが大変です。また、発振周波数は計算どおりにはいきません。はじめ、LC回路のコイルには、FCZコイルの144MHz用を利用していたのですが、必要な周波数範囲と安定動作が得られないためトロイダルコアを利用したコイルに変更しています。繰り返しになりますが、この周波数帯はブレッドボードでは、無謀だと思います。ただ、それを承知で実験してみるとPLLに助けられて一応は、安定して動作するようになりました。^^;
AVRのプログラムソースです。AVRStudio4とWin-AVR-20080512を使用して作成してあります。なお、LCD関連ライブラリは省略してあります。
ロータリーエンコーダの読み取りにピン状態変化割り込みを利用しています。ロータリーエンコーダは秋月電子のクリック付きをクリックなしに改造して使用しています。
PLL-ICへのシリアル通信部分は、富士通やその他のPLL-ICもほぼ同じようなプログラムで設定できると思います。設定データの種類が多いPLL-ICでは、シフトレジスタからラッチへの転送時にデータ列の末尾(FirstLSBビット)ビットをコントロールビットとして命令を判別させているようです。
1件のピンバック
PLL-VFOを使ったエアバンド受信機の製作 | henteko.org
コメントは現在停止中です。