PR

ステッピングモーターをmm単位で制御!ベルト駆動の計算式とPython実装を解説(自作CNC #3)

スポンサーリンク
RaspberryPi
スポンサーリンク

はじめに

本シリーズでは、PythonとRaspberry Piで制御する「自作XYテーブル」の製作を解説しています。前回はモーターを回すことに成功しましたが、今回はそれを「装置」へと進化させる重要な回です。

「10mm動かしたい」と思った時、プログラムに何を書き込めば良いのか? タイミングベルトやプーリーの仕様から移動量を割り出す計算式と、そのPython実装を詳しく見ていきましょう。

スポンサーリンク

使用構成(おさらい)

ベルト駆動を想定

今回は将来のXYテーブル構成をもとに、下記アイテムの使用を想定してプログラムを組みます
今回の記事では実装はしませんが、距離でモーターを動作させる際は、ハードウェアの情報(数値)をプログラム上で必要となる為です。

タイミングベルト:タイプ2GT ・・・型番GBN7262GT-60(misumi)
歯付プーリー:32歯

スポンサーリンク

【重要】mm単位で動かすための計算式

ステッピングモーターを「10mm動かす」という命令に変えるには、以下のステップで計算します。

お手元のプーリーの歯数を確認しながら計算してみましょう。

STEP1:1回転で何mm進むか?(進み量の計算)

ベルト駆動の場合、モーターが1回転した時の移動距離は以下の式で決まります。

1回転の移動距離 = ベルトピッチ × プーリーの歯数

【例】GT2ベルト(2mmピッチ)で「20歯」のプーリーを使う場合:

2.0mm × 20歯 = 40mm

👉 モーターが1回転すると、軸は40mm移動します。

STEP2:1mm動かすのに何ステップ必要か?(ステップ密度の計算)

次に、1mmあたりのステップ数(Step/mm)を求めます。これがプログラムで最も使う数値です。

1mmあたりのステップ数 = モーターの1回転ステップ数(200) ÷ 1回転の移動距離

【計算例】先ほどの40mm進む設定の場合:

200ステップ ÷ 40mm = 5ステップ/mm

👉 **「1mm動かすには5ステップ送ればいい」**ということが分かりました!
※マイクロステップ設定を使用している場合は、200の部分をその倍数に書き換えてください

STEP3:移動量(mm)をステップ数に変換する

実際のプログラムでは、この数値を掛け算するだけでOKです。

動かしたい距離 (mm)計算式必要なステップ数
10mm10 × 550ステップ
50mm50 × 5250ステップ
100mm100 × 5500ステップ
スポンサーリンク

ハードウェア結線図(A4988 + Raspberry Pi)

結線は第2回のおさらいです。(そのまま)
画像の一部は raspberrypi.zyx さんより引用させて頂きました。

プログラムの前にVref調整は済んでいますか?
焼損のリスクがあるので必ず実施しましょう。
調整方法の詳細はこちらをクリック

スポンサーリンク

Pythonでプログラミング(距離指定対応版)

stepper_mm.py を作成します。

nano stepper_mm.py

import RPi.GPIO as GPIO
import time

# ===== 機構設定 =====
BELT_PITCH = 2.0 #2GTタイミングベルトによる固定値
PULLEY_TEETH = 32 #32歯プーリーによる固定値
STEPS_PER_REV = 200

MM_PER_REV = BELT_PITCH * PULLEY_TEETH
MM_PER_STEP = MM_PER_REV / STEPS_PER_REV

# ===== PIN設定 =====
X_STEP = 21
X_DIR = 20
X_EN = 16
X_MS1 = 17
X_MS2 = 27
X_MS3 = 22
X_RESET = 5
X_SLEEP = 6

GPIO.setmode(GPIO.BCM)

for pin in [X_STEP, X_DIR, X_EN, X_RESET, X_SLEEP]:
GPIO.setup(pin, GPIO.OUT)

GPIO.output(X_EN, GPIO.LOW)
GPIO.output(X_RESET, GPIO.HIGH)
GPIO.output(X_SLEEP, GPIO.HIGH)
GPIO.output(X_MS1, GPIO.LOW)
GPIO.output(X_MS2, GPIO.LOW)
GPIO.output(X_MS3, GPIO.LOW)

def move_mm(distance_mm, direction, delay=0.01): # delayの値で速度調整 値が大きいと遅くなる
steps = int(distance_mm / MM_PER_STEP)
GPIO.output(X_DIR, direction)

for _ in range(steps):
GPIO.output(X_STEP, GPIO.HIGH)
time.sleep(delay)
GPIO.output(X_STEP, GPIO.LOW)
time.sleep(delay)

try:
print("20mm 正転")
move_mm(20, GPIO.LOW) # 20=移動量(mm) GPIO.LOW=正転
time.sleep(1)

print("10mm 逆転") # 10=移動量(mm) GPIO.HIGH=逆転
move_mm(10, GPIO.HIGH)

finally:
GPIO.cleanup()

この記事で使用したコードはこちらからダウンロードできます。

stepper_mm.pyをダウンロード(ZIP)

実行

python3 stepper_mm.py

10mm動けば成功です。

スポンサーリンク

ここが超重要ポイント

今回やったことは:

✔ 回転制御 → 距離制御へ進化
✔ 機構設計とプログラムを連動
✔ 実用装置の基礎完成

これは“工作”から“装置設計”へのレベルアップです。

スポンサーリンク

次回予告

次回はさらに進化します。

✔ 【第4回】XYテーブル化の第一歩|X軸とY軸を2台動かす(XYテーブル製作シリーズ)

いよいよ本格的な制御設計に入ります。

スポンサーリンク

XYテーブル製作シリーズはこちらから

コメント