Klipper A-Z phần 3: Flash firmware và tạo file printer.cfg

Bây giờ Pi đã sẵn sàng với Klipper, trong bài này mình sẽ hướng dẫn bạn flash firmware Klipper lên board điều khiển máy in và tạo file cấu hình đầu tiên. Đừng lo nếu bạn chưa từng làm, chúng ta sẽ làm từng bước một cách an toàn.

Klipper A-Z phần 3: Flash firmware và tạo file printer.cfg
Photo by Tai Bui / Unsplash

Danh sách bài viết:

  1. Giới thiệu Klipper
  2. Chuẩn bị phần cứng và cài đặt Klipper
  3. Flash firmware và tạo file printer.cfg
  4. Hiệu chỉnh cơ bản
  5. Input Shaper và Pressure Advance
  6. Tạo macro Klipper cơ bản
  7. Khắc phục sự cố và bảo trì hệ thống

Chuẩn bị trước khi bắt đầu

Backup quan trọng

Trước khi làm gì, hãy backup: Nếu dùng Marlin, backup file .bin hoặc .hex

Settings máy in: Ghi lại các thông số như:

  • Steps/mm cho các trục
  • PID values cho hotend/bed
  • Z-offset nếu có probe
  • Mesh bed leveling data

Chụp ảnh board: Để biết cách đấu dây ban đầu

Kiểm tra kết nối

Cáp USB: Đảm bảo có cáp USB A to Micro B (hoặc USB-C tùy board)

Test kết nối:

# SSH vào Pi và kiểm tra USB
ssh pi@[IP-address]
lsusb

Tắt máy in an toàn

  1. Tắt nguồn máy in (chưa rút cáp USB)
  2. Đợi 30 giây để tụ điện xả hết
  3. Kết nối cáp USB từ Pi đến board máy in
  4. Bật lại máy in

Xác định board mạch chủ

Các board phổ biến tại Việt Nam

BigTreeTech SKR Series

  • SKR Mini E3 V2/V3: Thay thế trực tiếp cho Ender 3
  • SKR 1.4 Turbo: Board cao cấp cho máy custom
  • SKR 2: Thế hệ mới với STM32F407

Creality Boards

  • V4.2.2/4.2.7: Board stock trên Ender 3 Pro/V2
  • V1.1.5: Board cũ trên Ender 3 2018
  • CR-6 SE Board: Cho dòng CR-6

Arduino Based

  • RAMPS 1.4: Board DIY phổ biến
  • MKS Gen L: Clone RAMPS với cải tiến

Cách xác định board

Kiểm tra vật lý:

  • Mở nắp máy in và xem board
  • Tìm tên model trên board
  • Đếm số cổng stepper driver

Kiểm tra qua USB:

# Kết nối USB và chạy
lsusb
# Tìm dòng có "STMicroelectronics" hoặc "Arduino"

Kiểm tra trong firmware hiện tại:

  • Vào LCD menu → About/Info
  • Hoặc gửi lệnh M115 qua terminal

Chi tiết từng board

SKR Mini E3 V2.0

  • Chip: STM32F103RET6
  • Bootloader: 28KiB
  • Communication: USB

SKR Mini E3 V3.0

  • Chip: STM32G0B1RET6
  • Bootloader: 8KiB
  • Communication: USB

Creality V4.2.2/4.2.7

  • Chip: STM32F103RET6 hoặc GD32F103
  • Bootloader: 28KiB
  • Communication: Serial trên PA10/PA9

RAMPS 1.4

  • Chip: Arduino Mega 2560 (ATmega2560)
  • No bootloader
  • Communication: USB

Tạo Klipper firmware cho từng board

Sử dụng KIAUH (khuyến nghị)

Bước 1: SSH vào Pi và mở KIAUH

cd ~/kiauh
./kiauh.sh

Bước 2: Chọn Advanced menu

[4] Advanced → [2] Build firmware

Bước 3: Chọn board từ menu hoặc manual config

Thủ công

Bước 1: Truy cập thư mục Klipper

cd ~/klipper

Bước 2: Mở menuconfig

make menuconfig

Cấu hình cho từng board

SKR Mini E3 V2.0

Micro-controller Architecture: STMicroelectronics STM32
Processor model: STM32F103
Bootloader offset: 28KiB bootloader
Clock Reference: 8 MHz crystal
Communication interface: USB (on PA11/PA12)

