#ifndef CONFIG_H #define CONFIG_H // WiFi Configuration #define WIFI_SSID "tami" #define WIFI_PASSWORD "" // Static IP Configuration #define STATIC_IP IPAddress(10, 81, 2, 185) #define GATEWAY IPAddress(10, 81, 2, 1) #define SUBNET IPAddress(255, 255, 255, 0) #define DNS IPAddress(10, 81, 2, 1) // BTS7960 Pin Definitions #define L_EN_PIN 14 // Left Enable #define LPWM_PIN 26 // Left PWM (Reverse) #define L_IS_PIN 35 // Left Current Sense (ADC input only) #define R_EN_PIN 27 // Right Enable #define RPWM_PIN 25 // Right PWM (Forward) #define R_IS_PIN 34 // Right Current Sense (ADC input only) // PWM Configuration #define PWM_FREQ 20000 // 20kHz - reduces motor noise #define PWM_RESOLUTION 8 // 8-bit resolution (0-255) #define PWM_CHANNEL_R 0 // LEDC channel for RPWM #define PWM_CHANNEL_L 1 // LEDC channel for LPWM #define MIN_PWM_PERCENT 20 // Minimum PWM when motor is running (%) // Current Sense Configuration // BTS7960 current sense ratio: 8500:1 (kilo-amps) // With 1kΩ resistor on IS pin: V = I_motor / 8500 // ESP32 ADC: 12-bit (0-4095), 0-3.3V #define CURRENT_SENSE_RATIO 8500.0f // Amps to sense current ratio #define SENSE_RESISTOR 1000.0f // 1kΩ sense resistor (ohms) #define ADC_MAX 4095.0f // 12-bit ADC max value #define ADC_VREF 3.3f // ADC reference voltage #define CURRENT_CALIBRATION 1.0f // Calibration factor (measured current / reported current) // Stall Detection Configuration (delta-based) // Detects sudden current spikes above the rolling average #define STALL_DELTA_THRESHOLD 1.2f // Current spike above average that indicates stall (amps) #define STALL_EMA_ALPHA 0.1f // EMA smoothing factor (0.1 = slow, 0.5 = fast response) #define STALL_EMA_BASELINE 2.0f // Expected running current baseline for EMA seeding (amps) #define STALL_STABILIZE_MS 300 // Ignore stalls for this long after motor starts/changes #define STALL_CONFIRM_MS 50 // Current must exceed threshold for this long to confirm stall #define DISABLE_STALL_DETECT false // Set to true to disable stall detection // Under-current stall detection: motor commanded but drawing no current #define STALL_UNDERCURRENT_THRESHOLD 0.5f // If current below this for too long = stall (amps) #define STALL_UNDERCURRENT_MS 1000 // Under-current must persist this long to confirm stall // Repeated spike stall detection: catches oscillating stall (driver protection cycling) #define STALL_CANDIDATE_COUNT 5 // Number of stall candidates in window to confirm stall #define STALL_CANDIDATE_WINDOW_MS 2000 // Time window for counting stall candidates // Web Server #define HTTP_PORT 80 #endif