Suzulan > しろうと無線 > ハンドメイド > ローテータコントローラ >

 ローテータコントローラ(ソフトウェア)
< Rotator Controller Software >



  ローテータをコントロールするソフトウェアは大別して次の2つが必要です。

1、方位角度検出基板に搭載したR8C/15マイコンをA/Dコンバータとして動作させるプログラム。(C言語で記述)
2、実際にローテータを制御するプログラム。(VBで記述)

 方位角度検出基板に搭載したR8C/15マイコンをA/Dコンバータとして動作させるプログラム 

R8C/15マイコンにA/D変換させるわけですから当然このプログラムはR8C/15マイコンにロードし実行させます。R8C/15マイコンはこのプログラムにより0〜4.5Vのアナログ電圧を8Bitパラレルデータ.に変換し出力します。処理は無限ループによりアナログ電圧の変化は常に8Bitパラレルデータに変換され追従出力されます。下図方位角度検出基板のデータの流れを見てください。方位角度を示すアナログ電圧DIRはP1-0端子に接続されています。したがってP1-0端子はアナログ電圧入力用として占有されるため、出力端子としては使用できません。このためA/D変換されたADレジスタのb0データはP3レジスタのb4を経由で出力するようにしてあり、ハードウェア上もこのように配線されています。シリアルインターフェースアダプタ側からみると、正規の8Bitデータとして受け取ることになります。プログラムの作成はここがポイントです。筆者はトランジスタ技術(2005年4月号)に付属のAD変換サンプルプログラム(C言語)に一部コードを追加してこの動作を実現しました。(コードは下部参照) なおR8C/15マイコンに対するプログラムの作成やロード・デバッグ方法などについては同誌を参照してください。

R8C/15マイコン A/Dコンバータ ソースコード(C言語)

このプログラムはトランジスタ技術(2005年4月号)に付属していたAD変換のサンプルプログラムに、方位角度検出基板を動作させるため一部コード(赤色文字部分)を追加して書かれています。追加した部分はA/D変換されたADレジスタの8BitパラレルデータをR8C/15マイコンの外部ポートに出力させるためのものです。

 ローテータを制御するプログラム(VB) 

製作した一連の基板間の接続イメージを下図に示します。ローテータを制御するプログラムは、Serial_InおよびSerial_Outプロシジャーを使用し、以下の5パターン(@〜D)の組合わせで作成します。この5パターンのプログラムの組み合わせでプリセット動作を含むG-1000DXAローテータの全ての制御が可能になります。アクセスは全てシリアルインターフェースアダプタに対して行います。(方位角度検出基板や回転制御基板に対して直接アクセスすることはありません。) Serial_In および Serial_Out プロシジャーの詳細についてはシアルインターフェースアダプタ製作記事を参照してください。プログラム記述上の留意点として記述順序の制約があります。回転速度を変える場合は、必ず回転開始データを送出したあとで回転速度データを送出します。もし回転速度データを先に送出し、そのあと回転開始データを送出しても、回転速度データに回転開始データが上塗りされ意味を失います。(エラーにはなりませんが動作は高速回転として振る舞います。) 回転停止および方位角度の検出はどの位置に記述してもかまいません。

@現在の方位角度を検出する:

シリアルインターフェースアダプタの、IN0〜IN7に与えられている8Bitパラレルデータ(方位角度)を読み込む。
  記述例:
  In_Port = Serial_In()
実角度 "r" は、 r = ( In_Port / 255 ) * 500 の計算式で算出できる。ただし数値"500"についてはG-1000DXAの方位指示針が示す角度値と計算結果の"r"の値が一致するようにカットアンドトライで調整する。


Aロータを右回転させる:

シリアルインターフェースアダプタに、"&HFD"を送出する。
  記述例:
  Serial_Out (Turn_Right)    'Turn_Rightは”Const Turn_Right As Integer = &HFD”と宣言しておく。

Bロータを左回転させる:

シリアルインターフェースアダプタに、"&HFE"を送出する。
  記述例:
  Serial_Out (Turn_Left)     'Turn_Leftは”Const Turn_Left As Integer = &HFE”と宣言しておく。

C回転さ停止させる:

シリアルインターフェースアダプタに、"&HFF"を送出する。
  記述例:
  Serial_Out (Turn_Stop)    'Turn_Stopは”Const Turn_Stop As Integer = &HFF”と宣言しておく。。

D回転速度を変える:

シリアルインターフェースアダプタに、 "&H00〜&HFC"範囲内の任意の1バイトを送出する。(送出する数値が大きくなるほど回転速度は速くなる。)
  記述例:引数は回転速度に見合った"&H00〜&HFC"範囲の任意の1バイトをセットする。筆者は以下の3速度を設定し使い分けている。
    Serial_Out (Low_Speed)       
'(低速回転指示)Low_Speedは”Const Low_Speed As Integer = &H0”と宣言しておく
   Serial_Out (Mid_Speed)        '(中速回転指示)Mid_Speedは”Const Mid_Speed As Integer = &H70”と宣言しておく
    Serial_Out (Hight_Speed)      '(高速回転指示)Hight_Speedは”Const Hight_Speed As Integer = &HFC”と宣言しておく

 参考:筆者の作成したローテータコントロールプログラム (VB) 

プログラムはアイデア次第でいかようにも作成可能です。筆者が作成したプログラムコードは公開しません。白状すると素人プログラマのためアルゴリズムが幼稚で公開にはとても耐えられないからです。(^^;  参考程度にフォームとその機能概要のみ以下に示します。およその機能はイメージできると思います。この画面からは見えない機能として、プリセット回転をさせた場合、回転開始時は高速回転でスタートし、停止位置20度手前で中速回転、10度手前で低速回転となるようにプログラムされています。(自動減速機能) また現在停止位置から設定したプリセット角へ回転させるためには、右回転が近いのか、左回転が近いのかを自動判定させています。(最適回転方向判定機能) たとえば現在アンテナが330°の位置に停止していてプリセット角を30°に設定し回転開始ボタンを押すと、右回転(時計回り)を始め360度を通り越して390度(すなわち30度)で停止します。これはG-1000DXAが有するオーバラップエリア角(360度〜450度)を利用することにより実現しています。勿論、オーバラップエリアに無関係な位置関係にあっても、1度でも少ない最適な回転方向になるようにプログラムされています。アンテナにカラスが止まるのを防止するためランダムな時間にアンテナをフリフリするアイデアも考えましたが、「カラスは利口でそんなことをしてもすぐに慣れ、逆に遊ばれるヨ。」とローカルに指摘され、このアイデアはボツにしました。(^^;



◎ このコーナーで公開した自作品は、筆者の単なる個人的な趣味で製作したものです。
本機製作により発生したいかなる不具合もしくは損害について、筆者が責任を負うものではありません。


◎本機の製作にあたり、JA8JCR(松田OM)から技術的な支援をいただきました。TNX .

◎引用文献:VBと製作で学ぶ初めてのパソコン応用工作 ( CQ出版社 )
:トランジスタ技術(2005年4月号・5月号) ( CQ出版社 )
   :G-1000DXA ローテータマニュアル(八重洲無線株式会社)