R8Cを使ってRCサーボを動かす

ホビーでよく使うアイテムとして、ラジコン用のサーボモーターがある。

R8C/M120AN で動かしてみたので、簡単に、解説する。

まず、テスト用にアマゾンで、一番安いサーボモーター買ってみた。
IMG_0768s

HKSCM9-6 RCサーボ(ホビーキング製)
コネクタタイプ:JR
GND:茶
+V: 赤
信号: 橙
最大定格: 6V

※このサーボは意外と小さくて、そんなに大きいトルクを出せないが、テスト用に丁度良い。
※もちろん、他のサーボでもかまわない。
※フタバタイプでは、微妙に信号の仕様が異なるので、調整が必要。
※R8Cを5Vで駆動

ラジコン用サーボを動かす信号は、メーカーにより微妙に異なるが、ほぼ同一で、PWM で、
パルス幅と角度が比例関係にあり、JR系では、

周期: 50Hz(20ms)
ニュートラル: 1500uS(マイクロ秒)
※フタバタイプでは、1520uS(マイクロ秒)となっている。
可動範囲: +-600uS、900uS~2100uS(マイクロ秒)

となっているようだが、周期については、ある程度許容範囲があるようだ、当然ながら、
周期を短くした方が、応答は良くなるものと思われる。

・R8CのCチャネルで、20MHzを8分周すると、50000カウントで、20mSで、
50Hzとなり、16ビットの範囲に収まる。

    bool pfl = 0;  // 0->1
    uint8_t ir_level = 2;
    timer_c_.start_pwm(50000, trc_type::divide::f8, pfl, ir_level);

・ニュートラルは、1500uSなので、3750となる。
・可動範囲は+-600uSなので、+-1500となる。
・PWM出力をP1_2(18):TRCIOB、P1_3(17)TRCIOCにして、
2個のRCサーボを別々に動かす。
※TRCIODを使えば、3個まで駆動できる。

サンプルプログラムでは、AN0、AN1でA/D変換した結果(0~1023)を、使って
サーボの可動範囲±1500(±600uS)になるようにしている。

IMG_0769s

プロジェクトのソースコード