diff --git a/docs/en/config/safety.md b/docs/en/config/safety.md index bf689edf83..fc81c5ab27 100644 --- a/docs/en/config/safety.md +++ b/docs/en/config/safety.md @@ -339,22 +339,22 @@ The relevant parameters are shown below: ### Motor Failure Trigger -The failure detector can be configured to detect a motor failure while armed (and trigger an associated action) if the ESC current falls outside expected bounds for more than [MOTFAIL_TIME](#MOTFAIL_TIME) seconds. +The failure detector can be configured to detect a motor failure while armed (and trigger an associated action) if the ESC current falls outside expected threshold for more than [MOTFAIL_TIME](#MOTFAIL_TIME) seconds. Motor failures are non-latching: if the failure condition clears, the failure is cleared. The undercurrent and overcurrent conditions are defined by: ```text -undercurrent: {esc current} < {MOTFAIL_C2T} * {motor command [0,1]} - {MOTFAIL_LOW_OFF} -overcurrent: {esc current} > {MOTFAIL_C2T} * {motor command [0,1]} + {MOTFAIL_HIGH_OFF} +undercurrent: {esc current} < {MOTFAIL_C2T} * {motor command [0,1]} - {MOTFAIL_OFF} +overcurrent: {esc current} > {MOTFAIL_C2T} * {motor command [0,1]} + {MOTFAIL_OFF} ``` | Parameter | Description | | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [FD_ACT_EN](../advanced_config/parameter_reference.md#FD_ACT_EN) | Enable/disable the motor failure trigger completely. | | [MOTFAIL_C2T](../advanced_config/parameter_reference.md#MOTFAIL_C2T) | Slope between normalized motor command [0–1] and expected steady-state current (FD_ACT_MOT_C2T at 100%) (A/%). | -| [MOTFAIL_LOW_OFF](../advanced_config/parameter_reference.md#MOTFAIL_LOW_OFF) | Undercurrent detection threshold offset (A). Subtracted from the expected current to form the lower bound. | -| [MOTFAIL_HIGH_OFF](../advanced_config/parameter_reference.md#MOTFAIL_HIGH_OFF) | Overcurrent detection threshold offset (A). Added to the expected current to form the upper bound. | +| [MOTFAIL_OFF](../advanced_config/parameter_reference.md#MOTFAIL_OFF) | Under/over-current detection threshold offset (A). Added to the expected current to form the upper bound. Subtracted from the expected current to form the lower bound. | + | | [MOTFAIL_TIME](../advanced_config/parameter_reference.md#MOTFAIL_TIME) | Hysteresis time (s) for which the current threshold must remain exceeded before a motor failure is triggered. | | [CA_FAILURE_MODE](../advanced_config/parameter_reference.md#CA_FAILURE_MODE) | Configure to not only warn about a motor failure but remove the first motor that detects a failure from the allocation effectiveness which turns off the motor and tries to operate the vehicle without it until disarming the next time. | diff --git a/src/modules/commander/HealthAndArmingChecks/checks/escCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/escCheck.cpp index 9fd5f76ede..37e999e146 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/escCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/escCheck.cpp @@ -250,8 +250,8 @@ uint16_t EscChecks::checkMotorStatus(const Context &context, Report &reporter, c thrust = fabsf(actuator_motors.control[actuator_function_index]); } - bool current_too_low = current < (thrust * _param_motfail_c2t.get()) - _param_motfail_low_off.get(); - bool current_too_high = current > (thrust * _param_motfail_c2t.get()) + _param_motfail_high_off.get(); + bool current_too_low = current < (thrust * _param_motfail_c2t.get()) - _param_motfail_off.get(); + bool current_too_high = current > (thrust * _param_motfail_c2t.get()) + _param_motfail_off.get(); _esc_undercurrent_hysteresis[i].set_hysteresis_time_from(false, _param_motfail_time.get() * 1_s); _esc_overcurrent_hysteresis[i].set_hysteresis_time_from(false, _param_motfail_time.get() * 1_s); diff --git a/src/modules/commander/HealthAndArmingChecks/checks/escCheck.hpp b/src/modules/commander/HealthAndArmingChecks/checks/escCheck.hpp index 74f9a56d9d..ab7a2986c2 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/escCheck.hpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/escCheck.hpp @@ -76,6 +76,5 @@ private: (ParamBool) _param_fd_act_en, (ParamFloat) _param_motfail_c2t, (ParamFloat) _param_motfail_time, - (ParamFloat) _param_motfail_low_off, - (ParamFloat) _param_motfail_high_off); + (ParamFloat) _param_motfail_off); }; diff --git a/src/modules/commander/HealthAndArmingChecks/esc_check_params.yaml b/src/modules/commander/HealthAndArmingChecks/esc_check_params.yaml index a1170bc592..09b77827d9 100644 --- a/src/modules/commander/HealthAndArmingChecks/esc_check_params.yaml +++ b/src/modules/commander/HealthAndArmingChecks/esc_check_params.yaml @@ -26,21 +26,10 @@ parameters: unit: A/% decimal: 2 increment: 1 - MOTFAIL_LOW_OFF: + MOTFAIL_OFF: description: - short: Undercurrent motor failure limit offset - long: threshold = FD_ACT_MOT_C2T * thrust - FD_ACT_LOW_OFF - type: float - default: 10.0 - min: 0 - max: 30 - unit: A - decimal: 2 - increment: 1 - MOTFAIL_HIGH_OFF: - description: - short: Overcurrent motor failure limit offset - long: threshold = FD_ACT_MOT_C2T * thrust + FD_ACT_HIGH_OFF + short: Under/over-current motor failure limit offset + long: Check is triggered if `abs(FD_ACT_MOT_C2T * thrust - FD_ACT_OFF)` is above this value. type: float default: 10.0 min: 0