Installa e configura Klipper

Video: test di stampa per taratura della funzione input shaper a 100mm/s, accelerazione 5000mm/s^2

Un breve tutorial su come installare e configurare Klipper sulla tua stampante 3D usando un PC Windows.
Questo articolo è sostanzialmente una traduzione e semplificazione dell’ottimo tutorial presente sulla pagina ufficiale di Klipper

Perché Klipper?

Pagina ufficiale di Klipper

Klipper permette di gestire la stampante in modo molto flessibile, utilizza un metodo cinematico per il calcolo del movimento (Marlin usa una stima calcolata con l’algoritmo di Bresenham), può compensare artefatti dovuti a carenze meccaniche della stampante come il ghosting (input_shaper), permette di aumentare notevolmente velocità ed accelerazione di stampa, la configurazione hardware della stampante è modificabile senza riflashare, utilizza una gestione speciale degli endstop per sincronizzare l’arresto con la fase dei motori per aumentare l’accuratezza di homing (endstop_phase).

Se possiedi una scheda a 8bit e OctoPrint, passare a Klipper offrirà dei sicuri vantaggi in termini di velocità, qualità e flessibiltà d’uso.

Se hai già una scheda a 32bit, il vantaggio si può ridurre.


Occorrente

  • Dimestichezza con la lingua inglese. Il 99% della documentazione e forum di supporto sono in Inglese!
  • Raspberry PI 3 o 4 con installato OctoPrint
  • Dimestichezza nell’utilizzo di OctoPrint
  • Il Raspberry deve poter accedere a internet (servirà per scaricare Klipper)
  • Devi sapere come caricare un firmware sulla tua scheda.
    Per le schede basate su Arduino è sufficiente avere il bootloader e conoscere il tipo di microcontrollore che utilizza. (Se hai una scheda a 8 bit basata su RAMPS, il microcontrollore è molto probabilmente un AVR Atmega2560, nelle schede MELZI a 8bit della Ender il microcontrollore è Atmega644p).
    Per alcune schede a 32 bit, per caricare il firmware si solito si passa tramite la scheda SD.
  • Installa sul tuo PC Putty (servirà per comunicare con la console SSH del Raspberry)
  • Installa sul tuo PC Notepad++, che è un ottimo editor testuale. Una volta installato Notepad++, mediante il gestore estensioni interno installa l’estensione NppFTP (servirà per modificare il file di configurazione di Klipper direttamente dal proprio computer)

Tieni presenti le seguenti cose:

  • La stampante non potrà funzionare se il Raspberry è spento.
  • Klipper sovrascriverà il firmware della stampante con un firmware speciale, assicurati di avere la possibilità di riflashare il tuo Marlin nel caso tu voglia tornare indietro. Prendi anche nota delle impostazioni di Marlin (steps/mm, ecc…)
  • I display esterni tipo TFT35, TFT32, TFT28 non funzioneranno.
    La stampante 3D con Klipper verrà principalmente gestita da OctoPrint e il display sarà poco usato. Devi conoscere il tipo di display della tua stampante se vuoi utilizzarlo poiché andrà specificato nella configurazione. Solo questi controller display sono supportati:
    • HD44780 (display a 4 righe di testo, stile Prusa i3 MK3)
    • ST7920 (RepRapDiscount Full Graphic Smart Controller, stile Ender 3/3Pro)
    • UC1701 (MKS Mini 12864)
    • SSD1306
    • SH1106
  • Caricare GCODE tramite la SD della stampante non sarà più possibile. La stampante sarà interamente gestita da OctoPrint e potrà essere integrata direttamente nel tuo slicer. Il risultato finale è che lancerai le stampe senza nemmeno alzarti dalla sedia.

Klipper non renderà necessariamente la tua stampante più veloce, un GCODE che girava con Marlin, girerà alla stessa velocità con Klipper.
Klipper dà la possibilità di aumentare notevolmente le velocità dallo slicer e implementa algoritmi avanzati per la gestione e generazione del movimento, portando ad un leggero aumento della qualità di stampa.

Iniziamo!

Assicurati che OctoPrint sia acceso e funzionante, tramite Putty ti connetterai ad esso per dare comandi via console SSH (terminale linux).
Apri Putty e inserisci l’IP di OctoPrint, porta 22, poi clicca su Open per avviare la connessione.

Una volta connesso al Raspberry, loggati nella console, di default l’utente è pi e la password raspberry.

