Software

【XY-Plotter】Part3:X/Y軸の動作設定

はじめに

今回実装したXY-Plotterは,ペンプロッタとしての用途だけでなく,レーザー加工,PCB切削加工など,汎用的に活用できるように,ペンの上下機構部分を取り外し可能な設計としている.前回までの記事で,制御系と駆動系のコアな部分ができたので,この状態でXY軸制御の設定を説明しておく.

XY-Plotter
「XY-Plotter」の記事一覧です。

ここまで組んだら動かしたいでしょ?

駆動方式 CoreXY

ベルトの経路このようになっており,XY軸も図の通りに定義する.

ここでモータを片方ずつ回転させると,ヘッドの移動方向は次のようになる.回転方向を反転するとヘッドの移動方向も反転する.

Motor-L
(CNC Shield StepperX)
Motor-R
(CNC Shield StepperY)
Head
CW-X-Y
CCW+X+Y
CW-X+Y
CCW+X-Y

したがってヘッドを上下左右に移動させる場合,次のように制御することになる.例えば,右方向に移動する場合は,Motor-LをCCW,Motor-RをCCWに回転させることで,ヘッドのY軸方向の移動量が相殺され,+2X移動する.2つのモータを組み合わせて駆動することで,片方のモータで駆動した場合に比べて2倍の移動量となり,高速で駆動する3Dプリンターによく用いられている.

HeadMotor-L
(CNC Shield StepperX)
Motor-R
(CNC Shield StepperY)
+YCCWCW
-YCWCCW
-XCWCW
+XCCWCCW

これがCoreXY方式の基本的な動作原理となる.

CoreXY | Cartesian Motion Platform

このCoreXY構成を更に拡張してZ軸方向の駆動も可能なCoreXYZも提案されている.モータレスヘッドで高速移動が可能で,ペンプロッタ用途にも向いていそう.いずれはこの構成で実装してみたい.

CoreXYZ: a low-inertia 3D motion platform

Klipperの設定

KlipperではKinematicsの設定値にCoreXYを指定することでXY平面の動作を実現できる.

Configuration reference - Klipper documentation

設定内容は次の通り.

[include mainsail.cfg]
[mcu]
serial: /dev/ttyS0
baud: 115200
restart_method: command

[virtual_sdcard]
path: ${/Path/To}/printer_data/gcodes
on_error_gcode: CANCEL_PRINT

[printer]
kinematics: corexy
max_velocity: 4000
max_accel: 4000

[gcode_arcs]
#resolution: 1.0
#   An arc will be split into segments. Each segment's length will
#   equal the resolution in mm set above. Lower values will produce a
#   finer arc, but also more work for your machine. Arcs smaller than
#   the configured value will become straight lines. The default is
#   1mm.

#######################################
## STEPPER
#######################################
[stepper_x]
dir_pin:PD2              # Arduino D02
step_pin:PD5             # Arduino D05
enable_pin:!PB0          # Arduino D08
microsteps: 16
rotation_distance: 40
endstop_pin: ^!PB1       # Arduino D09
position_endstop: 0
position_max: 240
homing_speed: 100.0

[stepper_y]
dir_pin:PD3              # Arduino D03
step_pin:PD6             # Arduino D06
enable_pin:!PB0          # Arduino D08
microsteps: 16
rotation_distance: 40
endstop_pin: ^!PB2       # Arduino D10
position_endstop: 0
position_max: 180
homing_speed: 100.0

[stepper_z]
dir_pin:PD4              # Arduino D04
step_pin:PD7             # Arduino D07
enable_pin:!PB0          # Arduino D08
microsteps: 16
rotation_distance: 40
endstop_pin: ^!PB4       # Arduino D11
position_endstop: 0
position_min: 0
position_max: 1
homing_speed: 1

[homing_override]
gcode:
    G28 X Y
axes: xyz
set_position_z: 0.0

pathの指定は環境に合わせて設定すること.

もしも移動方向が反対だったら,ステッピングモーターのコネクタを反転させて挿し直すか,dir_pinの設定を反転(!)させて,移動方向を修正すること.

また現時点ではZ軸方向に対応するアクチュエータが無いため,homing_overrideでZ軸方向のホーミングをキャンセルしておく.

その他,細かい設定はお好みでどうぞ.

おわりに

前回のペンプロッタは初ペンプロッタだったことや極端に小さくしすぎたせいで,無理な設計がちらほらあったけど,今回の実装ではできる限り極端な設計は排除して,誰でも簡単に再現できるシンプルかつ汎用性の高い構成になったかなと思う.

これでCoreXYの基本構成が完成したので,次回ペンの上下機構について説明する.たぶん.

コメント

タイトルとURLをコピーしました