PICAXEのサーボ信号を試してみる

    PICAXE
    06 /02 2016
    サーボ(・モーター)は全くやったことがなくやる予定もないのでスルーしていました。
    サーボは角度を読み取ってどうのこうの...と面倒だと思っていたこともあります。
    picaxe_SERVO_03.png 図はpicaxe_manual3.pdfから
    しかし、ラジコン用のサーボは一方的に角度の信号を送ればよいことが分かりました。
    ということはサーボがなくても(汗)オシロがあれば信号を観測できるのやってみた。
     以下、サーボ=ラジコン(RC)用サーボです。

    なお、サーボは全くやったことがないので個人的な勉強の意味合いも大きいです。
    サーボの入門的な話なのでより詳しい情報はやられている方のサイトを参照なさって下さい。

    まず、市販のサーボの仕様にPICAXEのサーボ機能が合致するのかが気になった。
    PICAXE指定のサーボしか使えないのでは意味がないと思ったからです。

    PICAXEでは下記のサーボ信号が出せる。
    picaxe_SERVO_01.png
     
    周期20ms、パルス幅0.75~2.25ms、PWM。
     
    ・20msというのはラジコンの送信周期。
     50Hz(周期なので正しくはサイクルか)が一般的らしい。
     60Hzもあるが今は少数派?
      追記
       pulsoutコマンドで擬似的に15~16ms周期でも出せるがチョット苦しい。
       コマンドの解説の末尾を参照。 周期は調整が必要。
      追記終わり
     この20msの間に6ch分とかの情報を載せるらしい。
     
    ・パルス幅
     サーボの角度を決める。 中央値をニュートラルといい、そこから左右に±60°とか動くと考える。
     一般的に±60°品だと1~2msで問題ないが、±90°品だと0.5~2.4msなので少し足りない。
     (が、実験してみると実際には出せそう。)
     10us刻みの設定なのはチョット微妙。(5us刻みだとより良かったが使えない程ではない。)
     
     なお、サーボ信号には デッド バンド 幅(Dead band width)という不感帯 がある。
      サーボの角度分解能が無限大だと指定角度を中心に前後をいつまで経っても動き続ける。
      このため、ある程度近くなったら一致したとみなす。 この幅をデッド バンド 幅という。
      これ以上の細かい角度は設定できないので分解能でもある。 数us~10us位。
      ソフト的にこれ以上細かくパルス幅を設定しても意味はない。
       無駄な動きが減るので消費電流を減らしポテンショメーター(VR)の擦り減りも減らせる
       というメリットもある。
       120°が1.0ms幅でデッド バンド 幅が10usだと角度分解能は1.20°
       180°が1.9ms幅でデッド バンド 幅が10usだと角度分解能は0.95°
      サーボ信号自体のブレ(ジッタ)による無駄な動作も抑えられる。
       PICAXEの電源はサーボの電源と分離してブレが出ないようにした方がよい。
     
    ・PWM
     連続してサーボに信号を送る。
     パルスを1個送ってその角度にしてくれてもよさそうだがサーボはそうではない。
     サーボは基本的にアナログ動作なので信号を送り続ける必要がある。
      サーボの回転軸に取り付けられたポテンショメーター(VR)が発生する電圧と
      サーボ制御信号をOPアンプで?比較してモーターを回転させる仕組みのために
      制御信号を送り続ける必要があるみたい。

    信号レベル
    Hiで5V。 2V以上あればよいらしい。(5V TTLが基本で2.4V以上か?)
    だとすると3.3V CMOSでも使えるかもしれない。

    結局、PICAXEのサーボ信号は一応使い物になるようである。
    ちょっとサーボで遊んでみるのには十分である。

    サーボの電源
    ラジコンの電源は電池なので4.8~6Vが基本だが4.8~7.4Vのもある。
     高い電圧のもの程サーボのトルクが増しレスポンスがよくなる。
     ただ、あまりトルクがあると外部から力が加わった場合に軸がピクリとも動かずメカが壊れる
     場合があるそう。
     無負荷なら指定の角度になれば基本的にモーターに電流は(あまり)流れないが、サーボの
     軸に負荷が掛かっている場合にはそれに抗する為の電流が流れ続ける。
     最大はモーターの拘束電流分なので1A位は簡単に流れる。
     つまり、サーボとはいえモーターなので1個辺りアンペア単位の電流が必要ということ。

    サーボの価格
    秋月電子通商で扱っているものは比較的安いが本格的なラジコン用のは1~2万円と高い。
    これはモーターがハイパワー・高速で、ケース、ギヤ、軸受けが金属製で強度と放熱性が違う
    ため。

    サーボとの接続
    picaxe_SERVO_02.png
    サーボ信号には直列抵抗を入れる。 (~1kΩ?)
     サーボの方が電圧が高いのでPICAXE(IC)の保護の為のような気がする。
    サーボの電源に数百uFの(電解)コンデンサを入れた方がよいのは大電流が流れるので当然。
    0.数uFのセラコンを並列にすればノイズの点でよりよい。


    さて、PICAXEを使ってみる。
    コマンドはservoとservopos。
     なお、pwmout、 hpwmとは同時に使用できない。
    servo:初期化コマンド。 中途半端なサーボ信号が出ないようにするために必要らしい。
    servopos:正のパルス幅を調整するコマンド。

    試した回路
    picaxe_SERVO_04.png
    複数チャンネル出力できるようなので2出力で試した。
     
    init:
           servo C.1,150    ; initialise servo Pin6
           servo C.2,150    ; initialise servo Pin5
           pause 500          ; wait 0.5 seconds
    main:
           servopos C.1,100 ; 1ms
           servopos C.2,200 ; 2ms
           pause 500          ; wait 0.5 seconds
           goto main           ; loop back to start
     
    servoコマンドを実行した時点で出力が出る。 初期ポジション。
    サーボ命令の後にpauseを入れるのはサーボが指定の角度に移動するための時間。
     この時間はサーボの性能による。
     0.5sも掛るようではラジコンカーのステアリングには使えない。
     サーボのデータシートに無負荷時の時間が書かれているが負荷がある場合はもっと掛ると
     思われるので、リアルタイムで操作するにはかなり高速なサーボ必要なことが分かる。
    コマンドの設定値は75~225が基本だが未保障ながらこれを外れた値でも出力されたので
    ±90°の0.5~2.4msも出せそうである。

    2ch共出力された。
    なお、最後の goto main を end にすると出力が止まる。
    つまり出力はソフトでハードタイマーを参照して出しているのだろう。

    信号波形:2msパルスの例
    picaxe_SERVO_05.jpg picaxe_SERVO_06.jpg

    以上
    関連記事

    コメント

    非公開コメント

    Friendship 7

    浅く広くのハード屋です。 基本的に弱電ですが強電も多少分かります。
    コメントへの返信には過大な期待をしないで下さい。 非公開コメントは停止しております。 不適切なコメントはFC2で自動的にはじかれます。
    リンクフリーですが盗作は禁止です。
    本ブログの内容を参考にされる場合はあくまで自己責任でお願い致します。