Una volta loggato dovresti vedere questa schermata:

Nella console, immetti i seguenti comandi seguiti da enter:
Questo comando scaricherà il sistema Klipper dentro il Raspberry dalla repository GitHub.

git clone https://github.com/KevinOConnor/klipper

Questo comando lancerà l’installazione di Klipper sul Raspberry, ci vorranno alcuni minuti per completare l’installazione.

./klipper/scripts/install-octopi.sh

Al termine dell’installazione immetti questo comando per spostarti nella cartella di installazione di Klipper.

cd ~/klipper/

Ora bisogna configurare il firmware che verrà caricato sulla scheda di controllo della tua stampante 3d.
Usa questo comando per lanciare l’interfaccia grafica del configuratore firmware:

make menuconfig

Apparirà una schermata come la seguente; con le frecce ed enter, imposta il tipo di microprocessore della tua scheda, il modello del microprocessore, la velocità di clock e il baudrate della porta seriale. Premere Q o Esc per uscire e confermare il salvataggio.
menuconfig

Ad esempio per la mia MKS GEN L (che non è altro che una RAMPS+arduino MEGA) ho impostato

  • Architettura: AVR
  • Processore: ATMEGA2560
  • Clock: 16Mhz (Non barare, devi impostare la frequenza del quarzo saldato sulla scheda, di solito è 16Mhz)
  • 250000 bit/secondo

Dopo aver impostato il microcontrollore, con questo comando viene iniziata la compilazione del firmware, che avverrà direttamente sul Raspberry e richiederà qualche minuto.

make

Se la compilazione è andata a buon fine, la console dorvebbe apparire così:

Ora siamo pronti a caricare il firmware sulla tue scheda!
Collega la scheda della stampante ad una porta USB del Raspberry ed esegui questo comando per conoscere il nome del dispositivo.

