Jak nahrát Katapult a klipper do CanBus desky Mellow SB2040 v1

1. Canboot
Co je Canboot? Jedná sa o malý spouštěcí program (bootloader), který Vám umožní aktualizovať klipper bez připojování USB, přímo skrz CANBus. Nemusíte rozebírat tiskárnu, připojovat USB kabel. Canboot není nutný, ale je doporučené ho použít.
Tak jdeme na to, připojíme se na ke své tiskárně pomocí SSH a přesuneme se do své home složky:
cd ~
Stáheneme poslední verzi CanBoot z gitu:
git clone https://github.com/Arksine/katapult
Do moonraker.conf si přidejte pro aktualizace:
[update_manager katapult]
type: git_repo
path: /home/pi/katapult
origin: https://github.com/Arksine/katapult.git
Po tomto zásahu bude moonraker v Mainsailu upozorňovat že nemá katapult práva pro restart služeb:

To jednoduše napravíme tak že dopíšeme do souboru moonraker.asvc katapult na konec a to pomocí příkazu:
nano /home/pi/printer_data/moonraker.asvc

Ctrl + x uložíme
y potvrdíme
A máme hotovo…. stačí restartovat moonraker nebo celé RPI a varování to už ukazovat nebude.
Teď se přesuneme do složky:
cd katapult
Odstraníme případné předešlé kompilace:
make clean
Provedeme nastavení HW pro který to kompilujeme:
make menuconfig
Nastavíme takto:

Nezapomeňte dopsat: rychlost 500000
(nebo až 1000000
) v kolonce CAN bus speed
a gpio24
v kolonce Status LED GPIO Pin
.
Zmáčkneme q
pro uložení a y
pro potvrzení.
Zkompilujeme pomocí:
make -j4
(-j4
jen upřesnuje nastavení kompilace, aby probíhala na 4 jadrech.)
Teď nahrajeme námi zkompilovaný CanBoot firmware do SB2040 desky:
Připojíme usb kabel do RPI, zmáčkneme tlačítko u USB-C na SB2040 a až pak připojíme USB kabel, pustíme tlačítko. Tímto bude SB2040 v DFU režimu (Device Firmware Update, mód aktualizácie firmvéru) a můžeme nahrát firmware skrz USB.
Vypíšeme si usb zařízení:
lsusb
Mělo by se zobrazit nově toto v seznamu:
Bus 001 Device 014: ID 2e8a:0003
Zapíšeme si dvě čtveřice znaků za ID, teda v našom prípade 2e8a:0003
mělo by to být u všech SB2040 stejné, ale v bucoucnu se to může lišit.
Nahrajeme CanBoot firmware:
make flash FLASH_DEVICE=2e8a:0003
2. Klipper firmware
Přesuneme se do klipper složky a stáhneme poslední aktualizaci z gitu:
cd ~/klipper && git pull
Odstraníme předešlé kompilace:
make clean
Provedeme nastavení HW pro který to kompilujeme:
make menuconfig
Nastavíme takto:

Nezapomeňte dopsat: rychlost 500000
(nebo až 1000000
, musí byt stejná jak jsme dali v předchozím kroku) a gpio24
.
Zmáčkneme q
pro uložení a y
pro potvrzení.
Zkompilujeme:
make -j4
Teď nahrajeme námi zkompilovaný firmware do SB2040 desky:
Připojíme usb kabel do RPI, zmáčkneme tlačítko u USB-C na SB2040 a až pak připojíme USB kabel, pustíme tlačítko.
Vypíšeme si usb zařízení:
lsusb
Mělo by se zobrazit toto:
Bus 001 Device 014: ID 2e8a:0003
Nahrajeme klipper firmware
make flash FLASH_DEVICE=2e8a:0003
Zkontrolujeme
lsusb
a měli bychom vidět:
Bus 001 Device 013: ID 1d50:614e OpenMoko, Inc.
Rozsvítí se status led:

3. Zapojení a nastavení canbus interfacu
Ujistěte se, že jste na SB2040 zapojili jumper/propojku pro zakončovací odpor CANBUS 120 ohmů:

