nihsok が 2026年08月15日14時56分32秒 に編集
初版
タイトルの変更
ユニポーラモーターの励磁モード比較
タグの変更
ステッピングモーター
ユニポーラ
モーター
micropython
ESP32
HW-131
28BYJ-48
ULN2003
励磁
メイン画像の変更
記事種類の変更
セットアップや使用方法
ライセンスの変更
(MIT) The MIT License
本文の変更
ユニポーラステッピングモーターの励磁モードによる特性の違いを比較する。 # 用いたもの - ステッピングモーター 28BYJ-48 5V - モータードライバ ULN2003(の搭載されているボード) - コントローラーとして ESP32 ステッピングモーターとモータードライバはAmazonで4個セット805円 ## 配線 モーターから5本まとめて出ている線はそのままモータードライバボードへつなぐ。 適当な電源から電源を供給 ++ESP32 devkit の VIN (5V)からだと、LEDは光るがモーターは動かなかったので外部電源が必要。++ || ESP32 | モーターコントローラ | |:--:|:---:|:---:| |青| GPIO13 | IN1 | |黄| GPIO12 | IN2 | |緑| GPIO14 | IN3 | |赤| GPIO27 | IN4 | # 実行 https://burariweb.info/electronic-work/arduino-learning/arduino-stepping-motor-control.html を参考に、1相励磁、2相励磁、1-2相励磁を試す。 プログラムを横着した都合で逆回転になっている。 ## 1相励磁 ```python from machine import Pin import utime pins = (Pin(13,Pin.OUT,value=0), Pin(12,Pin.OUT,value=0), Pin(14,Pin.OUT,value=0), Pin(27,Pin.OUT,value=0)) wait = 100 #ms def phase_1(step): code = [False,False,False,True,False,False,False] for _ in range(step): for t in range(4): for i in range(4): if code[i+t]: pins[i].on() else: pins[i].off() utime.sleep_ms(wait) phase_1(1000) ```  ## 2相励磁 ```python from machine import Pin import utime pins = (Pin(13,Pin.OUT,value=0), Pin(12,Pin.OUT,value=0), Pin(14,Pin.OUT,value=0), Pin(27,Pin.OUT,value=0)) wait = 100 #ms def phase_2(step): code = [True,False,False,True,True,False,False] for _ in range(step): for t in range(4): for i in range(4): if code[i+t]: pins[i].on() else: pins[i].off() utime.sleep_ms(wait) phase_2(1000) ```  ## 1-2相励磁 ```python from machine import Pin import utime pins = (Pin(13,Pin.OUT,value=0), Pin(12,Pin.OUT,value=0), Pin(14,Pin.OUT,value=0), Pin(27,Pin.OUT,value=0)) wait = 2 #ms def phase_12(step): code1 = [False,False,False,True,False,False,False] code2 = [True,False,False,True,True,False,False] for _ in range(step): for t in range(4): for i in range(4): if code2[i+t]: pins[i].on() else: pins[i].off() utime.sleep_ms(wait) for i in range(4): if code1[i+t]: pins[i].on() else: pins[i].off() utime.sleep_ms(wait) phase_12(1000) ```  2回sleepを入れているので回転は遅くなっている。 # 感想 LEDで確認できるのはwait=50msくらいまで、それより短くするとLEDはほぼつけっぱなしになるが速度は上がる。1相励磁、2相励磁はwait=2msまで(wait=1msだと動かず)、1-2相励磁はwait=1msでも動いた(2段階なので角速度は同じ) wait=2msくらいになるとモーターから出る音も気になる