【ラズバイ】Raspberry Pi4でステッピングモータを回す②(バイポーラ式 : Quimat 17HS4401)
こんにちは。alohaです。
Raspberry Pi4でステッピングモータを回すテストの2回目として、バイポーラ式のモータを回してみます。
今回制御するモータは、3Dプリンタ等で使用されているQuimat Nema 17ステッピングモータで、型式は17HS4401です。
バイポーラ式ステッピングモータの回路図は下の図の通りになっており、
① Black -> Green ② Blue -> Red ③ Green -> Black ④ Red -> Blue
の順に電流を流すことによりモータが回転します。
電流を流す向きを変えながらモータに信号を入力する必要があるため、Raspberry Pi4のGPIOだけでモータを回す事は難しそうです。
そこで、今回はモータドライバとして、Quimat 4A TB6600を使ってモータを回します。
また、応用例として、1軸CNCルーターも回してみます。
それでは、早速作ってみましょう。
<必要部品(Raspberry Pi4以外に必要なもの)>
- バイポーラ式ステッピングモータ(Quimat 17HS4401) 1個
- モータドライバ(Quimat TB6600) 1個
- DCアダプタ(12V, 2A) 1個
- ブレッドボード(小) 1個
- ジャンパー線 数本
いずれも、Amazonから購入可能です。
<回路図>
BSch3Vで回路図を書くと下の図の様になります。
Amazonの商品紹介ページに載っている配線図の通りに配線しますが、Raspberry Pi4のGPIOから出力される電圧が3.3 [V]である点に注意が必要です。
TB6600の信号入力端子は、①ENA- / ENA+ ②DIR- / DIR+ ③PUL- / PUL+ の3組がありますが、いずれも2つの信号の差があるかどうかで制御の状態を切り替えています。
(例えば、DIR-とDIR+に入力される電圧が同じであればモータは正回転し、差があればモータは逆回転します)。
このため、ENA+, DIR+, PUL+は、Raspberry Pi4のGPIOの3.3 [V]に接続する必要があります。
回路図の通りに接続すると、下の写真の様になります(モータシャフトの回転が分かりやすい様に、3Dプリンタで作成した円盤をつけています)。
<TB6600の設定>
TB6600のDIPスイッチで、モータ1回転に必要なパルス数とモータに流す電流の上限値を設定します。
今回は、200パルスでモータ1回転するモードに設定します。また、17HS4401のデータシートを見ると、定格電流は1.7 [A]なのでDIPスイッチは以下の設定にします。
S1 = ON, S2 = ON, S3 = OFF, S4 = ON, S5 = ON, S5 = OFF
<動作プログラム>
動作プログラムは以下の通りです。
回転角度を指定した後、角度をパルス数に変換してGPIO端子からパルスを出力しています。
このプログラムでは、モータシャフトを時計回りに1回転、反時計回りに1回転させています。
シャフトの回転速度を変えるには、29行目の変数widを変えて出力されるパルスの幅を変更します。
#coding:utf-8 #GPIOライブラリをインポート import RPi.GPIO as GPIO #timeライブラリをインポート import time #ピン番号の割当方式を「コネクタのピン番号」に設定 GPIO.setmode(GPIO.BOARD) #使用するピン番号を代入 PUL=8 DIR=10 ENA=12 #8,10,12番ピンを出力ピンに設定し、初期出力をローレベルにする GPIO.setup(PUL,GPIO.OUT,initial=GPIO.LOW) GPIO.setup(DIR,GPIO.OUT,initial=GPIO.LOW) GPIO.setup(ENA,GPIO.OUT,initial=GPIO.LOW) #DIR=HIGHで時計回り、DIR=LOWで半時計回り。 #ENA=HIGHでトルク発生、ENA=LOWではトルクが発生しない。 DIR_ST = 1 ENA_ST = 1 #パルスの幅を指定。値を小さくする程高速で回転する。 wid = 0.005 #回転角度を指定 ang = 360 #減速比を設定 #1軸CNCルータの場合は4を設定 #モータ単体の場合は1を設定 ratio = 1 #回転角度をパルス数に換算 cnt = int(ratio*(ang / (360/200))) for i in range(0,2): for j in range(0,cnt): GPIO.output(ENA,ENA_ST) GPIO.output(DIR,DIR_ST) GPIO.output(PUL,0) time.sleep(wid) GPIO.output(PUL,1) time.sleep(wid) time.sleep(2.0) if(i % 2 == 0): DIR_ST = 0 else: DIR_ST = 1 #メッセージを表示 print("End of program") #GPIOを開放 GPIO.cleanup()
<応用例:1軸CNCルータを動かす>
Raspberry Pi4でバイポーラ式ステッピングモータを制御できるようになると、1軸CNCルータも動かせる様になります。1軸CNCルータとは写真の様な物で、ステッピングモータと円筒状の物をつかむチャックがセットになった物です。Amazonで偶然見つけて購入した物ですが、もともとは中国製の3軸CNCフライス盤に4軸目を追加する目的で作られた物の様です。
モータの回転軸とチャックの回転軸をベルトで繋ぎ、モータの駆動力を伝える構造になっています。ベルトで動力を伝える際にモータの回転角度が1/4に減速されるため、チャックを指定角度回転させるためには、プログラムの方でパルス数を4倍にする必要があります。
(プログラムの37行目で減速比を指定)
<まとめ>
今回は、Raspberry Pi4でバイポーラ式ステッピングモータを回すテストを行いました。応用例として1軸CNCルータの動作も確認しました。
ステッピングモータ等の3Dプリンタ用の部品もAmazonで簡単に購入できる様になっています。個人の物づくりもしやすくなっているので、どんどん活用していきたいですね。
それでは、また。