サーボを動かす信号って? |
受信機からサーボやアンプを動かす信号って、なんだろう?? ずーっと疑問で、いろんなラジコン関係の本を調べても出てない..... 仕方ないので、ラジコンメカに詳しい「動く模型工作ファン」の森本さんにお尋ねしました。(森本さんその節はどうも...(^^ゞ) 受信機からサーボへ電気を流したり止めたりの、ONとOFFが繰り返し出されています。 単純にサーボの変わりに電球を繋ぐと、電球が光ったり、消えたりを繰り返してます。 もちろん、ONとOFFの間隔があまりにも短いので、009の加速装置でも付けなければ普通の人には見えないと思います。(謎;;) ちなみにこう言う信号をパルスと言うらしいです。 |
パルスの幅は? |
パルス信号を受け取ったサーボは、電気が点いてから消えるまでの時間の長さでサーボホーンを左右に動かします。 例えば、電気が来てる時間が1秒だと、サーボホーンはちょうど中間に止まるとすると、 0.5秒に縮めるとサーボホーンは中間より左45度の位置まで動きその場所に止まり、逆に1.5秒に延ばすと、サーボホーンは反対の右45度まで動き、そこで止まります。 実際には、サーボホーンが中間の時のONの長さは、1.5mS(ミリセコンド)で、45度右(または左)が1mSで反対の左(または右)45度は2.0mSです。 要するに、1mSから2mSの幅で、サーボホーンが左右に動く訳です。 ちなみに電気が切れてるOFFの時の時間は、サーボ自体には関係無いようですね。 OFFの時間が短いと、サーボは忙しなく動いて電気も食うし、逆に長すぎると反応が鈍くなる?? メーカーのプロポ等では、OFFの時間は14mS〜15mSぐらいだそうです。 |
PICでサーボを動かす! |
理屈が解れば簡単!! PICからサーボに1mS〜2mSの間電気を流せば、サーボは動くわけだ! .....でも、1mSってどのくらいの長さ?? 1秒=1000mS(ミリセコンド) 1mS=1000μS(マイクロセコンド) なので、1mSは0.001秒だ! ピックからサーボに電気を流した後、0.001秒後にOFFにする。 しばらくしてからまた電気を流して、0.001秒後にOFFにする、これを繰り返してやれば、サーボは中心より90度の位置で止まったままになる。 |
プログラミング開始! |
PICの練習プログラムには、一定時間LEDを点灯すると言ったサンプルが必ず出てます(笑)。 サンプルプログラムの点灯時間を0.001秒に縮めて、LEDの変わりにサーボの信号線を繋いでやればすぐに完成!? |
PICのスピード? |
0.001秒の時間を計るには、どうしたら良いんだろう?? いろいろ参考書を調べたら、PICが1命令を実行する時間を計算して、命令の数で必要な時間を計算する方法と、PICが持つタイマー機能を使う方法があるようです。 タイマー機能を使う方法は、初心者の私には良く解らなかったので..(^^;;...命令の数で時間を計る事にしました。 PICが1命令を実行する(1サイクルの)スピードは、取りつけたクリスタルの周波数で決まります。 1サイクルの時間=4÷クリスタルのクロック周波数 で、実験基板で使った10MHzのクリスタルだと、4÷10MHz=0.4μS(マイクロセコンド)になります。 1mSの時間を計ろうとすれば、いったい何サイクル?? 0.4μS=0.0004mSだから、1mS=0.0004×2500で、なんとPICが2500個の命令を実行してやっと1mS(0.001秒)になるんだ!! |
数字が大きすぎる!! |
1mSが2500サイクルだと、サーボを反対側に動かした時は、2mSだから、5000サイクル分の間、電気を流さないと行けない.... サーボをPICで自由に動かそうとすると、2500〜5000サイクルの数字で、サーボの止まる位置を指定しないといけない.... 厄介な事に、アセンブラのプログラムの変数は、1バイトなので0〜255までしか扱えない...2個以上使う手もあるけど、プログラミングが難しくなるので、なんとか0〜255の値でサーボをコントロールしたい! |
25サイクルで1にしよう! |
2500〜5000サイクルを0〜255の数値範囲でプログラムするには、25サイクルを1とすれば.... サーボが左90度→1mS→2500サイクル→100 サーボが中間→1.5mS→3750サイクル→150 サーボが右90度→2mS→5000サイクル→200 |
ようやくプログラムの製作! |
実際のプログラムは、
と言う事で、実際に作ったプログラムはこれ→「savo1.asm」(ダウンロードして、エディタか、メモ帳等で開いてください....って、こんなしょうもないプログラムは誰も見ないかぁ(笑)) |
更新日2000.7.13