LCDに続いて、RCサーボを動かしてみました。 1個しかないCCPはPWMに使う予定があるので、TIMER3 の高位割り込みでポートを動かして実現しました。 実験はしていませんが、TIMER3 の割込み処理で最大8個のRCサーボを制御できそうです。

DSC00070

今回試したRCサーボは、GWS PICO/STD/F(フタバ配列) です。 電源電圧はPICの電源と同じ5Vを供給します。 今回からPICKit3からの電源供給を止めてACアダプターを使っています。 制御信号はPICのポート出力1本を直接接続しています。


rcs_signal

RCサーボの制御信号について探すと幾つかのWebページで丁寧に説明されていますから、簡単に済ませます。 上図のように20msecの周期( t f )でパルス波形を繰り返し入力します。 信号電圧が High の時間( t h )が1500usecの時に±0度の回転位置になります。 上図のように通常は±60度(1000~2000usec)の信号を入力するようです。 なお、±90度付近までは動作できるようですが、メカニカルリミットを超えて動作させると故障する為、注意が必要とのことです。

これまで、このブログで紹介して来た TIMER0 , TIMER2 の割り込みは各々 50msec , 2msec と言う固定した割り込み間隔で使っています。 今回は TIMER3 の割り込みを受けて、上図太線の波形のようにポートに High を出力した後で、TIMER3 に t h を設定して割り込み処理を抜けます。 次の割込み時にポート出力を Low に戻して TIMER3 に t l を設定して割り込みを抜けることで1周期( t f )の波形を出力します。

この方法で t f / 2 の間にRCサーボ1のパルスを出力し、続く t f / 2 の時間にRCサーボ2のパルスを出力すれば TIMER3 だけで2個のRCサーボを独立制御できると思います。 さらに20msec/2.25msecより、最大で8個のRCサーボを独立に制御できそうです。

今回のプログラムは一個のRCサーボを制御するだけのものですが、この後2回ほどの記事で説明を終えて、プログラム・ソース(プロジェクト)をダウンロード出来るようにする予定です。

こんな風に動くプログラムです。



音と動画が合わないと感じたらギアの形をしたアイコンから小さな値を選んでご覧下さい。
イラストのクマさんは以下のURLからダウンロードさせて頂きました。 ありがとうございます。

 商用利用可!フリー素材屋さん
 http://www.huri-sozai.com/


以下は関連記事のインデックスにします。

RCサーボ2 
 今回はTIMER3のオーバーフローで発生する高位割込み処理です。 ポート出力を切り替え、データ・メモリー上に予め準備されたデータをTIMER3に設定して割込み処理を抜けることで、RCサーボ制御信号を作り出します。

RCサーボ3 
 制御角度を規程するワークの値を0.5秒間隔で書き換えてクマさんの動きを作ります。 一連の記事で紹介したソース・ファイル(プロジェクト)をダウンロード出来ます。


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。