連載
» 2016年05月12日 07時00分 UPDATE

Arduinoで学ぶ基礎からのモーター制御:基礎からのマイコンモーター制御(6):PWMを使ったサーボモーターの制御 (2/3)

[今岡通博,MONOist]

PWMによる制御

 下の図1がPWM信号とサーボモーター軸の角度の関係を説明するための図です。

 先に示した仕様はSG-90固有の値ですが、これから説明するPWM信号制御の部分は他のサーボモーターでも共通です。ですから、この後に示す回路図やプログラムはそのまま流用することが可能です。

photo 図1 SG-90のデータシートより抜粋

 サーボモーターからは3本の端子が出ています。赤は電源のプラス、黒あるいは茶色はグランド(電源のマイナス)に接続します。オレンジあるいは黄色には制御信号に接続します。電源電圧と制御信号は4.8Vを供給します。

 下のグラフが制御信号のタイミングチャートです。横軸が時間を示しています。単位はミリ秒です。縦軸が電圧を示しています。下の平たい部分が0Vです。パルスの山の部分は4.8Vになっています。

photo 制御信号のタイミングチャート

 サーボモーターの制御にはPWM信号を用います。PWM信号については第5回の記事を参考にしてください(基礎からのマイコンモーター制御(5):PWMでマブチモーターを制御する)

 サーボモータを制御するためには周期を20ミリ秒、周波数でいえば50Hzにします。またパルス幅は1ミリ秒から2ミリ秒の間で変化させます。パルス幅が1ミリ秒の時、サーボモーターの軸の角度が0度となります。また2ミリ秒の時にサーボモーターの軸の角度は180度となります。1.5ミリ秒の時は、ちょうど真ん中の90度となります。この様にパルス幅を微妙に変えることによって、サーボモーターの軸の角度を0度から180度の間で制御することができるのです。

回路とプログラミング

 Arduinoからサーボーモーターを制御する最も基本的な例を実装してみましょう。下の図2が回路図です。

Arduino Nanoからのサーボモーター制御 図2. Arduino Nanoからのサーボモーター制御

 サーボモーターには3つの端子がありますが、そのうちの黄色が制御信号の端子となり、ArduinoのD9に接続します。10KΩのボリュームではノブを回すことによる0Vから5Vの電圧を生成します。その電圧はA0すなわちアナログ入力の0番ピンに接続します。

 サーボモーターの電源間に47μFの電解コンデンサーを入れています。これはサーボモーターの動作時(特に始動時)に大量に電流が流れることがあるのですが、その時の電圧降下による不具合を防止するためのものです。

 例えばPCからUSB経由で電源を供給している場合など電流容量に制限があるため、サーボモーター側で大電流を消費すると電圧降下が起こりマイコンとPCとの通信が途絶える場合があります。そこでサーボモーターの電源間にコンデンサーを入れておくことによりこの電圧降下を防止することができます。サーボモーターに大電流が流れる可能性があるのは始動時の一瞬ですので、この程度の静電容量コンデンサーでも防止効果があります。

 下の図3が上記回路をブレッドボードに実装した図です。

図3. 図2回路をブレッドボードに実装 図3. 図2回路をブレッドボードに実装

 前述したように黄色は制御信号で、赤は+5Vまた黒はGNDに接続します。電圧降下防止用のコンデンサーはサーボモーターの電源供給位置になるべく近い位置に接続してください。

Copyright© 2017 ITmedia, Inc. All Rights Reserved.