[airspeed_adc] Calibrate inflight

This commit is contained in:
dewagter
2014-09-27 02:27:42 +02:00
committed by Felix Ruess
parent 3c776a5598
commit cc1c84d4a1
3 changed files with 21 additions and 3 deletions
+12
View File
@@ -0,0 +1,12 @@
<!DOCTYPE settings SYSTEM "../settings.dtd">
<settings>
<dl_settings name="control">
<dl_settings name="airsp">
<dl_setting max="4095" min="0" step="1" module="sensors/airspeed_adc" var="airspeed_offset" shortname="air_bias"/>
<dl_setting max="3" min="0" step="0.001" module="sensors/airspeed_adc" var="airspeed_quadratic_scale" shortname="air_scale"/>
</dl_settings>
</dl_settings>
</settings>
+6 -3
View File
@@ -26,6 +26,9 @@
#include "generated/airframe.h" #include "generated/airframe.h"
#include "state.h" #include "state.h"
uint16_t airspeed_offset = AIRSPEED_BIAS;
float airspeed_quadratic_scale = AIRSPEED_QUADRATIC_SCALE;
uint16_t adc_airspeed_val; uint16_t adc_airspeed_val;
#ifndef SITL // Use ADC if not in simulation #ifndef SITL // Use ADC if not in simulation
@@ -52,12 +55,12 @@ void airspeed_adc_update( void ) {
#ifndef SITL #ifndef SITL
adc_airspeed_val = buf_airspeed.sum / buf_airspeed.av_nb_sample; adc_airspeed_val = buf_airspeed.sum / buf_airspeed.av_nb_sample;
#ifdef AIRSPEED_QUADRATIC_SCALE #ifdef AIRSPEED_QUADRATIC_SCALE
float airspeed = (adc_airspeed_val - AIRSPEED_BIAS); float airspeed = (adc_airspeed_val - airspeed_offset);
if (airspeed <= 0.0f) if (airspeed <= 0.0f)
airspeed = 0.0f; airspeed = 0.0f;
airspeed = sqrtf(airspeed) * AIRSPEED_QUADRATIC_SCALE; airspeed = sqrtf(airspeed) * airspeed_quadratic_scale;
#else #else
float airspeed = AIRSPEED_SCALE * (adc_airspeed_val - AIRSPEED_BIAS); float airspeed = AIRSPEED_SCALE * (adc_airspeed_val - airspeed_offset);
#endif #endif
stateSetAirspeed_f(&airspeed); stateSetAirspeed_f(&airspeed);
#elif !defined USE_NPS #elif !defined USE_NPS
@@ -25,6 +25,9 @@
#include <inttypes.h> #include <inttypes.h>
extern uint16_t airspeed_offset;
extern float airspeed_quadratic_scale;
extern uint16_t adc_airspeed_val; extern uint16_t adc_airspeed_val;
void airspeed_adc_init( void ); void airspeed_adc_init( void );