diff --git a/libraries/AP_RPM/AP_RPM.cpp b/libraries/AP_RPM/AP_RPM.cpp index 6cc2434fbf..3623fb7158 100644 --- a/libraries/AP_RPM/AP_RPM.cpp +++ b/libraries/AP_RPM/AP_RPM.cpp @@ -40,6 +40,12 @@ const AP_Param::GroupInfo AP_RPM::var_info[] = { // @Increment: 1 AP_GROUPINFO("_MAX", 2, AP_RPM, _maximum[0], 0), + // @Param: _MIN + // @DisplayName: Minimum RPM + // @Description: Minimum RPM to report + // @Increment: 1 + AP_GROUPINFO("_MIN", 3, AP_RPM, _minimum[0], 0), + #if RPM_MAX_INSTANCES > 1 // @Param: 2_TYPE // @DisplayName: Second RPM type diff --git a/libraries/AP_RPM/AP_RPM.h b/libraries/AP_RPM/AP_RPM.h index 1cdc7c5437..ac76742d81 100644 --- a/libraries/AP_RPM/AP_RPM.h +++ b/libraries/AP_RPM/AP_RPM.h @@ -52,6 +52,7 @@ public: AP_Int8 _type[RPM_MAX_INSTANCES]; AP_Float _scaling[RPM_MAX_INSTANCES]; AP_Float _maximum[RPM_MAX_INSTANCES]; + AP_Float _minimum[RPM_MAX_INSTANCES]; static const struct AP_Param::GroupInfo var_info[]; diff --git a/libraries/AP_RPM/RPM_PX4_PWM.cpp b/libraries/AP_RPM/RPM_PX4_PWM.cpp index 90b1be48fd..f8112026a6 100644 --- a/libraries/AP_RPM/RPM_PX4_PWM.cpp +++ b/libraries/AP_RPM/RPM_PX4_PWM.cpp @@ -82,6 +82,7 @@ void AP_RPM_PX4_PWM::update(void) uint16_t count = 0; const float scaling = ap_rpm._scaling[state.instance]; float maximum = ap_rpm._maximum[state.instance]; + float minimum = ap_rpm._minimum[state.instance]; float quality = 0; while (::read(_fd, &pwm, sizeof(pwm)) == sizeof(pwm)) { @@ -91,7 +92,7 @@ void AP_RPM_PX4_PWM::update(void) } float rpm = scaling * (1.0e6f * 60) / pwm.period; float filter_value = signal_quality_filter.get(); - if (maximum <= 0 || rpm <= maximum) { + if ((maximum <= 0 || rpm <= maximum) && (rpm >= minimum)) { state.rate_rpm = signal_quality_filter.apply(rpm); if (is_zero(filter_value)){ quality = 0;