forked from Archive/PX4-Autopilot
more precise range conversion for SBus input signals
This commit is contained in:
parent
0b9b68f0d9
commit
3a40ea8338
|
@ -55,6 +55,24 @@
|
||||||
#define SBUS_FRAME_SIZE 25
|
#define SBUS_FRAME_SIZE 25
|
||||||
#define SBUS_INPUT_CHANNELS 16
|
#define SBUS_INPUT_CHANNELS 16
|
||||||
|
|
||||||
|
/*
|
||||||
|
Measured values with Futaba FX-30/R6108SB:
|
||||||
|
-+100% on TX: PCM 1.100/1.520/1.950ms -> SBus raw values: 350/1024/1700 (100% ATV)
|
||||||
|
-+140% on TX: PCM 0.930/1.520/2.112ms -> SBus raw values: 78/1024/1964 (140% ATV)
|
||||||
|
-+152% on TX: PCM 0.884/1.520/2.160ms -> SBus raw values: 1/1024/2047 (140% ATV plus dirty tricks)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* define range mapping here, -+100% -> 1000..2000 */
|
||||||
|
#define SBUS_RANGE_MIN 350.0f
|
||||||
|
#define SBUS_RANGE_MAX 1700.0f
|
||||||
|
|
||||||
|
#define SBUS_TARGET_MIN 1000.0f
|
||||||
|
#define SBUS_TARGET_MAX 2000.0f
|
||||||
|
|
||||||
|
/* pre-calculate the floating point stuff as far as possible at compile time */
|
||||||
|
#define SBUS_SCALE_FACTOR ((SBUS_TARGET_MAX - SBUS_TARGET_MIN) / (SBUS_RANGE_MAX - SBUS_RANGE_MIN))
|
||||||
|
#define SBUS_SCALE_OFFSET (int)(SBUS_TARGET_MIN - (SBUS_SCALE_FACTOR * SBUS_RANGE_MIN + 0.5f))
|
||||||
|
|
||||||
static int sbus_fd = -1;
|
static int sbus_fd = -1;
|
||||||
|
|
||||||
static hrt_abstime last_rx_time;
|
static hrt_abstime last_rx_time;
|
||||||
|
@ -234,8 +252,9 @@ sbus_decode(hrt_abstime frame_time, uint16_t *values, uint16_t *num_values, uint
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* convert 0-2048 values to 1000-2000 ppm encoding in a very sloppy fashion */
|
|
||||||
values[channel] = (value / 2) + 998;
|
/* convert 0-2048 values to 1000-2000 ppm encoding in a not too sloppy fashion */
|
||||||
|
values[channel] = (uint16_t)(value * SBUS_SCALE_FACTOR +.5f) + SBUS_SCALE_OFFSET;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* decode switch channels if data fields are wide enough */
|
/* decode switch channels if data fields are wide enough */
|
||||||
|
|
Loading…
Reference in New Issue