TRONXY X5SA Pro 3Dプリンター ~Klipper化~

2021年8月ごろ、TronXY X5SA Proという3DプリンターをAMAZONで買いました。

当時割引が利いてて、33,000円でおつりが来ました。かなり安かったです。

Amazon : TronXY X5SA Pro

スペック

成形技術FDM(熱溶解積層法)
印刷サイズ330*330*400mm
印刷速度20〜100mm / s
印刷色単色
位置決め精度X / Y:S0.00625mm、Z:S0.00125mm
電源AC 110-220V、DC 24V 360W
接続方法SDカードとUSBケーブル
スライスソフトウェアCura、Repetier-Host
推奨フィラメント直径1.75mm、PLA/TPU/ABS/PETG/HIPS/WOOD

こんな感じ。

330x330x400mmの大きなビルドスペースと、CoreXY、4本のリニアロッドと2本のZ軸。

この組み合わせは大変よさげだったので、くそやすったし衝動買いしました。

最初の組み立ては6時間ぐらいかな。

標準のファームが気に入らず、すぐにMarlin化しようとしました。

が、ここからが苦難の連続。。。

Marlinを入れるだけで一苦労

この3Dプリンター、実はかなり曲者です。

まず、ハード的は組み方が少し工夫が必要です。

スライドレールの押さえつけるテンション調整と、ABモーターのプーリーの位置が肝です。うまくいかない時は、抵抗がありすぎてレイヤーシフトします。

問題は使用しているボードにあります。

Chitu V6 というボードを使用しているのですが、これ普通にアップデートすると起動不能にります。

Marlinを出力すると、frimware.binというのができるので、普通はSTM32CubeProgで書き込むわけですが、Bootloaderが入っており、これが消えると起動しなくなります。

なので、Marlin化するときはupdate.cbdというファイルをSDにいれて、bootloaderによる書き換えが必要です。

参考URL:https://angryadmin.sesc.dev/posts/tronxy-marlin/

上のリンクにもありますが、まずバックアップを推奨します。

私はBootloaderがぶっ飛んで、かなり苦労しました。

ぶっ飛んじゃった方はこちらのYOUTUBE参照:https://youtu.be/N1FaKO5QziE

この方がbootloaderとか初期のファームウェアのバックアップを公開してくれてます。ただし、X5SAでもバージョンが違うので、上のリンクのAmazonのプリンターに入ってるファームと異なります。Bootloaderだけ救助するのが良いでしょう。

そして次なる問題が。

レイヤーシフトが収まらない

レイヤーシフトとは、XYZのどれかの軸がステップを見失ってどんどんずれていく現象です。Marlin化したら一瞬大丈夫なのですが、1時間も出力すると全然ダメ。

こんなイメージ。

これから泥沼に入ってしまい、速度を落としても加速度を落としても駄目で、3カ月ぐらい放置していました。

粗大ごみに出そうと思ったが、何気なくKlipper化

もうあきらめてて、捨てようにも捨てられなくて、ずっと放置してたんですが、本日何気なく余ってるRaspberry pi 400 (キーボード一体のRaspberry pi 4みたいなやつ)があったので、こいつにMainsailOSをインストール、Klipper化することにしました。

そもそもKlipper化とは、Raspberry piを主に計算として使い、メインのコントロールボードの制御を補助してやろうという代物です。検索するとたくさん事例が出てくると思います。

これも実は一苦労しました。

最初はBootloaderの件忘れて、またぶっ飛ばしてしまい、出戻り。

次にオフセットして書き込んでもうまくいかず。

原因はKlipperをビルドするときのオプションにありました。

Klipperのビルドオプションで、STM32F103を選択後、BootloaderにChitu V6 Bootloaderを選択、さらに、USBをSerial on USART1 PA10/PA09に変更します。

その次に、Klipperフォルダの下で、

./scripts/update_chitu.py ./out/klipper.bin ./out/update.cbd

を実行、update.cbdをコンバートして作ります。

これをbootloaderが生きているボードにSDカードを差し込んでアップデートします。

2回ビープ音が鳴ったら成功です。

