3.5 とりあえず使ってみる(ステッピングモータ)

使用した

ステッピングモータ秋月電子 P-4241http://akizukidenshi.com/catalog/g/gP-04241/
ドライバIC秋月電子 I-2030http://akizukidenshi.com/catalog/g/gI-02030/

ステッピングモータを動かすには、何通りかのパルスの与え方があるが、ここでは、以下の方法で考える。

Step12341234
A端子11001100
NotA端子00110011
B端子01100110
NotB端子10011001

A Common および B CommonはPullUP

回路図(ステッピングモータドライバ)
/media/uploads/yueee_yt/_scaled_steping_driver.png
JP1は操作用電源(mbedのVOUT(3.3V端子)とGND)
JP2は操作用信号線(mbedのp19とp20)
JP3はステッピングモータ用の電源(今回は9Vアダプタ)
SV1はステッピングモータを接続する。

1.とにかく回す

ステッピングモータとの接続確認のためにとにかく回します。
プログラムはここ/users/yueee_yt/programs/SteppingMotor1/ltr8h6

#include "mbed.h"

DigitalOut myled(LED1);
DigitalOut step_a(p19);
DigitalOut step_b(p20);

Ticker timer1;

void add_step(void) {
    static int mode=0;
    switch (mode) {
        case 0 :
            step_b=0;
            step_a=1;
            mode=1;
            break;
        case 1 :
            step_a=1;
            step_b=1;
            mode=2;
            break;
        case 2:
            step_a=0;
            step_b=1;
            mode=3;
            break;
        case 3:
            step_a=0;
            step_b=0;
            mode=0;
            break;
    }
    myled=!myled;
}

int main() {
    timer1.attach(&add_step, 0.01);
    while (1);
}

タイマーを使って定期的にadd_stepを呼び出すことにより、モータ回します。
add_stepはmodeをスタティック変数で保存することで次のステップを動かします
もちろんmain関数内のtimer1.attach(&add_step, 0.01);の0.01を小さくすれば早く、大きくすれば遅くなります。
ただし、あまり早くすると、モータが付いて行けず回らなくなります。
電圧を高くすることで速く回せますが、その分電力が必要になりますので、かなり熱くなります
制止時の省エネ設定とかドライバーの機能を使ったりしましょう。(この回路では使用できなくなっています)

2.角度を指定して回す

角度を指定して回す方法をしてみましょう。
このステッピングモータはちょうど、1パルス1度なので、パルス数を回転角度が一致する。
プログラムはここ/users/yueee_yt/programs/SteppingMotor2/lts75o

#include "mbed.h"

DigitalOut myled(LED1);
DigitalOut step_a(p19);
DigitalOut step_b(p20);

Ticker timer1;

int mode=0;

void step(int x) {
    int i;
    for (i=0;i<x;i++) {
        switch (mode) {
            case 0 :
                step_a=1;
                step_b=0;
                mode=1;
                break;
            case 1 :
                step_a=1;
                step_b=1;
                mode=2;
                break;
            case 2:
                step_a=0;
                step_b=1;
                mode=3;
                break;
            case 3:
                step_a=0;
                step_b=0;
                mode=0;
                break;
        }
        myled=!myled;
        wait(0.01f);
    }
}

int main() {
    int i;
    for (i=0;i<12;i++) {
        step(30);
        wait(0.5f);
    }
}

ポイントは、現在のステッピングモータのステップNoを記憶させておくことです。 でなければ、少しずつずれてきます。
ちなみにこれでは逆方向に回りません。


Please log in to post comments.