diff --git a/src/drivers/differential_pressure/asp5033/ASP5033.cpp b/src/drivers/differential_pressure/asp5033/ASP5033.cpp index 3f4b05b6d891..c5e6b98b656c 100644 --- a/src/drivers/differential_pressure/asp5033/ASP5033.cpp +++ b/src/drivers/differential_pressure/asp5033/ASP5033.cpp @@ -40,6 +40,7 @@ */ #include "ASP5033.hpp" +#include ASP5033::ASP5033(const I2CSPIDriverConfig &config) : I2C(config), @@ -232,6 +233,15 @@ int ASP5033::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = _pressure; + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); + + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { + differential_pressure.differential_pressure_pa = -1.0f * _pressure; + } + + differential_pressure.temperature = _temperature ; differential_pressure.error_count = perf_event_count(_comms_errors); differential_pressure.timestamp = timestamp_sample; diff --git a/src/drivers/differential_pressure/auav/AUAV_Differential.cpp b/src/drivers/differential_pressure/auav/AUAV_Differential.cpp index 7b97f6e5cf3b..3a4243b36623 100644 --- a/src/drivers/differential_pressure/auav/AUAV_Differential.cpp +++ b/src/drivers/differential_pressure/auav/AUAV_Differential.cpp @@ -32,6 +32,7 @@ ****************************************************************************/ #include "AUAV_Differential.hpp" +#include AUAV_Differential::AUAV_Differential(const I2CSPIDriverConfig &config) : AUAV(config) @@ -46,6 +47,14 @@ void AUAV_Differential::publish_pressure(const float pressure_p, const float tem differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = pressure_p; + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); + + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { + differential_pressure.differential_pressure_pa = -1.0f * pressure_p; + } + differential_pressure.temperature = temperature_c; differential_pressure.error_count = perf_event_count(_comms_errors); _differential_pressure_pub.publish(differential_pressure); diff --git a/src/drivers/differential_pressure/ets/ETSAirspeed.cpp b/src/drivers/differential_pressure/ets/ETSAirspeed.cpp index 93193a2721dd..a5f8e6a312f5 100644 --- a/src/drivers/differential_pressure/ets/ETSAirspeed.cpp +++ b/src/drivers/differential_pressure/ets/ETSAirspeed.cpp @@ -32,6 +32,7 @@ ****************************************************************************/ #include "ETSAirspeed.hpp" +#include ETSAirspeed::ETSAirspeed(const I2CSPIDriverConfig &config) : I2C(config), @@ -113,6 +114,14 @@ int ETSAirspeed::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); + + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { + differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; + } + differential_pressure.temperature = NAN; differential_pressure.error_count = perf_event_count(_comms_errors); differential_pressure.timestamp = hrt_absolute_time(); diff --git a/src/drivers/differential_pressure/ms4515/MS4515.cpp b/src/drivers/differential_pressure/ms4515/MS4515.cpp index 8abac257f766..e1b6ae90e310 100644 --- a/src/drivers/differential_pressure/ms4515/MS4515.cpp +++ b/src/drivers/differential_pressure/ms4515/MS4515.cpp @@ -32,6 +32,7 @@ ****************************************************************************/ #include "MS4515.hpp" +#include MS4515::MS4515(const I2CSPIDriverConfig &config) : I2C(config), @@ -163,6 +164,14 @@ int MS4515::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); + + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { + differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; + } + differential_pressure.temperature = temperature_c; differential_pressure.error_count = perf_event_count(_comms_errors); differential_pressure.timestamp = hrt_absolute_time(); diff --git a/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp b/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp index 3e321a65a375..fcce76eddab0 100644 --- a/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp +++ b/src/drivers/differential_pressure/ms4525do/MS4525DO.cpp @@ -32,6 +32,7 @@ ****************************************************************************/ #include "MS4525DO.hpp" +#include using namespace time_literals; @@ -200,6 +201,14 @@ void MS4525DO::RunImpl() differential_pressure.timestamp_sample = _timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); + + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { + differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; + } + differential_pressure.temperature = temperature_c; differential_pressure.error_count = perf_event_count(_comms_errors); differential_pressure.timestamp = hrt_absolute_time(); diff --git a/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp b/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp index 4b6202537721..2a15b6e6269b 100644 --- a/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp +++ b/src/drivers/differential_pressure/ms5525dso/MS5525DSO.cpp @@ -32,6 +32,7 @@ ****************************************************************************/ #include "MS5525DSO.hpp" +#include MS5525DSO::MS5525DSO(const I2CSPIDriverConfig &config) : I2C(config), @@ -308,6 +309,14 @@ int MS5525DSO::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); + + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { + differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; + } + differential_pressure.temperature = temperature_c; differential_pressure.error_count = perf_event_count(_comms_errors); differential_pressure.timestamp = hrt_absolute_time(); diff --git a/src/drivers/differential_pressure/sdp3x/SDP3X.cpp b/src/drivers/differential_pressure/sdp3x/SDP3X.cpp index 82a7c4c24d4e..06418de1b52d 100644 --- a/src/drivers/differential_pressure/sdp3x/SDP3X.cpp +++ b/src/drivers/differential_pressure/sdp3x/SDP3X.cpp @@ -32,6 +32,7 @@ ****************************************************************************/ #include "SDP3X.hpp" +#include using namespace time_literals; @@ -187,6 +188,14 @@ int SDP3X::collect() differential_pressure.timestamp_sample = timestamp_sample; differential_pressure.device_id = get_device_id(); differential_pressure.differential_pressure_pa = diff_press_pa; + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); + + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { + differential_pressure.differential_pressure_pa = -1.0f * diff_press_pa; + } + differential_pressure.temperature = temperature_c; differential_pressure.error_count = perf_event_count(_comms_errors); differential_pressure.timestamp = hrt_absolute_time(); diff --git a/src/drivers/uavcan/sensors/differential_pressure.cpp b/src/drivers/uavcan/sensors/differential_pressure.cpp index 245778734849..0fcb6520c2c9 100644 --- a/src/drivers/uavcan/sensors/differential_pressure.cpp +++ b/src/drivers/uavcan/sensors/differential_pressure.cpp @@ -69,8 +69,15 @@ void UavcanDifferentialPressureBridge::air_sub_cb(const _device_id.devid_s.devtype = DRV_DIFF_PRESS_DEVTYPE_UAVCAN; _device_id.devid_s.address = msg.getSrcNodeID().get() & 0xFF; - float diff_press_pa = msg.differential_pressure; + int32_t differential_press_rev = 0; + param_get(param_find("SENS_DPRES_REV"), &differential_press_rev); + + //If differential pressure reverse param set, swap positive and negative + if (differential_press_rev == 1) { + diff_press_pa = -1.0f * msg.differential_pressure; + } + float temperature_c = msg.static_air_temperature + atmosphere::kAbsoluteNullCelsius; differential_pressure_s report{}; diff --git a/src/modules/commander/airspeed_calibration.cpp b/src/modules/commander/airspeed_calibration.cpp index e644e7723a23..d013eb9e733e 100644 --- a/src/modules/commander/airspeed_calibration.cpp +++ b/src/modules/commander/airspeed_calibration.cpp @@ -168,7 +168,7 @@ int do_airspeed_calibration(orb_advert_t *mavlink_log_pub) /* do not allow negative values */ calibration_log_critical(mavlink_log_pub, "[cal] Negative pressure difference detected (%d Pa)", (int)differential_pressure_pa); - calibration_log_critical(mavlink_log_pub, "[cal] Swap static and dynamic ports!"); + calibration_log_critical(mavlink_log_pub, "[cal] Swap static and dynamic ports or set SENS_DPRES_REV"); /* the user setup is wrong, wipe the calibration to force a proper re-calibration */ diff_pres_offset = 0.0f; diff --git a/src/modules/sensors/sensor_params.c b/src/modules/sensors/sensor_params.c index fd93e18dff7a..3288f9d87337 100644 --- a/src/modules/sensors/sensor_params.c +++ b/src/modules/sensors/sensor_params.c @@ -87,6 +87,18 @@ PARAM_DEFINE_FLOAT(CAL_AIR_TUBED_MM, 1.5f); */ PARAM_DEFINE_FLOAT(SENS_DPRES_OFF, 0.0f); +/** + * Reverse differential pressure sensor readings + * + * Reverse the raw measurements of all differential pressure sensors. + * This can be enabled if the sensors have static and dynamic ports swapped. + * + * @category system + * @group Sensor Calibration + * @boolean + */ +PARAM_DEFINE_INT32(SENS_DPRES_REV, 0); + /** * Differential pressure sensor analog scaling *