Na Mellow FLY-UTOC-1 nedáváte žádné propojky.
Zapojíte podle popisu pokud máte verzi jen s paticemi, pokud máte tu s microfit konektory tak takto podle barvy kabelů. Jestli máte multimetr tak si pro jistotu zkontrolujte uspořádání konektorů, měl by být popis na PCB.
- +24V – Červená
- 0V – Černá
- CANBus-H – Žlutá
- CanBus-L – Bílá
Připojte si také 24V z napájecího zdroje do UTOC


Vytvoření Canbus interface:
Ujistěte se zda systemd-networkd service je zapnutá a běží, příkazy:
sudo systemctl enable systemd-networkd
potom spustěte service:
sudo systemctl start systemd-networkd
ověřte že služba běží:
systemctl | grep systemd-networkd
a mělo by to ukazovat “loaded active running” jako zde na obrázku:
Pak nakostavte txqueuelen
pro rozhraní spuštěním následujícího příkazu (celý řádek zkopírujte a vložte do své SSH relace).
echo -e 'SUBSYSTEM=="net", ACTION=="change|add", KERNEL=="can*" ATTR{tx_queue_len}="128"' | sudo tee /etc/udev/rules.d/10-can.rules > /dev/null
Pro ověření že je to správně:
cat /etc/udev/rules.d/10-can.rules
a výstup by měl vypadat takto:
Teď konečne nastavíme can interface, pro zapnutí a nastavení rychlosti zadejte:
echo -e "[Match]\nName=can*\n\n[CAN]\nBitRate=1M" | sudo tee /etc/systemd/network/25-can.network > /dev/null
Pro ověření, že to máme spravně použijte příkaz:
cat /etc/systemd/network/25-can.network
a mělo by to vypadat takto:
Restartujeme RPI: (tak systemd-networkd service nastartuje s konfiguraci) příkazem:
sudo reboot now
Zjištění canbus uuid
Přesuneme se do klipper složky:
cd ~/klipper
Zjistíme příkazem:
python3 lib/canboot/flash_can.py -q
Dostaneme odpověď:
pi@Voron:~/klipper $ python3 lib/canboot/flash_can.py -q
Resetting all bootloader node IDs...
Checking for canboot nodes...
Detected UUID: 211e59ecf887, Application: Klipper
Query Complete
Zjištěné mé CanBus UUID je: 211e59ecf887
vaše bude jiné, to své si zkopírujte !!!!
4. Konfigurace SB2040 v printer.cfg

