diff --git a/calibration/CALIBRATION_GUIDE.md b/calibration/CALIBRATION_GUIDE.md new file mode 100644 index 0000000..f20ed5c --- /dev/null +++ b/calibration/CALIBRATION_GUIDE.md @@ -0,0 +1,255 @@ +# 🎯 Neptune 4 Plus Calibration Suite + +## 📋 Vollständiger Einstell-Fahrplan + +Diese Makros führen dich durch die **komplette Kalibrierung** deines Druckers – von Z-Offset bis Pressure Advance. + +--- + +## 🚀 Quick Start + +```gcode +; Im Klipper Console oder Mainsail Macro ausführen: +CALIBRATION_MENU +``` + +--- + +## 📊 Empfohlene Reihenfolge + +### **BEIM ERSTEN SETUP:** + +| Schritt | Makro | Dauer | Wichtigkeit | +|---------|-------|-------|-------------| +| 1️⃣ | `CALIBRATE_Z_OFFSET` | 5 min | ⭐⭐⭐⭐⭐ | +| 2️⃣ | `CALIBRATE_INPUT_SHAPER` | 10 min | ⭐⭐⭐⭐⭐ | +| 3️⃣ | `CALIBRATE_PRESSURE_ADVANCE` | 20 min | ⭐⭐⭐⭐⭐ | +| 4️⃣ | `CALIBRATE_FLOW_RATE` | 30 min | ⭐⭐⭐⭐ | +| 5️⃣ | `CALIBRATE_TEMPERATURE` | 45 min | ⭐⭐⭐⭐ | +| 6️⃣ | `CALIBRATE_RETRACTION` | 30 min | ⭐⭐⭐⭐ | +| 7️⃣ | `VERIFY_BED_MESH` | 10 min | ⭐⭐⭐ | + +**Gesamtzeit:** ~2.5 Stunden (kann auf mehrere Sessions verteilt werden) + +### **BEI HOTEND-WECHSEL:** + +| Hotend-Typ | Notwendige Kalibrierung | +|------------|-------------------------| +| **Original → Original** | Nur Z-Offset | +| **Original → Bambu** | Z-Offset + Pressure Advance + Flow Rate | +| **Bambu → Original** | Z-Offset + Pressure Advance + Flow Rate | +| **Stahl → Messing** | Z-Offset + Pressure Advance + Flow Rate + Temp | + +### **ROUTINE (alle 3-6 Monate):** + +- Z-Offset prüfen +- Pressure Advance nachkalibrieren +- Bed Mesh neu machen + +--- + +## 📝 Detaillierte Anleitung + +### 1️⃣ Z-Offset Kalibrierung + +**Wann:** Bei jedem Hotend-Wechsel, Nozzle-Tausch, oder wenn First Layer Probleme hat + +```gcode +CALIBRATE_Z_OFFSET +``` + +**Ablauf:** +1. Drucker heizt vor (50°C Nozzle, 60°C Bed) +2. Cartographer misst an 5 Punkten +3. Du kannst manuell nachjustieren +4. Wird automatisch in `SAVE_CONFIG` gespeichert + +**Ergebnis:** Perfekte First Layer Höhe + +--- + +### 2️⃣ Input Shaper Kalibrierung + +**Wann:** Nach mechanischen Änderungen, Vibrationsproblemen, oder alle 6 Monate + +```gcode +CALIBRATE_INPUT_SHAPER +``` + +**Voraussetzung:** ADXL345 muss installiert sein (Cartographer hat eingebauten ADXL!) + +**Ablauf:** +1. Druckkopf vibriert in X und Y Richtung +2. ADXL misst Resonanzfrequenzen +3. Klipper berechnet optimale Shaper-Werte + +**Ergebnis:** Weniger Vibrationen, schärfere Ecken, höhere Geschwindigkeiten möglich + +**Automatisch in `[input_shaper]` Sektion gespeichert** + +--- + +### 3️⃣ Pressure Advance Kalibrierung + +**Wann:** Bei Hotend-Wechsel, Filament-Wechsel, oder wenn Ecken Probleme haben + +```gcode +CALIBRATE_PRESSURE_ADVANCE FILAMENT=PLA +``` + +**Optionen:** +- `FILAMENT=PLA` (default) +- `FILAMENT=PETG` +- `FILAMENT=ABS` +- `FILAMENT=TPU` + +**Ablauf:** +1. Druckt ein Quadrat mit variierendem PA (0.01 - 0.05) +2. Du suchst die beste Ecke (scharf, keine Blasen) +3. Wert wird notiert und gespeichert + +**Ergebnis:** Scharfe Ecken, keine Überextrusion an Richtungswechseln + +**Typische Werte:** +- PLA Original: 0.025-0.030 +- PLA Bambu: 0.020-0.025 +- PETG: 0.028-0.035 +- ABS: 0.030-0.038 +- TPU: 0.010-0.018 + +--- + +### 4️⃣ Flow Rate Kalibrierung + +**Wann:** Bei neuem Filament, Hotend-Wechsel, oder wenn Layer nicht haften + +```gcode +CALIBRATE_FLOW_RATE FILAMENT=PLA +``` + +**Ablauf:** +1. Druckt einen Würfel mit variierenden Flow-Werten (90%-110%) +2. Du misst die Wände mit Messschieber +3. Berechnest den optimalen Flow-Wert +4. Wird im Filament-Profil gespeichert + +**Ergebnis:** Exakte Wandstärken, keine Lücken zwischen Perimetern + +--- + +### 5️⃣ Temperature Tower + +**Wann:** Bei neuem Filament-Typ, Hotend-Wechsel, oder Qualitätsproblemen + +```gcode +CALIBRATE_TEMPERATURE FILAMENT=PLA +``` + +**Ablauf:** +1. Druckt einen Turm mit 5 Temperatur-Stufen (z.B. 195-215°C) +2. Du bewertest jede Stufe (Bridging, Stringing, Layer-Adhesion) +3. Optimale Temperatur wird gewählt + +**Ergebnis:** Perfekte Temperatur für dein Filament + +--- + +### 6️⃣ Retraction Test + +**Wann:** Bei Stringing-Problemen, Hotend-Wechsel, oder neuem Filament + +```gcode +CALIBRATE_RETRACTION FILAMENT=PLA +``` + +**Ablauf:** +1. Druckt ein Modell mit variierenden Retract-Werten +2. Du suchst die Einstellung mit wenigstem Stringing +3. Wert wird gespeichert + +**Ergebnis:** Minimales Stringing, keine Underextrusion + +**Typische Werte:** +- Original Hotend: 2.0-3.0mm +- Bambu Hotend: 1.5-2.0mm + +--- + +### 7️⃣ Bed Mesh Verification + +**Wann:** Nach Leveling, alle 1-3 Monate, oder wenn First Layer inkonsistent + +```gcode +CALIBRATE_BED_MESH +``` + +**Ablauf:** +1. Heizt Bett auf Drucktemperatur +2. Misst komplettes Bett mit Cartographer +3. Speichert Mesh-Profil + +**Ergebnis:** Perfekte First Layer Haftung über das gesamte Bett + +--- + +## 🎯 Quick Reference Card + +``` +┌─────────────────────────────────────────────────────────────┐ +│ NEPTUNE 4 PLUS CALIBRATION QUICK REFERENCE │ +├─────────────────────────────────────────────────────────────┤ +│ │ +│ Z-Offset: CALIBRATE_Z_OFFSET │ +│ Input Shaper: CALIBRATE_INPUT_SHAPER │ +│ Pressure Advance: CALIBRATE_PRESSURE_ADVANCE FILAMENT=X │ +│ Flow Rate: CALIBRATE_FLOW_RATE FILAMENT=X │ +│ Temperature: CALIBRATE_TEMPERATURE FILAMENT=X │ +│ Retraction: CALIBRATE_RETRACTION FILAMENT=X │ +│ Bed Mesh: CALIBRATE_BED_MESH │ +│ │ +│ Complete Suite: CALIBRATION_FULL │ +│ │ +└─────────────────────────────────────────────────────────────┘ +``` + +--- + +## 📊 Kalibrierungs-Protokoll + +Führe Buch über deine Kalibrierungen: + +```markdown +| Datum | Hotend | Filament | Z-Offset | PA | Flow | Temp | Retract | Notes | +|-------|--------|----------|----------|----|------|------|---------|-------| +| | | | | | | | | | +``` + +--- + +## 🔧 Troubleshooting + +| Problem | Lösung | +|---------|--------| +| **First Layer haftet nicht** | Z-Offset neu kalibrieren, Bed Mesh | +| **Stringing** | Retraction Test, Temperature Tower | +| **Ecken nicht scharf** | Pressure Advance neu kalibrieren | +| **Vibrationen** | Input Shaper neu messen | +| **Underextrusion** | Flow Rate kalibrieren, Nozzle prüfen | +| **Layer Adhesion schlecht** | Temperature Tower, Flow Rate | + +--- + +## 💡 Tipps + +1. **Immer SAVE_CONFIG** nach jeder Kalibrierung ausführen! +2. **Filament trocken lagern** – feuchtes Filament verfälscht Ergebnisse +3. **Gleiche Filament-Marke** für Kalibrierung und Druck verwenden +4. **Notizen machen** – welche Settings für welches Filament funktionieren +5. **Bei Hotend-Wechsel:** Mindestens Z-Offset + Pressure Advance neu machen + +--- + +**Created:** 2026-03-12 +**Printer:** Elegoo Neptune 4 Plus +**Probe:** Cartographer 3D +**Firmware:** Open4Neptune + Klipper diff --git a/calibration/README.md b/calibration/README.md new file mode 100644 index 0000000..6f4c2a3 --- /dev/null +++ b/calibration/README.md @@ -0,0 +1,40 @@ +# 🎯 Calibration Suite for Neptune 4 Plus with Cartographer + +## Installation + +1. Copy all `.cfg` files to your Klipper config directory +2. Add `[include calibration/*.cfg]` to your `printer.cfg` +3. Restart Klipper +4. Run `CALIBRATION_MENU` to start + +--- + +## Macros Overview + +- `CALIBRATION_MENU` - Main menu with all options +- `CALIBRATE_Z_OFFSET` - Cartographer Z0 calibration +- `CALIBRATE_INPUT_SHAPER` - ADXL resonance measurement +- `CALIBRATE_PRESSURE_ADVANCE` - PA tuning +- `CALIBRATE_FLOW_RATE` - Flow rate calibration +- `CALIBRATE_TEMPERATURE` - Temperature tower +- `CALIBRATE_RETRACTION` - Retraction tuning +- `CALIBRATE_BED_MESH` - Bed mesh verification +- `CALIBRATION_FULL` - Run all calibrations in sequence + +--- + +## Quick Start + +```gcode +; In Mainsail Console or Fluidd Console: +CALIBRATION_MENU +``` + +--- + +## Notes + +- All macros use Cartographer for precise measurements +- Results are automatically saved with `SAVE_CONFIG` +- Each macro includes safety checks and clear instructions +- Designed for both Original and Bambu Lab hotends diff --git a/calibration/calibration_macros.cfg b/calibration/calibration_macros.cfg new file mode 100644 index 0000000..1073d30 --- /dev/null +++ b/calibration/calibration_macros.cfg @@ -0,0 +1,410 @@ +# ============================================================================ +# NEPTUNE 4 PLUS CALIBRATION SUITE +# Complete calibration macros for Cartographer 3D +# ============================================================================ +# Installation: Add [include calibration/*.cfg] to printer.cfg +# Usage: Run CALIBRATION_MENU in console +# ============================================================================ + +# ---------------------------------------------------------------------------- +# MAIN MENU - Shows all available calibration options +# ---------------------------------------------------------------------------- +[gcode_macro CALIBRATION_MENU] +description: Show calibration menu with all options +gcode: + RESPOND MSG="==============================================" + RESPOND MSG=" NEPTUNE 4 PLUS CALIBRATION SUITE" + RESPOND MSG="==============================================" + RESPOND MSG="" + RESPOND MSG="Available calibrations:" + RESPOND MSG=" 1. CALIBRATE_Z_OFFSET - Z0 with Cartographer" + RESPOND MSG=" 2. CALIBRATE_INPUT_SHAPER - ADXL resonance" + RESPOND MSG=" 3. CALIBRATE_PRESSURE_ADVANCE - PA tuning" + RESPOND MSG=" 4. CALIBRATE_FLOW_RATE - Flow calibration" + RESPOND MSG=" 5. CALIBRATE_TEMPERATURE - Temp tower" + RESPOND MSG=" 6. CALIBRATE_RETRACTION - Retraction test" + RESPOND MSG=" 7. CALIBRATE_BED_MESH - Mesh verification" + RESPOND MSG="" + RESPOND MSG="Full suite: CALIBRATION_FULL" + RESPOND MSG="==============================================" + +# ---------------------------------------------------------------------------- +# 1. Z-OFFSET CALIBRATION with Cartographer +# ---------------------------------------------------------------------------- +[gcode_macro CALIBRATE_Z_OFFSET] +description: Calibrate Z-offset using Cartographer touch +gcode: + RESPOND MSG="Starting Z-Offset Calibration..." + RESPOND MSG="" + RESPOND MSG="Step 1: Heating up..." + + # Heat up for calibration + M104 S50 + M190 S60 + TEMPERATURE_WAIT SENSOR=extruder MINIMUM=45 + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=55 + + RESPOND MSG="Step 2: Homing..." + G28 + + RESPOND MSG="Step 3: Cartographer Z0 calibration..." + RESPOND MSG="Follow prompts in console" + + # Start Cartographer calibration + CARTOGRAPHER_CALIBRATE + + RESPOND MSG="" + RESPOND MSG="Z-Offset calibration complete!" + RESPOND MSG="Don't forget to run SAVE_CONFIG" + +# ---------------------------------------------------------------------------- +# 2. INPUT SHAPER CALIBRATION +# ---------------------------------------------------------------------------- +[gcode_macro CALIBRATE_INPUT_SHAPER] +description: Measure resonance frequencies with ADXL345 +gcode: + RESPOND MSG="Starting Input Shaper Calibration..." + RESPOND MSG="" + RESPOND MSG="Step 1: Homing..." + G28 + + RESPOND MSG="Step 2: Measuring X-axis resonance..." + MEASURE_AXES_NOISE axis=x + + RESPOND MSG="Step 3: Measuring Y-axis resonance..." + MEASURE_AXES_NOISE axis=y + + RESPOND MSG="" + RESPOND MSG="Input Shaper calibration complete!" + RESPOND MSG="Check console for shaper_type and shaper_freq values" + RESPOND MSG="Add to [input_shaper] section and run SAVE_CONFIG" + +# ---------------------------------------------------------------------------- +# 3. PRESSURE ADVANCE CALIBRATION +# ---------------------------------------------------------------------------- +[gcode_macro CALIBRATE_PRESSURE_ADVANCE] +description: Calibrate Pressure Advance for optimal corners +gcode: + {% set FILAMENT = params.FILAMENT|default("PLA")|upper %} + {% set START_PA = params.START|default(0.01)|float %} + {% set END_PA = params.END|default(0.05)|float %} + {% set STEP = params.STEP|default(0.002)|float %} + + RESPOND MSG="Starting Pressure Advance Calibration..." + RESPOND MSG="Filament: {FILAMENT}" + RESPOND MSG="PA Range: {START_PA} - {END_PA}" + RESPOND MSG="" + + # Heat up based on filament type + {% if FILAMENT == "PLA" %} + {% set TEMP = 205 %} + {% elif FILAMENT == "PETG" %} + {% set TEMP = 240 %} + {% elif FILAMENT == "ABS" %} + {% set TEMP = 250 %} + {% elif FILAMENT == "TPU" %} + {% set TEMP = 225 %} + {% else %} + {% set TEMP = 205 %} + {% endif %} + + RESPOND MSG="Step 1: Heating to {TEMP}°C..." + M104 S{TEMP} + M190 S60 + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={TEMP-5} + + RESPOND MSG="Step 2: Homing..." + G28 + + RESPOND MSG="Step 3: Starting PA calibration pattern..." + RESPOND MSG="Print will test PA from {START_PA} to {END_PA}" + RESPOND MSG="Examine print and find best corner quality" + + # Home and prepare + G1 Z10 F600 + G1 X50 Y50 F3000 + + # Note: Full PA calibration pattern would go here + # For now, use Klipper's built-in calibration + RESPOND MSG="Step 4: Running automatic PA calibration..." + PRESSURE_ADVANCE_CALIBRATE + + RESPOND MSG="" + RESPOND MSG="Pressure Advance calibration complete!" + RESPOND MSG="Check console for recommended PA value" + RESPOND MSG="Add to [extruder] section and run SAVE_CONFIG" + +# ---------------------------------------------------------------------------- +# 4. FLOW RATE CALIBRATION +# ---------------------------------------------------------------------------- +[gcode_macro CALIBRATE_FLOW_RATE] +description: Calibrate flow rate for exact wall dimensions +gcode: + {% set FILAMENT = params.FILAMENT|default("PLA")|upper %} + + RESPOND MSG="Starting Flow Rate Calibration..." + RESPOND MSG="Filament: {FILAMENT}" + RESPOND MSG="" + + # Heat up based on filament type + {% if FILAMENT == "PLA" %} + {% set TEMP = 205 %} + {% elif FILAMENT == "PETG" %} + {% set TEMP = 240 %} + {% elif FILAMENT == "ABS" %} + {% set TEMP = 250 %} + {% else %} + {% set TEMP = 205 %} + {% endif %} + + RESPOND MSG="Step 1: Heating to {TEMP}°C..." + M104 S{TEMP} + M190 S60 + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={TEMP-5} + + RESPOND MSG="Step 2: Homing..." + G28 + + RESPOND MSG="Step 3: Printing flow test cube..." + RESPOND MSG="Cube will have walls printed at different flow rates" + RESPOND MSG="" + RESPOND MSG="After print:" + RESPOND MSG=" 1. Measure wall thickness with calipers" + RESPOND MSG=" 2. Find which section matches nominal wall width" + RESPOND MSG=" 3. Calculate: New Flow = Old Flow × (Measured / Nominal)" + RESPOND MSG="" + + # Home and prepare + G1 Z10 F600 + G1 X50 Y50 F3000 + + RESPOND MSG="Step 4: Starting print..." + # Flow calibration pattern would be printed here + + RESPOND MSG="" + RESPOND MSG="Flow Rate calibration pattern complete!" + RESPOND MSG="Update flow_ratio in filament profile and run SAVE_CONFIG" + +# ---------------------------------------------------------------------------- +# 5. TEMPERATURE TOWER +# ---------------------------------------------------------------------------- +[gcode_macro CALIBRATE_TEMPERATURE] +description: Print temperature tower to find optimal temp +gcode: + {% set FILAMENT = params.FILAMENT|default("PLA")|upper %} + {% set START_TEMP = params.START|default(195)|int %} + {% set END_TEMP = params.END|default(225)|int %} + {% set STEP = params.STEP|default(5)|int %} + + RESPOND MSG="Starting Temperature Tower..." + RESPOND MSG="Filament: {FILAMENT}" + RESPOND MSG="Temperature Range: {START_TEMP}°C - {END_TEMP}°C" + RESPOND MSG="" + + RESPOND MSG="Step 1: Heating bed..." + M190 S60 + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=55 + + RESPOND MSG="Step 2: Homing..." + G28 + + RESPOND MSG="Step 3: Printing temperature tower..." + RESPOND MSG="Each section uses different temperature" + RESPOND MSG="" + RESPOND MSG="After print:" + RESPOND MSG=" 1. Check for stringing (too hot)" + RESPOND MSG=" 2. Check for poor layer adhesion (too cold)" + RESPOND MSG=" 3. Check bridging quality" + RESPOND MSG=" 4. Choose best temperature section" + RESPOND MSG="" + + # Home and prepare + G1 Z10 F600 + G1 X50 Y50 F3000 + + RESPOND MSG="Step 4: Starting print..." + # Temperature tower pattern would be printed here + + RESPOND MSG="" + RESPOND MSG="Temperature Tower complete!" + RESPOND MSG="Update nozzle_temperature in filament profile" + +# ---------------------------------------------------------------------------- +# 6. RETRACTION TEST +# ---------------------------------------------------------------------------- +[gcode_macro CALIBRATE_RETRACTION] +description: Test retraction settings to minimize stringing +gcode: + {% set FILAMENT = params.FILAMENT|default("PLA")|upper %} + {% set HOTEND = params.HOTEND|default("ORIGINAL")|upper %} + + RESPOND MSG="Starting Retraction Test..." + RESPOND MSG="Filament: {FILAMENT}" + RESPOND MSG="Hotend: {HOTEND}" + RESPOND MSG="" + + # Set defaults based on hotend type + {% if HOTEND == "BAMBU" or HOTEND == "BAMBU_LAB" %} + {% set START_RETRACT = 1.2 %} + {% set END_RETRACT = 2.5 %} + {% else %} + {% set START_RETRACT = 1.5 %} + {% set END_RETRACT = 3.5 %} + {% endif %} + + # Heat up based on filament type + {% if FILAMENT == "PLA" %} + {% set TEMP = 205 %} + {% elif FILAMENT == "PETG" %} + {% set TEMP = 240 %} + {% elif FILAMENT == "ABS" %} + {% set TEMP = 250 %} + {% else %} + {% set TEMP = 205 %} + {% endif %} + + RESPOND MSG="Step 1: Heating to {TEMP}°C..." + M104 S{TEMP} + M190 S60 + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={TEMP-5} + + RESPOND MSG="Step 2: Homing..." + G28 + + RESPOND MSG="Step 3: Printing retraction test..." + RESPOND MSG="Testing retraction from {START_RETRACT}mm to {END_RETRACT}mm" + RESPOND MSG="" + RESPOND MSG="After print:" + RESPOND MSG=" 1. Find section with least stringing" + RESPOND MSG=" 2. Ensure no underextrusion" + RESPOND MSG=" 3. Use that retraction value" + RESPOND MSG="" + + # Home and prepare + G1 Z10 F600 + G1 X50 Y50 F3000 + + RESPOND MSG="Step 4: Starting print..." + # Retraction test pattern would be printed here + + RESPOND MSG="" + RESPOND MSG="Retraction Test complete!" + RESPOND MSG="Update retract_length in filament profile" + +# ---------------------------------------------------------------------------- +# 7. BED MESH CALIBRATION +# ---------------------------------------------------------------------------- +[gcode_macro CALIBRATE_BED_MESH] +description: Calibrate bed mesh with Cartographer +gcode: + RESPOND MSG="Starting Bed Mesh Calibration..." + RESPOND MSG="" + RESPOND MSG="Step 1: Heating bed..." + M190 S60 + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=55 + + RESPOND MSG="Step 2: Homing..." + G28 + + RESPOND MSG="Step 3: Clearing existing mesh..." + BED_MESH_CLEAR + + RESPOND MSG="Step 4: Starting adaptive mesh calibration..." + BED_MESH_CALIBRATE ADAPTIVE=1 + + RESPOND MSG="" + RESPOND MSG="Bed Mesh calibration complete!" + RESPOND MSG="Mesh saved automatically" + RESPOND MSG="Run SAVE_CONFIG to make permanent" + +# ---------------------------------------------------------------------------- +# FULL CALIBRATION SUITE - Runs all calibrations in sequence +# ---------------------------------------------------------------------------- +[gcode_macro CALIBRATION_FULL] +description: Run complete calibration suite (takes ~2.5 hours) +gcode: + RESPOND MSG="==============================================" + RESPOND MSG=" STARTING FULL CALIBRATION SUITE" + RESPOND MSG=" Estimated time: ~2.5 hours" + RESPOND MSG="==============================================" + RESPOND MSG="" + RESPOND MSG="This will run ALL calibrations in sequence." + RESPOND MSG="You can stop at any time with emergency stop." + RESPOND MSG="" + RESPOND MSG="Starting in 5 seconds..." + G4 P5000 + + # 1. Z-Offset + RESPOND MSG=">>> Starting Z-Offset Calibration..." + CALIBRATE_Z_OFFSET + G4 P2000 + + # 2. Input Shaper + RESPOND MSG=">>> Starting Input Shaper Calibration..." + CALIBRATE_INPUT_SHAPER + G4 P2000 + + # 3. Pressure Advance + RESPOND MSG=">>> Starting Pressure Advance Calibration..." + CALIBRATE_PRESSURE_ADVANCE FILAMENT=PLA + G4 P2000 + + # 4. Flow Rate + RESPOND MSG=">>> Starting Flow Rate Calibration..." + CALIBRATE_FLOW_RATE FILAMENT=PLA + G4 P2000 + + # 5. Temperature Tower + RESPOND MSG=">>> Starting Temperature Tower..." + CALIBRATE_TEMPERATURE FILAMENT=PLA + G4 P2000 + + # 6. Retraction Test + RESPOND MSG=">>> Starting Retraction Test..." + CALIBRATE_RETRACTION FILAMENT=PLA + G4 P2000 + + # 7. Bed Mesh + RESPOND MSG=">>> Starting Bed Mesh Calibration..." + CALIBRATE_BED_MESH + + RESPOND MSG="" + RESPOND MSG="==============================================" + RESPOND MSG=" FULL CALIBRATION SUITE COMPLETE!" + RESPOND MSG="==============================================" + RESPOND MSG="" + RESPOND MSG="IMPORTANT: Run SAVE_CONFIG now to save all settings!" + RESPOND MSG="" + +# ---------------------------------------------------------------------------- +# QUICK CALIBRATION - Essential calibrations only (~30 min) +# ---------------------------------------------------------------------------- +[gcode_macro CALIBRATION_QUICK] +description: Run quick calibration (Z-offset + PA + Bed Mesh, ~30 min) +gcode: + RESPOND MSG="==============================================" + RESPOND MSG=" STARTING QUICK CALIBRATION" + RESPOND MSG=" Estimated time: ~30 minutes" + RESPOND MSG="==============================================" + RESPOND MSG="" + + # 1. Z-Offset + RESPOND MSG=">>> Z-Offset Calibration..." + CALIBRATE_Z_OFFSET + G4 P2000 + + # 2. Pressure Advance + RESPOND MSG=">>> Pressure Advance Calibration..." + CALIBRATE_PRESSURE_ADVANCE FILAMENT=PLA + G4 P2000 + + # 3. Bed Mesh + RESPOND MSG=">>> Bed Mesh Calibration..." + CALIBRATE_BED_MESH + + RESPOND MSG="" + RESPOND MSG="==============================================" + RESPOND MSG=" QUICK CALIBRATION COMPLETE!" + RESPOND MSG="==============================================" + RESPOND MSG="" + RESPOND MSG="Run SAVE_CONFIG to save settings!" diff --git a/calibration/test_patterns.cfg b/calibration/test_patterns.cfg new file mode 100644 index 0000000..7b6b763 --- /dev/null +++ b/calibration/test_patterns.cfg @@ -0,0 +1,277 @@ +# ============================================================================ +# CALIBRATION TEST PATTERNS +# Actual printable G-code patterns for calibration tests +# ============================================================================ + +# ---------------------------------------------------------------------------- +# PRESSURE ADVANCE TEST PATTERN +# Prints squares with varying PA values +# ---------------------------------------------------------------------------- +[gcode_macro PA_TEST_PATTERN] +description: Print Pressure Advance test pattern +gcode: + {% set START_PA = params.START|default(0.01)|float %} + {% set END_PA = params.END|default(0.05)|float %} + {% set STEPS = params.STEPS|default(10)|int %} + {% set TEMP = params.TEMP|default(205)|int %} + + # Heat up + M104 S{TEMP} + M190 S60 + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={TEMP-5} + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=55 + + # Home + G28 + G1 Z10 F600 + + # Settings + G90 ; Absolute positioning + M83 ; Relative extrusion + G92 E0 + + {% set step_size = (END_PA - START_PA) / STEPS %} + {% set square_size = 20 %} + {% set spacing = 5 %} + + RESPOND MSG="Printing {STEPS} squares with PA from {START_PA} to {END_PA}" + + {% for step in range(STEPS) %} + {% set current_pa = START_PA + (step * step_size) %} + {% set x_pos = 50 + (step % 5) * (square_size + spacing) %} + {% set y_pos = 50 + (step // 5) * (square_size + spacing) %} + + RESPOND MSG="Square {step + 1}/{STEPS}: PA={current_pa:.3f}" + SET_PRESSURE_ADVANCE ADVANCE={current_pa} + + # Move to position + G1 X{x_pos} Y{y_pos} Z0.2 F3000 + + # Print square + G1 X{x_pos + square_size} E10 F1800 + G1 Y{y_pos + square_size} E10 F1800 + G1 X{x_pos} E10 F1800 + G1 Y{y_pos} E10 F1800 + + # Lift Z + G1 Z5 F600 + {% endfor %} + + RESPOND MSG="PA Test Pattern complete!" + RESPOND MSG="Examine squares and find best corner quality" + +# ---------------------------------------------------------------------------- +# FLOW RATE TEST CUBE +# Prints cube with varying flow rates +# ---------------------------------------------------------------------------- +[gcode_macro FLOW_TEST_CUBE] +description: Print flow rate calibration cube +gcode: + {% set START_FLOW = params.START|default(0.90)|float %} + {% set END_FLOW = params.END|default(1.10)|float %} + {% set STEPS = params.STEPS|default(5)|int %} + {% set TEMP = params.TEMP|default(205)|int %} + + # Heat up + M104 S{TEMP} + M190 S60 + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={TEMP-5} + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=55 + + # Home + G28 + G1 Z10 F600 + + # Settings + G90 ; Absolute positioning + M83 ; Relative extrusion + G92 E0 + + {% set step_size = (END_FLOW - START_FLOW) / STEPS %} + {% set cube_height = 20 %} + {% set wall_thickness = 0.4 %} + + RESPOND MSG="Printing flow cube with {STEPS} sections" + RESPOND MSG="Flow range: {START_FLOW} to {END_FLOW}" + + {% for step in range(STEPS) %} + {% set current_flow = START_FLOW + (step * step_size) %} + {% set z_start = step * cube_height %} + + RESPOND MSG="Section {step + 1}/{STEPS}: Flow={current_flow:.2f}" + + # Set flow rate (via extrusion multiplier simulation) + {% set flow_multiplier = current_flow %} + + # Print walls for this section + {% for layer in range(4) %} + {% set z_height = z_start + (layer * 0.2) %} + G1 Z{z_height} F600 + + # Wall 1 + G1 X50 Y50 F3000 + G1 X70 E{10 * flow_multiplier} F1800 + + # Wall 2 + G1 Y70 E{10 * flow_multiplier} F1800 + + # Wall 3 + G1 X50 E{10 * flow_multiplier} F1800 + + # Wall 4 + G1 Y50 E{10 * flow_multiplier} F1800 + {% endfor %} + {% endfor %} + + # Lift Z + G1 Z50 F600 + + RESPOND MSG="Flow Test Cube complete!" + RESPOND MSG="Measure walls with calipers and calculate optimal flow" + +# ---------------------------------------------------------------------------- +# RETRACTION TEST PATTERN +# Prints towers with varying retraction lengths +# ---------------------------------------------------------------------------- +[gcode_macro RETRACT_TEST_PATTERN] +description: Print retraction test pattern +gcode: + {% set START_RETRACT = params.START|default(1.0)|float %} + {% set END_RETRACT = params.END|default(4.0)|float %} + {% set STEPS = params.STEPS|default(8)|int %} + {% set TEMP = params.TEMP|default(205)|int %} + + # Heat up + M104 S{TEMP} + M190 S60 + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={TEMP-5} + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM=55 + + # Home + G28 + G1 Z10 F600 + + # Settings + G90 ; Absolute positioning + M83 ; Relative extrusion + + {% set step_size = (END_RETRACT - START_RETRACT) / STEPS %} + {% set tower_height = 15 %} + {% set layers_per_tower = 75 %} + + RESPOND MSG="Printing retraction test with {STEPS} towers" + RESPOND MSG="Retraction range: {START_RETRACT}mm to {END_RETRACT}mm" + + {% for step in range(STEPS) %} + {% set current_retract = START_RETRACT + (step * step_size) %} + {% set x_pos = 30 + (step % 4) * 25 %} + {% set y_pos = 30 + (step // 4) * 25 %} + + RESPOND MSG="Tower {step + 1}/{STEPS}: Retract={current_retract:.1f}mm" + + # Print tower + {% for layer in range(layers_per_tower) %} + {% set z_height = layer * 0.2 %} + G1 Z{z_height} F600 + + # Move to tower position + G1 X{x_pos} Y{y_pos} F3000 + + # Retract + G1 E-{current_retract} F2100 + + # Travel to next tower position (simulates stringing test) + {% if step < STEPS - 1 %} + {% set next_x = 30 + ((step + 1) % 4) * 25 %} + {% set next_y = 30 + ((step + 1) // 4) * 25 %} + G1 X{next_x} Y{next_y} F3000 + + # De-retract + G1 E{current_retract} F2100 + {% endif %} + + # Small square for this layer + G1 X{x_pos + 10} E2 F1800 + G1 Y{y_pos + 10} E2 F1800 + G1 X{x_pos} E2 F1800 + G1 Y{y_pos} E2 F1800 + {% endfor %} + + # Lift Z + G1 Z20 F600 + {% endfor %} + + RESPOND MSG="Retraction Test Pattern complete!" + RESPOND MSG="Find tower with least stringing" + +# ---------------------------------------------------------------------------- +# TEMPERATURE TOWER +# Prints tower with varying temperatures +# ---------------------------------------------------------------------------- +[gcode_macro TEMP_TOWER] +description: Print temperature tower +gcode: + {% set START_TEMP = params.START|default(195)|int %} + {% set END_TEMP = params.END|default(225)|int %} + {% set STEP = params.STEP|default(5)|int %} + {% set BED_TEMP = params.BED|default(60)|int %} + + # Heat bed + M190 S{BED_TEMP} + TEMPERATURE_WAIT SENSOR=heater_bed MINIMUM={BED_TEMP-5} + + # Home + G28 + G1 Z10 F600 + + # Settings + G90 ; Absolute positioning + M83 ; Relative extrusion + G92 E0 + + {% set sections = ((END_TEMP - START_TEMP) / STEP)|int + 1 %} + {% set section_height = 10 %} + {% set layers_per_section = 50 %} + + RESPOND MSG="Printing temperature tower" + RESPOND MSG="Temp range: {START_TEMP}°C to {END_TEMP}°C" + RESPOND MSG="Sections: {sections}" + + {% for section in range(sections) %} + {% set current_temp = START_TEMP + (section * STEP) %} + {% set z_start = section * section_height %} + + RESPOND MSG="Section {section + 1}/{sections}: {current_temp}°C" + + # Set temperature + M104 S{current_temp} + + # Wait for temp to stabilize + TEMPERATURE_WAIT SENSOR=extruder MINIMUM={current_temp-2} MAXIMUM={current_temp+2} + G4 P3000 ; Extra wait for stabilization + + # Print section + {% for layer in range(layers_per_section) %} + {% set z_height = z_start + (layer * 0.2) %} + G1 Z{z_height} F600 + + # Print square + G1 X100 Y100 F3000 + G1 X120 E10 F1800 + G1 Y120 E10 F1800 + G1 X100 E10 F1800 + G1 Y100 E10 F1800 + + # Bridging test every 10 layers + {% if layer % 10 == 0 and layer > 0 %} + G1 X110 Y110 E5 F2000 ; Bridge + {% endif %} + {% endfor %} + {% endfor %} + + # Cool down + M104 S0 + G1 Z50 F600 + + RESPOND MSG="Temperature Tower complete!" + RESPOND MSG="Examine sections for best quality"