ブログパーツUL5

超音波レーダーの試作(4)

 試作して超音波レーダーでサーボ駆動信号がおかしかった原因がやっとわかりました。ICソケットが不良だったのと自作したプローブがおかしかったことがわかり、ともに修理してやっと正常な波形になりました。オリジナルのプログラムソーズをサーボ仕様に合せ込みをして、パルス周期を20mSに、パルス幅を0.9mS〜2.1mSの範囲で可変させてみました。
パルス間隔
 オリジナルのプログラムの
599行 sp_wk=1600 を sp_wk=1570 に変更して、他のsp_wk記述は削除して、統一しました。
 
結果 20mSに合せ込みできました。


パルス幅1
パルス幅の調整は最小と最大を見ながら合せ込みしました。
747行、817行などのパルス幅の計算式を変更しました。

結果、最小パルス幅は0.914mSになりました。


パルス幅2
少しマージンを持たせています。

結果、最大パルス幅は2.086mSになりました。


 これで超音波レーダーの試作は終了とします。

【謝辞】
 最後に、サポートして頂いた石神様に感謝致します。
0

    超音波レーダーの試作(3)

     試作した超音波レーダーのサーボ用出力波形を観測してみました。サーボの仕様が違うため、まず、観測してからプログラムの修正をすることに。
    サーボ用出力波形1
     オリジナルプログラムの高速旋回という出力波形です。
    プログラムで設定しているパルス間隔:800=0.01秒(100Hz)


    サーボ用出力波形2
     オリジナルプログラムの低速旋回という出力波形です。
    プログラムで設定しているパルス間隔:1600=0.02秒(50Hz)


     HSR-4898HBを動かすためには、パルス間隔を20mSに固定すればいいので、1600に統一する。上記の出力波形をよく見ると異様にパルス幅が狭いのが問題である。これではサーボが動作しない。
    サーボ用出力波形3
     オリジナルのプログラムの仕様では0.5mS〜2.5mSのはずですが、大幅に小さい値なので拡大してみると、パルス幅は0.2mSもない状態である。ここら辺にどうもバグがありそうである。

     ソースがうまく解読できていないせいもあるが、それらしきパラメータを変更してもうまく調整できない。ソース解析が問題となりそうである。


     当分はサーボを1個追加するつもりはないので、超音波センサーとして利用は出来そうである。それにしてもプログラムにはコメントが入っていて解析しやすいのですが、プログランムソースを見てもサーボの仕様変更がどのようにしていくのかわかりにくく難航しそうである。現象を見るとパルス幅が0.2mSで固定されていてパルス間隔が変化しており、パルス間隔と可変パルス幅を変数設定でわかりやすく可変できるようにしてほしかった。

     さらに、静止状態で観測してみると、超音波センサーの受信強度は±10%の誤差ですが、角度は40〜178と全く使い物にならない範囲でばらついています。これはアルゴリズム的に問題があるかもしれませんが、もう少し精度があるかと思って試作しましたが、2回試作して、超音波センサーは赤外線距測モジュールに比べるとノイズに弱く精度がでないようである。遊び程度なら良いが精度を要求されるような場合には、赤外線距測モジュールをお薦めします。

     参考までに超音波レーダーの受信強度と距離の関係をグラフにしました。
    受信強度グラフ
    0

      超音波レーダーの試作(2)

       運動不足解消のために秋葉原までサイクリングしてやっとPIC12F683を入手しました。現在、超音波レーダーのオリジナルのソフトを解読しながら改造してテストをしています。データ送信ではLCD表示用に少し改良し、現在はサーボ仕様を20mS周期で、パルス幅を0.9〜1.5〜2.1mSの可変範囲に改良しています。この改良のために、オリジナルのプログラムソースがcc5xのコンパイラを利用していたので、cc5xをインストールしてプログラムソースを変更しています。

      cc5xのインストールはCC5X C Compilerの設定を参照してください。
      CQ_sonicテスト
      上の写真は基本動作のテストで、超音波センサーの動作とデータ送信の確認中。
      LCDの表示で上段のP=****が受信センサー強度で、下段のA=***がサーボ角度(方向)

       ロボットに搭載する超音波センサーは測定器でないので、正確な距離測定でなくて反射強度の測定で十分だと思います。そのため、自作でも最軽量で小型化できるのですが、それでも赤外線距測モジュールに比べると大きく重いですね。そのため二足歩行のロボットには向いておらず、災害ロボットのように走行していくロボットにはこのような超音波レーダーが障害物の方向(高度に解析できれば形状もわかるかも?)がわかるので向いているのでしょう。
      0

        超音波レーダーの試作(1)

        超音波回路基板1 以前に、超音波センサー回路を試作で製作した超音波センサーの基板が大きくロボットへの搭載は諦めました。

         左側の写真が以前に製作した回路基板です。これをバラバラにして一部の部品をリサイクルして再利用します。
         この超音波センサーを再利用して、超音波距離測定器ではなくて、ロボットに必要な機能のみにして搭載できるサイズに小型化したモジュールにしようと考えました。CQ出版社の「8ピンPICではじめてのマイコン工作を始める」という本に、ロボット用超音波レーダー・モジュールを作ろうというのがあり、これを参考に製作することにしました。

         この本を図書館で借りようと予約しているのですが、まだ、借りれません。でも、データは下記のURLから入手できます。
        http://www.eleki-jack.com/support/-no2/
        超音波回路基板2
         ただ、12F683というPICマイコンが手持ちになく、12F675に移植しようとも考えましたが、内部発振周波数は8MHzと高く12F675は4MHzなので、取り合えず12F683にすることにしました。ところが、PICマイコンだけがなく、なかなか購入に行けなくて延び延びになってしまいました。入手する前に、マイコンはICソケットにしてユニバーサル基板でモジュールを製作しました。

         小型化したとはいえ、まだまだ大きく、RZ-1(またはRZ-1ジュニア)にどのように搭載するかアイデアはなく、しばらくは検討中です。
        0

          EEPROMライターについて

           先日、EEPROMライターを製作しましたが、一括してEEPROMに書込み場合にはPIC用に製作していつも使っているRCDライターが、PICProg4Uのバージョンアップ(v0.83→v1.32B)で書き込めることがわかりました。但し、RCDライターにEEPROMをセッティングする時に、そのセッティング位置を5pinほど下にズラす必要があります。
          RCDライター
           PICProg4U(v1.32B)のメニュ画面のデバイス選択にはEEPROMもあります。
          PICProg4U画面
           製作したEEPROMライターはマニュアル用に、RCDライターは一括書き込み用に使い分けることにしました。これで短い音声データならEEPROMに書き込むことが出来ます。
          0

            CC5X C Compilerの設定

             以前に試作した超音波モジュールが大きかったので、そのままではロボットに搭載は出来ませんでした。そこで、モジュールを作り直そうと思い、超音波センサーは再利用してロボットにも搭載できるサイズに小型化したモジュールにしようと考えました。インターネットで検索してみたら、ちょうどよさそうなのがあったのでが、よく調べてみるとCコンパイラーが今までのものと違い、初めてのものでした。

             まず、CソースをそのままでのHI-TECH C Compilerではうまくいきませんので、新たにCC5Xの開発環境をMPLAB IDE(v8.xもサポート)に整備することにしました。どちらもPICマイコン用のフリーソフト版のC Compilerなので、費用はかかりません。

            CC5XのCC5X free editionとマニュアルは、下記のURLにあります。
            http://www.bknd.com/cc5x/download.shtml

            cc5x画面
            【CC5X設定手順】
            (1)上記URLからcc5xfree.zip とマニュアルをダウンロードします。
             ・cc5xfree.exe の実行形式はMcAfeeウィルスチェックでひっかかりましたので避けた方がよい。
             ・マニュアルのcc5x-34.pdf (~460k) CC5X User's Manual、device (header) filesは
              headers.zip
            (2)自分PCに適切な格納場所にディレクトリを作成して、cc5xfree.zipを解凍したファイルを全て
              格納する。
             ・RELOC.INCだけをワーク領域にコピーする。
            (3)MPLAB IDEを起動して、C Compilerを設定する
             ・最初はProjectWizardからデバイスを指定していくと、select language toolsuiteでCC5Xを
              選択する。
             ・Browse.でCC5Xの格納場所を指定する
             ・MPASMとMPLINKに×がついていることがあるが、後で設定する
            (4)Set Language Tool Location でB knudsen Data CC5X を選択する
             ・ExecutablesのMPASMとMPLINKの格納場所を確認し、指定にする。
             ・Default Search Paths & Directories の Include Search Path,${INCDIR}を選択して、
              Browse.で格納場所を指定する。但し、格納場所は""で囲みます。
               例:"C:¥Program Files¥cc5x"

            以上を設定してOKをすれば、開発環境が出来上がります。
            0

              EEPROMライターの製作

               何かとEEPROMに関連した回路があると、どうしてもPICマイコンのライターのようにEEPROMのライターがあると便利かなと思っていました。マイクロチップ社のPICkit 2/PICkit 3や秋月電子のAKI−PIC2プログラマボードは多機能なライタで、各種PICマイコンだけでなくEEPROMも書き込めるようなのでそのライターを購入されている方は書き込めていいですね。

              Current PICkit 2 Device Support (March 2011)
              PICkit 2 Device Support List

               私は自作のPICライターのためATMEL社の24C512などは書き込めないので、手持ちの部品を使って自作のEEPROMを製作してみることにしました。EEPROMといっても8ピンのみの24C512や24C1024が出来ればよいのですが、EEPROMライターのソフトウェアも含めてあまり良いものがなく、インターネットでI2C 2線式シリアルEEPROMをプログラムできるフリーソフトの「シリアルEEPROMライター」というソフトを見つけました。
              シリアルEEPROMライター
               回路図も一緒にあったのでライターを製作してみました。3つのLEDが有り合わせのためバラバラですが、これはこれで良しとして残り物のユニバーサル基板にうまく収まりました。ソフトでの動作確認したところ、最初は動かず何度も回路チェックして原因がわかりませんでした。しかし、ライターのソフトのボタンはワンクリックでは動作せず、マニュアルに2度クリックしないと動作しない記述されており、操作には注意が必要です。

               よく調べたらRCDライターでもEEPROMに書き込めるらしいが、PICとEEPROMのピン配置が合わないので、ピン変換の基板か変換コードで引き出す必要があるようです。また、PICライターのソフトウェアもPICのみだと思っていましたが、EEPROMにも対応しているものもあるようです。但し、ビット単位で書き込みや修正は出来ないようでファイル単位での書込みのようです。
              0

                MR-16202互換にLCDモジュールを改良

                 私のRZ-1には自作LCDを搭載していますが、SC1602BSを使った自作LCDの制御コマンドはroboBASICとは互換性がありませんでした。そこで、roboBASICのLCDのコマンドで動作するようにMR-16202に準拠させるように改良を検討しました。MR-16202はすでに購入できないようなので、自作される方がいれば便利なようにまとめてみました。

                 基本としたLCDは「超ローコストRS232Cモニター」を参考にしたので、詳細はそちらを参照してください。

                 今回、改良するために整理した命令語一覧表です。
                LCD命令語表
                 MR-16202と違う点は以下の通りです。
                (1)CONTはハード対応していないので、カーソルのブリンク指定に変更する。数字は無視する。
                (2)FORMATでは形式指定のみとする。桁数指定では記述する必要があるが有効桁数を表示する。

                 16F628Aに書き込んですぐに使用できるようにASMファイルとHEXファイルを置いておきます。
                 (修正点:LOCATE(y,x)をLOCATE(x,y)に修正しました。)
                ●16F628A用プログラム → lcd_2.asm(9KB)
                ●16F628A実行ファイル → lcd_2.hex(5KB)
                ●LCDテストプログラム  → LCD_test.bas(1KB)

                 シリアルLCDモジュールの回路図(2011/7/28訂正)

                シリアルLCDモジュールの回路図

                 RZ-1にLCDを内蔵する場合には、設定変更しないのでDIP-SWは固定して部品を減らして軽量化する方がよいでしょう。

                 LCDテストプログラムによる動作テスト(携帯電話で動画をとっているので、解像度と画質が悪い)

                【画面の説明】
                 左上の000表示で待機状態で、リモコンの1〜9のボタンを押すことによりLCDの動作テストをします。左上の表示は押されたキーの番号が表示されています。詳細は上記のLCDテストプログラムをご覧ください。
                0

                  ジョイスティックの変化を電圧で測定

                  プログラムが出来たので、超安値で入手した中古のPS2コントローラから早速ジョイスティックを取り出して、そこについている可変抵抗の4ch分をブレッドボードで全て測定してみました。全ての可変抵抗器の両端は電源とGNDに繋げて中点を測定しました。

                   意外と中点の電位はばらついているようで、200mVの差がありました。また、ジョイスティックには癖があるようで、左右のジョイスティックともにX方向とY方向とでは可変範囲が違いました。やはり現物の測定をしてみないとわからないこともあり、テストプログラムを組んでみてよかったようです。この測定結果から条件分岐して、赤外線コードを決めるようにすればいいのではと考えています。
                  0

                    PICマイコン12F675でAD変換テスト

                     ジョイスティックには2個の可変抵抗(10KΩ)がX方向とY方向についており、その変化を検出することでアナログ値に変換している。そこで、4chのAD変換が出来ることが最低条件となる。それに合致している8ピンのマイコンが12F675である。

                    最初に端子の設定を行う。
                     ・1ピンと8ピンはマイコンの電源とGND
                     ・3ピンと5〜7ピンのGP0〜GP2,GP4はアナログ入力に設定
                     ・2ピンのGP5はデジタル出力にして設定し、まずはRS232Cのシリアル送信として出力させる。LCD表示できればよいので2400bpsでも十分なので、ソフトでシリアル送信ソフトを組み込む。

                     ここで問題なのは、残り4番ピンを赤外線LED出力に設定したかったのですが、GP3はデジタル入力機能にしか設定できず、デジタル出力できませんでした。従って、4ピンを使ってモード切替えをして、2ピンの出力を切り替えるしかないようです。ちょっと複雑になる。

                     インターネット上にあった4chADで動作するプログラムがあったのですが、どういうわけかコンパイルしても、ダウンロードしたHEXファイルをそのまま書き込んでもうまくシリアル送信ができませんでした。シリアル通信部分のソフトがうまく動作していないようでした。諦めて自分で組んでみてなんとか4ch同時に表示できる所までできました。実測との測定誤差は30mVぐらいで、プログラム中に電源電圧を設定しているので止むを得ないでしょう。まずは問題が1つ解決しました。

                     オークションでPS2コントローラを110円(送料別)で入手してので、ジョイスティックを取り出して評価していこうと思います。
                    0


                      カレンダ

                           12
                      3456789
                      10111213141516
                      17181920212223
                      24252627282930
                      31      
                      << December 2017 >>