ピックワールド(PIC World)

インフォメーション

この記事は 2014年08月04日 に以下のカテゴリに投稿されました Arduino Blog, MultiWii, ドローン.

この記事のタグ

, , , , , , , ,


マルチコプター : ESC のキャリブレーションを行う

今回はいよいよモーターを回してみます。っと思ったのですが、説明ではまだ ESC やモーター/電池などを接続していませんでした。まずは接続しなければダメじゃないですか・・

何度か説明していますが、ESC から出ている電源の線は1個のESCはそのまま残し、3個の ESC の電源ラインはコネクタから抜き去り絶縁処理しておきます。

下図を確認しクアッドコプター(真ん中上)の図を確認します。D5/D2/D6/D3がモーターの番号です。下にはMultWii Pro の図がありますが、それぞれのモーター番号の通りのMoter Pins に ESC から出ているコネクタを差し込みます。外側がマイナス、内側が信号線ですので、間違いの無いように良く確認します。

MultiWii Pro Moter Plan

MultiWii Pro Moter Plan

ESC とモーターは3本の線で接続しますが、今のところどの線に接続しても良いので、とにかく3本をつなげておきます。後ほど回転方向を確認し、逆に回転しているようなら差し替えて回転方向を合わせます。

モーターを回すためには、まずはESC(Electric Speed Controller)をキャリブレーション(更正)します。プロポの最大(小)打角をESCに伝え、正しく動作をさせる作業です。ESCとは別途説明した通りですが、AMP(アンプ)とかスピードコントローラー(スピコン)とかも呼ばれる、プロポからの信号を元にモーターの回転速度を制御する装置の事です。ここでは ESC と呼ぶ事にします。

あらかじめお断りしておきますが、使用するプロポとESCによって対処の方法や動作が異なる場合があり、その際には適切に対応を行う必要がありますので、ご了承ください。

また、以下の作業を行うには、MultiWill が機体に搭載され、バッテリー/ESC/モータ/受信機と MultiWii に正しく接続されていること、加えて既に使用する MultiWii に合ったスケッチが準備できていることが作業の条件となります。

ESC をキャリブレーションするには2つの方法があります。

  1. MultWii のスケッチにある機能を使って ESC のキャリブレーションを行う
  2. 手動で1つずつのESCに対してキャリブレーション作業を行う

ここでは、1の方法でESCのキャリブレーションを行ってみます。簡単ですよ。2の方法は従来から普通に行われている方法です。ご存じの方も多いと思います。

