Browse Source

AP_RPM: Add Minimum RPM parameter

mission-4.1.18
Robert Lefebvre 9 years ago committed by Andrew Tridgell
parent
commit
f04668307d
  1. 6
      libraries/AP_RPM/AP_RPM.cpp
  2. 1
      libraries/AP_RPM/AP_RPM.h
  3. 3
      libraries/AP_RPM/RPM_PX4_PWM.cpp

6
libraries/AP_RPM/AP_RPM.cpp

@ -40,6 +40,12 @@ const AP_Param::GroupInfo AP_RPM::var_info[] = { @@ -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

1
libraries/AP_RPM/AP_RPM.h

@ -52,6 +52,7 @@ public: @@ -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[];

3
libraries/AP_RPM/RPM_PX4_PWM.cpp

@ -82,6 +82,7 @@ void AP_RPM_PX4_PWM::update(void) @@ -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) @@ -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;

Loading…
Cancel
Save