mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-27 08:55:51 +08:00
update pressure board sensor and settings
This commit is contained in:
@@ -0,0 +1,9 @@
|
|||||||
|
<!DOCTYPE settings SYSTEM "settings.dtd">
|
||||||
|
|
||||||
|
<settings>
|
||||||
|
<dl_settings>
|
||||||
|
<dl_settings NAME="pbn">
|
||||||
|
<dl_setting MAX="30" MIN="0" STEP="1" module="sensors/pressure_board_navarro" VAR="airspeed_filter"/>
|
||||||
|
</dl_settings>
|
||||||
|
</dl_settings>
|
||||||
|
</settings>
|
||||||
@@ -46,6 +46,15 @@
|
|||||||
/* Weight for offset IIR filter */
|
/* Weight for offset IIR filter */
|
||||||
#define PBN_OFFSET_FILTER 7
|
#define PBN_OFFSET_FILTER 7
|
||||||
|
|
||||||
|
/* Quadratic scale factor for airspeed */
|
||||||
|
#ifndef PBN_AIRSPEED_SCALE
|
||||||
|
#define PBN_AIRSPEED_SCALE (1./0.54)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Linear scale factor for altitude */
|
||||||
|
#ifndef PBN_ALTITUDE_SCALE
|
||||||
|
#define PBN_ALTITUDE_SCALE 0.32
|
||||||
|
#endif
|
||||||
|
|
||||||
// Global variables
|
// Global variables
|
||||||
uint16_t altitude_adc;
|
uint16_t altitude_adc;
|
||||||
@@ -61,6 +70,7 @@ uint16_t altitude_offset;
|
|||||||
uint16_t airspeed_offset;
|
uint16_t airspeed_offset;
|
||||||
float pbn_altitude;
|
float pbn_altitude;
|
||||||
float pbn_airspeed;
|
float pbn_airspeed;
|
||||||
|
float airspeed_filter;
|
||||||
uint16_t startup_delay;
|
uint16_t startup_delay;
|
||||||
|
|
||||||
void pbn_init( void ) {
|
void pbn_init( void ) {
|
||||||
@@ -73,6 +83,7 @@ void pbn_init( void ) {
|
|||||||
offset_cnt = OFFSET_NBSAMPLES_AVRG;
|
offset_cnt = OFFSET_NBSAMPLES_AVRG;
|
||||||
pbn_airspeed = 0.;
|
pbn_airspeed = 0.;
|
||||||
pbn_altitude = 0.;
|
pbn_altitude = 0.;
|
||||||
|
airspeed_filter = PBN_OFFSET_FILTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -106,20 +117,31 @@ void pbn_read_event( void ) {
|
|||||||
|
|
||||||
if (offset_cnt > 0) {
|
if (offset_cnt > 0) {
|
||||||
// IIR filter to compute an initial offset
|
// IIR filter to compute an initial offset
|
||||||
|
#ifndef PBN_AIRSPEED_OFFSET
|
||||||
airspeed_offset = (PBN_OFFSET_FILTER * airspeed_offset + airspeed_adc) / (PBN_OFFSET_FILTER + 1);
|
airspeed_offset = (PBN_OFFSET_FILTER * airspeed_offset + airspeed_adc) / (PBN_OFFSET_FILTER + 1);
|
||||||
|
#else
|
||||||
|
airspeed_offset = PBN_AIRSPEED_OFFSET;
|
||||||
|
#endif
|
||||||
|
#ifndef PBN_ALTITUDE_OFFSET
|
||||||
altitude_offset = (PBN_OFFSET_FILTER * altitude_offset + altitude_adc) / (PBN_OFFSET_FILTER + 1);
|
altitude_offset = (PBN_OFFSET_FILTER * altitude_offset + altitude_adc) / (PBN_OFFSET_FILTER + 1);
|
||||||
|
#else
|
||||||
|
altitude_offset = PBN_ALTITUDE_OFFSET;
|
||||||
|
#endif
|
||||||
|
|
||||||
// decrease init counter
|
// decrease init counter
|
||||||
--offset_cnt;
|
--offset_cnt;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Compute airspeed and altitude
|
// Compute airspeed and altitude
|
||||||
pbn_airspeed = (-4.45 + sqrtf(19.84-0.57*(float)(airspeed_offset-airspeed_adc)))/0.28;
|
//pbn_airspeed = (-4.45 + sqrtf(19.84-0.57*(float)(airspeed_offset-airspeed_adc)))/0.28;
|
||||||
pbn_altitude = 0.32*(float)(altitude_adc-altitude_offset);
|
uint16_t diff = Max(airspeed_adc-airspeed_offset, 0);
|
||||||
|
float tmp_airspeed = sqrtf((float)diff * PBN_AIRSPEED_SCALE);
|
||||||
|
pbn_altitude = PBN_ALTITUDE_SCALE*(float)(altitude_adc-altitude_offset);
|
||||||
|
|
||||||
//estimator_airspeed = (7*estimator_airspeed + pbn_airspeed ) / 8;
|
pbn_airspeed = (airspeed_filter*pbn_airspeed + tmp_airspeed) / (airspeed_filter + 1.);
|
||||||
//estimator_airspeed = Max(estimator_airspeed, 0.);
|
#ifdef USE_AIRSPEED
|
||||||
//EstimatorSetAirspeed(pbn_airspeed);
|
EstimatorSetAirspeed(pbn_airspeed);
|
||||||
|
#endif
|
||||||
//alt_kalman(pbn_altitude);
|
//alt_kalman(pbn_altitude);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ extern uint16_t airspeed_adc;
|
|||||||
extern uint16_t altitude_offset;
|
extern uint16_t altitude_offset;
|
||||||
extern uint16_t airspeed_offset;
|
extern uint16_t airspeed_offset;
|
||||||
extern float pbn_altitude, pbn_airspeed;
|
extern float pbn_altitude, pbn_airspeed;
|
||||||
|
extern float airspeed_filter;
|
||||||
|
|
||||||
extern bool_t data_valid;
|
extern bool_t data_valid;
|
||||||
extern struct i2c_transaction pbn_trans;
|
extern struct i2c_transaction pbn_trans;
|
||||||
|
|||||||
Reference in New Issue
Block a user