タイマーを用いたステッピングモーター制御(倒立振子その2)

1か月ぶりのmisosoupsiteです。テスト期間(?)などが重なり、すっかり更新が途絶えてしまったブログですが、春休みに入ったのでまた更新を再開したいと思います。さて、以前倒立振子の制御についてブログを書いたのですが(後で確認したところ数式に一部誤りがありました。申し訳ありません)。今回は「ステッピングモータをマイコンで制御する方法」について書きたいと思います。

さて今回ステッピングモータはバイポーラ型というタイプを用いたのですが、(詳しい説明は
今年の振り返りと3軸オムニロボ噺をご覧ください。)これをHブリッジ回路(今回はTA7291P)2つで駆動すると考えると、マイコンからの4つの入力は以下のようになります。

前転%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-21

後転
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-22

これらの波形をマイコンから出すには主に③つの方法があると思います
①while文で回し続け、タイミングA,B,C,Dでピンの出力を切り替える
②タイミングA,B,C,Dで割り込み処理を入れてピンの出力を切り替える
③タイマーの出力比較モードを使う

今回用いたのは③の方法です。今回制御に使ったマイコンはNUCLEO32F401REというSTM32マイコンがのったマイコンボードなのですが、STM32マイコンには複数のタイマーがあります。タイマーは基本的にはカウントしていくのですが、それだけでなく、カウンタの数値にあわせて、ピンの出力(HiGHかLOW)を切り替えるという機能もあります。マイコンのPWM出力など、mbedのAPIを用いてなにげなく使っている方も多いと思いますが、実はこの機能によってなされているのですね。
さて、PWM程度ならmbedのAPIを用いて簡単に実装できると思うのですが、ステッピングモーターを制御する波形など少し特殊な波形を出したい。となるとmbedのAPIではできない(?)ので、タイマーの設定をよりハードよりな層でおこなう必要があります。そのような層のライブラリとしてはSPLやHALがありますが、HALを用いた場合CubeMXという便利な初期化コード生成ソフトを使うことで、わりかし簡単に実装することができます。実際に生成されるコードはたとえば下のようなものです。

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-23

例えば”htm1.Init.Prescaler=839″でタイマーのプリスケーラーを839に設定していることや、ConfigOC.OCMode=TIM_OCMODE_TOGGLE”、”sConfigOC.Pulse=500″でタイマーのカウンタが500に一致するたびに出力が反転するようになってることがわかると思います。

この辺の詳しいはなしは定例会報告書にも載せたいと思いますのでよろしくお願いします。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中