Klipper'a geçen ya da Klipper ile gelen bir yazıcı alan kullanıcıların çoğu aynı dört konuda takılır: input shaping, pressure advance, bed mesh ve Z ofseti. Her birinin kendi komutu var, ama sıra yanlış olunca bir ayar diğerini sessizce bozar. Bu rehberde AIOR ekibi olarak FDM yazıcılarda izlediğimiz kalibrasyon sırasını adım adım veriyoruz. Komutlar ve yapılandırma bölümleri Ekim 2026 itibarıyla klipper3d.org'daki güncel belgelerle (Config_Reference, Measuring_Resonances, Pressure_Advance, Bed_Mesh, Rotation_Distance) karşılaştırıldı. Bazı hazır yazıcılar eski bir sürüme dayanan ya da kendi makrolarını kullanan bir üretici çatalıyla (fork) gelir; böyle bir makinede önce üreticinin belgesine bakın.
1. Klipper nedir, printer.cfg nerede durur?
Klipper iki parçadan oluşur. Hareket planlamasını ve kinematik hesapları Raspberry Pi gibi tek kartlı bir bilgisayarda (SBC) ya da başka bir Linux makinede çalışan ana yazılım (Klippy) yapar; yazıcı kartındaki mikrodenetleyiciye (MCU) yüklenen aygıt yazılımı (firmware) yalnızca zamanlanmış adım ve ısıtıcı komutlarını uygular. Moonraker bu ikilinin üstünde bir API sunar; Mainsail ve Fluidd tarayıcıdan kullandığınız arayüzlerdir. Ana bilgisayar veya kart seçimi aşamasındaysanız ESP32, STM32, Raspberry Pi ve RP2040 karşılaştırmamız seçenekleri tartıyor.Bütün ayarlar printer.cfg dosyasındadır. MainsailOS veya KIAUH ile yapılan Moonraker tabanlı kurulumlarda dosya genellikle ~/printer_data/config/printer.cfg, günlük dosyası ~/printer_data/logs/klippy.log yolundadır; eski kurulumlarda ~/printer.cfg olabilir.
- Her adımdan önce yedek alın: Mainsail veya Fluidd'den dosyaları indirin ya da scp ile kopyalayın. SAVE_CONFIG tarihli bir yedek (printer-YYYYMMDD_HHMMSS.cfg) oluşturur; elle yaptığınız düzenlemelerin ise yedeği yoktur.
- SAVE_CONFIG bloğuna dokunmayın. Kalibrasyon sonuçları dosyanın sonundaki #*# satırlarına yazılır. Aynı ayar dosyanın üst kısmında da varsa Klipper onu yorum satırına çevirir; [include] edilen bir dosyadaysa SAVE_CONFIG "conflicts with included value" hatasıyla durur.
- SAVE_CONFIG Klipper'ı yeniden başlatır; baskı sırasında çalıştırmayın. RESTART yapılandırmayı yeniden yükler, FIRMWARE_RESTART ayrıca MCU'daki hata durumunu temizler.
2. Kalibrasyon sırası ve nedenleri
Her adımın sonucu bir sonrakinin girdisidir:| Adım | Komut / ayar | Neden bu sırada? |
|---|---|---|
| 1. Mekanik kontrol | Kayışlar, kasnak set vidaları, tekerler veya raylar, şase | Gevşek bir kayışı yazılım düzeltemez; sonraki ölçümler de bozulur. |
| 2. Eksen rotation_distance | Kayış adımı × kasnak diş sayısı; vidalı milde tur başına ilerleme (lead) | Donanımdan hesaplanır, ölçülerek ayarlanmaz. |
| 3. Ekstrüder rotation_distance | İşaretle, 50 mm it, ölç | Akış ve pressure advance doğru ekstrüzyonu varsayar. |
| 4. PID | PID_CALIBRATE | Sıcaklık dalgalanırsa ekstrüzyon da dalgalanır. |
| 5. Prob ofseti ve tekrarlanabilirlik | GET_POSITION, PROBE_ACCURACY | Tutarsız bir probla tesviye ve mesh anlamsızdır. |
| 6. Tabla tesviyesi | SCREWS_TILT_CALCULATE, Z_TILT_ADJUST, QUAD_GANTRY_LEVEL | Eğimi mekanik olarak giderir; mesh'e küçük farklar kalır. |
| 7. Z ofseti | PROBE_CALIBRATE veya Z_ENDSTOP_CALIBRATE | Prob belgesine göre X/Y ofsetli bir probda eğimi değiştirmek önceki sonucu geçersiz kılar. |
| 8. Bed mesh | BED_MESH_CALIBRATE | Bed_Mesh belgesi önce Z ofsetinin kalibre edilmesini ister. |
| 9. Input shaping | SHAPER_CALIBRATE veya ringing kulesi | Şekillendirici (shaper) değişince pressure advance'in yeniden ayarı gerekebilir. |
| 10. Pressure advance | TUNING_TOWER ve SET_PRESSURE_ADVANCE | Ekstrüzyon ve şekillendirici sabitlendikten sonra yapılır. |
| 11. İvme limitleri | max_accel, square_corner_velocity | Seçilen şekillendiricinin yumuşatmasına bağlıdır. |
3. rotation_distance: eksenler ve ekstrüder
Klipper adım/mm yerine rotation_distance kullanır: motorun bir tam turunda eksenin ya da filamentin aldığı yol. Marlin'deki adım/mm (steps/mm) değerinden dönüşüm: rotation_distance = (tur başına tam adım × mikro adım) / (adım/mm); örneğin 200 × 16 / 93 = 34,409.Kayışlı eksenlerde değer kayış adımı × kasnak diş sayısıdır (2 mm adımlı GT2 kayış ve 20 diş için 40); yaygın T8 trapez mil (2 mm adım, 4 ağızlı) için 8'dir. X/Y/Z'de "işaretle ve ölç" yöntemini kullanmayın; belgeye göre bu eksenler için yeterince hassas değildir ve büyük olasılıkla sonucu kötüleştirir. Dişli ekstrüderlerde gear_ratio tanımlanır; "3:1" diye satılan BMG tipi dişliler aslında 50:17'dir.
Ekstrüder için belgedeki ölç ve düzelt (measure and trim) yöntemi:
- Hotend'i baskı sıcaklığına ısıtın (Klipper varsayılan olarak 170 °C altında ekstrüzyona izin vermez).
- Filamente, ekstrüder girişinden yaklaşık 70 mm uzakta bir işaret koyun ve mesafeyi kumpasla ölçün.
- Aşağıdaki komutlarla 50 mm filamenti yavaşça itin; yaklaşık 50 saniye sürer. Arayüzdeki "Extrude" düğmesini kullanmayın; hızlı iter, oluşan basınç sonucu bozar.
- Kalan mesafeyi ölçün: gerçek itme = ilk ölçüm − son ölçüm.
- Yeni değer = eski rotation_distance × gerçek / istenen. Üç ondalık basamağa yuvarlayıp [extruder] bölümüne yazın ve RESTART verin. Fark 2 mm'yi aşıyorsa testi tekrarlayın.
Kod:
G91
G1 E50 F60
G90
4. PID kalibrasyonu
Klipper belgesine göre başka aygıt yazılımlarından veya örnek dosyalardan alınan PID değerleri çoğu zaman kötü çalışır; her yazıcıda yeniden ölçün:
Kod:
PID_CALIBRATE HEATER=extruder TARGET=210
SAVE_CONFIG
PID_CALIBRATE HEATER=heater_bed TARGET=60
SAVE_CONFIG
5. Prob ofsetleri, tabla tesviyesi ve Z ofseti
X/Y ofseti
G28 ile eksenleri sıfırlayın, tablaya bir parça maskeleme bandı yapıştırın, PROBE komutunu verin ve probun tam altını işaretleyin. GET_POSITION ile konumu not edin; G1 komutlarıyla nozulu işaretin tam üstüne getirip konumu yeniden okuyun. x_offset = nozulun X konumu − PROBE sırasındaki X konumu; y_offset aynı şekilde hesaplanır. Değerleri [probe] veya [bltouch] bölümüne yazıp RESTART verin.Tekrarlanabilirlik: PROBE_ACCURACY
Tablanın ortasında PROBE_ACCURACY çalıştırın; varsayılan olarak 10 ölçüm alır. Prob belgesine göre en büyük ve en küçük ölçüm arasındaki farkın (range) bir Z adım mesafesi ya da en fazla yaklaşık 0,005 mm olması normaldir; fark 0,025 mm'yi aşıyorsa prob tesviye için yeterince tutarlı değildir. Prob hızını düşürmeyi, bağlantı parçasını sağlamlaştırmayı veya samples ve samples_tolerance ile çoklu ölçümü deneyin. Prob sıcaklıkla kayabildiği için tesviye araçlarını hep aynı sıcaklıkta çalıştırın.Tabla tesviyesi (tramming)
- Vidalı tablalar: [screws_tilt_adjust] bölümüne, prob her vidanın üstündeyken nozulun koordinatlarını yazın ve screw_thread ile vida tipini (CW-M3, CW-M4, CW-M5 gibi) seçin. G28'den sonra SCREWS_TILT_CALCULATE çalıştırın. "adjust CW 01:15" saat yönünde bir tam tur artı çeyrek tur demektir (dakikalar saat kadranındaki dakikalardır). İlk vida referanstır; belge, bütün düzeltmeler 6 dakikanın altına inene kadar tekrarlamayı önerir.
- Birden fazla Z motoru: [z_tilt] ile Z_TILT_ADJUST, dört Z motorlu gantry'de [quad_gantry_level] ile QUAD_GANTRY_LEVEL kullanılır; ardından G28 Z vermek yaygın bir uygulamadır.
Z ofseti ve kâğıt testi
Z eksenini probla sıfırlayan yazıcılarda PROBE_CALIBRATE, fiziksel Z sınır anahtarı olanlarda Z_ENDSTOP_CALIBRATE kullanılır. İkisi de kâğıt testine dayanır: nozul ile tabla arasına normal fotokopi kâğıdı koyar, TESTZ ile hafif bir sürtünme hissedene kadar nozulu indirirsiniz. Belge, testin nozul ve tabla oda sıcaklığındayken ve nozulda plastik kalmamışken yapılmasını ister; yaklaşık 0,1 mm'lik kâğıt kalınlığı ısınmadaki genleşmeyi kabaca karşılar. Aşağıdaki G1 satırı nozulu 235 mm'lik bir tablanın ortasına getirir; koordinatları kendi tablanıza göre değiştirin:
Kod:
G28
G1 X117.5 Y117.5 Z10 F6000
PROBE_CALIBRATE
TESTZ Z=-0.1
TESTZ Z=-
ACCEPT
SAVE_CONFIG
6. Bed mesh: yapılandırma, profiller ve uyarlanabilir mesh
mesh_min ve mesh_max nozulun değil, probun koordinatlarıdır. Örnek: X/Y hareket aralığı 0–235 mm olan bir yazıcıda prob nozulun 40 mm solunda ve 10 mm önündeyse (x_offset: -40, y_offset: -10), prob X'te -40 ile 195, Y'de -10 ile 225 arasına ulaşabilir. Tabla kenarından pay bırakınca:
INI:
[bed_mesh]
speed: 120
horizontal_move_z: 5
mesh_min: 10, 10
mesh_max: 190, 220
probe_count: 5, 5
algorithm: bicubic
fade_start: 1
fade_end: 10
- Varsayılan lagrange enterpolasyonu eksen başına en fazla 6 noktaya izin verir; 7x7 gibi yoğun bir ağ için bicubic gerekir, o da her eksende en az 4 nokta ister.
- Ulaşılamayan bir nokta "Move out of range" hatası verir. Probun erişemediği kenar şeritlerde Klipper ağın en yakın kenar değerini kullanır.
- Tablayı baskı sıcaklığına getirip birkaç dakika bekledikten sonra BED_MESH_CALIBRATE çalıştırın. Ağı BED_MESH_PROFILE SAVE=pei60 ile adlandırıp SAVE_CONFIG ile kaydedin.
- Klipper 2023'ten beri default profili açılışta kendiliğinden yüklemez; START_PRINT içinde ya yeni ağ ölçün ya da BED_MESH_PROFILE LOAD=pei60 ekleyin.
- Uyarlanabilir mesh (adaptive mesh): BED_MESH_CALIBRATE ADAPTIVE=1 ADAPTIVE_MARGIN=5 yalnızca nesnelerin kapladığı alanı ölçer. Bunun için printer.cfg'de [exclude_object] bölümü, G-code dosyasında da START_PRINT'ten önce EXCLUDE_OBJECT_DEFINE satırları gerekir. Bu satırları OrcaSlicer'da "Exclude objects" seçeneği, PrusaSlicer'da Klipper G-code türüyle birlikte "Label objects: Firmware-specific" ayarı üretir; Moonraker'da [file_manager] altındaki enable_object_processing: True ise dilimleyicinin yorum olarak yazdığı nesne etiketlerini bu komutlara çevirir. [exclude_object] bölümü yoksa Klipper "Exclude objects not enabled. Using full mesh..." yazar; bölüm var ama dosyada nesne tanımı yoksa hiçbir uyarı vermeden tam ağ ölçer. Uyarlanabilir mesh devredeyse konsolda "Found 3 objects" gibi bir satır görünür. Belgeye göre uyarlanabilir mesh, tam ağdaki farkın bir katman kalınlığını aşmadığı makinelerde en iyi sonucu verir.
7. Input shaping: ivmeölçerle rezonans ölçümü
Sensör seçimi
| Sensör | Arayüz | Not |
|---|---|---|
| ADXL345 | Yalnızca SPI | Belgeye göre I2C'nin veri hızı yetmez ve çalışmaz. Az sayıda kart SDO pini GND'ye bağlanarak I2C'ye sabitlenmiştir; SPI desteğini kontrol edin. |
| LIS2DW, LIS3DH | SPI veya I2C | I2C'de 400 kbit/s hızlı mod (fast mode) gerekir. |
| MPU-9250/6050, ICM20948 ailesi | I2C (400 kbit/s) | Bazı modüllerdeki 10K çekme (pull-up) dirençleri fazla büyüktür; değiştirilmeleri ya da paralel dirençle desteklenmeleri gerekir. "mpu-unknown" olarak görünen yonga büyük olasılıkla yenilenmiş (refurbished) bir parçadır, temkinli kullanın. |
| USB ivmeölçer kartları | USB | Birçoğu RP2040 tabanlıdır ve Klipper MCU yazılımıyla ek bir [mcu] olarak çalışır; yazıcılar arasında kolay taşınır. |
ADXL345'i Raspberry Pi'ye bağlama
| ADXL345 pini | RPi pini | RPi işlevi |
|---|---|---|
| 3V3 (VCC) | 01 | 3,3 V besleme |
| GND | 06 | Toprak |
| CS | 24 | GPIO08 (SPI0_CE0_N) |
| SDO | 21 | GPIO09 (SPI0_MISO) |
| SDA | 19 | GPIO10 (SPI0_MOSI) |
| SCL | 23 | GPIO11 (SPI0_SCLK) |
Yazılım ve yapılandırma
raspi-config ile SPI'yi etkinleştirin ve Pi'yi Klipper'ın "Linux MCU"su olarak kurun (RPi_microcontroller belgesi). Ardından:
Bash:
sudo apt update
sudo apt install python3-numpy python3-matplotlib libatlas-base-dev libopenblas-dev
~/klippy-env/bin/pip install -v "numpy<1.26"
~/klippy-env/bin/python -c 'import numpy;'
INI:
[mcu rpi]
serial: /tmp/klipper_host_mcu
[adxl345]
cs_pin: rpi:None
[resonance_tester]
accel_chip: adxl345
probe_points:
117.5, 117.5, 20
Ölçüm adımları
- ACCELEROMETER_QUERY: eksenlerden biri yer çekimi ivmesini (yaklaşık 9800 mm/s²) göstermelidir. "Invalid adxl345 id (got xx vs e5)" görürseniz hemen yeniden deneyin; hata sürerse beslemeyi, kablolamayı ve lehimleri kontrol edin.
- MEASURE_AXES_NOISE: belgeye göre olağan değerler yaklaşık 1–100 arasıdır; 1000 ve üstü sensör, besleme ya da dengesiz fan sorununa işaret eder.
- Bütün fanları kapatıp SHAPER_CALIBRATE çalıştırın. İlk denemede yazıcının başında durun; titreşim aşırıya kaçarsa M112 ile durdurun ve [resonance_tester] içindeki accel_per_hz değerini varsayılanın altına (örneğin 50) indirin.
- Önerilen şekillendiriciyi SAVE_CONFIG ile kaydedin. SHAPER_CALIBRATE ve SAVE_CONFIG max_accel değerine dokunmaz; onu 9. bölümdeki gibi kendiniz belirlersiniz.
Bash:
~/klipper/scripts/calibrate_shaper.py /tmp/resonances_x_*.csv -o /tmp/shaper_calibrate_x.png
~/klipper/scripts/calibrate_shaper.py /tmp/resonances_y_*.csv -o /tmp/shaper_calibrate_y.png
Grafiği okumak ve şekillendirici seçmek
Betik her şekillendirici için bir frekans, kalan titreşim yüzdesi, yumuşatma (smoothing) değeri ve "suggested max_accel" sınırı yazar.- zv: en az yumuşatmayı yapar, frekans hatasına en duyarlı olandır.
- mzv: varsayılandır; çoğu yazıcıda iyi bir dengedir.
- ei: frekans kaymasına daha dayanıklıdır ama daha çok yumuşatır; belgeye göre baskı büyüdükçe tablası ağırlaşan bed slinger yazıcılara uygun olabilir.
- 2hump_ei, 3hump_ei: geniş ya da birden çok tepeyi bastırır; bedeli en fazla yumuşatmadır.
Sensör yoksa: ringing kulesi
docs/prints/ringing_tower.stl modelini 0,2 veya 0,25 mm katman, sıfır dolgu, sıfır üst katman, 1–2 çevre (veya 1–2 mm tabanlı vazo modu), dış çevrede 80–100 mm/s ve en fazla 3 saniyelik minimum katman süresiyle dilimleyin; dinamik ivme kontrolünü kapatın, modeli döndürmeyin. Baskıdan önce:
Kod:
SET_VELOCITY_LIMIT MINIMUM_CRUISE_RATIO=0
SET_PRESSURE_ADVANCE ADVANCE=0
SET_INPUT_SHAPER SHAPER_FREQ_X=0 SHAPER_FREQ_Y=0
TUNING_TOWER COMMAND=SET_VELOCITY_LIMIT PARAMETER=ACCEL START=1500 STEP_DELTA=500 STEP_HEIGHT=5
Kod:
RESTART
SET_VELOCITY_LIMIT MINIMUM_CRUISE_RATIO=0
SET_PRESSURE_ADVANCE ADVANCE=0
SET_INPUT_SHAPER SHAPER_TYPE=MZV
TUNING_TOWER COMMAND=SET_VELOCITY_LIMIT PARAMETER=ACCEL START=1500 STEP_DELTA=500 STEP_HEIGHT=5
8. Pressure advance ayarı
Pressure advance (PA), hızlanmada fazladan filament itip yavaşlamada geri çekerek nozuldaki basınç gecikmesini telafi eder; köşe şişmelerini ve sızmayı azaltır. Ekstrüder rotation_distance'ı ve nozul sıcaklığı ayarlanmış, input shaping tamamlanmış olmalıdır; teste başlamadan RESTART verin.docs/prints/square_tower.stl modelini yaklaşık 100 mm/s hız, sıfır dolgu ve nozul çapının %75'i kadar katman yüksekliğiyle (0,4 mm nozul için 0,3 mm) dilimleyin; dinamik ivme kontrolünü ve "scarf joint" dikişlerini kapatın, diğer ayarlar olağan kalsın. Baskıdan hemen önce:
Kod:
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=1 ACCEL=500
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.005
Köşelerin en iyi olduğu yüksekliği kumpasla ölçün; kararsız kalırsanız düşük olanı seçin ve katman değişiminin yapıldığı köşeyi hesaba katmayın. Değer = START + yükseklik × FACTOR: direct drive'da 11,0 mm için 0 + 11,0 × 0,005 = 0,055; belgedeki Bowden örneğinde 12,90 × 0,020 = 0,258. Sonucu [extruder] bölümüne pressure_advance: 0.055 olarak yazın ve RESTART verin; RESTART testin ivme ve köşe hızı ayarlarını da sıfırlar.
- Belge tipik değerleri 0,050–1,000 aralığında verir (üst uç genellikle Bowden ekstrüderlerde görülür); 1,000'e kadar belirgin iyileşme yoksa PA'yı kapatın.
- 0,200'ün üzerindeki değerlerde, normal ivmeye dönüldüğünde ekstrüder adım kaçırabilir; ivmeyi düşürün ya da PA'yı kapatın.
- pressure_advance_smooth_time varsayılan olarak 0,040 s'dir (en fazla 0,2 s); çoğu kurulumda dokunmaya gerek yoktur.
- PA filament markasına, rengine, sıcaklığa ve nozula göre değişir. Filament başına değer için dilimleyicinin filament başlangıç G-koduna SET_PRESSURE_ADVANCE ADVANCE=0.055 ekleyin; OrcaSlicer'ın filament ayarlarında ayrıca "Enable pressure advance" alanı vardır.
- PA ayarlandıktan sonra belge, dilimleyicide küçük bir geri çekme (örneğin 0,75 mm) ve silme (wipe) kullanmayı, geri çekmede Z kaldırmayı (z-lift) ise kapatmayı önerir.
9. İvme limitleri: max_accel ve köşe hızı
calibrate_shaper.py'nin önerdiği max_accel, şekillendiricinin aşırı yumuşatma yapmadan çalışabileceği teorik üst sınırdır, ayar önerisi değildir. X ve Y için verilen değerlerin küçüğünün altında, güvenlik payıyla başlayın; gerçek sınırı motor torku ve mekanik belirler. Ringing kulesindeki 0,15 mm'lik boşluk yumuşatmanın hangi ivmede başladığını gösterir; belge, titreşim ve yumuşatmadan çıkan iki değerin küçüğünü max_accel olarak seçmeyi önerir.- square_corner_velocity varsayılan 5,0 değerinde kalsın; değeri yükseltmek yumuşatmayı artırır.
- max_accel_to_decel Ağustos 2025'te kaldırıldı; eski bir yapılandırma "Option 'max_accel_to_decel' is not valid in section 'printer'" hatası verir. Satırı silin; işlevini minimum_cruise_ratio (varsayılan 0,5) üstlendi.
- printer.cfg'deki max_accel bir tavan değil, başlangıç değeridir: dilimleyicinin gönderdiği M204 veya SET_VELOCITY_LIMIT komutları onu doğrudan değiştirir. Dilimleyicideki ivme ayarlarını seçtiğiniz limitlerle uyumlu tutun.
10. START_PRINT ve END_PRINT makroları
Başlangıç ve bitiş adımlarını printer.cfg'de makro olarak tutmak, değişiklikte yeniden dilimlemeyi gereksiz kılar. Aşağıdaki iskelet Klipper'ın sample-macros.cfg örneğinden türetildi:
INI:
[exclude_object]
[gcode_macro START_PRINT]
gcode:
{% set BED_TEMP = params.BED_TEMP|default(60)|float %}
{% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(200)|float %}
M140 S{BED_TEMP}
M104 S150
G90
SET_GCODE_OFFSET Z=0.0
G28
M190 S{BED_TEMP}
BED_MESH_CALIBRATE ADAPTIVE=1
G1 Z5 F3000
M109 S{EXTRUDER_TEMP}
G92 E0
G1 X5 Y20 F5000
G1 Z0.3 F600
G1 X5 Y120 E10 F1200
G92 E0
G1 Z2 F600
[gcode_macro END_PRINT]
gcode:
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set act_z = printer.toolhead.position.z|float %}
{% set lift = [10.0, max_z - act_z]|min %}
G91
G1 E-2 F1800
G1 Z{lift} F600
G90
TURN_OFF_HEATERS
M106 S0
M84
- START_PRINT tablayı ısıtmaya başlar, ağ ölçülürken sızmasın diye nozulu 150 °C'de bekletir, eksenleri sıfırlar, tablanın ısınmasını bekler, uyarlanabilir mesh alır, nozulu baskı sıcaklığına getirir ve 0,4 mm nozul için kısa bir temizleme çizgisi (purge line) çeker. X/Y koordinatlarını kendi tablanıza göre değiştirin; Z_TILT_ADJUST veya QUAD_GANTRY_LEVEL kullanıyorsanız M190'dan sonra ekleyip G28 Z verin.
- END_PRINT filamenti 2 mm geri çeker, nozulu eksen sınırını aşmadan en fazla 10 mm kaldırır, ısıtıcıları ve fanı kapatır, motorları serbest bırakır.
Kod:
; OrcaSlicer
START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]
; PrusaSlicer / SuperSlicer
START_PRINT EXTRUDER_TEMP=[first_layer_temperature] BED_TEMP=[first_layer_bed_temperature]
; Cura
START_PRINT BED_TEMP={material_bed_temperature_layer_0} EXTRUDER_TEMP={material_print_temperature_layer_0}
11. Sorun giderme tablosu
| Hata / belirti | Olası neden | Ne yapmalı? |
|---|---|---|
| Probe triggered prior to movement | Prob hareketten önce tetiklenmiş: BLTouch hata modunda, pin mantığı ters, prob tablaya fazla yakın | Prob serbestken QUERY_PROBE "open" göstermeli (BLTouch'ta önce BLTOUCH_DEBUG COMMAND=pin_down ve COMMAND=touch_mode). Ters ise pin tanımındaki ! işaretini ve kablolamayı kontrol edin. Hata modundaki BLTouch'ı BLTOUCH_DEBUG COMMAND=reset ile sıfırlayın, Z'yi kaldırıp yeniden deneyin. |
| Timer too close (MCU kapanması) | Klipper'ın hata açıklamasına göre çoğunlukla aşırı yüklenmiş ana bilgisayar: işlemci yükü, yoğun takas (swap), disk hatası, aşırı ısınma, kararsız voltaj | Yüksek çözünürlüklü kamera yayını gibi ağır işleri azaltın; Raspberry Pi'de vcgencmd get_throttled çıktısının 0x0 olduğunu doğrulayın; kaliteli güç kaynağı ve SD kart/SSD kullanın. |
| Lost communication with MCU | USB kablosu, Pi güç kaynağı, aşırı yüklenen yazıcı güç kaynağı, ezilmiş kablolar, karışan 5 V beslemeleri | Kaliteli, kısa USB kablo kullanın; düşük voltaj uyarılarını giderin; MCU'yu tek bir 5 V kaynağından besleyin. |
| Invalid adxl345 id | SPI başlatma sorunu, kablolama, lehim, I2C'ye sabitlenmiş kart | Hemen yeniden deneyin; pin eşleşmesini, 3,3 V beslemeyi ve SPI'nin açık olduğunu kontrol edin. |
| Move out of range (mesh sırasında) | mesh_min/mesh_max prob ofsetiyle ulaşılamayan noktalar içeriyor | Probun erişim aralığını yeniden hesaplayın; BED_MESH_OUTPUT PGP=1 ile üretilen noktaları listeleyin. |
| bed_mesh: cannot exceed a probe_count of 6 | lagrange ile eksen başına 6'dan fazla nokta | algorithm: bicubic kullanın. |
| SAVE_CONFIG ... conflicts with included value | Kaydedilen ayar [include] edilen bir dosyada da tanımlı | Ayarı o dosyadan silin veya yorum satırına çevirin. |
| İvmeyi artırınca katman kayması | Motor torku yetersiz, sürücü akımı düşük, kayış veya kasnak gevşek, dilimleyici M204 ile limiti aşıyor | max_accel'i düşürün, kasnak vidalarını ve kayışları kontrol edin, sürücü akımını motor ve sürücü belgelerine göre doğrulayın. Motor seçimi için servo, step motor ve VFD seçimi rehberimize bakın. |
| Input shaping sonrası titreşim izi sürüyor | Şekillendirici etkin değil, ölçümde fan açıktı, sensör gevşekti, mekanik değişti ya da kusur aslında titreşim izi değil | SET_INPUT_SHAPER'ı parametresiz çalıştırıp etkin değerleri görün; fanlar kapalıyken yeniden ölçün; betiğin listesindeki ei veya 2hump_ei'yi kendi önerilen frekansıyla deneyin. Kusur kuledeki çentik desenini izlemiyorsa nedeni mekanik ya da ekstrüzyondur. |
12. Sık yapılan hatalar
- Pressure advance'i input shaping'den önce ayarlamak: Klipper'ın rezonans belgesi, şekillendirici ayarlandıktan sonra PA'nın yeniden ayarlanması gerekebileceğini söyler; iş iki kez yapılır.
- Soğuk tablada mesh almak: Tabla ısınınca şekli değişir, prob da sıcaklıkla kayabilir. Baskı sıcaklığında, birkaç dakika bekledikten sonra ölçün.
- Başka bir yazıcının değerlerini kopyalamak: rotation_distance, PID, Z ofseti, rezonans frekansları ve PA makineye, hatta filament makarasına özgüdür.
- rotation_distance oranını ters kurmak: Doğrusu yeni = eski × gerçek / istenen; eksik itmede değer küçülür.
Sık sorulan sorular
Input shaping için ivmeölçer şart mı?Hayır. Ringing kulesiyle frekansı elle ölçebilirsiniz; ivmeölçer daha hızlıdır ve birden çok rezonans tepesini gösterir.
ADXL345'i I2C ile bağlayabilir miyim?
Klipper belgesine göre hayır; I2C'nin veri hızı yetmez. SPI kullanın ya da I2C ile çalışan desteklenen bir sensör (MPU ailesi, LIS2DW) seçin.
Pressure advance'i ne sıklıkla ayarlamalıyım?
Yeni bir filament markasına veya rengine, farklı bir nozula ya da başka bir baskı sıcaklığına geçtiğinizde. Belge her makara için ayrı kalibrasyon önerir.
Her baskıdan önce mesh almalı mıyım?
Uyarlanabilir mesh kullanıyorsanız evet; her dosya farklı bir alanı ölçer ve belge bu ağların yeniden kullanılmamasını söyler. Kararlı bir tablada kayıtlı bir profili yüklemek de yeterli olabilir.
SHAPER_CALIBRATE'i ne zaman tekrarlamalıyım?
Kayış gerginliği, hotend, fan kanalı, tabla veya kafa ağırlığı değiştiğinde ve şekillendirici tanımları güncellendiğinde. Rutin olarak her gün çalıştırmayın.
Sonuç ve sonraki adımlar
Klipper'da iyi sonucu tek bir ayar değil, doğru sıra belirler: mekanik, rotation_distance, PID, prob ve tesviye, Z ofseti, mesh, input shaping, pressure advance ve en son ivme limitleri. Her adımdan önce printer.cfg'nin yedeğini alın, sonuçları not edin ve bir parçayı değiştirdiğinizde yalnızca etkilenen adımları tekrarlayın. Ayrıntılarda resmi Measuring Resonances, Pressure Advance ve Bed Mesh belgeleri esas alınmalıdır. Kalibre edilmiş bir yazıcı ölçüsü tutan fonksiyonel parçaların ön koşuludur; tersine mühendislik veya prototipleme için desteğe ihtiyacınız olursa AIOR'un 3D tarama, tasarım ve üretim çözümlerine göz atabilirsiniz. Takıldığınız bir adım olursa yazıcı modelinizi, Klipper sürümünüzü ve ilgili hata satırını yazarak burada yeni bir konu açın.Most people who move to Klipper, or buy a printer that ships with it, get stuck on the same four things: input shaping, pressure advance, bed mesh and Z offset. Each has its own command, but in the wrong order one setting quietly undoes another. This guide walks through the calibration order the AIOR team follows on FDM printers, step by step. Commands and config sections were checked against the current documentation on klipper3d.org (Config_Reference, Measuring_Resonances, Pressure_Advance, Bed_Mesh, Rotation_Distance) in October 2026. Some ready-made printers ship a vendor fork of Klipper that is based on an older release or uses its own macros; on those machines, read the vendor's documentation first.
1. What Klipper is and where printer.cfg lives
Klipper comes in two halves. The host software (Klippy) runs on a Raspberry Pi or another Linux single-board computer (SBC) and does the motion planning and kinematics; the firmware on the printer's microcontroller (MCU) only executes precisely timed step and heater commands. Moonraker adds an API on top, and Mainsail or Fluidd are the browser front ends. If you are still choosing the host or controller hardware, our ESP32 vs STM32 vs Raspberry Pi vs RP2040 comparison covers the trade-offs.Everything is configured in printer.cfg. On Moonraker-based installs (MainsailOS, KIAUH) it usually lives at ~/printer_data/config/printer.cfg, with the log at ~/printer_data/logs/klippy.log; older setups may use ~/printer.cfg.
- Back up before every step: download the files from Mainsail or Fluidd, or copy them with scp. SAVE_CONFIG writes a timestamped backup (printer-YYYYMMDD_HHMMSS.cfg) on its own, but your manual edits get no backup.
- Leave the SAVE_CONFIG block alone. Calibration results go into the #*# lines at the end of the file. If the same option also appears higher up, Klipper comments that line out; if it lives in a file pulled in with [include], SAVE_CONFIG stops with "conflicts with included value".
- SAVE_CONFIG restarts Klipper, so never run it mid-print. RESTART reloads the config; FIRMWARE_RESTART also clears an error state on the MCU.
2. The calibration order, and why
Each step produces the input for the next one:| Step | Command / setting | Why at this point |
|---|---|---|
| 1. Mechanical checks | Belts, pulley grub screws, wheels or rails, frame | No setting fixes a loose belt, and every later measurement would be off. |
| 2. Axis rotation_distance | Belt pitch × pulley teeth; lead per turn for a lead screw | Calculated from the hardware, not tuned by measuring. |
| 3. Extruder rotation_distance | Mark, extrude 50 mm, measure | Flow and pressure advance assume correct extrusion. |
| 4. PID | PID_CALIBRATE | Temperature swings turn into extrusion swings. |
| 5. Probe offsets and repeatability | GET_POSITION, PROBE_ACCURACY | Levelling and meshing with an inconsistent probe is pointless. |
| 6. Levelling / tramming | SCREWS_TILT_CALCULATE, Z_TILT_ADJUST, QUAD_GANTRY_LEVEL | Removes tilt mechanically so the mesh only handles small deviations. |
| 7. Z offset | PROBE_CALIBRATE or Z_ENDSTOP_CALIBRATE | Per the probe guide, changing bed tilt invalidates an earlier result when the probe has an XY offset. |
| 8. Bed mesh | BED_MESH_CALIBRATE | The Bed_Mesh guide requires a calibrated Z offset first. |
| 9. Input shaping | SHAPER_CALIBRATE or ringing tower | Pressure advance may need re-tuning once the shaper changes. |
| 10. Pressure advance | TUNING_TOWER with SET_PRESSURE_ADVANCE | Done once extrusion and shaping are settled. |
| 11. Acceleration limits | max_accel, square_corner_velocity | Depend on the smoothing of the chosen shaper. |
3. rotation_distance for the axes and the extruder
Instead of steps/mm, Klipper uses rotation_distance: how far the axis or the filament travels per full motor revolution. To convert a Marlin steps/mm value: rotation_distance = full steps per rotation × microsteps / steps_per_mm, for example 200 × 16 / 93 = 34.409.On belt axes it is belt pitch × pulley teeth (40 for a 2 mm GT2 belt on a 20-tooth pulley); a common T8 lead screw (2 mm pitch, 4 starts) gives 8. Do not use measure-and-trim on X, Y or Z: the documentation says it is not accurate enough there and will likely make things worse. Geared extruders use gear_ratio; BMG-style gears sold as "3:1" are actually 50:17.
The documented measure-and-trim procedure for the extruder:
- Heat the hotend to printing temperature (by default Klipper refuses to extrude below 170 °C).
- Mark the filament about 70 mm from the extruder inlet and measure that distance with calipers.
- Extrude 50 mm slowly with the commands below; it takes about 50 seconds. Do not use the front end's Extrude button, which runs fast enough for pressure to skew the result.
- Measure the remaining distance: actual = first reading − second reading.
- New value = old rotation_distance × actual / requested. Round to three decimals, put it in [extruder] and RESTART. If the error was more than about 2 mm, repeat the test.
Kod:
G91
G1 E50 F60
G90
4. PID tuning
The Klipper docs warn that PID values taken from other firmware or example configs often work poorly, so tune every printer:
Kod:
PID_CALIBRATE HEATER=extruder TARGET=210
SAVE_CONFIG
PID_CALIBRATE HEATER=heater_bed TARGET=60
SAVE_CONFIG
5. Probe offsets, levelling and Z offset
XY offsets
Home with G28, put a piece of painter's tape on the bed, run PROBE and mark the spot directly under the probe. Note the toolhead position with GET_POSITION, then jog the nozzle over the mark with G1 moves and read the position again. x_offset = nozzle X − X during PROBE, and the same for y_offset. Put the values in [probe] or [bltouch] and RESTART.Repeatability: PROBE_ACCURACY
Run PROBE_ACCURACY near the bed centre; it takes 10 samples by default. According to the probe guide, a range (max − min) of one Z step or up to about 0.005 mm is normal, and above 0.025 mm the probe is not accurate enough for bed levelling. Try a slower probe speed, a stiffer mount, or multiple samples with samples and samples_tolerance. Probes can drift with temperature, so always run levelling tools at the same temperature.Levelling and tramming
- Screw-adjusted beds: in [screws_tilt_adjust], list the nozzle coordinates at which the probe sits over each screw, and set screw_thread (CW-M3, CW-M4, CW-M5 and so on). After G28, run SCREWS_TILT_CALCULATE. "adjust CW 01:15" means one full turn plus a quarter, clockwise (minutes on a clock face). The first screw is the reference; the docs suggest repeating until every adjustment is under 6 minutes.
- Multiple Z motors: use Z_TILT_ADJUST with [z_tilt], or QUAD_GANTRY_LEVEL with [quad_gantry_level] on a four-motor gantry; homing Z again afterwards (G28 Z) is common practice.
Z offset and the paper test
Printers that home Z with the probe use PROBE_CALIBRATE; printers with a physical Z switch use Z_ENDSTOP_CALIBRATE. Both rely on the paper test: slide ordinary copy paper under the nozzle and step down with TESTZ until you feel slight friction. The docs ask for nozzle and bed at room temperature and a nozzle free of plastic; paper of roughly 0.1 mm stands in for the thermal expansion you get when everything heats up. The G1 line below centres the nozzle on a 235 mm bed; adjust the coordinates for yours:
Kod:
G28
G1 X117.5 Y117.5 Z10 F6000
PROBE_CALIBRATE
TESTZ Z=-0.1
TESTZ Z=-
ACCEPT
SAVE_CONFIG
6. Bed mesh: configuration, profiles and adaptive meshing
mesh_min and mesh_max are probe coordinates, not nozzle coordinates. Example: on a printer with 0–235 mm of X/Y travel whose probe sits 40 mm left of and 10 mm in front of the nozzle (x_offset: -40, y_offset: -10), the probe can reach X -40 to 195 and Y -10 to 225. Leaving a margin from the bed edges:
INI:
[bed_mesh]
speed: 120
horizontal_move_z: 5
mesh_min: 10, 10
mesh_max: 190, 220
probe_count: 5, 5
algorithm: bicubic
fade_start: 1
fade_end: 10
- The default lagrange interpolation allows at most 6 points per axis; a denser grid such as 7x7 needs bicubic, which in turn needs at least 4 points per axis.
- An unreachable point fails with "Move out of range". Along edges the probe cannot reach, Klipper applies the nearest edge value of the mesh.
- Bring the bed to printing temperature, wait a few minutes, then run BED_MESH_CALIBRATE. Name the result with BED_MESH_PROFILE SAVE=pei60 and store it with SAVE_CONFIG.
- Since 2023 Klipper no longer loads the default profile at startup; either probe a fresh mesh in START_PRINT or add BED_MESH_PROFILE LOAD=pei60.
- Adaptive meshing: BED_MESH_CALIBRATE ADAPTIVE=1 ADAPTIVE_MARGIN=5 probes only the area the objects occupy. It needs [exclude_object] in printer.cfg and EXCLUDE_OBJECT_DEFINE lines in the G-code ahead of START_PRINT. OrcaSlicer's "Exclude objects" option writes those lines, as does PrusaSlicer's "Label objects: Firmware-specific" with the Klipper G-code flavor; Moonraker's enable_object_processing: True under [file_manager] instead converts object labels that the slicer wrote as comments. Without the [exclude_object] section Klipper prints "Exclude objects not enabled. Using full mesh..."; with the section but no object definitions in the file, it quietly probes the full bed. When adaptive meshing is active, the console shows a line such as "Found 3 objects". The docs add that adaptive meshes work best on machines whose full mesh varies by no more than one layer height.
7. Input shaping: measuring resonances with an accelerometer
Choosing a sensor
| Sensor | Interface | Notes |
|---|---|---|
| ADXL345 | SPI only | The docs say I2C has too little throughput and will not work. A few boards are hard-wired for I2C with SDO tied to GND, so confirm SPI support. |
| LIS2DW, LIS3DH | SPI or I2C | I2C needs 400 kbit/s fast mode. |
| MPU-9250/6050, ICM20948 family | I2C (400 kbit/s) | Some modules ship 10K pull-ups that are too large and must be replaced or paralleled with smaller resistors; a chip reported as "mpu-unknown" is probably refurbished, so use it with caution. |
| USB accelerometer boards | USB | Many are RP2040-based and run Klipper MCU firmware as an extra [mcu]; easy to move between printers. |
Wiring an ADXL345 to a Raspberry Pi
| ADXL345 pin | RPi pin | RPi function |
|---|---|---|
| 3V3 (VCC) | 01 | 3.3 V power |
| GND | 06 | Ground |
| CS | 24 | GPIO08 (SPI0_CE0_N) |
| SDO | 21 | GPIO09 (SPI0_MISO) |
| SDA | 19 | GPIO10 (SPI0_MOSI) |
| SCL | 23 | GPIO11 (SPI0_SCLK) |
Software and configuration
Enable SPI with raspi-config and set the Pi up as Klipper's "Linux MCU" (see the RPi_microcontroller guide). Then:
Bash:
sudo apt update
sudo apt install python3-numpy python3-matplotlib libatlas-base-dev libopenblas-dev
~/klippy-env/bin/pip install -v "numpy<1.26"
~/klippy-env/bin/python -c 'import numpy;'
INI:
[mcu rpi]
serial: /tmp/klipper_host_mcu
[adxl345]
cs_pin: rpi:None
[resonance_tester]
accel_chip: adxl345
probe_points:
117.5, 117.5, 20
Running the measurement
- ACCELEROMETER_QUERY: one axis should read gravity, about 9800 mm/s². On "Invalid adxl345 id (got xx vs e5)", retry immediately; if it persists, check power, wiring and soldering.
- MEASURE_AXES_NOISE: the docs give roughly 1–100 as normal; 1000 or more points to a sensor, power or unbalanced-fan problem.
- Switch every fan off and run SHAPER_CALIBRATE. Stay with the printer the first time; if the shaking gets violent, stop with M112 and lower accel_per_hz in [resonance_tester] below its default (50, for example).
- Store the recommended shaper with SAVE_CONFIG. Neither SHAPER_CALIBRATE nor SAVE_CONFIG touches max_accel; you set that yourself, as described in section 9.
Bash:
~/klipper/scripts/calibrate_shaper.py /tmp/resonances_x_*.csv -o /tmp/shaper_calibrate_x.png
~/klipper/scripts/calibrate_shaper.py /tmp/resonances_y_*.csv -o /tmp/shaper_calibrate_y.png
Reading the graph and choosing a shaper
For every shaper the script prints a frequency, the remaining vibrations, a smoothing value and a "suggested max_accel" limit.- zv: the least smoothing, but the most sensitive to frequency errors.
- mzv: the default and a good balance on most printers.
- ei: more tolerant of frequency drift but smooths more; the docs suggest it may suit bed slingers, whose bed gets heavier as the print grows.
- 2hump_ei, 3hump_ei: suppress broad or multiple peaks, at the cost of the most smoothing.
No sensor: the ringing tower
Slice docs/prints/ringing_tower.stl with 0.2 or 0.25 mm layers, no infill or top layers, 1–2 perimeters (or vase mode with a 1–2 mm base), 80–100 mm/s on external perimeters and a minimum layer time of 3 seconds or less; disable dynamic acceleration control and do not rotate the model. Before printing:
Kod:
SET_VELOCITY_LIMIT MINIMUM_CRUISE_RATIO=0
SET_PRESSURE_ADVANCE ADVANCE=0
SET_INPUT_SHAPER SHAPER_FREQ_X=0 SHAPER_FREQ_Y=0
TUNING_TOWER COMMAND=SET_VELOCITY_LIMIT PARAMETER=ACCEL START=1500 STEP_DELTA=500 STEP_HEIGHT=5
Kod:
RESTART
SET_VELOCITY_LIMIT MINIMUM_CRUISE_RATIO=0
SET_PRESSURE_ADVANCE ADVANCE=0
SET_INPUT_SHAPER SHAPER_TYPE=MZV
TUNING_TOWER COMMAND=SET_VELOCITY_LIMIT PARAMETER=ACCEL START=1500 STEP_DELTA=500 STEP_HEIGHT=5
8. Pressure advance tuning
Pressure advance (PA) compensates for the lag of pressure in the nozzle by pushing extra filament while accelerating and pulling it back while decelerating, which reduces corner bulges and ooze. Extruder rotation_distance and nozzle temperature should already be tuned and input shaping finished; issue RESTART before the test.Slice docs/prints/square_tower.stl at around 100 mm/s, with no infill and a layer height of about 75% of the nozzle diameter (0.3 mm for a 0.4 mm nozzle). Turn off dynamic acceleration control and scarf joint seams and leave the rest at normal settings. Right before printing:
Kod:
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=1 ACCEL=500
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.005
Measure the height of the best-looking corners with calipers; when in doubt, take the lower one and ignore the corner where the layer change happens. Value = START + height × FACTOR: on a direct drive, 11.0 mm gives 0 + 11.0 × 0.005 = 0.055; the documented Bowden example is 12.90 × 0.020 = 0.258. Write pressure_advance: 0.055 in [extruder] and RESTART, which also clears the test's acceleration and cornering settings.
- The docs give typical values of 0.050–1.000, the upper end usually for Bowden setups; if nothing improves up to 1.000, leave PA disabled.
- Above about 0.200, the extruder may skip steps once normal acceleration returns; lower the acceleration or disable PA.
- pressure_advance_smooth_time defaults to 0.040 s (200 ms maximum) and rarely needs changing.
- PA depends on filament brand, colour, temperature and nozzle. For per-filament values, put SET_PRESSURE_ADVANCE ADVANCE=0.055 in the slicer's filament start G-code; OrcaSlicer's filament settings also have an "Enable pressure advance" field.
- Once PA is tuned, the docs recommend a small slicer retraction (around 0.75 mm) with wipe enabled, and turning off z-lift on retract.
9. Acceleration limits: max_accel and cornering
The max_accel that calibrate_shaper.py suggests is the theoretical ceiling at which the shaper still works without excessive smoothing; it is not a recommendation. Start below the smaller of the X and Y suggestions, with a safety margin, because motor torque and mechanics set the real limit. The 0.15 mm gap in the ringing tower shows where smoothing begins, and the docs recommend using the smaller of the two accelerations from ringing and smoothing as max_accel.- Keep square_corner_velocity at its default of 5.0; raising it adds smoothing.
- max_accel_to_decel was removed in August 2025, and an old config fails with "Option 'max_accel_to_decel' is not valid in section 'printer'". Delete the line; minimum_cruise_ratio (default 0.5) took over its job.
- max_accel in printer.cfg is a starting value, not a ceiling: M204 or SET_VELOCITY_LIMIT commands from the slicer replace it directly. Keep the slicer's acceleration settings in line with the limits you chose.
10. START_PRINT and END_PRINT macros
Keeping start and end steps as macros in printer.cfg means you can change them without re-slicing. This skeleton is derived from Klipper's sample-macros.cfg:
INI:
[exclude_object]
[gcode_macro START_PRINT]
gcode:
{% set BED_TEMP = params.BED_TEMP|default(60)|float %}
{% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(200)|float %}
M140 S{BED_TEMP}
M104 S150
G90
SET_GCODE_OFFSET Z=0.0
G28
M190 S{BED_TEMP}
BED_MESH_CALIBRATE ADAPTIVE=1
G1 Z5 F3000
M109 S{EXTRUDER_TEMP}
G92 E0
G1 X5 Y20 F5000
G1 Z0.3 F600
G1 X5 Y120 E10 F1200
G92 E0
G1 Z2 F600
[gcode_macro END_PRINT]
gcode:
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set act_z = printer.toolhead.position.z|float %}
{% set lift = [10.0, max_z - act_z]|min %}
G91
G1 E-2 F1800
G1 Z{lift} F600
G90
TURN_OFF_HEATERS
M106 S0
M84
- START_PRINT starts heating the bed, holds the nozzle at 150 °C so it does not ooze while meshing, homes, waits for the bed, runs an adaptive mesh, brings the nozzle to printing temperature and lays a short purge line sized for a 0.4 mm nozzle. Adjust the X/Y coordinates to your bed; if you use Z_TILT_ADJUST or QUAD_GANTRY_LEVEL, add it after M190 followed by G28 Z.
- END_PRINT retracts 2 mm, lifts the nozzle by up to 10 mm without exceeding the Z limit, switches off the heaters and fan and releases the motors.
Kod:
; OrcaSlicer
START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]
; PrusaSlicer / SuperSlicer
START_PRINT EXTRUDER_TEMP=[first_layer_temperature] BED_TEMP=[first_layer_bed_temperature]
; Cura
START_PRINT BED_TEMP={material_bed_temperature_layer_0} EXTRUDER_TEMP={material_print_temperature_layer_0}
11. Troubleshooting table
| Error / symptom | Likely cause | What to do |
|---|---|---|
| Probe triggered prior to movement | The probe was already triggered: BLTouch in error mode, inverted pin logic, probe too close to the bed | With the probe free, QUERY_PROBE should report "open" (on a BLTouch, first run BLTOUCH_DEBUG COMMAND=pin_down and COMMAND=touch_mode). If inverted, check the ! on the pin definition and the wiring. Reset a BLTouch in error mode with BLTOUCH_DEBUG COMMAND=reset, raise Z and retry. |
| Timer too close (MCU shutdown) | Per Klipper's error hint, usually an overloaded host: CPU load, heavy swap, disk errors, overheating, unstable voltage | Cut heavy jobs such as high-resolution webcam streams; on a Raspberry Pi check that vcgencmd get_throttled returns 0x0; use a good power supply and SD card or SSD. |
| Lost communication with MCU | USB cable, Pi power supply, overloaded printer PSU, damaged wiring, mixed 5 V supplies | Use a short, good-quality USB cable; fix under-voltage warnings; power the MCU's 5 V from a single source. |
| Invalid adxl345 id | SPI initialisation glitch, wiring, soldering, a board fixed to I2C | Retry immediately; then check the pin mapping, the 3.3 V supply and that SPI is enabled. |
| Move out of range (during meshing) | mesh_min/mesh_max include points the probe cannot reach given its offsets | Recalculate the probe's reachable area; list the generated points with BED_MESH_OUTPUT PGP=1. |
| bed_mesh: cannot exceed a probe_count of 6 | More than 6 points per axis with lagrange | Set algorithm: bicubic. |
| SAVE_CONFIG ... conflicts with included value | The saved option is also defined in an [include]d file | Delete or comment out the option in that file. |
| Layer shifts after raising acceleration | Not enough motor torque, low driver current, loose belt or pulley, slicer M204 above your limit | Lower max_accel, check pulley grub screws and belts, verify driver current against the motor and driver documentation. For motor selection, see our servo, stepper or VFD selection guide. |
| Ringing still visible after input shaping | Shaper not active, fans running during measurement, loose sensor, changed mechanics, or the defect is not ringing at all | Run SET_INPUT_SHAPER with no parameters to see the active values; re-measure with fans off; try ei or 2hump_ei from the script's list, each at its own fitted frequency. If the defect does not follow the notch pattern of the tower, the cause is mechanical or extrusion. |
12. Common mistakes
- Tuning pressure advance before input shaping: Klipper's resonance guide says PA may need re-tuning after the shaper is set, so you end up doing it twice.
- Meshing a cold bed: the bed changes shape as it heats and probes can drift with temperature. Mesh at printing temperature after a few minutes of soak.
- Copying another printer's values: rotation_distance, PID, Z offset, resonance frequencies and PA are specific to the machine, and PA even to the spool.
- Inverting the rotation_distance ratio: the correct form is new = old × actual / requested; under-extrusion makes the value smaller.
FAQ
Do I need an accelerometer for input shaping?No. The ringing tower lets you measure the frequency by hand; an accelerometer is faster and shows multiple resonance peaks.
Can I connect an ADXL345 over I2C?
Not according to the Klipper docs; I2C does not have the throughput. Use SPI, or pick a supported sensor that works over I2C (the MPU family, LIS2DW).
How often should I re-tune pressure advance?
Whenever you change filament brand or colour, nozzle or printing temperature. The docs recommend calibrating for each spool.
Should I mesh before every print?
If you use adaptive meshing, yes: each file probes a different area and the docs say adaptive meshes should not be reused. On a stable bed, loading a saved profile can be enough.
When should I re-run SHAPER_CALIBRATE?
After changing belt tension, hotend, fan duct, bed or toolhead mass, and after Klipper updates its shaper definitions. Not as a daily routine.