2021年8月ごろ、TronXY X5SA Proという3DプリンターをAMAZONで買いました。
当時割引が利いてて、33,000円でおつりが来ました。かなり安かったです。
スペック
成形技術 | 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をぶっ飛ばさないように注意。
- 最終的にはきれいに出るが、上級者向け
- 安いからって手を出すと後悔する(自戒)
以上です。
参考になれば幸いです。