Do printer.cfg si přidáme canbus mcu:
Do printer.cfg si přidáme canbus mcu:
[mcu sb2040]
canbus_uuid: vase-id-napisete-sem # vase uu id
## SB2040 RPI sensor
[temperature_sensor FLY-SB2040]
sensor_type: temperature_mcu
sensor_mcu: sb2040
## SB2040 temperature sensor board
[temperature_sensor SB-inside]
sensor_type = ATC Semitec 104GT-2
sensor_pin = sb2040:gpio26
[controller_fan sb2040-fan]
## SB2040 5V fan
pin: sb2040:gpio15
kick_start_time: 0.5 # full speed to spinn of fan
fan_speed: 0.9 #reduce speed to 90%
heater: heater_bed # enabled when heater bed heating
idle_timeout:30
[adxl345]
cs_pin: sb2040:gpio1
spi_software_sclk_pin: sb2040:gpio0
spi_software_mosi_pin: sb2040:gpio3
spi_software_miso_pin: sb2040:gpio2
[extruder]
step_pin: sb2040:gpio9
dir_pin: sb2040:gpio10
enable_pin: !sb2040:gpio7
rotation_distance: 22.6789511 #Bondtech 5mm Drive Gears
gear_ratio: 50:10 #Gear Ratio Stealthburner
microsteps: 32
full_steps_per_rotation: 200 #200 for 1.8 degree, 400 for 0.9 degree
nozzle_diameter: 0.400
filament_diameter: 1.75
heater_pin: sb2040:gpio6
sensor_type: Generic 3950
sensor_pin: sb2040:gpio27
min_temp: 10
max_temp: 280
max_power: 1.0
min_extrude_temp: 190
max_extrude_cross_section: 50.0
max_extrude_only_distance: 200
pressure_advance: 0.04
pressure_advance_smooth_time: 0.040
[tmc2209 extruder]
uart_pin: sb2040:gpio8
interpolate: false
run_current: 0.6
sense_resistor: 0.110
stealthchop_threshold: 0
########################################
# Filament runout switch sensor
########################################
[filament_switch_sensor runout_sensor]
pause_on_runout: True
runout_gcode:
#SET_LED LED=toolhead RED=1 GREEN=0 BLUE=0 INDEX=1 TRANSMIT=1
G91 ; relative positioning
G1 E-2 F2700
G1 Z10
G90 ; absolute positioning
G1 X250 Y50 F10000
G91
G1 E-100 F1000
insert_gcode:
#SET_LED LED=toolhead RED=0.5 GREEN=0.5 BLUE=0.0 WHITE=0.1 INDEX=1 TRANSMIT=1
G92 E0 ; Reset Extruder
G1 E50 F600 ; move filament down 50mm quickly
G1 E60 F300 ; extrude 60mm of filament slowly to get it through nozzle
event_delay: 3.0
pause_delay: 0.5
switch_pin: !sb2040:gpio29
[probe] ## TAP
pin: sb2040:gpio28
x_offset: 0
y_offset: 0
#z_offset: 1
speed: 3.0
lift_speed: 7.0
samples: 3
samples_result: median
sample_retract_dist: 2.0
samples_tolerance: 0.006
samples_tolerance_retries: 3
activate_gcode:
{% set PROBE_TEMP = 150 %}
{% set MAX_TEMP = PROBE_TEMP + 5 %}
{% set ACTUAL_TEMP = printer.extruder.temperature %}
{% set TARGET_TEMP = printer.extruder.target %}
{% if TARGET_TEMP > PROBE_TEMP %}
{ action_respond_info('Extruder temperature target of %.1fC is too high, lowering to %.1fC' % (TARGET_TEMP, PROBE_TEMP)) }
M109 S{ PROBE_TEMP }
{% else %}
# Temperature target is already low enough, but nozzle may still be too hot.
{% if ACTUAL_TEMP > MAX_TEMP %}
{ action_respond_info('Extruder temperature %.1fC is still too high, waiting until below %.1fC' % (ACTUAL_TEMP, MAX_TEMP)) }
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={ MAX_TEMP }
{% endif %}
{% endif %}
5. Aktualizace SB2040 firmware skrz CanBus interface:
Postup je stejný jako v bodě 2:
Zkompilujeme firmware
Vlezeme do klipper složky a stáhneme poslední aktualizaci z gitu:
cd ~/klipper && git pull
Odstraníme předešlé kompilace:
make clean
Provedeme nastavení HW pro který to kompilujeme:
make menuconfig
Nastavíme takto:

Nezapomeňte dopsat: rychlost 500000, nebo až 1000000 a gpio24
Zmáčkneme klávesu q
pro uložení a y
pro potvrzení
Zkompilujeme:
make -j4
Stopneme klipper
sudo service klipper stop
Teď nahrajeme námi zkompilovaný firmware do SB2040 desky:
python3 ~/klipper/lib/canboot/flash_can.py -i can0 -f ~/klipper/out/klipper.bin -u <VASE-CANBUS-ID>
Mělo by to vypadat takto:

sudo service klipper start
6. Sensorless homing
Když jsme se zbavili hromady kabeláže tak je pro někoho zbytečné používat i endstopy na XY. Tady si ukážeme jak jednoduše upravit na Octopus desce.
Zapojení
Odpojíme stávající endstopy, na octopus desce zapojíme jumpery DIAG piny pro AB motory:

