google-site-verification: google3bd66dd162ef54c7.html

ステッピングモーターをArduinoで動かす実験

 HDDの部品でポタ赤を作る話を具体化させるには、追尾用のステッピングモーターをきちんと動かす必要があります。で、ここはできるだけPCの部品を流用して作りたいので、DVDのヘッドシーク用のスッテッピングモーターを使いたいと思います。

▼DVDのシーク用モーター
DVDのヘッドシーク用スッテッピングモーター
 とても小さいですが、ステッピングモーターです。端子が4つ出ているので、バイポーラ駆動で動かすことになります。モーターとネジが一体化されているので、構造が簡単になるというメリットがあります。

 ただ、ネジのピッチが3mmと大きいので駆動ステップが粗くなってしまうのが問題です。また、調べてみるとこのモーターは20パルスで一回転するタイプで、できるだけ細かい送りが必要になる赤道儀では不利です。ちなみに、よく見かけるステッピングモーターは一回転が200パルスというのが多いです。それに小さいので必要なトルクが出るか怪しいです。

 ということで心配だらけです。でも、他の手持ちのスッテッピングモーターはサイズが大きいので、固定方法などをかなり工夫しないといけません。それに、HDDのフレームから大きくはみ出してしまうので、コンパクトに仕上げることは難しくなります。

 ということで、とりあえずこのモーターを動かしてみることにします。

 制御にはArduinoを使います。普通はモータードライブ用のICを使いますが、ArduinoのI/Oドライブ能力は比較的大きいのでポート直結で動かしてみることにしました。

▼Arduinoでスッテッピングモーターを駆動する回路
Arduinoへスッテッピングモータを接続
 ポート間にモーターのコイルを接続することでバイポーラ駆動を行っています。出力ポートはトーテムポールになっているので、二つ使うことで非力ですがフルブリッジのドライバとして使います。 

 このモーターの仕様は正確には判りませんが、コイル抵抗は30Ωです。たぶん5Vくらいの電圧をかけて0.15Aくらいの電流を流して使うのだと思います。もちろんArduinoの出力ポートはそんな大きな電流は流せません。でも、無負荷のモーターの軸を廻すくらいなら出来たので、この回路のようにポート直結でいくことにします。I/Oピンのアサインが素直になっていないのは、最終的にはPWMを使ったマイクロステップドライブを試すためです。

 最終的にはちゃんとしたパワードライブ回路を入れる予定ですが、Arduinoで簡単にステッピングモーターを使ってみる事例として面白そうなので、まずはこの回路でいろいろ遊んでみることにします。

 なお、R1とR2はポートを傷めないようにするための抵抗です。またこういうふうにコイル(インダクタンス)をスイッチングする回路では、フライホイールダイオードが必要ですが、I/Oポートの保護用に入っている(はず)のダイオードで代用することにします。

▼ブレッドボードで実験
ブレッドボード

 ステッピングモーターの原理はあちこちに書かれているのでそちらを読んで頂くとして、上の回路で動かす場合の駆動パターンとスケッチを順に公開します。

 なお励磁パターンはいろいろあるので、以下のように試してみました。Arduinoはこういうことが簡単にテスト出来るので便利です。

 以下、励磁パターンとそれに対応したテストプログラムです。なお、最初の方に書いたように、このモーターはバイポーラ方式なので、それ用のプログラムになっています。

◆1相励磁
1相励磁
 このグラフはA相/B相へ流す電流の向きの変化を表わしたものです。
 1相励磁の動作テストスケッチ

◆2相励磁
2相励磁
 2相励磁のテストスケッチ

 2相励磁では二つのコイルに常に電流を流しているのでトルクが上がります。

◆1-2相励磁
1-2相励磁
 1-2相励磁では1サイクルに8ステップ必要になり、40パルスで一回転します。
 1-2相励磁のテストスケッチ

 せっかくなので、スケッチが見えるようにしておきます。

/* ステッピングモーターのドライブテスト、1-2相励磁
* バイポーラ方式のモーターを駆動
* 2015/7/12 ラジオペンチ 
* http://radiopench.blog96.fc2.com/blog-entry-578.html
*/
#define coilAp 3 // coil A + へ接続
#define coilAn 9 // coil A -
#define coilBp 10 // coil B +
#define coilBn 11 // coil B -

unsigned int pos = 32000; // 回転位置記録用変数
int t = 125; // パルスレート設定 単位:ms

void setup() {
pinMode(coilAp, OUTPUT);
pinMode(coilAn, OUTPUT);
pinMode(coilBp, OUTPUT);
pinMode(coilBn, OUTPUT);
}

void loop() {
for(int i=0; i<40; i++){
cwP(); // CW方向へ1パルス
}
delay(500);
for(int i=0; i<40; i++){
ccwP(); // CCW方向へ1パルス
}
delay(500);
}

void cwP() { // CW方向へ1パルス
pos++;
PMdrive(pos);
}

void ccwP() { // CCW方向へ1パルス
pos--;
PMdrive(pos);
}

void PMdrive(unsigned int n) { // 指定状態にコイルを励磁
int phase;
phase = n % 8; // 位相を求め
switch (phase) { // 相当する状態に通電
case 0:
digitalWrite(coilAp, HIGH); // A+
digitalWrite(coilAn, LOW);
digitalWrite(coilBp, LOW);
digitalWrite(coilBn, LOW);
break;
case 1:
digitalWrite(coilAp, HIGH); // A+
digitalWrite(coilAn, LOW);
digitalWrite(coilBp, HIGH); // B+
digitalWrite(coilBn, LOW);
break;
case 2:
digitalWrite(coilAp, LOW);
digitalWrite(coilAn, LOW);
digitalWrite(coilBp, HIGH); // B+
digitalWrite(coilBn, LOW);
break;
case 3:
digitalWrite(coilAp, LOW);
digitalWrite(coilAn, HIGH); // A-
digitalWrite(coilBp, HIGH); // B+
digitalWrite(coilBn, LOW);
break;
case 4:
digitalWrite(coilAp, LOW);
digitalWrite(coilAn, HIGH); // A-
digitalWrite(coilBp, LOW);
digitalWrite(coilBn, LOW);
break;
case 5:
digitalWrite(coilAp, LOW);
digitalWrite(coilAn, HIGH); // A-
digitalWrite(coilBp, LOW);
digitalWrite(coilBn, HIGH); // B-
break;
case 6:
digitalWrite(coilAp, LOW);
digitalWrite(coilAn, LOW);
digitalWrite(coilBp, LOW);
digitalWrite(coilBn, HIGH); // B-
break;
case 7:
digitalWrite(coilAp, HIGH); // A+
digitalWrite(coilAn, LOW);
digitalWrite(coilBp, LOW);
digitalWrite(coilBn, HIGH); // B-
break;
}
delay(t); // 指定時間待つ
}
 CWとCCW方向へ1パルス進める関数を使ってモーターを廻しています。この関数をうまく使えばモーターの角度を自在に指定できるようになります。

 次はもっと高い分解能で動かせる、マイクロステップドライブをやりますが、長くなったので次の記事で紹介することにします。

 Arduinoでステッピングモーターを動かすためには、モーターシルドなどのインターフェイス回路が必要になります。でも、今回使ったような小さなモーターなら、Arduinoのポートから直接駆動することが可能です。もちろん大きな力は出ませんが、何か使い道がありそうです。
関連記事

コメントの投稿

管理者にだけ表示を許可する

カレンダー
04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード