PIC16F84A使用
サーボモーターの簡易動作テスター





サーボテスター
 PICマイコンから信号を送ってサーボモーターを動かします。
 デアゴスティーニ社の週間ROBOZAK用サーボモーターが手元にあったので、サーボモーターの勉強も兼ねて作ってみました。

 サーボモーターは一般的なDCモーターと違い、電気を送っただけでは回転してくれません。
 簡単に説明すると、サーボモーターの信号線に決まった周期で、ある幅のパルスを入力すると、そのパルス幅に応じてサーボモーターが回転し、止まります。ほとんどのサーボモーターは20ms前後の周期で、1〜2ms幅のパルスで動作し、1.5ms幅のパルスで中央に来る仕様のようです。パルス周期やパルス幅に対する動作などはメーカーや型番によって全く異なる場合もあるようです。詳しい事が知りたい場合は他の文献を調べてみてください。


 ROBOZAKのサーボモーターはHSR8498HBのようです(厳密には違うかもしれません)。


 このサーボはデジタルサーボで、信号が周期的にこなくても自分でトルクを維持するので、パルスの入力が途切れても安定して動作します。マイコンのプログラムはそこに甘えて必要な時だけパルスを出す仕様にしています。
 コネクタはサーボによって形状が異なるらしいので気をつけてください。ピンアサインも異なる場合があるかもしれません。

 ■回路図
回路図

 マイコンは手軽なPIC16F84Aを使いました。本当はパルス生成機能のあるマイコンを使ったほうが安定した周期でパルスを生成できますが、とにかく手持ちの物で早く仕上げたかったのでプログラムで無理やり処理しています。割り込み処理すら使っていません。タイマーICを使っても作れそうですが、使い慣れているマイコンで作りました。
 電源はラジコンの7.2V Ni-Cdバッテリーを3端子レギュレーターで5Vにして使っています。マイコン、サーボ共通電源です。
 

 写真の青スイッチはrb.1、黒スイッチはrb.2、赤スイッチはrb.3にそれぞれ接続していて、押すとグラウンドに接続します。スイッチとPIC端子の間には1Kオームの抵抗を入れています。
 3つのスイッチは押している間だけそれぞれ、0.6ms幅パルス(青スイッチ)、1.5ms幅パルス(黒スイッチ)、2.4ms幅パルス(赤スイッチ)を24ms前後毎に発生させます。それに応じてサーボモーターは左に約90度回転、中央に戻る、右に約90度回転します。スイッチを押さないとパルスを発生しません。回転速度制御は行っていないので(おそらく)MAX速度で回転します。
 (一応手元の資料のパルス幅と回転角の数式で計算すると回転角は75度になるのですが、見た目はほぼ90度なので資料と仕様が異なるようです。)
 
■ ■ ■

 ハンディ・オシロスコープ(HandyOscillo)というフリーソフトを使ってパルスを確かめてみました。Vectorのここにあります。
 PICの出力を1Kオームの抵抗で分圧してサウンドカードのLine-Inに入力しています。

 分圧は不安だったからで、必要ないかもしれません。入力が小さくなるぶんゲインをかなり上げる必要があります。サウンドカードやPC壊れないかドキドキでした。
 今回はモノラルのミニジャックを使ったので上の図のようにしました。

 今回の回路ではPICの出力は0〜+5Vとマイナス電圧にはなりませんが、音声入力なので例えば-5V〜+5Vの波形も計測できるはずです。実際に試していないので断言はできませんが。
 PCのサウンド機能を使う簡易オシロスコープなのでどの程度の精度があるのかは分かりませんが、使ってみた感じだとちょっとした測定なら十分使えそうです。

 左の波形は1msスケールです。

 出てきた波形は回路が適当なのもあってかあまりきれいではありませんが、目測で上から0.6ms、1.5ms、2.4msのパルス幅にだいたいなっていると思います(少し怪しいですが)。

 こちらはスケールを4msに広げてパルスの間隔を測定しています。
 プログラムが甘いのでパルス間隔はスイッチごとに異なります。目測で、青スイッチは23ms、黒スイッチは24ms、赤スイッチは25msの間隔でパルスが出ている事が分かります。
 すべてのスイッチで間隔をほぼそろえる方法もありますが、それはまた別の機会に使う事にします。つまり手抜き…。


 マイコン用とサーボモーター用の電源を別々にしたところ。サーボモーター用は単三型Ni-MH電池4本の4.8Vです。
 サーボ用電源(Ni-MH)のマイナスは制御回路のGNDにも接続してください。繋がないと動作しません(経験談、苦笑)。

 一般サーボでも使えるように、1ms、1.5ms、2ms幅のパルスを発生するプログラムも作りました。正確には1.005ms、1.5ms、1.995ms幅のパルスを生成します。

 いちおう波形を見ておきましょう。

 上から1ms強、1.5ms、2ms弱のパルスが出ているのが確認できました。

 ROBOZAKのサーボでも動きますが、左右50度程度と回転角度が小さくなります。

動画



 ■MPEG(540KB,160x120,MPEG1)
 ■WMV(276KB,160x120,WMV)

 動作の様子。ナローバンドの方は要注意。

 回転が分かりやすいようにサーボホーンの上に矢印を書いたシールを貼っています。

PICのプログラム

  ■ダウンロード(別ページ)

 動作の保障、損害損失の補償はいたしかねますので、あくまでも自己責任でお願いします。

(2008年10月4日)
 

関連
NSKRX001
NSKRX001(試作機)

ラジコンカー

(書きかけ)



[戻る]