がここにも罠が。

メインボードにはスーパーキャパシタが入ってるようで、電源を切っても30秒ほど電源が落ちません!余裕を見て、電源を落としてから3分ほどしてから再起動してください。

この情報はどこにも書いておらず、気が付くのが遅れました。

そこまできて、やっとKlipperの設定です。

printer.cfgはこのページを参考に作りました。参考URL:https://gist.github.com/cab404/b7bcbb0cd592a14515493694719de59b

printer.cfg

# This is a Klipper configuration for TronXY X5SA, with CXY-V6
# motherboard.

#            === FLASHING WITH STOCK BOOTLOADER ===
# You should make firmware for STM32F103 with bootloader offset
# at 0x8008800 (Chitu v6 Bootloader) and serial (on USART1 PA10/PA9)
# communication.

# Use "./scripts/update_chitu.py ./out/klipper.bin ./out/update.cbd"
# after make to generate update.cbd.  Put `update.cbd` onto SD card,
# and reboot the printer.  It will be automatically installed, and you
# will be able to update it this way.

[mcu]
serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method: command

[printer]
kinematics: corexy
max_velocity: 300
max_accel: 5000
max_accel_to_decel : 5000
max_z_velocity: 25
max_z_accel: 30

[stepper_x]
step_pin: PE5
dir_pin: !PE6
enable_pin: !PC13
microsteps: 16
rotation_distance: 20
endstop_pin: !PG10
position_endstop: -1
position_min: -1
position_max: 330
homing_speed: 50
homing_retract_dist: 10
second_homing_speed: 10.0

[stepper_y]
step_pin: PE2
dir_pin: !PE3
enable_pin: !PE4
microsteps: 16
rotation_distance: 20
endstop_pin: !PA12
position_endstop: 0
position_max: 330
homing_retract_dist: 10
homing_speed: 50.0
second_homing_speed: 10.0

[stepper_z]
step_pin: PB9
dir_pin: PE0
enable_pin: !PE1
microsteps: 16
rotation_distance: 4
endstop_pin: probe:z_virtual_endstop
position_max: 400
position_min: -2

[extruder]
step_pin: PB4
dir_pin: !PB5
enable_pin: !PB8
microsteps: 16
rotation_distance: 3.855
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PG12
sensor_type: ATC Semitec 104GT-2
sensor_pin: PA1
control: pid
pid_Kp: 18.831
pid_Ki: 0.821
pid_Kd: 108.044
min_temp: 0
max_temp: 250
max_extrude_only_distance: 300
pressure_advance: 0.5
pressure_advance_smooth_time: 0.1

[heater_bed]
heater_pin: PG11
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PA0
control: pid
min_temp: 0
max_temp: 130
pid_Kp: 73.932
pid_Ki: 1.521
pid_Kd: 898.279

[heater_fan hotend_fan]
pin: PG14

[fan]
pin: PG13

[controller_fan drivers_fan]
pin: PD6

[filament_switch_sensor sentinel]
pause_on_runout: True
runout_gcode:
  M25
switch_pin: PA15

[output_pin beeper]
pin: PB0

[safe_z_home]
home_xy_position: 165, 165
speed: 50
z_hop: 10
z_hop_speed: 5

[bed_screws]
screw1: 5, 5
screw2: 165, 5
screw3: 325, 5
screw4: 5, 325
screw5: 165, 325
screw6: 325, 325

[bed_mesh]
speed: 120
probe_count: 5, 5
horizontal_move_z: 5
algorithm: lagrange
mesh_min : 20, 20
mesh_max : 290, 310
mesh_pps: 0

[probe]
x_offset: -40
y_offset: 0
pin: !PG9
speed: 30
#z_offset: 2

[input_shaper]
shaper_freq_x: 54  # frequency for the X mark of the test model
shaper_freq_y: 40  # frequency for the Y mark of the test model

[virtual_sdcard]
path: ~/gcode_files

[display_status]

[pause_resume]

