altos/easymotor: Move pressure conversion code to ao_motor_flight.c easymotor-flight
authorKeith Packard <keithp@keithp.com>
Thu, 19 Jan 2023 22:04:50 +0000 (14:04 -0800)
committerKeith Packard <keithp@keithp.com>
Thu, 19 Jan 2023 22:04:50 +0000 (14:04 -0800)
This inline function uses a pile of constants which aren't defined in
ao_pins.h, so move it to ao_motor_flight.c where it is used

Signed-off-by: Keith Packard <keithp@keithp.com>
src/easymotor-v3/ao_pins.h
src/kernel/ao_motor_flight.c

index b3be803e40cda84373735046ae2dc1a627ae345c..a0e40bd7ba5d326a7591d4da75bd13dfef5fed79 100644 (file)
 
 typedef int16_t        motor_pressure_t;
 
-/* want about 50psi, or 344kPa */
+/* want about 50psi, or 344kPa for boost and 30psi for coast */
 
 #define AO_FULL_SCALE_PRESSURE         11031612        /* 1600psi */
 #define AO_BOOST_DETECT_PRESSURE       344000          /* 50psi */
 #define AO_QUIET_DETECT_PRESSURE       207000          /* 30psi */
 
-static inline int16_t ao_delta_pressure_to_adc(uint32_t pressure)
-{
-       static const double volts_base = 0.5;
-       static const double volts_max = 4.5;
-
-       /* Compute change in voltage from the sensor */
-       double  volts = (double) pressure / AO_FULL_SCALE_PRESSURE * (volts_max - volts_base);
-
-       /* voltage divider in front of the ADC input to decivolts */
-       double  adc_dv = volts * 10 * 10.0/15.6;
-
-       /* convert to ADC output value */
-       double  adc = adc_dv * AO_ADC_MAX / AO_ADC_REFERENCE_DV;
-
-       if (adc > AO_ADC_MAX)
-               adc = AO_ADC_MAX;
-       if (adc < 0)
-               adc = 0;
-
-       return (int16_t) adc;
-}
-
-#define AO_BOOST_DETECT                        ao_delta_pressure_to_adc(AO_BOOST_DETECT_PRESSURE)
-#define AO_QUIET_DETECT                        ao_delta_pressure_to_adc(AO_QUIET_DETECT_PRESSURE)
+#define AO_PRESSURE_VOLTS_BASE 0.5
+#define AO_PRESSURE_VOLTS_MAX  4.5
 
 struct ao_adc {
        int16_t                 v_batt;
index f47f59b393eb0f5adb0d545ceb1e564e5b8f29b8..6fa68831ea8b9350fcdc84130a33194051708ebd 100644 (file)
@@ -52,6 +52,35 @@ static AO_TICK_TYPE  ao_interval_end;
 
 uint8_t                        ao_flight_force_idle;
 
+/* Compute ADC value change given a defined pressure change in Pa */
+
+static inline int16_t
+ao_delta_pressure_to_adc(uint32_t pressure)
+{
+       static const double volts_base = AO_PRESSURE_VOLTS_BASE;
+       static const double volts_max = AO_PRESSURE_VOLTS_MAX;
+
+       /* Compute change in voltage from the sensor */
+       double  volts = (double) pressure / AO_FULL_SCALE_PRESSURE * (volts_max - volts_base);
+
+       /* voltage divider in front of the ADC input to decivolts */
+       double  adc_dv = volts * (10.0 * (double) AO_PRESSURE_DIV_MINUS /
+                                 ((double) AO_PRESSURE_DIV_PLUS + (double) AO_PRESSURE_DIV_MINUS));
+
+       /* convert to ADC output value */
+       double  adc = adc_dv * AO_ADC_MAX / AO_ADC_REFERENCE_DV;
+
+       if (adc > AO_ADC_MAX)
+               adc = AO_ADC_MAX;
+       if (adc < 0)
+               adc = 0;
+
+       return (int16_t) adc;
+}
+
+#define AO_BOOST_DETECT                        ao_delta_pressure_to_adc(AO_BOOST_DETECT_PRESSURE)
+#define AO_QUIET_DETECT                        ao_delta_pressure_to_adc(AO_QUIET_DETECT_PRESSURE)
+
 /*
  * Landing is detected by getting constant readings from pressure sensor
  * for a fairly long time (AO_INTERVAL_TICKS), along with the max being