ls /dev/serial/by-id/*

Il responso dovrebbe essere qualcosa tipo

/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0

Ferma il servizio Klipper

sudo service klipper stop

Flasha il firmware sulla tua scheda.
Nel parametro FLASH_DEVICE scrivi il nome del dispositivo hardware visualizzato poco fa.

make flash FLASH_DEVICE=/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0

Riavvia il servizio Klipper.

sudo service klipper start

Abbiamo finito di installare Klipper!

Ora bisogna configurare OctoPrint per comunicare con il servizio Klipper.
Accedi ad OctoPrint e nella scheda impostazioni (la chiave inglese in alto) vai in “Serial Connection” e nel riquadro “Additional serial ports” aggiungi

/tmp/printer

Salva le impostazioni e ritorna nelle impostazioni Serial Connection.
Come “Serial Port” dovresti poter selezionare “/tmp/printer”, come in questa immagine:

Nella sezione “Behaviour”, seleziona “Cancel any ongoing prints but stay connected to the printer”. Salva le impostazioni.

Dalla pagina principale di OctoPrint, connettiti alla stampante “/tmp/printer”

Se tutto va bene, dovresti visualizzare lo stato “Operational”, questo vuol dire che Octoprint sta comunicando con il servizio Klipper, che a sua volta comunicherà con la stampante via USB.

Una volta connesso, vai nella scheda “Terminal” e invia il comando

status

Il servizio klipper risponderà con un messaggio sullo stato della stampante, probabilmente a questo punto sarà un errore, poiché non abbiamo ancora impostato nessun file di configurazione printer.cfg.

(Opzionale) Installa il plugin OctoKlipper

Per rendere più agevole l’uso di Klipper suggerisco di installare su OctoPrint il plugin OctoKlipper, sarà possibile creare dei pulsanti macro per avere delle azioni rapide a portata di mouse.

Comandi base di Klipper

Klipper supporta tutti i comandi standard GCODE, non tutti gli MCODE di Marlin, e in aggiunta ha dei comandi proprietari per interagire con la stampante.
I più importanti sono:

STATUS
Serve per conoscere lo stato della comunicazione tra il servizio Klipper e il firmware ma anche per sapere se il file di configurazione printer.cfg contiene errori

RESTART
Riavvia il servizion Klipper, rilegge e analizza il file printer.cfg e applica le modifiche sul firmware.

FIRMWARE_RESTART
Riavvia il firmware sulla stampante, necessario in caso di blocco ad esempio errori sul termistore, thermal runaway, errori di homing

Cos’è il file printer.cfg

Questo file è fondamentale e contiene tutti i parametri della stampante; corrisponde più o meno come funzione ai file pins.h, Configuration.h e Configuration_adv.h del vecchio Marlin, con il vantaggio che con Klipper una modifica alle impostazioni del firmware non richiede una ricompilazione, ma un semplice comando restart nel terminale di OctoPrint.
Nel file printer.cfg sono impostate le seguenti funzioni:

  • Assegnazione dei pin del processore ai pin step/dir per ogni driver stepper, inclusa eventuale configurazione UART/SPI Trinamic
  • Assegnazione dei pin per i mosfet di hotend e bed
  • Assegnazione pin analogici ai termistori
  • Impostazione area di stampa, accelerazione, velocità massima
  • Parametri pressure advance e input shaping
  • Definizione delle voci di menu personalizzate, alle quali si può associare l’esecuzione di comandi GCODE a proprio piacimento
  • …e molto altro!
  • Consulta la pagina dedicata al file printer.cfg sul sito ufficiale

Creazione iniziale printer.cfg con Notepad++ e NppFTP

Installa l’estensione NppFTP su Notepad++ e configura la connessione SFTP verso il Raspberry, poi configurala con IP e credenziali di accesso a Raspberry:

Da Notepad++ visualizza l’estensione NppFTP:

Con il pulsante ingraggio apri le impostazioni e immetti i parametri di connessione


Ora puoi connetterti al Raspberry ed elencare le cartelle:

Ora clicca col destro sulla cartella pi ed aggiungi un nuovo file chiamandolo printer.cfg

Ora hai creato il nuovo printer.cfg, che dovrebbe essere elencato.
Fai doppio clic sul file per modificarlo con Notepad++.
Dopo ogni modifica, se salvi il file, esso verrà aggiornato automaticamente sul Raspberry.

Personalizzazione del printer.cfg

Nella cartella /home/pi/klipper/config sono presenti alcuni esemplari preconfigurati per alcune stampanti più diffuse.
Se la tua stampante è inclusa puoi copiare il contenuto di uno dei file ed usarlo direttamente per il tuo printer.cfg
Se la tua stampante usa hardware customizzato allora dovrai configurarti il tuo printer.cfg

Dopo ogni modifica al file printer.cfg, dalla console di OctoPrint devi immetere il comando RESTART per applicare le modifiche e successivamente STATUS per sapere se le modificha sono state applicate e non ci sono errori di digitazione

Nella pagina ufficiale è presente un tutorial che spiega dettagliatamente ogni parametro configurabile.
In breve, ogni funzione è associabile ad un pin della scheda Arduino, ad esempio

[stepper_x]
step_pin: ar54
ar54 usa il pin 54
!ar54 usa il pin 54 e attiva il pullup
!^ar54 usa il pin 54 con pullup e nega il valore

Attenzione, la sintassi del printer.cfg è YAML, ogni sezione tra parentesi quadre ad esempio [mcu] deve avere i propri parametri impostati nel formato parametro: valore senza righe vuote tra di essi.
Il simbolo # è un commento.

Di seguito allego il mio file printer.cfg che include la personalizzazione del menu su display per fare bed levelling manuale su 16 punti.

#Ender 3 Pro con MKS GEN L 1.0
#Estrusore BMG
#16 microstep su tutti i driver
#input_shaper attivo
#bed levelling attivo

[mcu]
serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0
pin_map: arduino
baud: 250000

[printer]
kinematics: cartesian
max_velocity: 1000
max_accel: 5000
max_z_velocity: 50
max_z_accel: 500
square_corner_velocity: 5.0

[display]
#configurazione display Creality Ender 3
#su connettore EXP1 ribaltato
lcd_type: st7920
cs_pin: ar27
sclk_pin: ar25
sid_pin: ar29
encoder_pins: ^ar23, ^ar17
click_pin: ^!ar35

[stepper_x]
step_pin: ar54
dir_pin: !ar55
enable_pin: !ar38
rotation_distance: 40
microsteps: 16
full_steps_per_rotation: 200
endstop_pin: ^ar3
position_endstop: 0
position_max: 220
homing_speed: 40
homing_retract_dist: 5

[stepper_y]
step_pin: ar60
dir_pin: !ar61
enable_pin: !ar56
rotation_distance: 40
microsteps: 16
full_steps_per_rotation: 200
endstop_pin: ^ar14
position_endstop: 0
position_max: 220
homing_speed: 40
homing_retract_dist: 5

[stepper_z]
step_pin: ar46
dir_pin: ar48
enable_pin: !ar62
endstop_pin: !ar18
rotation_distance: 8
microsteps: 16
full_steps_per_rotation: 200
position_endstop: 0
position_max: 230
position_min: -2
homing_speed: 5
homing_retract_dist: 5

[extruder]
#impostare distanza per caricamento/scaricamento filamento
max_extrude_only_distance: 100.0
step_pin: ar26
dir_pin: !ar28
enable_pin: !ar24
#step_distance: quanti mm di filamento vengono estrusi per ogni step del motore
#è l'inverso del valore steps/mm impostato in marlin
#con motore da 200 step/giro, 16 microstep e BMG con rapporto 50:17 ho 415 steps/mm
#con estrusore originale ender avevo 93 step/mm
#qui ho impostato 1/415 = 0.00240964
#per migliore accuratezza nei calcoli interni a Klipper è meglio parametrizzare come gli altri assi
step_distance: 0.00240964 
nozzle_diameter: 0.400
filament_diameter: 1.750
pressure_advance: 0.010
pressure_advance_smooth_time: 0.040
heater_pin: ar10
#Type of sensor - common thermistors are "EPCOS 100K B57560G104F",
#"ATC Semitec 104GT-2", "NTC 100K beta 3950", "Honeywell 100K
#135-104LAG-J01", "NTC 100K MGB18-104F39050L32", "SliceEngineering
#450", "TDK NTCG104LH104JT1"
sensor_type: NTC 100K beta 3950
sensor_pin: analog13
#eseguire calibrazione pid hotend da console octoprint
control: pid
pid_Kp: 1
pid_Ki: 0.2
pid_Kd: 3
min_temp: 0
max_temp: 300
max_power: 1

[heater_bed]
heater_pin: ar8
sensor_type: EPCOS 100K B57560G104F
sensor_pin: analog14
#eseguire calibrazione pid hotend da console octoprint 
control: pid
pid_Kp: 54.027
pid_Ki: 0.770
pid_Kd: 948.182
min_temp: 0
max_temp: 130

[fan]
pin: ar9

[safe_z_home]
home_xy_position: 0,0
speed: 20.0
z_hop: 5.0
z_hop_speed: 20.0

#[input_shaper]
#shaper_freq_x: 62.5
#shaper_freq_y: 53.33
#shaper_type: mzv
#damping_ratio_x: 0.1
#damping_ratio_y: 0.1

[board_pins]
aliases:
    # Common EXP1 header found on many "all-in-one" ramps clones
    EXP1_1=ar37, EXP1_3=ar17, EXP1_5=ar23, EXP1_7=ar27, EXP1_9=<GND>,
    EXP1_2=ar35, EXP1_4=ar16, EXP1_6=ar25, EXP1_8=ar29, EXP1_10=<5V>,
    # EXP2 header
    EXP2_1=ar50, EXP2_3=ar31, EXP2_5=ar33, EXP2_7=ar49, EXP2_9=<GND>,
    EXP2_2=ar52, EXP2_4=ar53, EXP2_6=ar51, EXP2_8=ar41, EXP2_10=<RST>
    # Pins EXP2_1, EXP2_6, EXP2_2 are also MISO, MOSI, SCK of bus "spi"
    # Note, some boards wire: EXP2_8=<RST>, EXP2_10=ar41

[bed_mesh]
speed: 80
horizontal_move_z: 5
mesh_min: 20, 20
mesh_max: 200, 200
probe_count: 4,4
fade_start: 1.0
fade_end: 10.0
mesh_pps: 2,2

[menu __main meshBL]
type: list
enable: {not printer.idle_timeout.state == "Printing"}
name: Bed Levelling

[menu __main meshBL start]
type: command
name: Start (Z={'%.2f' % printer.toolhead.position.z})
gcode: 
    G28
    BED_MESH_CALIBRATE
    TESTZ Z=-5

[menu __main meshBL adjZpositionUp]
type: command
name: ADJ Z+
gcode: TESTZ Z=+0.05

[menu __main meshBL adjZpositionDown]
type: command
name: ADJ Z-
gcode: TESTZ Z=-0.05

[menu __main meshBL nextPoint]
type: command
name: Next Point
gcode: 
    ACCEPT
    TESTZ Z=-5

[menu __main meshBL save]
type: command
name: Save
gcode: SAVE_CONFIG