1.概要
PLLを使って2MHzから50MHz程度の高周波信号の発信機を
作る際の制御部です。
周波数設定をロータリエンコーダや押しボタンスイッチで行ったり、
複数のVFOで広い周波数帯をカバーする時、その切替えを自動的
に行う出力信号を出すことが出来ます。
2.機能
・本制御ユニットはワンチップマイコンであるPIC16C84を使用して
回路の簡単化と機能の高度化を実現している。
(PIC16C84については「PIC Know How」 のページを参照)
・簡易ロータリエンコーダの入力に従い4桁BCD値を加算/減算する。
設定可能範囲は0000から9999まで。
このときSHFTスイッチの入力により周波数可変単位を1倍か
100倍か切り替えることができる。これは大きく周波数を変えたい
とき便利。
(単位周波数はVFO側により決まる。SHFTスイッチは交互切替え)
・前項で設定された4桁BCD値をPLL用のICへの設定周波数として
シリアルで出力。 シリアル入力のラッチ用ICでそれを保持し、その
出力をPLL−ICに接続して希望の周波数を発振させます。
・ロータリーエンコーダー以外にUP/DOWNスイッチにより高速に周波
数変更が可能。 これは単に変更を高速にするだけでUP/DOWNの
スイッチを押している間連続的にカウントアップ/ダウンさせる。
・複数のVFO発信回路を使う場合を想定し、周波数設定値の4桁の
内、上位2桁を常時チェックし、2個所で大小判定をした上で3ポート
のいずれかをONとし他はOFFとする。
これで3つまでのVFOの切替えを行うことが出来る。
・接続を想定しているスイッチの種類は下記。
ロータリエンコーダ:インクリメント型のスイッチで右/左回りで
カウントアップ/ダウンを自動判別
UP : 設定周波数の高速カウントアップ
(押している間連続的にカウントアップする)
DWN : 設定周波数の高速カウントダウン
(押している間連続的にカウントダウンする)
SHFT: ロータリーエンコーダの可変単位の1倍/100倍の
切替え
3.構成
構成は大まかに下図のようになっており、ロータリーエンコーダや
スイッチを常時スキャンし、その動作によりPLL設定値を上下させて
シリアル出力する。それをラッチICで保持して、PLL用ICであるMC
145163に出力している。
--------- ----------
|ROTARY | | |
| ENCODER |->| PIC16C84 | ------------------------------
--------- | SW,PLL | | 74HC595 x2 |
--------- | Control |------>| SERIAL INPUT 16BIT LATCH |
| SWITCH |->| | ------------------------------
--------- ---------- ↓BCDx4 ↓ ↓ ↓
|||SW ------------------------------
||| | PLL CONTOROL (MC145163) |
---------- | |
| VFO UNIT | ------------------------------
| x Max3 |
----------
4.回路図とパターン図
一寸小さくて見にくいですが下図が全体回路です。
下図にはVFO部分は含んでいません。
左側にある大きなICがPLL用の有名なICです。その設定用の入力の
部分にラッチ用ICが2個接続されており、このICのシリアル入力の所に
PICがつながっています。
PICからは、DATA、CLOCAK、ENABLEの3本の信号が出ており、
これでシリアルでデータを送ることを制御しています。
PICからはこれ意外に各スイッチへの接続コネクタとVFOの切替え
出力のコネクタが接続されているだけです。
回路図とプリント板用アートワーク図は、CADである「HiWIREU」 で
描いているのでダウンロードして使って下さい。
汎用PLLユニット回路図 (ダウンロードしてお使い下さい)
汎用PLLユニットパターン図(ダウンロードしてお使い下さい)
5.プログラムソースリスト
プログラムの全体は1本の流れで出来ています。概略のフローは
下記のようになっています。
→ キー入力有無チェック(何も無ければ繰り返し)
| ↓
| 各キーの処理をする ロータリーエンコーダなど
| ↓
| 周波数データの更新 周波数データはBCDで扱っている
| ↓
| PLLへの出力 シリアル出力の制御
|_____↓
(1)ロータリーエンコーダの処理
RE1とRE2の2本の信号のどちらが先かにより右回り(周波数アップ)
か左回り(周波数ダウン)かを判定する必要があります。
その実現方法は
RE2の信号入力なし → 何も入力無しとして処理
↓(あり)
RE1の入力High → カウントダウン処理へ
↓(Low)
カウントアップ処理へ
として判断します。
(2)チャッタリング(バウンス)の回避
スイッチの入力には必ずチャッタリングがあります。これは何かと言うと、
接点が閉じる時1回で完全には安定に接触せず何回かはずんでから完全
に接触するという現象です。
従って、1回だけ接点入力がLowになったからと言ってすぐ次の処理を
始めると、続けて接点の状態を見に行くような処理の時には次に見に行
った時にはHighに戻っているという現象となります。
このチャッタリングは数msec続きます。特に今回のような接点式ロータリー
エンコーダーはこのチャッタリングが比較的長く続いており、RE2がHighに
なったと思ってすぐRE1を見に行くと、まだ安定しておらず逆方向と判断して
しまったり、何回かカウントしたりして不安定な状態となってしまいます。
これを回避するためには、1度接点に変化を検出したら、数msec後にもう
一度見に行って再度同じ状態であったらその処理をするという風にします。
今回はこのチャッタリングがロータリーエンコーダーだけが特別長く続いて
いるという現象があったため、他のスイッチとは別の処理方法でチャッタ
リング回避時間を長くしています。
(3)データの更新処理
PLL用のICの設定値入力がBCDであるため、PICからの設定値もBCD
で出力する必要がありますので、内部のデータ処理は全てBCDのままで
実行しています。そのためカウントアップ、ダウン処理が一寸面倒になって
しまいましたが、バイナリ、BCD変換を使うことにすれば、バイナリのままで
扱っても構わないことになります。
もっとも4桁BCDとなると2バイトのバイナリデータとなりますから、BCD
変換も結構面倒ですが。
プログラムリストは、ワンチップマイコンPIC用統合アセンブラである
MPLAB用としてあります。
プログラムリスト(ダウンロードしてご覧下さい)