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?
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.
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