|
|
|
@ -228,44 +228,23 @@ MEASAirspeed::collect()
@@ -228,44 +228,23 @@ MEASAirspeed::collect()
|
|
|
|
|
// the raw value still should be compensated for the known offset
|
|
|
|
|
diff_press_pa_raw -= _diff_pres_offset; |
|
|
|
|
|
|
|
|
|
float diff_press_pa = fabsf(diff_press_pa_raw); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
note that we return both the absolute value with offset |
|
|
|
|
applied and a raw value without the offset applied. This |
|
|
|
|
makes it possible for higher level code to detect if the |
|
|
|
|
user has the tubes connected backwards, and also makes it |
|
|
|
|
possible to correctly use offsets calculated by a higher |
|
|
|
|
level airspeed driver. |
|
|
|
|
|
|
|
|
|
With the above calculation the MS4525 sensor will produce a |
|
|
|
|
positive number when the top port is used as a dynamic port |
|
|
|
|
and bottom port is used as the static port |
|
|
|
|
|
|
|
|
|
Also note that the _diff_pres_offset is applied before the |
|
|
|
|
fabsf() not afterwards. It needs to be done this way to |
|
|
|
|
prevent a bias at low speeds, but this also means that when |
|
|
|
|
setting a offset you must set it based on the raw value, not |
|
|
|
|
the offset value |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct differential_pressure_s report; |
|
|
|
|
|
|
|
|
|
/* track maximum differential pressure measured (so we can work out top speed). */ |
|
|
|
|
if (diff_press_pa > _max_differential_pressure_pa) { |
|
|
|
|
_max_differential_pressure_pa = diff_press_pa; |
|
|
|
|
if (diff_press_pa_raw > _max_differential_pressure_pa) { |
|
|
|
|
_max_differential_pressure_pa = diff_press_pa_raw; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
report.timestamp = hrt_absolute_time(); |
|
|
|
|
report.error_count = perf_event_count(_comms_errors); |
|
|
|
|
report.temperature = temperature; |
|
|
|
|
report.differential_pressure_pa = diff_press_pa; |
|
|
|
|
report.differential_pressure_filtered_pa = _filter.apply(diff_press_pa); |
|
|
|
|
|
|
|
|
|
/* the dynamics of the filter can make it overshoot into the negative range */ |
|
|
|
|
if (report.differential_pressure_filtered_pa < 0.0f) { |
|
|
|
|
report.differential_pressure_filtered_pa = _filter.reset(diff_press_pa); |
|
|
|
|
} |
|
|
|
|
report.differential_pressure_filtered_pa = _filter.apply(diff_press_pa_raw); |
|
|
|
|
|
|
|
|
|
report.differential_pressure_raw_pa = diff_press_pa_raw; |
|
|
|
|
report.max_differential_pressure_pa = _max_differential_pressure_pa; |
|
|
|
@ -345,7 +324,7 @@ MEASAirspeed::cycle()
@@ -345,7 +324,7 @@ MEASAirspeed::cycle()
|
|
|
|
|
/**
|
|
|
|
|
correct for 5V rail voltage if the system_power ORB topic is |
|
|
|
|
available |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
See http://uav.tridgell.net/MS4525/MS4525-offset.png for a graph of
|
|
|
|
|
offset versus voltage for 3 sensors |
|
|
|
|
*/ |
|
|
|
@ -394,7 +373,7 @@ MEASAirspeed::voltage_correction(float &diff_press_pa, float &temperature)
@@ -394,7 +373,7 @@ MEASAirspeed::voltage_correction(float &diff_press_pa, float &temperature)
|
|
|
|
|
if (voltage_diff < -1.0f) { |
|
|
|
|
voltage_diff = -1.0f; |
|
|
|
|
} |
|
|
|
|
temperature -= voltage_diff * temp_slope;
|
|
|
|
|
temperature -= voltage_diff * temp_slope; |
|
|
|
|
#endif // CONFIG_ARCH_BOARD_PX4FMU_V2
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -523,7 +502,7 @@ test()
@@ -523,7 +502,7 @@ test()
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
warnx("single read"); |
|
|
|
|
warnx("diff pressure: %d pa", (int)report.differential_pressure_pa); |
|
|
|
|
warnx("diff pressure: %d pa", (int)report.differential_pressure_filtered_pa); |
|
|
|
|
|
|
|
|
|
/* start the sensor polling at 2Hz */ |
|
|
|
|
if (OK != ioctl(fd, SENSORIOCSPOLLRATE, 2)) { |
|
|
|
@ -551,7 +530,7 @@ test()
@@ -551,7 +530,7 @@ test()
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
warnx("periodic read %u", i); |
|
|
|
|
warnx("diff pressure: %d pa", (int)report.differential_pressure_pa); |
|
|
|
|
warnx("diff pressure: %d pa", (int)report.differential_pressure_filtered_pa); |
|
|
|
|
warnx("temperature: %d C (0x%02x)", (int)report.temperature, (unsigned) report.temperature); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|