ホーム >> 無線ブログ集 >> MODEL 1200FXローテーターその18

無線ブログ集

  メイン  |  簡易ヘッドライン  

link jl7gmnのblog jl7gmnのblog (2024/3/11 19:35:35)

feed MODEL 1200FXローテーターその18 (2022/8/17 0:14:28)
スマフォのUDPアプリを使ったエモトローテーター1200FXのリモート制御及びHAMのロギングソフトウェア(Logger32)によるローテータ自動制御機能をもたせた回路の基板が出来上がりました。早速部品を取り付けして、動作確認を行ないます。ノートパソコンに繋ぐシリアルインターフェース用として、オークションでArvelのSRC06USBが格安でほぼ新品で出ていましたので、新たに1本落札しました。Window10と11での動作も問題ない事は確認済みです。
【NA】新古品及び未使用品に近い商品(数回使用あるかもしれない商品)
と新古品とありました。
価格は税込¥121ですが、送料が¥1,480の合計¥1,601での落札です。まあまあ、お買い得かと!
届いて空けてみたら全くの新品でした。発売からはかなり経っています。WindowXP,VISTAの時代のシリアルインターフェースですが、Windows10,11で問題なく動作します。Window11で手持ちの同じ2本のシリアルインターフェースは無線機とハムログ、アプリのHAMRADIODELUXEで現役動作してくれています。


このUSBシリアルインターフェースをLogger32をインストールしたノートPCに繋ぎ今回のESP32DivKitCのローテータ制御回路のシリアルポートとレベル変換ボードを通して繋ぎ使用します。

回路基板に戻りますが、使用しているパーツはボード回路で使用した物と同じ値を選別して用意しました。(FULL SCALE1.5V の2.5dB ATTのADC1の入力ポート25に繋がる分圧抵抗です。)
R3:120.015kΩ (120kΩ抵抗より選別)
R4:20.156kΩ (20kΩ抵抗より選別)
R5:2本シリアル接続(215.76kΩ+266.23kΩ=481.99kΩ)それぞれ220kΩ、270kΩより選別
500kΩを得るために3本の合計で調整しています。一番抵抗値の小さいR4を半固定にして調整する事で
選別なしとすることも出来ますが、半固定は変化する要素があるので、今回は固定抵抗のみ使用です。
目的はR4とR5の合計抵抗値 502.146kΩとR3の120.015kΩとでフルスケールに対応する電圧に分圧する為です。
選別することで実験ボートの回路と全く同じ電圧関係で動作させる事が出来ます。
勿論、ESP32DivKitCも同じものを使います。別のを使うとポート出力にバラツキがあるので再度の下記のポート出力の調整出力値の設定調整(9)が必要となる為です。

void hiZ(int n){
    pinMode(n,INPUT);
    digitalWrite(n,LOW);
}

