/**
 * Marlin 2.1.x Configuration.h
 * Creality CR-10 Mini
 * Board:     TH3D EZBoard v2
 * Extruder:  E3D Titan (Direct Drive)
 * Hotend:    E3D V6
 * Probe:     TH3D EZABL (inductive, NO)
 */

#pragma once
#define CONFIGURATION_H_VERSION 02010300

//===========================================================================
//============================= Getting Started ==============================
//===========================================================================

#define STRING_CONFIG_H_AUTHOR "(CR-10 Mini / TH3D EZBoard v2 / Titan DD / EZABL)"
#define CUSTOM_MACHINE_NAME "CR-10 Mini"

//===========================================================================
//============================= Motherboard ==================================
//===========================================================================

// TH3D EZBoard v2 — 32-bit STM32-based board
#define MOTHERBOARD BOARD_TH3D_EZBOARD2

//===========================================================================
//============================== Serial Port =================================
//===========================================================================

#define SERIAL_PORT 0
#define BAUDRATE 115200

//===========================================================================
//============================= Extruder =====================================
//===========================================================================

#define EXTRUDERS 1
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

//===========================================================================
//========================= Thermal Settings =================================
//===========================================================================

// E3D V6 hotend — standard NTC 100K thermistor (type 1)
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_BED 1

#define HEATER_0_MINTEMP   5
#define HEATER_0_MAXTEMP 300
#define BED_MINTEMP        5
#define BED_MAXTEMP      130

// Safety: prevent cold extrusion
#define PREVENT_COLD_EXTRUSION
#define EXTRUDE_MINTEMP 170

#define PREVENT_LENGTHY_EXTRUDE
#define EXTRUDE_MAXLENGTH 200

// Thermal runaway — always on
#define THERMAL_PROTECTION_HOTENDS
#define THERMAL_PROTECTION_BED

//===========================================================================
//============================= PID Settings =================================
//===========================================================================

// E3D V6 — run M303 E0 S200 C8 to calibrate and update these
#define PIDTEMP
#define PID_K1 0.95
#define DEFAULT_Kp  22.20
#define DEFAULT_Ki   1.08
#define DEFAULT_Kd 114.00

// Bed PID
#define PIDTEMPBED
#define DEFAULT_bedKp  10.00
#define DEFAULT_bedKi   0.023
#define DEFAULT_bedKd 305.4

//===========================================================================
//=========================== Mechanical Settings ============================
//===========================================================================

#define COREXY  // comment out if not CoreXY — CR-10 Mini is Cartesian
#undef COREXY   // CR-10 Mini is standard Cartesian

// CR-10 Mini bed: 300 x 220 x 300 (XYZ)
#define X_BED_SIZE 300
#define Y_BED_SIZE 220

#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS X_BED_SIZE
#define Y_MAX_POS Y_BED_SIZE
#define Z_MAX_POS 300

//===========================================================================
//============================= Endstops =====================================
//===========================================================================

#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUG   // EZABL signal goes to Z-MIN

// CR-10 Mini endstops are NC (normally closed)
#define X_MIN_ENDSTOP_INVERTING true
#define Y_MIN_ENDSTOP_INVERTING true
#define Z_MIN_ENDSTOP_INVERTING true   // EZABL: set false if probe LED is ON when not triggered; true if OFF
#define X_MAX_ENDSTOP_INVERTING true
#define Y_MAX_ENDSTOP_INVERTING true
#define Z_MAX_ENDSTOP_INVERTING true

#define ENDSTOPPULLUPS

//===========================================================================
//========================= Movement Settings ================================
//===========================================================================

// E3D Titan direct drive — ~415 steps/mm is a good starting point (calibrate with M92/M503)
// CR-10 Mini stock X/Y use T8 leadscrews on Z
#define DEFAULT_AXIS_STEPS_PER_UNIT   { 80.0, 80.0, 400.0, 837.0 }

#define DEFAULT_MAX_FEEDRATE          { 500, 500, 5, 60 }
#define DEFAULT_MAX_ACCELERATION      { 500, 500, 100, 5000 }

#define DEFAULT_ACCELERATION          500
#define DEFAULT_RETRACT_ACCELERATION  500
#define DEFAULT_TRAVEL_ACCELERATION   500

#define CLASSIC_JERK
#define DEFAULT_XJERK  10.0
#define DEFAULT_YJERK  10.0
#define DEFAULT_ZJERK   0.3
#define DEFAULT_EJERK   5.0

//===========================================================================
//=========================== Z Probe (EZABL) ================================
//===========================================================================

#define FIX_MOUNTED_PROBE   // EZABL is fixed mount

// EZABL probe offset from nozzle — measure and update these (X/Y in mm, Z tune with baby-stepping)
// Positive X = probe is to the right of nozzle; negative = left
#define NOZZLE_TO_PROBE_OFFSET { -44, -9, -2.0 }

#define PROBING_MARGIN 10

#define XY_PROBE_FEEDRATE (133*60)
#define Z_PROBE_FEEDRATE_FAST (8*60)
#define Z_PROBE_FEEDRATE_SLOW (Z_PROBE_FEEDRATE_FAST / 2)

#define MULTIPLE_PROBING 2

// EZABL stow/deploy not needed (fixed mount)
#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

// Auto Bed Leveling — Bilinear
#define AUTO_BED_LEVELING_BILINEAR
#define GRID_MAX_POINTS_X 5
#define GRID_MAX_POINTS_Y 5

#define RESTORE_LEVELING_AFTER_G28
#define ENABLE_LEVELING_AFTER_G28

#define Z_SAFE_HOMING
#define Z_SAFE_HOMING_X_POINT (X_BED_SIZE / 2)
#define Z_SAFE_HOMING_Y_POINT (Y_BED_SIZE / 2)

//===========================================================================
//========================== Stepper Drivers =================================
//===========================================================================

// TH3D EZBoard v2 uses TMC2209 with UART — full software current/stealthchop control
#define X_DRIVER_TYPE  TMC2209
#define Y_DRIVER_TYPE  TMC2209
#define Z_DRIVER_TYPE  TMC2209
#define E0_DRIVER_TYPE TMC2209

//===========================================================================
//=========================== LCD / Display ==================================
//===========================================================================

// CR-10 Mini stock display — RepRapDiscount Full Graphic Smart Controller
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

//===========================================================================
//============================== SD Card =====================================
//===========================================================================

#define SDSUPPORT

//===========================================================================
//========================= Extra Features ===================================
//===========================================================================

#define EEPROM_SETTINGS
#define EEPROM_AUTO_INIT

#define NOZZLE_PARK_FEATURE
#define NOZZLE_PARK_POINT { 10, (Y_BED_SIZE - 10), 20 }

#define PRINTCOUNTER

#define HOST_KEEPALIVE_FEATURE
#define DEFAULT_KEEPALIVE_INTERVAL 2

#define AUTO_REPORT_TEMPERATURES
#define AUTO_REPORT_POSITION

#define EMERGENCY_PARSER
