ラボ
TiColla CDEでラジコン用サーボを動かす
C言語はタイルに比べて処理が非常に高速です。
そこで、ソフトウェアでPWM信号を作り、ラジコン用のサーボを駆動する実験をしてみます。

サーボをコントロールするには?
サーボはラジコンカーやラジコン飛行機の操舵などに使われています。通常のギアボックスと違い、出力軸に連結された可変抵抗でフィードバック制御され、コネクターの信号ラインに入力されたPWM信号に応じて出力軸が一定の位置を保つようになっています。
PWMとはPulse Width Modulationの略で、一定間隔の出力on/offの出力onの幅を変化させて調整用の信号としたり、擬似的に出力電圧を変化させる方法です(RoboDesignerでもモータースピードの調整に使用しています)。
サーボコントロール信号の場合、出力onの間隔は10~20msec、出力onの幅はニュートラル位置が1.5msecで、0.7から2.3msec程度(+-60°くらい)の間で動かすことができるようです。
プログラム
一定の時間間隔の信号を作るため、まずループでLED(CN7)を点滅させ、おおまかにコントローラーボードの処理速度を測ります。
点灯と消灯のループ回数をそれぞれ変数にして、簡単に点灯の間隔を調整できるようにしておきます。
実際に光っている時間を計測し、ループ回数で割れば、処理速度の目安がわかります。
ハードウェア設定(jpeg)
ループテスト main.c(txt)
ループテスト Cソース(zip)
サーボとコントローラーボードを接続する
サーボのコネクターは電源(+)、グランド(-)、信号(S)の3線です。しかし、コントローラーボードのコネクターとは配列が違うので、ブレッドボードで変換します(ユニバーサル基板で変換用のボードを作成してもよいでしょう)。
サーボの電源電圧は4.8~6V程度です。ラジコンでは単三電池4本またはニッカド5本程度のバッテリーで駆動します。
実験ではコントローラーボードのコネクターの5Vを使用します。
ケーブルの色はサーボのメーカー/機種によって異なります。
※写真のコントローラーボードはモータードライバー部分を切断してあります。


[2電源の場合]
サーボを複数つなげるなど消費電流が増える場合にはコントローラーボードとサーボそれぞれに電源を用意します。
サーボとの接続は信号とグランド(-)だけにします。ヘッダーピンを工夫するか、必要のないケーブルをカットしてください。

コントローラーボードは消費電流が少ないので、006P電池などで十分です。
サーボは電源と接続しておくと常に電流を消費しますので、電源スイッチがあると便利です。

プログラム
ループでLEDを点滅させるプログラムをベースに、出力onの幅(=サーボの角度)を設定する変数と、その位置を保持する時間を引数とする関数「servo」を定義します。
しかし、一つの位置を指定しただけでは正しく動いているのかわかりませんので、main関数で関数servoを呼び出し、2つの位置で交互に止まるようにします。
ハードウェア設定はループテストと同じです。
サーボ駆動実験 main.c(txt)
サーボ駆動実験 Cソース(zip)
サーボ駆動の様子(動画)(AVI)
※サーボの特性は機種ごとに異なりますので、詳しくはご自分で使用されるサーボのスペックシートを参照してください。
※サーボが電源に接続されていると電力を消費し続けるので、ボードとの接続ケーブルをこまめに抜いてください。
※サーボは慎重に扱わないと、内部のギアが破損する場合があります。また、今回の実験で使用しているような小さなタイプでは底部がネジで固定されていないので、取り扱いに気をつけてください。
※プログラムのPWMの設定に注意してください。無理な位置まで動かそうとすると破損する場合があります。
サーボ1個で1自由度の関節を作ることができます。
マニピュレータのようなものを作ったり、webcamなどを動かしてみても面白いでしょう。

→ ラジコン用サーボを使った4足ロボット


