1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-24 16:55:36 +03:00
Commit graph

199 commits

Author SHA1 Message Date
AJ Christensen
46291a8374 Dual-stage Gyro Filtering: PT1, Biquad, Butterworth, Denoise (FIR), FKF (fixed K), and Biquad RC+FIR2 (#5391)
* Dual-stage Gyro Filtering: PT1, FKF, and Biquad RC+FIR2

* Builds on the previous work of apocolipse.
* Fixes 'stage2'/'stage1' mis-naming to reflect where it is applied in the loop.
  That is, the older Biquad, PT1, Denoise (FIR) filters are 'stage2' - applied
  after dynamic and static notches (if enabled), and the controversial PT1,
  'fast Kalman' filter, and Biquad RC+FIR2 filters, are 'stage1'. e.g. before
  dynamic notch.
* FKF bruteforce Kalman gain removed. Calculate from half of PT1 RC constant,
  automatically taking loop-time into account.
* New union type definition for stage1 filtering.
* New gyro sensor members for stage1 filter application function and states for
  all three supported filter types
* New enum types for stage1 v. stage2. dterm lowpass type references 'stage2'.
* updates to CMS/MSP/FC to allow compilation (untested, probably breaks
  MSP, Lua, and ~comms with BFC~).
* Refactors FKF initialization, update and associated structures to be faster by
  not continuously calculating 'k'. Filter gain is calculated once during
  initialization from RC constant as per PT1 and Biquad RC+FIR2. It was
  discovered this converges to static value within 100 samples at 32kHz, so can
  be removed. Remove related interface (CLI) settings.
* update dterm_lowpass_type to use new 'TABLE_LOWPASS2_TYPE' (biquad/pt1/FIR)
* Stage 1 defaults to PT1, 763Hz (equivalent to Q400 / R88 from quasi-kalman
  filter) - suitable for 32kHz sampling modes. Can be switched to Biquad
  RC+FIR2, and FKF.
* Update `#if defined(USE_GYRO_SLEW_LIMITER) to `#ifdef`.
* Includes optional Lagged Moving Average 'smoothing' pipeline step, applied (in
  code) after the output of stage1.
* (diehertz): Removed redundant pointers from gyro filtering

* blackbox: fix indentation

* cms IMU menu: fix indentation

* filters: remove USE_GYRO_FIR_FILTER_DENOISE in filter type enum

* gyro sensors: go back to `if defined()` form. for slew limiter

* gyro sensors: increment parameter group version

* due to non-appending changes, the version must be bumped.
2018-03-21 15:52:59 +13:00
SteveCEvans
11fb4cb091 If RSSI Channel is set to Disabled when using S.Bus then generate RSS… (#5090)
* If RSSI Channel is set to Disabled when using S.Bus then generate RSSI signal using frame drop flags from the rx

* Set RSSI max level for S.Bus to 1024 so OSD defaults can be used

* Failsfafe must be detected rather than just reporting dropped frames

* Failsafe implies dropped frames

* Remove failsafe debug

* Use RSSI_SOURCE_RX_PROTOCOL

* Add rssi_from_rx_protocol to enable siqnal quality from rx to be processed as RSSI

* Use RSSI_MAX_VALUE definition

* Use rssi_from_rx_protocol flag for fport rx

* Update serialpassthrough help text

* Revert erroneous commit

* Use rssi_src_frame_errors boolean

* rssi_src_frame_errors = ON | OFF

* Moved rssi_src_frame_errors to end of rxConfig_t struct

* Add documentation of rssi_src_frame_errors

* Synthesise RX_FRAME_FAILSAFE flag to protect from bad implementation in receivers

* Match rx failsafe behaviour exactly

* Only set RX_FRAME_COMPLETE if valid frame is received

* RSSI_SOURCE_FRAME_ERRORS moved to end of rssiSource_e enum

* Removed superfluous else if clause

* Restore debug code

* Restore stateFlags

* Set RX_FRAME_DROPPED flag when failsafe is triggered
2018-03-21 13:36:23 +13:00
ctzsnooze
ab231b7c84 Second dterm pt1 (#5458)
* Second PT1 on DTerm

This PR replaces the default biquad filter with a second PT1 set to
200Hz.

Basically allows the user to enable a second, set point configurable,
PT1 type first order low-pass filter on DTerm.

This is useful because most noise in most logs arises from D, not P.

The default is set to on, at twice the normal Dterm setpoint.  This
provides greater Dterm cut than a single PT1, and twice the steepness
of cut above the second setpoint.  Modelling shows significant
reductions in higher frequency Dterm noise with only minor additional
delay.

The improvement in noise performance will be less than for biquad, but
the delay is considerably less.

If with the default settings the overall noise improves a lot, it may
be possible bring D both filtering set points to higher numbers (e.g.
140/280), or alternatively remove other filters such as the notch
filters, while maintaining an adequate level of control over noise.

* Update names, old defaults, fix whitespace

Defaults restored to biquad with second PT1 off.  ‘lpf’ retained as
abbreviation for values, otherwise generally remove ‘Filter’ where
redundant, replace ‘FilterLpf’ with ‘Lowpass’, etc, thanks Fujin and
DieHertz

* Remove underscore in lowpass_2, add hz to setpoint for lowpass

Thanks DieHertz

* completed replacing lpf with lowpass, added _hz to all lowpass set points in profile

Thanks DieHertz

* fix whitespace

fixed whitespace in settings.c

* whitespace attempt #57

* change lpf to lowpass where appropriate elsewhere

Note did not change OSD abbreviations, they are still LPF, and did not
change gyro_lpf anywhere.

* second attempt at a simple PT1 implementation

Basically copied from the DtermNotch implementation

* Second PT1 on DTerm

This PR replaces the default biquad filter with a second PT1 set to
200Hz.

Basically allows the user to enable a second, set point configurable,
PT1 type first order low-pass filter on DTerm.

This is useful because most noise in most logs arises from D, not P.

The default is set to on, at twice the normal Dterm setpoint.  This
provides greater Dterm cut than a single PT1, and twice the steepness
of cut above the second setpoint.  Modelling shows significant
reductions in higher frequency Dterm noise with only minor additional
delay.

The improvement in noise performance will be less than for biquad, but
the delay is considerably less.

If with the default settings the overall noise improves a lot, it may
be possible bring D both filtering set points to higher numbers (e.g.
140/280), or alternatively remove other filters such as the notch
filters, while maintaining an adequate level of control over noise.

* Rebase

* Remove underscore in lowpass_2, add hz to setpoint for lowpass

Thanks DieHertz

* completed replacing lpf with lowpass, added _hz to all lowpass set points in profile

Thanks DieHertz

* fix whitespace

fixed whitespace in settings.c

* whitespace attempt #57

* change lpf to lowpass where appropriate elsewhere

Note did not change OSD abbreviations, they are still LPF, and did not
change gyro_lpf anywhere.

* second attempt at a simple PT1 implementation

Basically copied from the DtermNotch implementation

* Whitespace fix - thanks, Ledvinap

* Fix PG issue

by moving added dterm_lowpass2_hz to bottom of struct

* Got rid of redundant indirection

* Fixed indentantion shifts
2018-03-21 01:40:23 +13:00
jflyper
462672ffb7 Increase ibata_offset range to accommodate certain Hall effect sensors (#5467) 2018-03-21 00:27:25 +13:00
Konstantin Sharlaimov
eb70859e4a MSPv2 implementation (#3977)
Some refactoring

Refactor CRC calculations; Unsigned type for size and offset
2018-03-20 14:20:07 +13:00
jflyper
e3c258d65f Add inverted option (#4577) 2018-03-20 14:05:55 +13:00
Míguel Ángel Mulero Martínez
44b19f3cdb Fix MSP values of the MAG (#5451)
The MAG only shows positive values in the configurator. This fixes it.
2018-03-16 08:09:13 +13:00
etracer65
0e051bebb2 Simplify CLI case-insensitive by using new strcasestr() (#5449)
Remove string lowercase function from cli.c and use the new strcasestr() added to string_light.c
2018-03-16 07:41:00 +13:00
Michael Keller
b0e3da51ea
Merge pull request #3031 from cleanflight/fix-osd-slave-settings (#5424)
CF/BF - Fix OSD slave settings not being saved/reset.
2018-03-15 02:39:26 +13:00
jflyper
85b922383b MSP_RAW_IMU to convert accADC from float to integer (#5417) 2018-03-15 02:24:39 +13:00
Petr Ledvina
141d6ec30a Higher-order gyro filter (#5257)
* Implement nth order Butterworth

Uses biquad sections

* Purge RC+FIR2

* Add butterworth LPS as gyro filter

Replaces RC+FIR

* Make FKF code conditional

* Add USE_FIR_FILTER_DENOISE

Denoise is almost useless anyway ...
2018-03-15 01:45:20 +13:00
jflyper
416495e17a Convert BEEPER to USE_ scheme (#5433) 2018-03-11 09:28:08 +13:00
etracer65
f97df6827e Change CLI "get" to be case-insensitive (#5382)
Matches the behavior of the "set" command.
2018-03-09 06:50:31 +13:00
Austin
4d3666b77b Fix for minthrottle when feature 3D and PWM enabled (#5102)
* Fix for minthrottle when feature 3d and pwm enabled

* add parameters for min and max 3d output

* bug fix

* remove new parameters from msp

* remove new parameters again

* fixed indentation
2018-03-09 06:44:17 +13:00
SteveCEvans
0430fcb67d Add ledstrip_grb_rgb setting (GRB or RGB) to handle WS2811 or WS2812 … (#5255)
* Add ledstrip_grb_rgb setting (GRB or RGB) to handle WS2811 or WS2812 LED drivers

* Rename setting lookup table to lookupLedStripPackingOrder

* Fix call to ws2811UpdateStrip

* Fix unit test

* Use ledStripFormatRGB_e enumeration for RGB packing format

* Fix unit test

* Whoops. Make ledStripFormatRGB_e match lookupLedStripFormatRGB

* Applied review feedback

* Add documentation of ledstrip_grb_rgb
2018-03-06 09:39:14 +13:00
Andrey Mironov
e49dfb1634 Added F7 overclock (#5372) 2018-03-06 08:28:29 +13:00
Steffen Windoffer
2f8e59f8fc fix rate accel limit ranges (#5367) 2018-03-04 11:49:53 +13:00
etracer65
3b20e8279b Add accelerometer calibration values to the CLI - also change mag calib representation (#5354)
Allows the accelerometer calibration to be exported in a dump or diff and restored after upgrading.

The accelerometer calibration is specific to the frame and orientation in which the flight controller is installed.  The users should have a way to restore a correct setting during upgrades without having to recalibrate after every flash.  Replicates the way the magnetometer calibration is exported.

Added acc_calibration as an array type to the CLI.  For consistency changed magnetometer representation from magzero_X, magzero_Y, magzero_Z to be a single array mag_calibration.
2018-03-04 11:48:51 +13:00
Míguel Ángel Mulero Martínez
73eb5d396e Add compass QMC5883L driver (#5309) 2018-03-04 11:45:54 +13:00
Alberto García Hierro
88dcaa95ef Output more information in MSP_BOARD_INFO (#5206)
* Append the target name to the response of MSP_BOARD_INFO

This allows MSP clients to retrieve the actual target name, which
is useful for e.g. automatically upgrading the firmware on a board
without asking the user to select the target manually or to present
a warning dialog if we detect the user has chosen the wrong target.

* Output wether a board uses VCP in MSP_BOARD_INFO

This allows the configurator to detect if the board uses VCP
without using an external list of boards.

* Use a single bit to output wether the board uses VCP

This lets us use the remaining 7 bits for other flags.
Also, output if the board has softserial support using the next
bit.
2018-03-04 11:38:30 +13:00
etracer65
43d8f67db2 Fix diff support for array data types (#5366)
Previously diff would only compare the first element of an array type.  Changed valuePtrEqualsDefault() to make it array-aware and compare all elements to the defaults.
2018-03-04 01:38:01 +03:00
Dominic Clifton
cde9a9517b SPRacingF7DUAL - Dual SIMULTANEOUS gyro support. (#5264)
* CF/BF - Set STM32F7 SPI FAST clock to 13.5Mhz - Gyros not stable at
27mhz.

* CF/BF - Initial SPRacingF7DUAL commit.

Support two simultaneous gyro support (code by Dominic Clifton and Martin Budden)
There are new debug modes so you can see the difference between each gyro.

Notes:
* spi bus instance caching broke spi mpu detection because the detection
tries I2C first which overwrites the selected bus instance when using
dual gyro.
* ALL other dual-gyro boards have one sensor per bus.  SPRacingF7DUAL is has two per bus and thus commit has a lot of changes to fix SPI/BUS/GYRO initialisation issues.

* CF/BF - Add SPRacingF4EVODG target.

This target adds a second gyro to the board using the SPI pads on the back of the board.

* CF/BF - Temporarily disable Gyro EXTI pin to allow NEO target to build.
2018-03-04 11:29:31 +13:00
Michael Keller
9bcc6aca8e
Revert "BEEPER Conversion to use USE_ scheme" (#5368) 2018-03-04 09:40:17 +13:00
jflyper
bf11921dc0
Merge pull request #5285 from jflyper/bfdev-convert-beeper-to-USE_-scheme
BEEPER Conversion to use USE_ scheme
2018-03-03 23:22:56 +09:00
Hydra
2c12a8fe52 CF/BF - Fix 'unused variable disableRunawayTakeoff' warning when
building CJMCU.
2018-03-03 01:34:01 +01:00
jflyper
ea0db878bf Convert to USE_ scheme 2018-03-02 22:29:40 +09:00
Michael Keller
972e0b28a9 Increment firmware, MSP, EEPROM versions after 3.3.0. 2018-03-02 22:00:02 +13:00
Michael Keller
372f527476
Merge pull request #5339 from mikeller/fix_osd_stat_datetime_cli
Added missing `osd_stat_rtc_date_time` to CLI.
2018-03-01 02:22:56 +13:00
Michael Keller
1453a348b7
Merge pull request #5337 from etracer65/runaway_takeoff_cleanup
Runaway Takeoff remove unneeded parameters and enhance deactivate logic
2018-03-01 02:22:22 +13:00
mikeller
d110ba6caf Added missing osd_stat_rtc_date_time to CLI. 2018-03-01 01:28:19 +13:00
Bruce Luckcuck
449f5f2f5c Runaway Takeoff remove unneeded parameters and enhance deactivate logic
Removed parameters runaway_takeoff_threshold (hardcode to 60) and runaway_takeoff_activate_delay (hardcode to 75).  The previous default values worked well and required no tuning.

Enhance the deactivate logic to remove the R/P/Y stick activity condition once throttle reaches 2X runaway_takeoff_deactivate_throttle_percent.  Additionally reduce the runaway_takeoff_deactivate_delay by 50% when throttle exceeds 75%.
2018-02-27 19:22:33 -05:00
jflyper
122a967c24 Core temperature can be negative 2018-02-28 08:06:53 +09:00
Hydra
f0e06fcb58 CF/BF - Fix incorrect ACC sensor name for ICM20608G.
It was missing the 'G' suffix when compared to the gyro names.  Now the
two sensor name strings can be de-duplicated by the linker.
2018-02-22 19:32:53 +01:00
Bruce Luckcuck
84db8ef3fc Removed duplicate legacy gyro_lpf validation from msp.c
Additional validation in msp.c was resetting the gyro and pid denoms incorrectly under the assumption that any non-zero gyro_lpf value means the gyro is in 1KHz refresh rate.  The correct validation is already been performed by fc/config.c so the extra legacy validtions are not needed.
2018-02-20 14:38:28 -05:00
Michael Keller
b4667332d7
Merge pull request #5208 from jflyper/bfdev-piniobox-cleanup
PINIOBOX Separation of boxId and permanentId.
2018-02-20 01:53:07 +13:00
Michael Keller
f07bf40d19
Merge pull request #5210 from DieHertz/f4-overclock-subset
Adjustable overclock for F405 and F411
2018-02-19 02:26:15 +13:00
jflyper
18d5a373c0 Separation of boxId and permanentId. 2018-02-18 21:30:05 +09:00
Michael Keller
3dddb17e35
Merge pull request #5179 from mikeller/unify_3d_switches
Unified `BOX3DDISABLE` and `BOX3DONASWITCH` switches.
2018-02-18 03:21:20 +13:00
Andrey Mironov
ac26c975dd Adjustable OC for F405 and F411 2018-02-17 14:12:16 +03:00
AJ Christensen
3c8b9637c8 Biquad RC+FIR2: Reverse interface settings DEFINE conditional
* Previously we allowed the user to override from the Biquad RC+FIR2 to the FKF
  impl. at compile time via `make OPTIONS=USE_GYRO_FAST_KALMAN`.
* This was regressed in PR #5144 / commit: 4dd65a2. Restores previous behavior.
2018-02-17 22:51:25 +13:00
Bruce Luckcuck
17aeaa3ee0 Runaway Takeoff Prevention - temporarily disable during configurator bench testing
Temporarily disables Runaway Takeoff Prevention when the `ARMING_DISABLED_MSP` flag is cleared in the configurator by switching the safety switch on the motors tab.  Allows bench testing the motors and flight controller response without triggering a runaway takeoff auto-disarm.

Requires coordination with the configurator to pass an extra runaway takeoff temporary disable flag with the MSP_ARMING_DISABLE msp command.
2018-02-14 09:09:30 -05:00
Michael Keller
9da7416c30
Merge pull request #5185 from etracer65/arming_disabled_msp_disarm
Disarm when configurator sets ARMING_DISABLED_MSP arming disabled flag
2018-02-15 01:41:19 +13:00
mikeller
1de60106b2 Fixed ordering of SPI RX protocols. 2018-02-15 00:22:36 +13:00
Michael Keller
afff03197c
Merge pull request #5144 from fujin/bqrcf2-lpf-cutoff-hz
Biquad RC+FIR2: Allow user to specify cutoff Hz parameter directly
2018-02-14 13:23:57 +13:00
AJ Christensen
4dd65a2876 Biquad RC+FIR2: Allow user to specify cutoff Hz parameter directly
* Generate 'k' per the code for the PT1
* Adjust function prototypes/functions to accept f_cut/dT where applicable
* Adjust gyro configuration, parameter group, interface settings to suit
2018-02-14 12:09:49 +13:00
Bruce Luckcuck
076ad942e4 Disarm when configurator sets ARMING_DISABLED_MSP arming disabled flag
Addresses an edge case where the user could turn on the safety switch (on motors tab), arm and spin the motors, and then turn off the safety switch (without disarming first).  In this scenario the motors would keep spinning even though the ARMING_DISABLED_MSP arming disabled flag would be set.

This change checks the arming state and disarms when the configurator sets the ARMING_DISABLED_MSP flag.
2018-02-13 09:51:50 -05:00
mikeller
232fc4e8de Unified BOX3DDISABLE and BOX3DONASWITCH switches. 2018-02-13 20:02:02 +13:00
jflyper
45c5d37693 Use permanentId for config, convert to boxId_e at init 2018-02-12 16:02:38 +09:00
jflyper
6557b161aa Add box to pinio monitor/mapper 2018-02-12 13:54:40 +09:00
Michael Keller
06691e4d7c
Merge pull request #5108 from jflyper/bfdev-pinio
PINIO Generic pin output driver
2018-02-12 15:06:48 +13:00