X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Feasymotor-v3%2Fao_pins.h;h=5cc95eb93b0eb0da5b1ff0edc6efee355673bac0;hb=1a467bf13485649419e1205ee788ef0d58b42d01;hp=856c763946d1b6dcd7aedd15e0b1e2a661656e2b;hpb=da253f1ee9510fba93ddf5c1895570eb5081af46;p=fw%2Faltos diff --git a/src/easymotor-v3/ao_pins.h b/src/easymotor-v3/ao_pins.h index 856c7639..5cc95eb9 100644 --- a/src/easymotor-v3/ao_pins.h +++ b/src/easymotor-v3/ao_pins.h @@ -90,10 +90,6 @@ #define AO_DATA_RING 32 -struct ao_adc { - int16_t v_batt; - int16_t motor_pressure; -}; #define AO_ADC_DUMP(p) \ printf("tick: %5lu batt: %5d motor_pressure: %5d\n", \ @@ -152,10 +148,42 @@ struct ao_adc { #define HAS_IMU 1 #define USE_ADXL375_IMU 1 +#define HAS_KALMAN 0 + /* Motor pressure */ #define HAS_MOTOR_PRESSURE 1 #define ao_data_motor_pressure(packet) ((packet)->adc.motor_pressure) typedef int16_t motor_pressure_t; +/* want about 50psi, or 344kPa */ + +#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; + + double volts = (double) pressure / AO_FULL_SCALE_PRESSURE * (volts_max - volts_base); + double adc_volts = volts * 10.0/15.6; /* voltage divider in front of the ADC input */ + if (adc_volts > 1.0) + adc_volts = 1.0; + double adc = adc_volts * 32767.0; + + 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) + +struct ao_adc { + int16_t v_batt; + int16_t motor_pressure; +}; + #endif /* _AO_PINS_H_ */