google-site-verification: google3bd66dd162ef54c7.html

Arduinoでステッピングモーターをマイクロステップ駆動

 HDDの部品でポタ赤を作れないか検討するために、ステッピングモーターの駆動実験をやっています。前回の記事では1-2相駆動までやりましたが、今回はマイクロステップ駆動をやってみます。マイクロステップ駆動にするとモーターの位置を細かく指定できるようになるので、赤道儀をスムーズに回転させることが出来るはずです。

▼実験に使ったステッピングモーター
DVDのシークモーター
 前の記事のと同じ物です。こんなふうにフレキのパッドから線を引き出しています。なお、接続の回路図は前回の記事と同じです。

◆マイクロステップ励磁の電流波形
マイクロステップドライブ
 この励磁パターンは、ステッピングモーターをPWMでマイクロステップ駆動の記事を参考にさせて頂きました。励磁方法が違いますがとても参考になりました。ありがとうございます。


/* ステッピングモーターのドライブテスト、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 long pos = 0x80000000; // 回転位置記録用変数
unsigned int micro = 16; // マイクロステップ変化量(256に対する値を指定)
// 256/micro = マイクロスッテップ分割数
int t = 2; // パルスレート設定 単位:ms

void setup() {
// Serial.begin(9600);
pinMode(coilAp, OUTPUT);
pinMode(coilAn, OUTPUT);
pinMode(coilBp, OUTPUT);
pinMode(coilBn, OUTPUT);
}

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

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

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

void microStep(unsigned long p) { // マイクロステップでモーター駆動
unsigned int pwm;
unsigned int phase;
pwm = p & 0xFF; // 下位8ビットはPWMの値(micro step量)
phase = (p >> 8) & 0x07; // ビットの8,9,10で位相

switch (phase) {
case 0:
analogWrite(coilAp, 255);
analogWrite(coilAn, 0);
analogWrite(coilBp, pwm);
analogWrite(coilBn, 0);
break;

case 1:
analogWrite(coilAp, 255 - pwm);
analogWrite(coilAn, 0);
analogWrite(coilBp, 255);
analogWrite(coilBn, 0);
break;

case 2:
analogWrite(coilAp, 0);
analogWrite(coilAn, pwm);
analogWrite(coilBp, 255);
analogWrite(coilBn, 0);
break;

case 3:
analogWrite(coilAp, 0);
analogWrite(coilAn, 255);
analogWrite(coilBp, 255 - pwm);
analogWrite(coilBn, 0);
break;

case 4:
analogWrite(coilAp, 0);
analogWrite(coilAn, 255);
analogWrite(coilBp, 0);
analogWrite(coilBn, pwm);
break;

case 5:
analogWrite(coilAp, 0);
analogWrite(coilAn, 255 - pwm);
analogWrite(coilBp, 0);
analogWrite(coilBn, 255);
break;

case 6:
analogWrite(coilAp, pwm);
analogWrite(coilAn, 0);
analogWrite(coilBp, 0);
analogWrite(coilBn, 255);
break;

case 7:
analogWrite(coilAp, 255);
analogWrite(coilAn, 0);
analogWrite(coilBp, 0);
analogWrite(coilBn, 255 - pwm);
break;

default:
;
}
delay(t);
}

 プログラムの構造は前回の記事とほとんど同じで、cwかccwへ1ステップ回転させる関数 cwP(), ccwP()でモーターを回転させています。モーターの位置は32ビット変数のposに記録し、下位8ビットをpwmの値にしています。このプログラムでは1/16マイクロステップにしています(12行目、変数 microの値で指定 16/256 = 16)が、1/256まで指定できるのでいろいろ試すと良いと思います

 動かしてみると確かに1-2層励磁よりスムーズに回転するようになりました。

 ただ以下の二点が気になります。
1.PWMの周波数(490Hz)でモーターから音が出る。
 これはPWMの周波数を31kHzとかに変更すれば解決出来るはずです。

2.軸の回転速度にムラがある感じがする。
 この現象は以下のように考えました。
 軸に摩擦が無ければ問題ありませんが、実際の軸には摩擦があります。マイクロドライブで磁界の向きを徐々に変化させて回転力を与えても、軸の静止摩擦を越える力にならないと軸は回転しません。ということで、軸はぎこちなく回転するのだと思います。

 それともうひとつ原因がありそうです。というのは、励磁パターンを見ると1相だけ励磁している時と2相とも励磁している時があります。こうなると引き込みトルクにムラが出るので回転ムラが発生しそうです。

 こんな問題はもっと強力な駆動回路を使えば改善出来そうな気がします。また、励磁波形を位相が90度ずれた正弦波にしてやることも、解決策になりそうです。ただこの場合、励磁電流の平均値が下がるのでトルクの点では不利になりそうです。

◆まとめ
 Arduinoのポートから直接ステッピングモーターを廻した結果をレポしました。大きな力は出ませんが、用途によってはこのままで使えそうです。
 また、これはステッピングモーターの原理を学ぶ教材として使っても面白いと思います。加減速ルーチンを作り、高速回転させた後でピタリと指定位置で止まるプログラムを作ると楽しそうです。

 で本題に戻って、ポタ赤作りの話ですが、

 CPUのポートで直接駆動したのではやはりトルク不足でした。ということで、ステッピングモーター駆動用のドライバICを使ってこの先の検討を進めることにします。ドライバICには倒立振子を作った時に使ったL298Nが使えるはずです。
関連記事

コメントの投稿

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

マイクロステップドライブ

マイクロステップドライブですか。懐かしいですね。その昔、XYステージの制御にパルスモーターをラック&ピニオンで駆動。とんでもない騒音でした。パルスモータは、見ようによっては、ハンマーで叩いているような動作ですからね。当時、モジュールタイプで、マイクロステップドライバが販売されていました。それまで、ガタガタガタと鳴っていたのがシュルシュルルと。まあ、大変身。そのモジュールを分解。心臓部は、ROMでした。ROMに正弦波が書き込まれていて、それを読み出しながらDAで出力。DDSのはしりですね。このような、あまり表に出来こない技術を詳らかに記述されている事は素晴らしいことだと思います。

re:マイクロステップドライブ

bachさん、こんにちは。

私も昔XYテーブル使った物をいろいろ作ったり使ったりしていました。

コンピューター制御出来るこういうコントローラーはものすごく高かったと思いますが、今では個人のお小遣い程度で買えるようになっちゃいました。いい時代になったものです。
カレンダー
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コード