SKR Mini E3 V3.0

Micro-controller Architecture: STMicroelectronics STM32
Processor model: STM32G0B1
Bootloader offset: 8KiB bootloader  
Clock Reference: 8 MHz crystal
Communication interface: USB (on PA11/PA12)

Creality V4.2.2/4.2.7

Micro-controller Architecture: STMicroelectronics STM32
Processor model: STM32F103
Bootloader offset: 28KiB bootloader
Clock Reference: 8 MHz crystal
Communication interface: Serial (on USART1 PA10/PA9)

# Nếu là GD32F103 thì thêm:
☑ Disable SWD at startup

RAMPS 1.4 (Arduino Mega)

Micro-controller Architecture: Atmega AVR
Processor model: atmega2560
Clock Reference: 16 MHz crystal
Communication interface: USB (on USART0 PA0/PA1)

Build firmware

Bước 3: Thoát và save config

  • Nhấn Q để quit
  • Nhấn Y để save

Bước 4: Compile

make clean
make -j4

Kết quả: File firmware sẽ có tại ~/klipper/out/

  • klipper.bin cho STM32 boards
  • klipper.elf.hex cho Arduino boards

Flash firmware lên board

Phương pháp flash tùy board

STM32 Boards (SKR, Creality)

  • Phương pháp: SD Card
  • File: klipper.bin đổi tên thành firmware.bin

Arduino Boards (RAMPS)

  • Phương pháp: USB với avrdude
  • File: klipper.elf.hex

Flash cho SKR boards

Bước 1: Chuẩn bị thẻ SD

# Tạo file firmware từ klipper.bin
cp ~/klipper/out/klipper.bin ~/firmware.bin

Bước 2: Copy ra máy tính

# Tạo web server tạm để download
cd ~
python3 -m http.server 8000
# Truy cập http://[PI-IP]:8000 và tải firmware.bin

Bước 3: Flash firmware

  1. Tắt nguồn máy in
  2. Rút thẻ SD từ máy in (nếu có)
  3. Copy firmware.bin vào thẻ SD (format FAT32)
  4. Cắm thẻ SD vào máy in
  5. Bật nguồn máy in
  6. Đợi 10-15 giây cho quá trình flash
  7. Tắt máy và rút thẻ SD

Lưu ý: File firmware.bin sẽ được đổi tên thành firmware.cur sau khi flash thành công.

Flash cho Creality boards

Tương tự SKR nhưng lưu ý:

  • File phải có tên khác với lần flash trước
  • Ví dụ: firmware1.bin, firmware2.bin...
  • Một số board cần file tên firmware.bin.renamed

Flash cho RAMPS/Arduino

Bước 1: Xác định USB port

ls /dev/ttyUSB* /dev/ttyACM*
# Thường là /dev/ttyUSB0 hoặc /dev/ttyACM0

Bước 2: Flash trực tiếp

cd ~/klipper
make flash FLASH_DEVICE=/dev/ttyUSB0

Nếu lỗi: Thử với avrdude thủ công

avrdude -p atmega2560 -c wiring -b 115200 -P /dev/ttyUSB0 -U flash:w:out/klipper.elf.hex:i

Tạo file printer.cfg

Tìm template phù hợp

Klipper có sẵn nhiều template:

# Xem danh sách config có sẵn
ls ~/klipper/config/printer-*

Template phổ biến:

  • printer-creality-ender3-2018.cfg: Ender 3 board cũ
  • printer-creality-ender3pro-2020.cfg: Ender 3 Pro V4.2.2
  • printer-creality-ender3-v2-2020.cfg: Ender 3 V2
  • generic-bigtreetech-skr-mini-e3-v2.0.cfg: SKR Mini E3 V2

Copy template vào Mainsail

Bước 1: Xem nội dung template

cat ~/klipper/config/printer-creality-ender3pro-2020.cfg

Bước 2: Copy nội dung vào Mainsail

  1. Mở web Mainsail
  2. Vào tab "Machine"
  3. Click "Create file" hoặc edit printer.cfg
  4. Paste nội dung template
  5. Click "Save & Restart"

Ví dụ printer.cfg cơ bản cho Ender 3

Template cơ bản cho Ender 3 + SKR Mini E3 V2:

# SKR Mini E3 V2.0 config for Ender 3
# Firmware: STM32F103 with 28KiB bootloader, USB communication

