TAKUMUS / BLOG
ステッピングモーター制御ライブラリを作りたい(その4)「28BYJ-48とDVDのモーターをArduinoで回す。」
その1はこちらです。
ライブラリがどうにか形になりました。ライブラリのテスト用に注文した28BYJ-48と、DVDのレーザー移動用ステッピングモーターを使います。ということで、ライブラリの説明より前にステッピングモーターをコントロールする回路の説明から入ります。今回は複雑にしないためにも制作中のライブラリは使わないで行います。
ここでは細かい説明はしないので「114.ステッピングモータを動かす」こちらのページが参考になると思うので、ぜひ読んでみてください。
28BYJ-48を回す
28BYJ-48のモジュールのIN1 IN2 IN3 IN4をそれぞれ9 10 11 12に割り当てました。このモーターは5端子のユニポーラ型なので、モジュールと言ってもただのトランジスタの集合です。ユニポーラは回路が単純なので扱いやすいですね!
ソース
#include <Arduino.h>
const int IN1 = 9;
const int IN2 = 10;
const int IN3 = 11;
const int IN4 = 12;
int d_hs[8] = {
B1000,
B1100,
B0100,
B0110,
B0010,
B0011,
B0001,
B1001
};
int i = 0;
void step(int d);
void setup()
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop()
{
step(1);
delayMicroseconds(900);
}
void step(int d)
{
i += d;
if(i > 7) i = 0;
if(i < 0) i = 7;
byte b = d_hs[i];
digitalWrite(IN1, bitRead(b, 0));
digitalWrite(IN2, bitRead(b, 1));
digitalWrite(IN3, bitRead(b, 2));
digitalWrite(IN4, bitRead(b, 3));
}今回は1-2相励磁で回しているので、1-2相励磁で刻むように上に配列を定義しています。回転はstep関数で行っています。stepの引数には方向を示すint dを与えます。1か-1です。
stepごとに挟んでいるdelayMicrosecondsですが、ここでは900にしています。このモーターは900位が限界っぽいです。
動画
DVD用ステッピングモーターを回す


DVD用ステッピングモーターはバイポーラ型なので、28BYJ-48に比べて回路が面倒です。今回ステッピングモーター用のICを持っていなかったので困りました。ただ、Hブリッジが二つあれば良いので探していたら家にありました。TA7291Pです。正転反転できるタイプのモータードライバでPWMで速度も変えられます。が、今回はこれをただのHブリッジとして使います。
こんな感じの回路になりました。多分TA7291Pを二つも使ってステッピングモーターを回すという、もったいないことをしたのは僕くらいだと思います!
回路を裏から見た図です。少し灰色の線は表側を通しているという意味です。また、TA7291Pの向きですが、左上が少し欠けているのでそれが目印です。
そこそこ適当な回路ですが動作確認は取れました。図の左側が入力、右側が出力です。左側の+1 +2 -ですが、モーターを外部電力で回す場合は+1には外部を入れ、+2にはArduinoを入れます。GNDはどちらも-へつなぎます。入力のA1 A2 B1 B2ですが、ArduinoへはA1 B1 A2 B2の順番で9 10 11 12へ繋ぎました。
今回のような小さなモーター(大きさで判断するのは良くない)は大したことなさそうだったので、+1 +2を一緒にして両方ともArduinoに繋ぎましたが問題なく動作しました。
ソース
28BYJ-48と同様ですがこっちのモーターは低速回転なので、delayMicromecondsが900だと完全に脱調しました。最低でも2000が安定するようです。
動画
次回
次回は制作中のライブラリを実際に使ってみます。
その5はこちらです。
No comments yet