1の作業方法

  1. プロポ(送信機)の設定を行います。この設定は、既に説明していますので、設定済みの場合は飛ばしてください。難しかったかもしれないので、少し説明の仕方を変えてみました。なんかもっと難しくなったかも。
    MultiWiiのスケッチにあるconfig.hの中に、以下の記述があると思います。
    #define MINTHROTTLE 1150
    #define MAXTHROTTLE 1850
    #define MINCOMMAND  1000
    上記のスケッチは関連部分を抜き出しているので、連続して記述されているわけではありませんが、この3行は ESC のキャリブレーションを行う上で関連の深い記述です。
    MINTHROTTLE はプロポのスロットルスティックが一番下にあるときの出力パルスを表し、現在の値は1150μs となっています。この値はモーターの最低回転数をプロポ側で表した数値です。MAXTHRORRLE はスロットルスティックが最上部にあるときに1850μsでモータの最高回転数を示す数値です。MINCOMMAND は1000μs となっていますが、この値以下の時にモーターがARMするという値です。ARM とはESCの接続と設定を確認し、安全に飛行が可能な状態に整えることを言います。(『アームする』なんて使い方をします)英語のArming(備えるとか)の意味だと思います。
    これらの値がカバーできるように、送信機の設定を最初に行います。たいていの送信機では、これらの値はカバーされていないことが多いようですから、必ず必要な作業です。
    よく見る記述では、『これらの値となるように送信機を設定する』っとだけ書かれていてなんじゃこりゃな場合があるのですが、送信機にはこれらの数値を直接入力することは出来ません。実際には送信機のトラベルアジャスト(呼び方は使用する送信機によって異なる場合があります)機能を使い、サーボの動く角度を増す方法で対処を行います。大体ではありますが、±120%~±130%程度(プラス/マイナスという点に注意)とすれば、この設定はカバー出来る送信機が多いようです。この数値の確認の方法は、MultiWii Pro を PC に接続し、MultiWiiWinGUI の RC Control Setting か Realtime Data で確認することの出来る、

    MultiWiiWinGUI 送信機の確認

    MultiWiiWinGUI 送信機の確認

    の画面で数値を確認します。右側に数値が表示されていますね。接続が全て正常で正しく機能していれば、送信機のスティックを動かすことにより、動かした分だけ右側の数値が変化し、グリーンでバーが表示されます。
    この画面で数値を確認しながら、各スティックと AUX など全てのチャネルに対して、最小1000μs を切る値に、最大2000μs を上回る数値となるようにトラベルアジャスト機能で調整します。また、各舵のニュートラルは1500μsとなるように送信機側のサブトリム機能などで全て調整しておきます。(国産の一部の送信機では 1520μsなどとなっている製品があるようなので注意してください)

  2. MultiWii のスケッチをArduino IDEで開き、ESCキャリブレーション用のファームウエアにして、MultiWii Pro に転送します。
    config.h を開きます。最下部に近いところにあると思いますが、スクロールしてESCs calibration のセクションを表示します。何行かの記述があり、
    //#define ESC_CALIB_CANNOT_FLY  // uncomment to activate

    #define ESC_CALIB_CANNOT_FLY  // uncomment to activate
    の記述を上記のようにコメント『//』を削除します。これを削除するとその行はコメント行では無くなり有効となります。
    これで MultiWii のスケッチは ESC のキャリブレーション用となります。(これだけ)
    コンパイルし、MultiWii Pro に、ファームウエアを転送しますが、転送する前に、マイコンボードの指定と使用する COM ポートの指定を正しく行うのを忘れないでください。
  3. スケッチのコンパイルとファームウエアの転送が完了次第、念のため電源をいったん遮断し、もう一度接続します。MultiWii Pro は ESC のキャリブレーションを開始します。このとき、ESC が動作していないといけないので、モーターも接続してESC の電源も入るようにしておきます。(電池も接続する)
    キャリブレーションの完了の確認は、使用する ESC の仕様により異なるので、一概に説明は出来ないのですが、ブザーが鳴ったり、LED が点灯/点滅するなどで確認が出来ると思います。詳細は使用している ESC の説明書などで確認してください。機体側では一度モーターが回転する場合がありますので、安全には十分注意してください。プロペラは付けない方がよいでしょう。
  4. スケッチを元に戻します。
    #define ESC_CALIB_CANNOT_FLY  // uncomment to activate

    // #define ESC_CALIB_CANNOT_FLY  // uncomment to activate
    とし、元の通り上記の行をコメントとし、飛行用とします。スケッチのコンパイルと MultiWii Pro への転送を行います。
  5. アームして、ESC が正しく動作するか確認します。
    送信機の電源を入れ、MultiWii Pro / ESC/モーターの電源を入れます。
    少し待ちます。
    送信機のスロットルスティックを一番下げた状態とし、ラダースティックを一番右に切ります。
    このとき機体は水平な場所におき、動かさないようにしてください。場合によっては、MultiWiiWinGUIのRealtime Data の画面にある Calibrate ボタンを押し、センサーの校正を行う必要がある場合もありますので、アーム出来ない場合は行ってみてください。
    無事にアーム出来ましたか?アームすると、使用している ESC にもよりますが、ブザーが鳴ったり、LED が点灯するので、確認できると思います。この状態で、スロットルスティックをあげていくと、モーターが回転を始めます。この状態は、MultiWiiWinGUI で確認することも出来ます。

    ARM しました!

    ARM しました!

    画面右下の ARM 部分が赤で表示されています。

    なお、アームを行うには、デフォルトではラダースティックを使いますが、エルロンスティックで行うすることも簡単にできます。config.h のARM/DISARM セクションにある下記の2行の記述で、どちらかをコメントアウトし、どちらかを生かしておいて、コンパイル->転送するだけです。
    #define ALLOW_ARM_DISARM_VIA_TX_YAW /* ラダーで行う */
    //#define ALLOW_ARM_DISARM_VIA_TX_ROLL /* エルロンで行う */
    MultiWiiWinGUIでは、AUX チャネルでも ARM 動作を行うよう指定をすることも可能です。

