ホビーでよく使うアイテムとして、ラジコン用のサーボモーターがある。
R8C/M120AN で動かしてみたので、簡単に、解説する。
まず、テスト用にアマゾンで、一番安いサーボモーター買ってみた。
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)になるようにしている。