[gcode_macro PAUSE]
rename_existing: BASE_PAUSE
gcode:
    ##### set defaults #####
    {% set x = params.X|default(180) %}      #edit to your park position
    {% set y = params.Y|default(200) %}      #edit to your park position
    {% set z = params.Z|default(10)|float %} #edit to your park position
    {% set e = params.E|default(1) %}        #edit to your retract length
    ##### calculate save lift position #####
    {% set max_z = printer.toolhead.axis_maximum.z|float %}
    {% set act_z = printer.toolhead.position.z|float %}
    {% set lift_z = z|abs %}
    {% if act_z < (max_z - lift_z) %}
        {% set z_safe = lift_z %}
    {% else %}
        {% set z_safe = max_z - act_z %}
    {% endif %}
    ##### end of definitions #####
    SAVE_GCODE_STATE NAME=PAUSE_state
    BASE_PAUSE
    G91
    G1 E-{e} F2100
    G1 Z{z_safe}
    G90
    G1 X{x} Y{y} F6000
	
[gcode_macro RESUME]
rename_existing: BASE_RESUME
gcode:
    ##### set defaults #####
    {% set e = params.E|default(1) %} #edit to your retract length
    G91
    G1 E{e} F2100
    G90
    RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1
    BASE_RESUME
	
[gcode_macro CANCEL_PRINT]
rename_existing: BASE_CANCEL_PRINT
gcode:
    TURN_OFF_HEATERS
    CLEAR_PAUSE
    SDCARD_RESET_FILE
    BASE_CANCEL_PRINT

#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [probe]
#*# z_offset = 2.800
#*#
#*# [bed_mesh default]
#*# version = 1
#*# points =
#*# 	-0.076250, -0.007500, -0.061250, -0.101250, -0.108750
#*# 	0.036250, 0.088750, -0.001250, -0.042500, -0.060000
#*# 	0.053750, 0.071250, -0.023750, -0.052500, -0.093750
#*# 	0.036250, 0.072500, -0.036250, -0.056250, -0.082500
#*# 	-0.316250, -0.256250, -0.330000, -0.313750, -0.313750
#*# tension = 0.2
#*# min_x = 20.0
#*# algo = lagrange
#*# y_count = 5
#*# mesh_y_pps = 0
#*# min_y = 20.0
#*# x_count = 5
#*# max_y = 310.0
#*# mesh_x_pps = 0
#*# max_x = 290.0

おおむねこんな感じです。

そのままでも動くと思いますが、私は責任取れませんので慎重にお願いします。

Klipperにしたら、突然の快調プリント

最新のKlipperにしたら、いきなり快調です。

レイヤーシフトもなにもなく、Pressure Advanceも効きます。

Pressure Advanceは解説によると、ボードにはんだされているTMC2225ドライバーを外部からserialで書き換えろとありましが、何もしなくても大丈夫です。MarlinのLinearAdvanceだとモーターが止まるので必要っぽいです。

脱調するかなと思って速度を200mm/sec、加速度を5000mm/sec^2まで上げましたが、全然大丈夫でした。

筐体の剛性が思いのほか高く、リギングも出にくいです。input shaperなしでも4000mm/sec^2まで出てきません。共振点もX軸が54Hz、Y軸が40Hzとでかい割にかなり高いです。

いつものお船を印刷しましたが、1時間ジャストでこの仕上がりです。

あんまりきれいじゃない写真ですいません。PolymakerのPolylite PLAで出してみました。ノズル温度200度、ベッド温度50度、送りは60-100mm/secあたりです。

細いところこそボーデン式の影響で多少荒れてますが、外周の送りは100mm/secも出てるので、十分だと思います。

Pressure Advanceのおかげで、ライン同士の隙間も少ないです。

買ってから8カ月かけて実用的になった

まとめです。

  • TornXY X5SA Proは安いが、初心者向きじゃない。少なくともKlipper化は必要。
  • ハードウェア的には大きな問題はないが、細かいところは工夫必要。
  • Marlin化は上手くいかない。やめた方が良い。
  • Bootloaderをぶっ飛ばさないように注意。
  • 最終的にはきれいに出るが、上級者向け
  • 安いからって手を出すと後悔する(自戒)

以上です。

参考になれば幸いです。