//-----------------------------------
void setup関数にて ポートに出力しレベルをオフセットを調整
void setup(){
......
 hiZ(25);
 dacWrite(25,9);//9
.....

ESP32DivKitCはソケットを使い挿します。今の所USBから電源を得て動作させていますが、実際使用時は先の回路図にも記載した様にレギュレータICで9Vを5Vに変換して使用します。

部品も抵抗、インダクタ、電解コンデンサ、パスコン、ソケット、ターミナルピン、ジャンパー線と少ないパーツ数なので、簡単に基板に取り付け半田付けも直ぐに完了しました。


SW類のソケットは使わず、パターンにSWからのワイヤー直付けで
スマフォとLogger32の切り替えSW用のみ出しました。

早速スケッチをコンパイルして書き込みを行ないます。同じESP32
なので、そのままUSB接続でも動作はするのですが、基板上に取り付け
してのコンパイルを確認しておく必要があります。(スケッチも改良
予定がある為です。)
コンパイルも問題なく、液晶も問題なく動作しましたが、スマフォから
のMコマンドを受け付けてくれません。元のボードにESP32DivKitCを
挿して確認すると、問題なく動作しています。なので基板側の問題です。

原因をさぐっていくと、SW入力のプリセット90°の入力パターンとモード
切り替えパターンとの半田ブリッジでした。丁度隣どうしでした。SW
ワイヤ−をパターンに半田付した時にブリッジしたようです。プリセット
端子がLの為90°の動作モードに入り放しでした。
(スマフォ時のSWのLがブリッジでそのままプリセット端子のLレベル
になった為)
ブリッジをカッターでカットして、スマフォからの動作確認OKとなりました。

エモトFX1200のREMOTE端子とESP32DivKitCへの接続ケーブル

本来はこのターミナルを基板上に付けるつもりでパターンを作製して
いましたが、私の思い込み寸法間違いで取り付け出来ないパターンを
製作してしまいましたのでターミナルは線材で中継接続です。

TFT液晶もそのままの配列での接続です。
簡単なスマフォとのWIFIのUDP通信が出来ましたので、おさらいでESP32
DivKitCのUDP通信の仕様をスマフォで手持ちの無線ルーターを確認しました。
結果をまとめると下記になりました。

周波数は2.4GHzのみ対応
プライマリーSSIDのみ対応
セキュリティ:WPA/WPA2-Personal
IP設定:DHCP
プロキシ:なし
ネットワークの期限:自動検出
MACアドレスタイプ:ランダム化されたMAC
MACアドレス:**:**:**:**:**:**:**
IPアドレス:***.***.***.*** (後省略)

ESP32DivKitCのWIFIのUDP通信では5GHz帯は使えません。
セカンダリーSSID設定では接続しませんでした。
プライマリーのSSIDのみ使えました。

Logger32との接続モードでも問題なく動作してくれました。

今回、基板化出来ましたので、接続コンタクト等の不安定要素は全くなくなりましたので、スケッチへの改良もスムーズに出来る状態となりました。
早速TFT表示のフォントサイズを一回り小さくして、モードの表示とMコマンドの表示追加を行ないます。(今までのTFT表示だと数値のみ表示されるのでどちらが何の数値かが、わかりにくい状態でした。)

最初の実験時のTFT液晶表示
今回の改良のTFT液晶表示:スマフォWIFI UDP通信モード
スマフォからのUDPコマンド値とMコマンドを表示させました。
FX1200の現在の方向角度表示は”Now"の後に表示されます。また
設定時の方向角度は"SET"の後に表示されます。


今回の改良のTFT液晶表示:Logger32シリアル通信モードLogger32
Logger32モード時には”LOG"と表示させる事にしました。
Logger32上でのDX Spot上の任意角度クリック時、及びWEBのTelnet
接続時(GB7UJS)ログインでのモニター表示局をクリック時の方向角度
(実際のMコマンド)を表示させる事にしました。

TFT液晶表示文字は下記スケッチ例にて、簡単に変更対応可能です。
//****************************************
// tft display M***command
tft.setTextColor(TFT_WHITE,TFT_BLACK);
tft.setTextSize(3);
tft.setCursor(0,85);
tft.print(" ");
tft.setCursor(18,85);  
char cf[6]; //UDP Command
sprintf(cf,"%d",i[0]);
tft.print(cf);
//****************************************

基板版になってから収束のスケッチ部も若干変更をしてあります。
差分値角度が3°の場合と2°の場合の収束に時間がかかる状態があった為(いったり、きたりの繰り返しが多くなる症状)緑のスケッチ追加して収束最短となる用に改善してあります。この改良?でかなり早く収束してくれます。
delta値は収束時の差分が大きくなってしまった時の停止用として使っています。近傍の±6の場合の収束はコピー値のdelta2値をわざと用意して判断する様にしました。使った後の変数値が消える現象が過去ありました。予防的な処置でコピー値として別途の変数で使用すると使った変数は値が消えても、別の変数の為、使う時点で値が消えることはありません。
同じ値をとる差分定義をdelta2として収束させる動作のdelta2値の範囲は6から−6までとしています。収束動作時に差分が突飛に−8または+8となった時は強制的に停止させます。
変更したスケッチのルーチンは+か−のどちらかがあれば良いのですが面倒なので、caseでは+6から−6まで書いたままです。使わない範囲も含んでいます。下記のでdelta<0だと+側のcaseがdelta2値の取りうる範囲からは不要です。冗長部として認識していますが問題ないのでそのままにしてあります。
変更の一部分のスケッチを下記します。

delta = Readkakudo-kakudo;

if(delta < 0){
        if(delta == -8){
            RotSTOP();    
        }

        //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        delta2 = Readkakudo-kakudo;
        //------------------------------------
      switch(delta2){
          case 6: RotCW();
                      delay(10);
                      break;
          case 5: RotCW();
                      delay(10);
                      break;
          case 4: RotCW();
                      delay(10);         
                      break;   
          case 3: RotCW();
                       RotCW();
                      RotCCW();

                      delay(10);         
                      break;
         case 2: RotCW();

                      RotCW();
                      RotCCW();

                      delay(10);         
                      break;
          case 1: RotCW();
                      delay(10);        
                      break;
          case -1:RotCCW();
                      delay(10);        
                      break;

          case -2:RotCCW();
                       RotCCW();
                       RotCW();

                       delay(10);        
                       break;
          case -3:RotCCW();

                        RotCCW();
                       RotCW();

                       delay(10);
                       break;
     case -4:RotCCW();
                       delay(10);
                       break;
〜以下省略
if(delta > 0)  も同様に緑の箇所の変更を行ないます。この場合でも−側のcaseがdelta2値の取り得る範囲からは不要です。
特に問題ないので+6から−6の表記はそのままとしてあります。
 上記スケッチ緑部変更追加でのモーター制御でかなり収束が早くなりました。

※補足
ESP32DivKitCのledcw(IO 04),ledccw(IO 22)ポートに繋がった2つのSWトランジスタのON/OFF設定で、各コレクタ出力がグランドレベルになりリモート端子より1200FXのローテータモーターの回転方向を制御します。
**************************************
RotCW(); ClockWise で時計方向まわりの出力ルーチンです。

void RotCW(){
    //CLOCK WISE
    digitalWrite(ledcw,1);
    digitalWrite(ledccw,0);
    Houkou = 1;
}
**************************************
RotCCW(); CounterClockWise で半時計方向まわりの出力ルーチンです。

void RotCCW(){
    //COUNTER CLOCK WISE
    digitalWrite(ledcw,0);
    digitalWrite(ledccw,1);
    Houkou = 2;

}
**************************************
RotSTOP(); は停止処理の出力ルーチンです。

void RotSTOP(){
    // STOP
    digitalWrite(ledcw,0);
    digitalWrite(ledccw,0);
    Houkou = 0;
    delta=0;
    delta2=0;
}
**************************************

今の動作状態で申し分ありませんが、以前も完成したと思っても新たな問題が潜んでいたりがありました。なので、もう少し動作確認を続けたいと思います。スマフォ時の各スイッチの動作も確認していませんので時間をみてSWを配線して確認を行ないたいと思います。

つづく?



execution time : 0.026 sec
サイト内検索

メインメニュー

ログイン
ユーザ名:

パスワード:



パスワード紛失


オンライン状況
44 人のユーザが現在オンラインです。 (37 人のユーザが 無線ブログ集 を参照しています。)

登録ユーザ: 0
ゲスト: 44

もっと...