0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Raspberry Pi Picoでモータを動かす②(ユニポーラ2相,1-2相励磁)

Last updated at Posted at 2021-05-02

Raspberry Pi Picoでモータを動かす①(ユニポーラ1相励磁)でステッピングモータを1相励磁で動かしたが、1相励磁には以下の問題があり実はあまり使われない。

  • トルク小
  • 振動が発生しやすい

利点としては

  • 消費電力(発熱)小

ということが挙げられるのだが、ステッピングモータはそんなに電力シビアじゃない使い方が主なので…。
という訳で2相励磁と1-2相励磁の登場となる。

2相励磁

特徴

  • トルク大
  • 振動が発生しづらい
  • 消費電力大

分解能が要らんなら大体これ使ってればいいんじゃね?という制御方法
コード的には以下

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)
wait_ms = 2
while True:
    # CW
    IN1.value(1)
    IN2.value(0)
    IN3.value(0)
    IN4.value(1)
    utime.sleep_ms(wait_ms)
    IN1.value(1)
    IN2.value(1)
    IN3.value(0)
    IN4.value(0)
    utime.sleep_ms(wait_ms)
    IN1.value(0)
    IN2.value(1)
    IN3.value(1)
    IN4.value(0)
    utime.sleep_ms(wait_ms)
    IN1.value(0)
    IN2.value(0)
    IN3.value(1)
    IN4.value(1)
    utime.sleep_ms(wait_ms)

なお、1相励磁のときは前のモータ28BYJ-48を手で無理やり止めることができたが、2相励磁では素手ではかなり難しいレベルでトルクが上がる。
(モータ破損覚悟の行動のため、真似しないで下さい)

1-2相励磁

特徴

  • トルク中
  • 振動が2相励磁より発生しづらい
  • 消費電力中
  • ステップ角分解能が倍になる(ハーフステップ)

1相と2相を混ぜて挙動がなめらかになるようにした制御方法。
分解能の向上や、なめらかになる=脱調しづらくなるため回転速度の限界ギリギリを攻めるならコレ。
と言っても最近ではそのような場合マイクロステップ(1/16や1/256など)を使うのが主流になりつつあり影が薄い。
注意すべきなのは同じ速度を出そうとすると倍の処理が要るということ。マイコンに優しくない。

コードはこちら

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)
wait_ms = 1
while True:
    # CW
    IN1.value(1)
    IN2.value(0)
    IN3.value(0)
    IN4.value(1)
    utime.sleep_ms(wait_ms)
    IN1.value(1)
    IN2.value(0)
    IN3.value(0)
    IN4.value(0)
    utime.sleep_ms(wait_ms)
    IN1.value(1)
    IN2.value(1)
    IN3.value(0)
    IN4.value(0)
    utime.sleep_ms(wait_ms)
    IN1.value(0)
    IN2.value(1)
    IN3.value(0)
    IN4.value(0)
    utime.sleep_ms(wait_ms)
    IN1.value(0)
    IN2.value(1)
    IN3.value(1)
    IN4.value(0)
    utime.sleep_ms(wait_ms)
    IN1.value(0)
    IN2.value(0)
    IN3.value(1)
    IN4.value(0)
    utime.sleep_ms(wait_ms)
    IN1.value(0)
    IN2.value(0)
    IN3.value(1)
    IN4.value(1)
    utime.sleep_ms(wait_ms)
    IN1.value(0)
    IN2.value(0)
    IN3.value(0)
    IN4.value(1)
    utime.sleep_ms(wait_ms)

速度が半分になっているのでwait_ms=1としている。
トルクは無理やり手で止められるレベルに収まる。

とりあえずマイコン制御なら2相励磁にして、分解能や速度を求めるならば専用のドライバIC使うのが吉だと思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?