Micro Python でステッピングモーター28BYJ-48をライブラリーを使わずに動かしてみました。
その手順を分かりやすく解説したいと思います。
仕組み や 動作原理は他のサイトに詳しく載っておりますのでそちらを参照していただき、今回は プログラム(制御方法)を中心に解説していきます。
準備するもの
- 28BYJ-48 ステッピングモータ 今回アマゾンでドライバーIC込み2個699円で購入
- ラズベリーパイピコ 今回はこちらで試しました
- ブレッドボード
接続図
今回の28BYJ-48は、電圧5V、ギア比64:1 PM型/ユニポーラ型(単極性)です。
ステッピングモーターは ラズベリーパイ ピコ あるいはシャオの GPIOをピンと直接つなぐことはできませんので、 間に モータードライバーを入れて外部電源(5V)で制御します。



プログラム
ユニポーラ型ステッピングモーターを動かすには3種類の方法があります。
1相励磁、2相励磁、1-2相励磁 電極に電流を流す順番の違いで、でそれぞれ長所欠点があります。
ユニポーラ1相励磁
Step | IN1 | IN2 | INT3 | INT4 |
---|---|---|---|---|
1 | 1 | 0 | 0 | 0 |
2 | 0 | 1 | 0 | 0 |
3 | 0 | 0 | 1 | 0 |
4 | 0 | 0 | 0 | 1 |
ユニポーラ2相励磁
Step | IN1 | IN2 | INT3 | INT4 |
---|---|---|---|---|
1 | 1 | 0 | 0 | 1 |
2 | 1 | 1 | 0 | 0 |
3 | 0 | 1 | 1 | 0 |
4 | 0 | 0 | 1 | 1 |
ユニポーラ1-2相励磁
Step | IN1 | IN2 | INT3 | INT4 |
---|---|---|---|---|
1 | 1 | 0 | 0 | 1 | 2 | 1 | 0 | 0 | 0 |
3 | 1 | 1 | 0 | 0 |
4 | 0 | 1 | 0 | 0 |
5 | 0 | 1 | 1 | 0 |
6 | 0 | 0 | 1 | 0 |
7 | 0 | 0 | 1 | 1 |
8 | 0 | 0 | 0 | 1 |
1相励磁 消費電力は低いがトルクが低く実用的でない。
2相励磁 トルクも大きく安定してる、しかし消費電量が大きい。
1-2相励磁 回転角度が前の2つの方式より回転角度が半分になるが、安定していて、これがよく使われるようです。
1パルス(ステップ)駆動角度 1相、2相励磁:モーター単体 11.25°
1パルス(ステップ)駆動角度 1-2相励磁:モーター単体 5.625°
プログラムしてみました。
from machine import Pin
import utime
IN1 = Pin(2, Pin.OUT)
IN2 = Pin(3, Pin.OUT)
IN3 = Pin(4, Pin.OUT)
IN4 = Pin(5, Pin.OUT)
pins = [IN1,IN2,IN3,IN4]
setup = [0,0,0,0]
step1 =[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
step1_reverse =[[0,0,0,1],[0,0,1,0],[0,1,0,0],[1,0,0,0]]
wait_ms = 2
step2 = [[1,0,0,1],[1,1,0,0],[0,1,1,0],[0,0,1,1]]
step3 = [[1,0,0,1],[1,0,0,0],[1,1,0,0],[0,1,0,0],[0,1,1,0],[0,0,1,0],[0,0,1,1],[0,0,0,1]]
for i in range(4):
pins[i].value(setup[i])
utime.sleep_ms(wait_ms)
while True:
for step in reversed(step3):
for i in range(4):
pins[i].value(step[i])
utime.sleep_ms(wait_ms)
簡単にプログラムの説明をします 。
励磁設定は二次元の配列で作りました、step1は1相励磁、step2は2相励磁、step3は1-2相励磁になり、for 文でどのstep配列を選ぶかによって励磁方法が変わります。
for step in step1_reverse:で反転します
for step in reversed(step1):でも同じです
for i in range(4):
pins[i].value(setup[i])
これはプログラムを止めて再起動したとき、初期化して動かすためで、初期化しないと動きが不安定になりました。
ユニポーラ1-2相励磁ではwait_msが1でも動きました、それ以外は2以上でした。
このプログラムは1-2相励磁のリバース回転ですが、いろいろ変えて試してください。
またモーターの回転を停止させた時、今回のプログラムには設定されていませんが、全て出力を0にしないとモーターに電流が流れ続けます。
下の動画が動いてる様子です。
ライブラリーを使わなくてもステッピングモータモーを動かすことができました。