おそらくこの方法が、ESCをキャリブレーションするには、いろいろな意味で一番楽な方法かと思います。しかしながら、使用している ESC によってはこの方法が使えないこともあるかと思いますので、そんなときには上記と同じように送信機の設定を済ませた後、通常の通り ESC を1つずつ受信機に接続し、ESC のキャリブレーションを行います。

ここでもう1点確認をしておくことがあります。モーターの回転方向です。回転方向を正しく合わせることにより、生じる反動トルクを抑えますので、非常に重要です。言葉で説明するよりも図で確認した方がわかりやすいと思いますが、前の2個のモーターは前方向に内側に回転するように、後ろのモーターは、後ろ方向に内側に回転するように回転方向を合わせておきます。

モーターの回転方向

モーターの回転方向

モーターの回転方向を変えるのは簡単です。モーターから出ている3本の線のどれでも良いので2本を抜き、その2本を入れ替えるとモーターの回転方向が変わります。

また、使用する ESC によってはブレーキ、オートカットオフなどの設定が出来る物がありますが、ブレーキはナシ、オートカットもナシ、スロースタートなどもナシとし、ごく普通の状態としておいた方が良いと思います。特にオートカットは勝手にカットされてしまうとモーターが止まりますから、即墜落となる事もありますので、別の方法でバッテリーの状態を監視するようにした方が良いと思います。経験上の事ですが、ESC によるバッテリーのカットオフはあまり正確ではないように思います。

多分この状態で機体を傾ける(安全に気をつけて)と、モーターの回転数が変わると思います。これは MultiWii が傾きを検出し、姿勢を保とうと頑張っている証拠です。
MultiWiiWinGUI では、その状態を表示できるはずです。おもしろいです。

今回の場合、ちょっと困ったことがおきました。アイドル時の回転が少し高めなのです。電源を入れARM するとモーターがアイドル回転を始めます。その回転数が高く、いくらなんでも元気すぎてしまうのです。MultiWiiWinGUIで値を確認すると、送信機の設定には問題は無く、正しく動作しています。おそらく先に記した

#define MINTHROTTLE 1150 // (*) (**)
#define MAXTHROTTLE 1850
#define MINCOMMAND  1000

この部分の MINTHROTTLE の値が大きいのが問題です。

MINTHROTTLE の値を少し小さく変更してみました。

しかし動作は変わらないです。いろいろ調べた結果、『EEPROM Clear した後、再度スケッチを描き込むと値が反映された』などの報告を見つけましたので、早速試してみました。Arduino IDE を開き、ファイル->スケッチの例->EEPROM->EEPROM Clear でスケッチを開きます。コンパイル->転送で MultiWii Pro に転送します。その後、MINTHROTTLEを小さい値に変更した MultiWii のスケッチをコンパイル->転送し、元に戻せば完了です。
このスケッチは Arduino IDE をインストールした際に、一緒に入った EEPROM をクリアするサンプルプログラムです。
なぜか変更した値が反映されていないように感じる際には、試してみる価値はあると思います。今回の場合はテストの結果、アイドル回転数も適切な状態となり、良好な状態となりました。

最高回転は MAXTHROTTLE で、アーム時の値は MINCOMMAND で変更が出来ますので、必要に応じ対処してください。

国内・国外でもうまくアームが出来ないなどの話をよく目にしますので、次回はアーム出来ないときの原因と対処の方法をまとめてみます。(経験した事だけですけど)

 


コメントを残す

最近の投稿

最近のコメント

アーカイブ