↓これが到着しまして、とりあえず動かしてみることにしました。

 

■モータ仕様確認

・モータはNEMA17 です。

 これまでにテストしたSteppingモータと概ね同仕様ですので、

 ↓モータドライバも同じにしました。

■モータドライバ

 

■制御CPU

以前の↓記事

ラズパイ3B+Python3で動作させていましたが、

今回はCPUをRaspberryPi_PICO_Wを使い、Micropythonで動作させました。

 

■配線状況

左からRPPWH、TB6600 、リニアスライドです。

リニアスライドの左にフォトインタラプタを4個並べて

両端検知と動作検知に使う予定ですが、今回は使っていません。

RPPWHの下側にもう一つRPPWHがありますが、

これは将来用で今回は使っていません。

 

↑RPPWHまわり

・RPPWHへの給電:PCと繋いだUSB

・ロック付き押しボタンSW4点、左から順に・・・

 ena設定用:GP18、押すとenaがONになり、モータを廻せる。

 回転方向設定用;GP19、ON/OFFで回転方向が逆になる。

 両端検知1用(GP20、接続していますが今回は使っていません)

 両端検知2用(GP21、接続していますが今回は使っていません)

・TB6600との接続は上述の記事と同じです。

 pulseの「-」:GP02に接続

 dirの「-」:GP03に接続

 enaの「-」:GP04に接続

 TB6600のSignalの+はRPPWHの3V3に接続

 

■動作結果

良好に動作しました。

まるでNCマシンのようなボールねじユニットのウィーーンという動作音でした。

実際にはTB6600のディップスイッチを間違って設定していて、
適正な動作になるまで少し時間ロスしました。

1回転あたりのパルス数とパルス周波数が低いとゴゴゴ〜と振動が大きいですが、
1600pulse/rot、周波数1kHz程度まで上げると一気に動作が滑らかになりました。

 

■動作確認用プログラム

 

# 単独でも動きますが、Thonnyで起動停止とパラメータ確認すること

# test_linear_slide,py
#■制御プログラム(リニアスライドユニット用)
# Linear Sliding length 100mm
# Stepping moter : 2pahse-bipoler NEMA17
# Stepping moter driver : TB6600
# CPU : RaspberryPi PICO-W
# Edit by kabayon date:20241220
# Coding : utf-8

# ライブラリ:micropythonの標準ライブラリのみ
from time import sleep
import time
from machine import Pin , PWM

# set standerd value of signal
signal_high = 1
signal_low  = 0

# set GPIO Pin-number
GP00 =   0
GP01 =   1
GP02 =   2
GP03 =   3
GP04 =   4
GP05 =   5
GP18 = 18
GP19 = 19
GP20 = 20
GP21 = 21
 
# 動作端検出用フォトインタラプタのオブジェクト設定
sw_ena = Pin(GP18, Pin.IN, Pin.PULL_UP)
sw_direction = Pin(GP19, Pin.IN, Pin.PULL_UP)
ls01 = machine.Pin(GP20, Pin.IN, Pin.PULL_UP)
ls02 = machine.Pin(GP21, Pin.IN, Pin.PULL_UP)

# Stepping motor driverへ信号出力するピンのオブジェクト設定
pin_pulse      = Pin(GP02, Pin.OUT)
pin_direction = Pin(GP03, Pin.OUT)
pin_ena         = Pin(GP04, Pin.OUT)

# ■TB6600ドライバ信号初期値
# DIR = HIGHで正転、DIR = LOWで逆転。
# status_direction = signal_high
# ENA = HIGHでトルク発生、ENA = LOWでトルクフリー
# status_ena = signal_high

# ■基本動作パラメータ設定
# ボールねじピッチ長さ(mm単位)
length_lead = 4
# 減速比を設定。モータ単体ならば1
ratio_gear = 1
# 1mm移動時のモータ主軸の総回転数設定
length_drive_1mm = 1
num_rotate_1mm = ratio_gear * length_drive_1mm / length_lead
# 1mm移動時のパルス数
num_pulse_1rotation = 1600
num_pulse_1mm = int( num_rotate_1mm * num_pulse_1rotation )
 
# パルス幅を秒単位で指定。値を小さくする程高速で回転する。
width_pulse = 0.0005

# ■動作繰り返し

while True:
    status_sw_ena = sw_ena.value()
    status_sw_direction = sw_direction.value()
    status_ls01 = ls01.value()
    status_ls02 = ls02.value()
    print("ena:",status_sw_ena,"dir:",status_sw_direction,"ls01:",status_ls01,"ls02:",status_ls02)
    time.sleep(1)
    # 移動長さ
    length_drive = 50
    # 移動パルス数
    count_pulse = length_drive * num_pulse_1mm
    print("num_pulse_1mm ",num_pulse_1mm,"count pulse ",count_pulse)
    #time.sleep(1)
    print("start driving")
    for j in range( 0 , count_pulse ):
        pin_ena.value( sw_ena.value() )
        pin_direction.value( sw_direction.value() )
        pin_pulse.value( signal_low )
        time.sleep( width_pulse )
        pin_pulse.value( signal_high )
        time.sleep( width_pulse )

 

今回は以上です。

次回以降、
 フォトインタラプタによる両端検出

 スライドユニットの連続動作に

に取り組みます。