ステッピングモーター制御ライブラリを作りたい(その1)「ステッピングモーターとは」

 今までステッピングモーターを使った事がなかったので、使ってみようと思うのですが、せっかくなのでArduino用のライブラリを書きたくなりました。

サーボモーターとの違い

サーボモーターとは

ステッピングサーボはここでは扱いません。

 サーボは指定した角度へ回転することが出来ます。
 例えば、現在の軸の角度が0度でも、180度でも、軸を90度の位置へ回転しろ!と命令すれば、90度の位置まで回転します。
 本体の中には、可変抵抗と一般的なDCモーターが入っています。自分が向いている角度を可変抵抗で測りながらDCモーターを制御するため、絶対的な角度の制御が可能になっています。
 角度制御が可能なサーボの多くは、連続回転せず、180度しか回らなかったりするものが多いです。 f:id:takumus:20160910235120p:plain  可変抵抗が入っているという事はつまり。サーボの電源を切っても、自分の向いている角度を記憶しているので、電源投入時に元の角度へ戻ることが出来ます。
 また、もしも重い力がかかりすぎて、モーターが止まっても、重い力が外れた瞬間、直ちにその角度に到達します。

まとめ

  • 可変抵抗があるので角度を覚えることが出来る。
  • 回転中にモーターが止まっても、動ける状態になれば絶対に指定した角度にたどり着く。
  • 絶対的な角度指定が出来る。
  • 角度指定のできる一般的なサーボは180度しか回らない。

ステッピングモーターとは

 ステッピングモーターは電気信号を送った回数分回転します。1回の電気信号(以降1ステップと表現します)で、何度回転するかどうかは、モーターによって異なります。例えば、1ステップで1.8度回転するタイプのモーターを90度回転させるには、50ステップ送れば良いのです。ステップを送る間隔が短ければ早く。広ければ遅く回ります。 f:id:takumus:20160911130028p:plain
 また、連続回転が可能です。電気信号を送り続ければ、無限回転出来ます。
 しかしサーボと違い自分の絶対角度を知ることはできません。つまり、相対的な角度の制御しかできないのです。
 プリンターなどで用いられている物は、一番端にスイッチがあり、電源投入時にスイッチの位置までモーターを回し、触れた位置からの相対角度で制御しています。(多分ロータリーエンコーダーも合わせて使っています)
 ここでは詳しい説明を割愛しますが、雰囲気はこんな感じです。

気を付けること!

 送った回数分回るといっても、気を付けなければならない点がいくつかあります。例えば1回1.8度のモーターに、50回信号を送ったとしても、必ず90度になるとは限らないのです。
例えば、

  • ステップを高速で送ると、反応できず回転が追いつかない。
  • 重い力がかかりすぎて物理的に回転できない。
  • 高速で回っている時、急停止命令しても止まれない。

という状況で起こります。
 これらの現象を脱調と言います。脱調とは、送ったステップ分の回転を行えなかったことを言います。
 サーボの場合、うまく回転できなくても、現在の回転角度を記憶しているので、指定角度までたどり着こうと努力します。しかし、ステッピングモーターはサーボと違い自分の回転角度を認識できません。そのため、送られた信号分の回転ができたかどうか分からないのです。
 ステッピングモーターを制御するには、脱調を防止するために工夫が必要で、ロータリーエンコーダーなどと合わせて使い脱調を検知する必要があります。

まとめ

  • 送ったステップ分回転する。
  • 連続回転が可能。
  • 回転角度が取得できないため、本当にその角度にたどり着いたかが分からない。
  • 相対角度でしか指定できないため、絶対的な制御が必要な場合、スイッチなどを用いてキャリブレーションなどをする必要あり。もしくはロータリーエンコーダを合わせて使うなど。

 どうでしょう。少々難しいと思いますが、なんとなく違いが分かったでしょうか。そんなステッピングモーターを脱調しないように制御するライブラリを、明日から書いていきたいと思います。

その2はこちらです。