DDS VFOの製作3

'09.12.07
マイコン初心者の私が、DDS制御のソフトにチャレンジしてみました。
 
DDS制御方法
 最初に判らなかったのが、秋月DDSを制御するシリアルデータ−はソフトでどうやって作るの? からはじまりました。
 DDS VFO制御のアセンブラソースは各OMのHPでも紹介されていますが、JE3JLB OMのソースを参考にさせていただきました。(現在 は更新され公開されていないようです)。
DDS制御信号作成
   秋月DDSのデータ−シートでは、CLOCK,DATA,STROBの3ラインで制御しており、この信号をPICのポートから出力すればいいよう です。
 まずCLOCKは、一定サイクル毎に"1""0"をポートに出力すれば実現できそうです。PICスタートした頃LED点滅プログラムに同じ ですね。
 次にDATA、"8bitのデータ−をシリアルに読み出すのはどうするの?"が疑問でしたが、DATAを左シフトして押し出された上位ビッ トを"1/0"判定し、"1"ならポート出力を"1"にする。"0"ならポート出力を"0"にすることで、シリアルデータ−としてポートから出 力できます。
 最後にSTROBは、DATA送信後一定時間"0"を出力すれば良さそうです。
 これらの信号出力をウェイトルーチンでタイミングを合わせて、ポートから出力すればDDS制御信号ができます。  データ−はクロックの立ち上がりエッジで取り込まれますので、フローをまとめると以下のようになります。
使用するポートはCLOCK=RA2、DATA=RA3、STROB=RA4として
1. RA2,3=0 RA4=1を出力
2, DATAを左シフトしてビット判定
3. 1ならRA3=1、0ならRA3=0としてtw(e.g=5us)待って、RA2=1にしてCLOCKの立ち上がりでDATAを取り込むタイミングを作る。
4. 更にtw(e.g=5us)待って、RA2,3=0に戻す。
5. 1〜4をDATAビット数繰り返す。
6. 最後にRA4をtw(e.g=5us)間RA4=0にする。

 
ロータリーエンコーダーの検出
 ロータリーエンコーダー(以下RE)の検出にも何通りかのアルゴリズムがあり、またREにも秋月のメカニカルタイプやオムロンな どのフォトタイプなどがあります。いずれもA B出力が回転方向に応じて図のように変化します。
 図をみると1パルス内に4モードの位相変化がありますが、秋月のREは1パルス毎にクリックがありクリック途中で停止させなけれ ばならないのでちょっと使いづらくなります。
 回転検出のアルゴリズムは、「ロータリーエンコーダー回転検出」などをキーワードに検索すればいろいろな方法を見つけること が出来ます。
 ここでは、タイムT0時とT1時のA B出力を比較し不一致なら回転したと判定し、次に回転方向を判定します。T0とT1の時間差を 最適化することによりチャタリング回避や操作フィーリングが変化します。秋月のREなどには1〜5ms程度、フォトタイプには1ms程 度が適当です。
 次回は全体のソースを作成します。
製作4へ

Top Menu