[mcu]
serial: /dev/serial/by-id/usb-Klipper_stm32f103xe_[YOUR_ID]

[printer]
kinematics: cartesian
max_velocity: 300
max_accel: 3000
max_z_velocity: 5
max_z_accel: 100

[stepper_x]
step_pin: PB13
dir_pin: !PB12
enable_pin: !PB14
microsteps: 16
rotation_distance: 40
endstop_pin: ^PC0
position_endstop: 0
position_max: 235
homing_speed: 50

[tmc2209 stepper_x]
uart_pin: PC11
tx_pin: PC10
uart_address: 0
run_current: 0.580
interpolate: False

[stepper_y]
step_pin: PB10
dir_pin: !PB2
enable_pin: !PB11
microsteps: 16
rotation_distance: 40
endstop_pin: ^PC1
position_endstop: 0
position_max: 235
homing_speed: 50

[tmc2209 stepper_y]
uart_pin: PC11
tx_pin: PC10
uart_address: 2
run_current: 0.580
interpolate: False

[stepper_z]
step_pin: PB0
dir_pin: PC5
enable_pin: !PB1
microsteps: 16
rotation_distance: 8
endstop_pin: ^PC2
position_endstop: 0.0
position_max: 250

[tmc2209 stepper_z]
uart_pin: PC11
tx_pin: PC10
uart_address: 1
run_current: 0.580
interpolate: False

[extruder]
step_pin: PB3
dir_pin: !PB4
enable_pin: !PD2
microsteps: 16
rotation_distance: 33.500
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PC8
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PA0
control: pid
pid_Kp: 21.527
pid_Ki: 1.063
pid_Kd: 108.982
min_temp: 0
max_temp: 250

[tmc2209 extruder]
uart_pin: PC11
tx_pin: PC10
uart_address: 3
run_current: 0.650
interpolate: False

[heater_bed]
heater_pin: PC9
sensor_type: ATC Semitec 104GT-2
sensor_pin: PC3
control: pid
pid_Kp: 54.027
pid_Ki: 0.770
pid_Kd: 948.182
min_temp: 0
max_temp: 130

[heater_fan nozzle_cooling_fan]
pin: PC7

[fan]
pin: PC6

[board_pins]
aliases:
EXP1_1=PB5, EXP1_3=PA9, EXP1_5=PA10, EXP1_7=PB8, EXP1_9=<GND>,
EXP1_2=PA15, EXP1_4=<RST>, EXP1_6=PB9, EXP1_8=PB15, EXP1_10=<5V>

[virtual_sdcard]
path: ~/printer_data/gcodes

[display_status]

[pause_resume]

[include mainsail.cfg]

Điều chỉnh thông số quan trọng

Serial ID: Thay thế bằng ID thực

# Tìm serial ID
ls /dev/serial/by-id/
# Copy ID và paste vào [mcu] section

Kích thước máy in: Điều chỉnh position_max cho X, Y, Z

  • Ender 3: 220x220x250mm
  • Ender 3 Pro: 235x235x250mm

Rotation distance: Kiểm tra theo máy

  • X/Y: 40mm (thường)
  • Z: 8mm (lead screw 8mm pitch)
  • Extruder: 33.5mm (Bowden) hoặc 22.6mm (Direct drive)

Cảm biến nhiệt độ: Chọn đúng loại cảm biến

  • Đa số các máy Creality: EPCOS 100K B57560G104F
  • E3D V6: ATC Semitec 104GT-2
  • Thông dụng: Generic 3950

Kết nối USB và test

Kiểm tra kết nối

Bước 1: Restart Klipper service

sudo systemctl restart klipper

Bước 2: Kiểm tra logs

tail -f ~/printer_data/logs/klippy.log

Thành công: Thấy dòng "MCU connection established"

Lỗi: Thấy "Unable to connect" - xem phần troubleshooting

Test cơ bản trong Mainsail

Trang chủ: Phải hiển thị nhiệt độ và trạng thái

Console: Test các lệnh cơ bản

# Kiểm tra firmware version
VERSION

# Test endstop
QUERY_ENDSTOPS

# Home từng trục (CẨN THẬN!)
G28 X
G28 Y
G28 Z

Test chuyển động

Lưu ý an toàn:

  • Đảm bảo không có gì cản đường di chuyển
  • Tay luôn sẵn sàng nhấn Emergency Stop
  • Test từng trục một cách từ từ