Konfigurace endstopů:
Původní stav:
[stepper_x]
# …
endstop_pin: !PG6
# …
homing_retract_dist: 5
[tmc2209 stepper_x]
# …
[stepper_y]
# …
endstop_pin: !PG9
# …
homing_retract_dist: 5
[tmc2209 stepper_y]
# …
Po úpravě:
[stepper_x]
endstop_pin: tmc2209_stepper_x:virtual_endstop
# …
homing_retract_dist: 0
[tmc2209 stepper_x]
# …
diag_pin: ^PG6 # použijete stejný pin co jste měli nastavený jako endstop_pin!
driver_SGTHRS: 255 # 255 je nejvetší citlivost pro detekci, 0 je nejmenší citlivost
[stepper_y]
# …
endstop_pin: tmc2209_stepper_y:virtual_endstop
# …
homing_retract_dist: 0
[tmc2209 stepper_y]
# …
diag_pin: ^PG9 # použijete stejný pin co jste měli nastavený jako endstop_pin!
driver_SGTHRS: 255 # 255 je nejvetší citlivost pro detekci, 0 je nejmenší citlivost
Uložíme config – save & restart
Ladění cistlivosti nárazu
Změnu citlivosti, kde hodnota 255 je největší a 0 je nejmenší, provedeme tak že si nastavíme z počátku 255 a postupně ubíráme tak, aby náraz se nám extruden nezastavoval někde uprostřed, ale až po nárazu do gantry a ten nebyl příliš silný.
Nastavíme citlivost:
SET_TMC_FIELD FIELD=SGTHRS STEPPER=stepper_x VALUE=255
Provedeme home:
G28 X0
Případně se pohneme zpět v GUI X -10 pro další test:
G91
G1 X-10 F6000
G90
Opět změníme cilivost a místo 255 nastavíme o něco méně do té doby, než jste spokojeni.
Stejný postup opakujeme pro osu Y
Nastavíme citlivost:
SET_TMC_FIELD FIELD=SGTHRS STEPPER=stepper_y VALUE=255
Provedeme home na ose Y:
G28 Y0
Případně se pohneme zpět v GUI YX -10 pro další test:
G91 G1 Y-10 F6000 G90
V mém případě s Moons motory mám obě hodnoty citlivostni nastaveny na 70:
driver_SGTHRS: 70
Makra
Kdokonalosti jen chybí sensorless makra a to homming override které používám s TAP.
Homing_override makro
[homing_override]
axes: z
set_position_z: 0
gcode:
G90
G0 Z5 F600
_HOME_X
_HOME_Y
G90
G0 X175 Y175 F6600 ## toto je pro 350 verzi, přepište si zde vaši velikost, jinak to nebude dělat home uprostřed
G28 Z
G0 Z10 F3600
Sensorless makro
To upravuje proud do motorů při home a pohne se to o kousek zpět od konce ať je zde místo pro pohyb a případný další home.
Přidejte si makra tam, kde jste zvyklí je používat.
[gcode_macro _HOME_X]
gcode:
# Always use consistent run_current on A/B steppers during sensorless homing
{% set RUN_CURRENT_X = printer.configfile.settings['tmc2209 stepper_x'].run_current|float %}
{% set RUN_CURRENT_Y = printer.configfile.settings['tmc2209 stepper_y'].run_current|float %}
{% set HOME_CURRENT = 0.7 %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CURRENT}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={HOME_CURRENT}
# Home
G28 X
# Move away
G91
G1 X-10 F1200
# Wait just a second… (give StallGuard registers time to clear)
G4 P1000
# Set current during print
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={RUN_CURRENT_X}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CURRENT_Y}
[gcode_macro _HOME_Y]
gcode:
# Set current for sensorless homing
{% set RUN_CURRENT_X = printer.configfile.settings['tmc2209 stepper_x'].run_current|float %}
{% set RUN_CURRENT_Y = printer.configfile.settings['tmc2209 stepper_y'].run_current|float %}
{% set HOME_CURRENT = 0.7 %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CURRENT}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={HOME_CURRENT}
# Home
G28 Y
# Move away
G91
G1 Y-10 F1200
# Wait just a second… (give StallGuard registers time to clear)
G4 P1000
# Set current during print
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={RUN_CURRENT_X}
SET_TMC_CURRENT STEPPER=stepper_y CURRENT={RUN_CURRENT_Y}
7. Něco navíc … jak nahrát nový firmware do Octopuse bez otáčení tiskárny, strkání SD karty, nebo propojky BOOT
Naformátujte nějakou malou microSD na FAT32 a strčte ji do Octopus desky
Zkompilujte firmware pro svou desku jak jste zvykli.
Stopneme klipper:
sudo service klipper stop
Přesuneme se do složky kde máte klipper:
cd ~/klipper
Odstraníme případné předešlé kompilace:
make clean
Provedeme nastavení HW pro který to kompilujeme:
make menuconfig
Nastavíme – toto je pro verzi F446 v1.1:

