diff --git a/firmware/src/config.h b/firmware/src/config.h index 77bf4570..91644f40 100644 --- a/firmware/src/config.h +++ b/firmware/src/config.h @@ -31,8 +31,6 @@ #define PWM_FREQ_HZ (20000) #define SYSTICK_FREQ_HZ (1000) -#define MAX_CALIBRATION_POWER 30.0f // W - // Control parameters #define PWM_LIMIT (0.8f) #define I_INTEGRATOR_DECAY_FACTOR (0.995f) diff --git a/firmware/src/motor/motor.c b/firmware/src/motor/motor.c index a4605169..4465136d 100644 --- a/firmware/src/motor/motor.c +++ b/firmware/src/motor/motor.c @@ -88,7 +88,8 @@ bool motor_calibrate_resistance(void) { ADC_get_phase_currents(&I_phase_meas); - if (powf(V_setpoint, 2) / MAX_PHASE_RESISTANCE > MAX_CALIBRATION_POWER) + // + if (V_setpoint > MAX_CALIBRATION_VOLTAGE && I_phase_meas.A < MIN_CALIBRATION_CURRENT) { uint8_t *error_ptr = motor_get_error_ptr(); *error_ptr |= MOTOR_ERRORS_ABNORMAL_CALIBRATION_VOLTAGE; diff --git a/firmware/src/motor/motor.h b/firmware/src/motor/motor.h index 27a5616a..6f9ed6f9 100644 --- a/firmware/src/motor/motor.h +++ b/firmware/src/motor/motor.h @@ -27,11 +27,15 @@ #define MAX_PHASE_RESISTANCE (1.0f) #define MIN_PHASE_INDUCTANCE (5e-6f) #define MAX_PHASE_INDUCTANCE (1e-3f) +#define MAX_CALIBRATION_VOLTAGE (0.5f) // V +#define MIN_CALIBRATION_CURRENT (0.2f) // A #elif defined BOARD_REV_M5 #define MIN_PHASE_RESISTANCE (0.5f) #define MAX_PHASE_RESISTANCE (20.0f) #define MIN_PHASE_INDUCTANCE (1e-5f) #define MAX_PHASE_INDUCTANCE (1e-2f) +#define MAX_CALIBRATION_VOLTAGE (5.0f) // V +#define MIN_CALIBRATION_CURRENT (0.1f) // A #endif #define CAL_R_LEN (2 * PWM_FREQ_HZ)