オルタナティブ・ブログ > プログラマー社長のブログ >

プログラミングでメシが食えるか!?

ステッピングモーター制御の試行錯誤

»

さて、本日4本目!

今年の2月くらいからマイコンの仕事も少し関わっていて、中でもステッピングモーターをどう扱うかというあたりはいろいろ試行錯誤したので、気の向くままに書いておくことにします。

s6.jpg

ステッピングモーターはこんな構造になっていて、普通のモーターとは違って、与えたパルスに応じて回転していくような動きをします。このモーターでは1パルスで1.8度動きます。さらに、電磁石の極性も変えながら動かします。

s1.jpg

従って、普通に電源につないでも全く回転せず、それなりの電流でパルスを流していくことで回転させます。一般的にはこんな感じのステッピングモーターコントローラーを使って、マイコンからパルスを与えて、それに応じた電流を流す感じで駆動します。

s2.jpg

ステッピングモーターには6本線のバイファイラ巻きと4本線のユニファイラ巻きがあり、よく使われるのはユニファイラ巻きで、その場合はコイルに流す電流の向きを反転させながら駆動するバイポーラ駆動をすることになります。このコントローラーは見た目が分かりやすいのですが、2つのICが使われていて、それぞれ別のコイルにマイコンからのパルスに応じて電流を流します。最初のうちは、マイコンから与えるパルスを間違えて、1つのコイルに両方向の電流を流してしまい、ショートしてICがこの写真のように焼けてしまうミスもしてしまいます。

s3.jpg

まずはもう少し基本からちゃんと理解しようと、ステッピングモーターの解説本を買ってきて、自分で回路を作って動かしてみました。6本線のバイファイラ巻きだと電流の向きは変えずに済むので、このようにMOSFETを4個使って、単純にマイコンからのパルスで電流のON/OFFをするくらいで回せます。

s4.jpg

ブレッドボードで動きを確認したら、ユニバーサル基板で固定化しておくと扱いやすくなると同時にブレッドボードが空けられます。この頃はRaspberryPiを使って実験していました。

s5.jpg

続いてユニファイラ巻きをバイポーラ駆動してみようと、回路を組んでみましたが、バイポーラ駆動はコイルに流す電流の向きを変えなければならないので、回路が断然複雑になります。トランジスタとMOSFETを1つのコイル電流用に2個ずつ使い、Hブリッジ回路を構成し、それを2組使ってようやく1個のモーターを回せます。トランジスタ・MOSFETともに逆極性のものも必要なので、部品の種類も増えます。しかも、失敗するとショートして様々な部分が壊れます・・・。

ということで、わざわざMOSFETを使って駆動回路を自作するのは、よっぽど大電流を流したいケースくらいで、普通は出来合いのコントローラーを使います。その方が部品代も安いくらいです。

s7.jpg

さて、いろいろなステッピングモーターコントローラーを試していると、単にHブリッジ回路を2個コンパクトにまとめただけのコントローラー以外にも、もう少し賢いコントローラーもあることがわかりました。このコントローラーは加減速時にPWM制御で回転をより滑らかにすることができ、マイコンから与える信号も単に回転速度に応じたパルスを与えるだけで、後はボード側のスイッチで動作モードをコントロールできます。これと同じ回路を自作するのは結構大変です。。

この頃にはオシロスコープも登場して調査が捗るようになりました。

s8.jpg

さらに、今回の構想ではモーターをたくさん使う予定のため、コントローラもたくさん必要になり、それをどこに置くのかも悩むところでした。いろいろ探していると、こんな感じにモーターの後ろに装着できるコントローラーも見つけました。

実はこの2つは全く別の動きをします。左はここまで登場したのと同じようなコントローラーで、マイコンからのパルスで回転速度を制御します。一方左はこのボード自体がマイコンのようなもので、マイコンからSPIでコマンドを送ることでモーターをコントロールします。

コマンド方式のメリットはかなり多く、「マイコンからムラ無くパルスを送る必要がない」「コントローラー側で目標速度などが事前に分かるので、よりきめ細かな加減速制御をしてくれる」「1つのマイコンから複数のモーターをコントロールする際に信号線が増えすぎない」など、今回の目的ではこちらの方が断然良いということになりました。特に低速での回転でよりきめ細かなPWM制御は圧倒的な効果があり、滑らかな回転と共にトルクも断然高くなるのでした。

s9.jpg

ということで、自宅でも検討を進めました。この頃にはマイコンはArduino系になり、キーパッドシールドなどで便利に検討を進めました。

s10.jpg

ちなみに、このコントローラーは使っているICは同じですが、別製品です。ICが同じなので同じSPIコマンドで制御できます。

s11.jpg

さらに、より大電流を流す強力なモーターを使う可能性もあるということで、ICだけでなくFETも使ったコントローラーも入手しました。実は同じメーカーのICながら少し型番が違い、レジスタの構成が微妙に違うので、全く同じにはコントロールできないのでした。まあ、資料をみてきちんと動かせましたが。

s12.jpg

1つのマイコンで6個のモーターまでコントロールしたいということになったので、たくさん並べて実験しています。SPIはチップセレクトで複数のデバイスを制御することもできますが、このコントローラーの説明書ではデイジーチェーンをと書いてあり、どちらでも動きましたが、デイジーチェーンとすることにしました。

s13.jpg

ブレッドボードで試行錯誤していると、配線がこんなことになり、頭もこんがらがります。

それにしても、モーターを増やすと何となく不安定だと思って調べていたところ・・・

s14.jpg

単純に電源容量が足りていないのではと思いつき、6個のモーターのために3個の電源を使ってみたところ、見事に安定して動きました。ステッピングモーターは回転開始・停止時や低速回転時にとても電流を食います。

という感じで、マイコンでのプログラミングは大して難しくないのですが、いろいろと試行錯誤が必要でした。まあ、そもそも普段あまり関わっていない分野だったこともありますが。当初はこのあたりは専門業者に依頼しようかという話しもあったのですが、それなりの開発費がかかることや、なにより自分たちに全くノウハウが蓄積できないということもあり、特に急ぐ開発でもなかったので、社内で試行錯誤することにしました。当初は私は直接関わらない予定だったのですが、担当しているプログラマーがハード関連は詳しくなく、これは1人では大変だろうと私も関わることにしました。まあ、もともと電子工作は趣味で多少やっていたこともありますし・・・。

こんな感じで、単に動けば良いというだけでなく、頭でも納得しながら進めると理解が深まり、情報を探す際にも視野が広がります。こういうことは凝り性な人が向いているのでしょうね。2ヶ月でそれなりの買い物もしましたが、社外に頼むことに比べれば全然安いものです。

Comment(0)