Test các motor:

# Test stepper motors (sẽ buzz)
STEPPER_BUZZ STEPPER=stepper_x
STEPPER_BUZZ STEPPER=stepper_y
STEPPER_BUZZ STEPPER=stepper_z
STEPPER_BUZZ STEPPER=extruder

Test di chuyển nhỏ:

# Home trước khi di chuyển
G28

# Di chuyển nhỏ từng trục
G1 X10 F1800
G1 Y10 F1800
G1 Z5 F300

Troubleshooting

Lỗi kết nối MCU: "Unable to connect to MCU"

Serial ID sai:

# Kiểm tra lại USB devices
ls /dev/serial/by-id/
# Cập nhật serial trong printer.cfg

Board chưa flash firmware:

  • Kiểm tra file firmware.cur có xuất hiện trên thẻ SD
  • Thử flash lại với tên file khác

USB cable lỗi:

  • Thử cáp USB khác
  • Kiểm tra connection: lsusb

Board không tương thích:

  • Kiểm tra lại cấu hình make menuconfig
  • Đảm bảo đúng chip và bootloader offset

Lỗi cấu hình printer.cfg

Trỏ pin sai:

# Kiểm tra pin mapping trong template chính thức
cat ~/klipper/config/generic-bigtreetech-skr-mini-e3-v2.0.cfg

Thiếu sections bắt buộc:

  • [virtual_sdcard]
  • [display_status]
  • [pause_resume]

PID chưa tune:

# Thay thế control: pid bằng:
control: watermark
# Hoặc comment out pid values

Motor quay sai hướng

Giải pháp: Đảo direction pin

# Từ:
dir_pin: PB12
# Thành:
dir_pin: !PB12

Endstop không hoạt động

Test endstop:

QUERY_ENDSTOPS
# Nhấn tay endstop và test lại

Cấu hình pullup:

# Thử các biến thể:
endstop_pin: ^PC0    # pullup
endstop_pin: ^!PC0   # pullup + invert
endstop_pin: PC0     # no pullup

Temperature sensor lỗi

Triệu chứng: "ADC out of range" hoặc temperature sai

Giải pháp:

# Đổi sensor type
sensor_type: Generic 3950
# Hoặc
sensor_type: ATC Semitec 104GT-2

# Thêm ADC voltage nếu cần
adc_voltage: 5.0  # cho Arduino
adc_voltage: 3.3  # cho STM32

Màn hình không hoạt động

Cho LCD 12864:

# Thêm vào printer.cfg
[display]
lcd_type: st7920
cs_pin: EXP1_7
sclk_pin: EXP1_6
sid_pin: EXP1_8
encoder_pins: ^EXP1_5, ^EXP1_3
click_pin: ^!EXP1_2

[output_pin beeper]
pin: EXP1_1

Các lệnh kiểm tra khác

# Kiểm tra Klipper service
sudo systemctl status klipper

# Real-time logs
tail -f ~/printer_data/logs/klippy.log

# Moonraker logs
tail -f ~/printer_data/logs/moonraker.log

Lưu ý an toàn

  • Test tất cả chuyển động ở tốc độ chậm
  • Kiểm tra quá nhiệt
  • Backup config sau khi ổn định
  • Luôn sẵn sàng tắt nguồn tổng khi có sự cố không thể kiểm soát

Nếu có vấn đề: Luôn có thể quay lại Marlin bằng cách flash firmware cũ.


Bài tiếp theo: Hiệu chỉnh cơ bản - PID, E-steps và Bed leveling


Nguồn tham khảo

Tài liệu chính thức:

Community configs:

Nguồn tham khảo:

Read more

Mua máy in 3D hãng hay tự lắp ráp (DIY): Lựa chọn nào phù hợp cho người mới bắt đầu?

Mua máy in 3D hãng hay tự lắp ráp (DIY): Lựa chọn nào phù hợp cho người mới bắt đầu?

Máy in 3D đang ngày càng phổ biến tại Việt Nam, từ những người đam mê công nghệ đến học sinh, sinh viên và các doanh nghiệp nhỏ. Tuy nhiên, câu hỏi đặt ra cho người mới bắt đầu là: nên mua máy in 3D có sẵn từ hãng hay tự lắp ráp để tiết kiệm chi phí? Chúng ta cùng phân tích nhé!

By Hải Nguyễn