今回はステッピングモータです。ステッピングモータ(ウィキペディア)は制御が簡単で、かつ高精度な位置決め制御ができるので使いこなせるととても便利なモータです。今回はユニポーラ駆動タイプを使用しています。(ステッピングモータには、ユニポーラ駆動とバイポーラ駆動の2種類があります)ステッピングモータと駆動方式については以下のサイトを参考にしてください。
さて、制御自体は非常に簡単と言ったステッピングモータですが、どのように制御するのでしょうか。答えは信号のハイとローを制御をする。ということになります。PICの4つのピンの信号を制御するだけで、精度の高い角度制御を行うことができます。では、始めましょう。
1.今回使用するPICについて
今回使用するPICは「PIC12F1822」です。
2.回路
2.1 電子回路図
2.2 電子回路の写真
2.3 回路説明
2.3.1 使用するパーツ一覧
パーツ名 | 説明 | 使用数 |
---|---|---|
PIC12F1822 | PIC本体 | 1 |
PF42T-96C4 | ステッピングモータ(バイポーラ駆動) | 1 |
EKI04047 | シリコンNチャネル型MOSFET | 4 |
11EQS04 | ショットキーバリアダイオード | 4 |
抵抗(1[kΩ]) | 抵抗 | 4 |
抵抗(10[kΩ]) | 抵抗 | 4 |
電源(5[V]) | PIC電源 | 1 |
電源(12[V]) | ステッピングモータ(7.2[V]で代用) | 1 |
2.3.2 PICの配線
PICのピン | 接続 | 補足 |
---|---|---|
VDD | 電源 | 5[V] |
RA0 | ステッピングモータ | 黒 |
RA1 | ステッピングモータ | 茶 |
RA2 | ステッピングモータ | 橙 |
RA3 | -未使用- | |
RA4 | ステッピングモータ | 黄 |
RA5 | -未使用- | |
VSS | グランド |
3.制御とプログラム
先に注意です。プログラムですが基本的にRA0、RA1、RA2およびRA4のハイとローを制御するだけです。ですが、今まで通りやってしまうと、ステッピングモータは制御できません。なので、最後まで読んでください。
3.1 1層励磁
1層励磁とは各IOピンに対して順にハイ信号を出していく制御方式です。以下の表のように順にハイを出力し、ステッピングモータを回転させます。(1がハイ、0がローです)
順番 | RA0 | RA1 | RA2 | RA4 |
---|---|---|---|---|
1 | 1 | 0 | 0 | 0 |
2 | 0 | 1 | 0 | 0 |
3 | 0 | 0 | 1 | 0 |
4 | 0 | 0 | 0 | 1 |
プログラム自体は簡単で、信号を表の順になるように書くだけです。ただし、1つ注意が必要です。それは待ち時間です。速く回転させたい場合、待ち時間を短くしてやればいいのですが、ステッピングモータの場合、早すぎると「脱調」という現象が起きてしまい回転しなくなってしまいます。
「脱調」とは比較的簡単に言うと、信号に合わせた位置に到達する前に、次の信号を出してしまったために逆回転してしまった状態です。なんだか難しいですね。とりあえず、ステッピングモータは回転速度を上げるためにはコツがいるということです。本格的に制御するときは、そこら辺についてしっかり勉強してください。
さて、「脱調」を起こさないようにするためには、その瞬間の速度を考慮した待ち時間を設定する必要があります。しかし、ここではそこまでの方法について説明する予定はないので、単純に200ミリ秒の待ちにしています。
- 順番1になるようにIOを設定
- 200ミリ秒待つ
- 順番2になるようにIOを設定
- 200ミリ秒待つ
- 順番3になるようにIOを設定
- 200ミリ秒待つ
- 順番4になるようにIOを設定
- 200ミリ秒待つ
- 以降、1から8までを繰り返す
<問題発生>
ここで問題が発生しました。なぜかステッピングモータが回転しません。ぴくぴく動くだけで、回転してくれません。プログラムミス?回路ミス?もしかしてブレッドボードがだめ?まさかICが壊れた?ということで、FETに電圧を掛けるとちゃんと動く、PICを変えても症状は変わらない。など色々と確認したが問題なし。となると信号がきちんと出ていない?まさかこんな簡単なプログラムを間違えた?
簡単なプログラムゆえにわざわざ確認用の発光ダイオードなどつけなくてもいいだろう、と考えていたのですがどうやら必要なようです。そこで、信号の出力部分に確認用の発光ダイオードをつけたところ・・・衝撃的な状態になっていました。RA0がハイになったまま・・・どういうこと?ん?本来、信号は1個だけハイになる、発光ダイオードは1個ずつ点灯するはずなのに2個点灯することがある。・・・なぜ?
さて、色々と調べたところ、PICの問題であることが判明しました。そして、この問題に関しては本などにもほとんど載っていないことらしいです。大人の事情であまり大きな声では言えないとかなんとか・・・。
PICを高速クロックで、連続で信号の制御を行うとポートの設定が正しくできなくなるそうです。今まで通り信号の出力は「RA0 = 1;」などのように書き、次から次へと信号を切り変えていったところ、書き換えができなくなり、問題が発生したようです。詳しくは以下のサイトを参考にしてください。
ということで、プログラムを以下のように変更しました。
LATA0 = 1;
LATA1 = 0;
LATA2 = 0;
LATA4 = 0;
すると・・・きちんと回転しました。
3.2 その他の制御
2層励磁や1-2層励磁は信号の出し方が変わるだけなので、詳しくは説明しません。サンプルプログラムは下の方につけていますので、参考にしてください。
3.2 ソースコード
プログラムの全文を掲載します。
1層励磁のプログラム (新しいウィンドウで開く)
1-2層励磁プログラム (新しいウィンドウで開く)
1-2層励磁プログラム (新しいウィンドウで開く)
<注意>
ファイル名は必要に応じて変更し利用してください。
本サイトの注意事項を確認してください。
ソースコードや回路図などを使用する場合、上記注意とともに、自己責任でお願いします。
4.動作確認
1層励磁と1-2層励磁の動作を比較した動画です。また途中に脱調している動作動画も入っています。
<更新履歴>
日付 | 内容 |
2016年6月28日 | 新規作成 |