PR

第7回 Raspberry PiでXYテーブル制御|リミットスイッチと原点復帰(Homing)の実装(XYテーブル製作シリーズ)

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

はじめに

前回の記事では、Pythonの threading を使って
X軸とY軸を同時に動かす方法 を解説しました。
これにより
・X軸
・Y軸
・XY同時制御
を同時に動かすXY制御の基本が完成しました。

しかし、この状態ではまだ実用的な装置とは言えません。

それは「現在位置が分からず、安全制御がないこと」です。

多くの工作機械では、電源投入後に

原点復帰(Homing)

という動作を行います。

そこで今回は「XYテーブルの原点復帰機能」を実装します。

スポンサーリンク

今回のゴール

今回のプログラムでは以下を実装します。

  • リミットスイッチ検出
  • 原点方向へ移動
  • 原点検出
  • バックオフ
  • 原点位置確定

これにより「電源ON → 原点復帰 → 動作開始」という実用的な制御になります。

スポンサーリンク

リミットスイッチとは

リミットスイッチは「機械の端(移動限界)をスイッチが押される事で検出するセンサー」です。
XYテーブルでは通常

X軸の端
Y軸の端

に設置します
本サイトではX軸Y軸に1個づつ配置することを想定しています。
使用するリミットスイッチは
オムロン製:D2JW-01K1A1」です

今回の配線

今回は以下のGPIOを使用します。

X軸 X_LIMIT = 4
Y軸 Y_LIMIT = 14

リミットスイッチは「NC(ノーマルクローズ)」で接続します

スポンサーリンク

Pythonで原点復帰を行う

まず、原点復帰を開始する関数を作ります。

# -----------------------------------------------------
# 原点復帰処理
# -----------------------------------------------------
def start_homing(): threading.Thread(
target=homing_axis,
args=("X軸", X_STEP, X_DIR, X_EN, X_LIMIT,
X_MS1,X_MS2,X_MS3,X_RESET,X_SLEEP),
daemon=True
).start()

threading.Thread(
target=homing_axis,
args=("Y軸", Y_STEP, Y_DIR, Y_EN, Y_LIMIT,
Y_MS1,Y_MS2,Y_MS3,Y_RESET,Y_SLEEP),
daemon=True
).start()

この関数では

X軸
Y軸

それぞれの原点復帰を別スレッドで実行しています。

そのため
「XY軸が同時に原点復帰」
する仕組みになります

原点復帰処理

次に、実際の原点探索処理です。

def homing_axis(axis_name, STEP, DIR, EN, limit_pin,
MS1,MS2,MS3,RESET,SLEEP):

まず、A4988ドライバを初期化します。

gpio_init_axis(STEP,DIR,EN,MS1,MS2,MS3,RESET,SLEEP)

これにより

ENABLE
マイクロステップ
SLEEP
RESET

などの設定が行われます。

原点方向の設定

次に、原点方向を設定します。

if axis_name == "X軸":
homing_dir = GPIO.HIGH
backoff_dir = GPIO.LOW
else:
homing_dir = GPIO.LOW
backoff_dir = GPIO.HIGH

XYテーブルでは

X軸 → 左方向
Y軸 → 下方向

のように、軸ごとに原点方向が異なることがあります。

そのため

軸ごとに方向を設定

しています。

原点探索

次に、リミットスイッチが押されるまで移動します。

while GPIO.input(limit_pin) == GPIO.LOW:

GPIO.output(STEP,GPIO.HIGH)
time.sleep(0.001)

GPIO.output(STEP,GPIO.LOW)
time.sleep(0.001)

この処理で

スイッチON

になるまでモーターを動かします。

スポンサーリンク

バックオフ処理

リミットスイッチを押した状態のままだと
次の動作ができなくなります。

そこで

少しだけ逆方向へ戻します。

GPIO.output(DIR,backoff_dir)for _ in range(BACKOFF_STEPS):    GPIO.output(STEP,GPIO.HIGH)
time.sleep(0.001) GPIO.output(STEP,GPIO.LOW)
time.sleep(0.001)

この処理を

バックオフ(Backoff)

と呼びます。

原点位置の確定

最後に、現在位置を

0mm

として設定します。

current_pos[axis_name]=0.0

これにより

現在位置管理

が可能になります。


スポンサーリンク

Pythonフルコードをダウンロード

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

XY_safe_move.py をダウンロード(ZIP)
スポンサーリンク

実行時の動作

プログラムを起動すると

X軸 原点復帰
Y軸 原点復帰

が実行されます。

その後

XY移動

が可能になります。

スポンサーリンク

動作動画

スポンサーリンク

今回のポイント

今回の重要ポイントは次の3つです。

リミットスイッチ
原点復帰(Homing)
バックオフ

この機能により

工作機械の基本制御

が完成します。

スポンサーリンク

次回予告

次回は「XYテーブル GUI操作」を実装します

Pythonの「tkinter」を使い

  • 移動量入力
  • XY同時制御
  • 緊急停止

などを実装します。

これにより「WINDOW(アプリ)から操作できるXYテーブル」が完成します。

スポンサーリンク

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

コメント