From 85e22ee20974792c2376bf11a9f79e17e4008da9 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 16 Oct 2020 15:30:35 -0700 Subject: [PATCH] altoslib: use motor pressure calibration data for EasyMotor EasyMotor stores an average sensor value for motor pressure, use that to report pressure above that value. Signed-off-by: Keith Packard --- altoslib/AltosCalData.java | 7 +++++++ altoslib/AltosConvert.java | 9 +++++---- altoslib/AltosEepromRecordMotor.java | 4 +++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/altoslib/AltosCalData.java b/altoslib/AltosCalData.java index 832725de..8bca9229 100644 --- a/altoslib/AltosCalData.java +++ b/altoslib/AltosCalData.java @@ -120,6 +120,13 @@ public class AltosCalData { this.ground_accel = ground_accel; } + public double ground_motor_pressure = AltosLib.MISSING; + + public void set_ground_motor_pressure(double ground_motor_pressure) { + if (ground_motor_pressure != AltosLib.MISSING) + this.ground_motor_pressure = ground_motor_pressure; + } + /* Raw acceleration value */ public double accel = AltosLib.MISSING; diff --git a/altoslib/AltosConvert.java b/altoslib/AltosConvert.java index e51e4f30..099ea048 100644 --- a/altoslib/AltosConvert.java +++ b/altoslib/AltosConvert.java @@ -280,11 +280,11 @@ public class AltosConvert { return 3.3 * mega_adc(sensor) * (100.0 + 27.0) / 27.0; } - static double easy_mini_2_adc(int raw) { + static double easy_mini_2_adc(double raw) { return raw / 4095.0; } - static double easy_mini_1_adc(int raw) { + static double easy_mini_1_adc(double raw) { return raw / 32767.0; } @@ -323,11 +323,12 @@ public class AltosConvert { return (voltage - base) / (max - base) * full_scale_pressure; } - static double easy_motor_2_motor_pressure(int sensor) { + static double easy_motor_2_motor_pressure(int sensor, double ground_sensor) { double supply = 3.3; + double ground_voltage = easy_mini_2_adc(ground_sensor) * supply * 15.6 / 10.0; double voltage = easy_mini_2_adc(sensor) * supply * 15.6 / 10.0; - return motor_pressure(voltage); + return motor_pressure(voltage) - motor_pressure(ground_voltage); } public static double radio_to_frequency(int freq, int setting, int cal, int channel) { diff --git a/altoslib/AltosEepromRecordMotor.java b/altoslib/AltosEepromRecordMotor.java index 656feb9b..a2ec569a 100644 --- a/altoslib/AltosEepromRecordMotor.java +++ b/altoslib/AltosEepromRecordMotor.java @@ -25,6 +25,7 @@ public class AltosEepromRecordMotor extends AltosEepromRecord { private int ground_accel_along() { return data16(4); } private int ground_accel_across() { return data16(6); } private int ground_accel_through() { return data16(8); } + private int ground_motor_pressure() { return data16(10); } /* AO_LOG_STATE elements */ private int state() { return data16(0); } @@ -59,6 +60,7 @@ public class AltosEepromRecordMotor extends AltosEepromRecord { listener.set_accel_ground(cal_data.accel_along(ground_accel_along()), cal_data.accel_across(ground_accel_across()), cal_data.accel_through(ground_accel_through())); + cal_data.set_ground_motor_pressure(ground_motor_pressure()); break; case AltosLib.AO_LOG_STATE: listener.set_state(state()); @@ -67,7 +69,7 @@ public class AltosEepromRecordMotor extends AltosEepromRecord { AltosConfigData config_data = eeprom.config_data(); listener.set_battery_voltage(AltosConvert.easy_mini_2_voltage(v_batt())); - double pa = AltosConvert.easy_motor_2_motor_pressure(motor_pres()); + double pa = AltosConvert.easy_motor_2_motor_pressure(motor_pres(), cal_data.ground_motor_pressure); listener.set_motor_pressure(pa); int accel_along = accel_along(); -- 2.30.2