Zmáčkneme q
pro uložení a y
pro potvrzení:
make -j4
Spustíme skript, v mém případě Octopus verzi F446 v1.1:
./scripts/flash-sdcard.sh /dev/ttyACM0 btt-octopus-f446-v1.1
Úspěšné nahrání pak vypadá takto:

Opět spustíme klipper:
sudo service klipper start
Teď jen vypněte celou tiskárnu skrz Mainsail, nebo Fluid, po nějaké chvilce vypnětěte tiskárnu úplně vypínačem, chvíli počkejte a opět zapněte, Octopus si automaticky nahraje nový klipper firmware z sd karty.
Pokud máte jiný typ desky tak tímto příkazem vylistujeme a zjistíme zda to lze použít i s vaší deskou:
./scripts/flash-sdcard.sh -l
Pro tyto desky je zde podpora:
- btt-gtr
- btt-gtr-v1
- btt-octopus-f407-v1
- btt-octopus-f407-v1.0
- btt-octopus-f407-v1.1
- btt-octopus-f429-v1
- btt-octopus-f429-v1.0
- btt-octopus-f429-v1.1
- btt-octopus-f446-v1
- btt-octopus-f446-v1.0
- btt-octopus-f446-v1.1
- btt-octopus-pro-f429-v1.0
- btt-octopus-pro-f446-v1.0
- btt-skr-2-f407
- btt-skr-2-f429
- btt-skr-3
- btt-skr-e3-dip
- btt-skr-e3-turbo
- btt-skr-mini
- btt-skr-mini-e3-v1
- btt-skr-mini-e3-v1.2
- btt-skr-mini-e3-v2
- btt-skr-mini-e3-v3
- btt-skr-mini-mz
- btt-skr-mini-v1.1
- btt-skr-mini-v3
- btt-skr-pro
- btt-skr-pro-v1.1
- btt-skr-pro-v1.2
- btt-skr-se-bx
- btt-skr-turbo-v1.4
- btt-skr-v1.1
- btt-skr-v1.3
- btt-skr-v1.4
- btt002-v1
- creality-v4.2.2
- creality-v4.2.7
- fly-gemini-v2
- flyboard-mini
- fysetc-cheetah
- fysetc-cheetah-v2
- fysetc-s6-v1.2
- fysetc-s6-v2
- fysetc-spider
- fysetc-spider-v1
- generic-lpc1768
- generic-lpc1769
- mks-robin-e3
- mks-robin-e3d
- mks-sbase
- mks-sgenl-v1
- mks-sgenl-v2
- monster8
- robin_v3
- smoothieboard-v1
8. One more thing 🙂
CanBus s Rpi SB2040 a driverem motoru potřebuje chladit, hlavně pokud tisknete v uzavřeném boxu. Pro Stealthburner jsem upravil dvířka pro umístění ventilátoru 25x25x7 mm a 30x30x7 mm. Chladič driveru motoru je třeba upilovat zhruba na polovinu, pro jistotu přilepte i nějaký chladič na RP2040.
Na konec jsem navrhnul i umbilical mod. Tak nejsou třeba řetězy.
Modely naleznete zde: https://www.printables.com/cs/social/122655-locki/models

Pokud zde najdete nějakou blbost, nepřesnost, typo atď. Tak napište na discordu, nebo do diskuze, opravím.
[…] V případě že chcete používat CAN tak postupujte prosím podle našeho návodu ZDE […]