1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-23 00:05:33 +03:00
Commit graph

636 commits

Author SHA1 Message Date
blckmn
a9f74cd6df Removed excess trailing spaces before new lines on licenses. 2018-04-25 20:58:00 +10:00
Bruce Luckcuck
0a0add8c56 Yaw spin recovery optimize (#3)
* PID controller unittest

* Clean code for yaw spin recovery

* Yaw spin recovery optimizations

* Flash size optimizations, use 50% throttle when airmode is off, and override pidsum_limit_yaw

Also rebasing from betaflight/master
2018-04-24 14:02:36 +12:00
ctzsnooze
41fb37a264 Clean code for yaw spin recovery 2018-04-24 13:51:06 +12:00
J Blackman
c1fa9a610b
Merge pull request #5742 from blckmn/licence_update
Licence update
2018-04-22 19:23:52 +10:00
blckmn
b6422db597 All applicable files now updated. 2018-04-22 12:13:33 +10:00
Bruce Luckcuck
087837ffea Change gyro overflow handling to be based on runtime detected gyro (#5730)
Previously the gyro_overflow_detect and fallback slew filter were based on target definitions to determine whether the flight controller had an affected gyro to enable protection. The problem is that some targets are available with multiple gyro options and if one of those options was an affected gyro then all flight controllers for that target would have the oveflow code enabled even if they had a non-affected gyro.  Also targets that include multiple gyros on-board and are selectable at runtime were not differentiated and forced overflow handling on even if the selected gyro was not affected.

For non-affected gyros the overflow handling code is not required and reduces recovery performance so it's not desirable to have it enabled when unnecessary.

In the case of dual-gyro targets if gyro_to_use = BOTH then if either is an affected gyro then overflow handling will be enabled.
2018-04-22 12:16:00 +12:00
blckmn
916de26ad8 Files with bad CRLF 2018-04-22 09:31:43 +10:00
blckmn
46fe22b4bd Direct license replacement 2018-04-22 09:22:46 +10:00
pulquero
a51bea1ebc Fixes to ranges of esc warning thresholds. (#5726)
Signed-off-by: Mark Hale <mark.hale@physics.org>
2018-04-21 18:12:11 +12:00
Andrey Mironov
bee2bacb66
Fixed ownership of MPU_CS resource in case of multiple gyros (#5715) 2018-04-20 00:13:28 +03:00
Andrey Mironov
bf984f39b1 F7 optimizations (#5674)
* Revert "Revert "Rewritten F7 dshot to LL (draft)" (#5430)"

This reverts commit aa42a69d2f.

* Reworked F7 linker scripts to maximize performance of both F74x and F72x

* Some comments and changes from original F7 HAL DSHOT

* Prohibit inlining of some functions to place them in ITCM-RAM

* Fixed usartTargetConfigure implicit declaration

* Moved back to SRAM1 as main RAM

* Added SRAM2 attribute

* Fixed LL DSHOT FOR SPRF7DUAL and probably other adv TIM users

* Fixed SPRF7DUAL rev. A motor order

* Enabled CCM for data on F40x

* Fixed F7 startup assembly symbols

* Fixed KISSFCV2F7 linker script

* Added a quick way of building F7 targets only

* Got rid of the useless F7 target script

* Added NOINLINE and got rid of useless __APPLE__ define

* Added some important functions to ITCM

* Added NOINLINE macro for tests

* Copy to ITCM before passing execution into it

* Minimized cache footprint of motor output code

* Evicted low-impact functions from ITCM

* Switched MATEKF722 and SPRACINGF7DUAL to burst DSHOT

* Switched CLRACINGF7 to burst DSHOT

* Moved UART RX&TX buffers to DTCM-RAM to avoid cache incoherency

* Marked taskMainPidLoop for ITCM-RAM, disallowed inlining per-function

* Revert "Added a quick way of building F7 targets only"

This reverts commit 2294518998.
2018-04-20 08:37:32 +12:00
Michael Keller
e0dcea4d48
Added checks for ESC_SENSOR feature being enabled when reading ESC sensor data. (#5663) 2018-04-11 23:31:14 +12:00
Bruce Luckcuck
9a7533f57d Expose vbat ADC divider and multiplier parameters in CLI (#5641)
Previously only vbat_scale was exposed. Adds vbat_divider and vbat_multiplier parameters.

Note that all of these parameters only apply to the first voltage sensor (VOLTAGE_SENSOR_ADC_VBAT).  There is the capability to have multiple sensors and those will not have their parameters exposed.  Currently there are no target definitions that use multiple sensors.
2018-04-07 12:26:16 +12:00
Michael Keller
b5c0076bc8
Added USE_ESC_SENSOR_INFO define, cleaned up USE_ESC_SENSOR define. (#5580) 2018-04-01 11:33:07 +12:00
Andrey Mironov
172642383d
Fixed notch Q calculation to be dimensionless as it should (#5529)
* Fixed notch Q calculation to be dimensionless as it should

* Get rid of one division and leverage multiply-accumulate instr
2018-03-24 20:27:39 +03:00
etracer65
062ef77276 Rework gyro sample rate and DLPF configuration and expose additional filter cutoffs (#5483)
The old gyro_lpf setting was based on the DLPF_CFG values for the MPU6050 gyro and the enumeration was inaccurate and misleading.  For example, the default "OFF" setting did not disable the DLPF, but actually set it to around 250hz.  The actual cutoff frequency for each setting varies by gyro hardware so the literal frequencies in the enumeration were also incorrect.

Removed gyro_lpf and replaced it with gyro_hardware_lpf (8KHz) and gyro_32khz_hardware_lpf (32KHz).  The parameters were renamed to indicate that they are hardware filtering options to differentiate from the many software lowpass filtering options.

gyro_hardware_lpf - This parameter sets the filtering and sample rate options for 8KHz gyros (or 32KHz capable gyros running in 8KHz mode).

- NORMAL - default setting that is equivalent to the previous "OFF" setting.  Configures 8KHz sampling with ~250Hz filter cutoff.
- EXPERIMENTAL - 8KHz sampling with a higher frequency filter cutoff (around 3000hz).  Considerably more noisy and requires additional software filtering.  Note that for the MPU6000 Invensense doesn't officially document the filter cutoff frequency for this selection and simply lists it as "reserved".  In testing it's clear that a higher frequency filter cutoff is being selected due to the increased noise, but the actual cutoff frequency is unknown.
- 1KHZ_SAMPLING - 1KHz sample rate with and approximate 188Hz filter cutoff.

Note that the following additional 1KHz sample rate options with lower filter cutoffs have been eliminated - "98HZ", "42HZ", "20HZ", "10HZ", "5HZ".  It seems unlikely that these are still needed are probably no longer viable and flight performance would be very poor.

gyro_32khz_hardware_lpf - This parameter sets the filtering options while running in 32KHz mode on capable gyros.  It also exposes a new high frequency filter cutoff mode.

- NORMAL - The default and matches the current settings used for 32KHz mode.  Provides a filter cutoff around 3000Hz.
- EXPERIMENTAL - Selects a filter cutoff around 8000Hz.  This is a very noisy setting and will require substantial software filtering.

The default values for both 8KHz and 32KHz sample rates were chosen to match the previous defaults and users should not experience any performance differences.

Normalized the gyro initialization.  Previously there was little consistency on how the initialization was performed and the settings interpreted.  For example, MPU9250 used a completely different logic tree when configuring the registers.

Disconnected the literal parameter value from the gyro initialization.  The gyro_lpf parameter contained a number from 0-7 that was literally applied to the configuration register during the gyro initialization.  This caused some older gyro initializations to be incorrect as they used a different register layout (MPU3050 and L3G4200D).  By transitioning to a logical selection the actual value applied to the hardware register is abstracted.  This will better future-proof the design as new gyros may have a different register structure that may be incompatible with the old method.

Added a gyroregisters command to the CLI that is used to read the current register settings from the gyro and dump them to the CLI.  This is used to verify the configuration in comparison to the datasheets for the various gyros.  Testing empirically by looking at the relative noise from the gyros can give a rough estimate whether the different options are selecting correctly, but it's not very precise.  The code for the gyroregisters CLI command is wrapped inside #ifdef USE_GYRO_REGISTER_DUMP blocks to allow easy disabling.  It's currently enabled for all targets but we may decide to disable before release or only limit to targets with more available space (>=F4).
2018-03-22 14:02:30 +13:00
Andrey Mironov
b98bdcc3f8 Made gyro debug and no-debug code paths the identical (#5491) 2018-03-22 09:31:50 +13:00
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
Miroslav Drbal [ApoC]
3ce8223c96 Dynamic filter performance improvement for 16k and 32k gyro loop frequency (#5450)
* * FAST_RAM-ing variables used to compute FFT
* Eradicated global static variables in favour of define
* FFT_WINDOW_SIZE / 2 replaced with FFT_BIN_COUNT
* Limit call count of filters update to necessary minimum on 32k and 16k gyro sampling rate
* Dynamic filter recalculation freq. is at least FFT_SAMPLING_RATE + update time
* Moved global variables used in local scope only to local scope

* * Based on diehertzs review I removed all 0 initializations of global variables

* * Fixed calculation of update frequency for center frequency filter, thx rav-rav for pointing the problem

* * Silenced the warning signed vs unsigned comparison

* * Replaced magick values 3*4 and 12 with preprocessor macro as requested by DieHertz

* * Replaced hardcoded axis count with proper preprocessor macro
2018-03-21 00:17:34 +13:00
adrianmiriuta
c2898a4fd9 review of #4986 (#5422)
* review #4986 v1

* jfliper requested changes

* correction
2018-03-15 02:37: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
adrianmiriuta
3855d254b0 move from CALIBRATING_GYRO_CYCLES to CALIBRATING_GYRO_TIME ... absolu… (#5320)
* move from CALIBRATING_GYRO_CYCLES to CALIBRATING_GYRO_TIME ... absolute calibration time

* DieHertz requested changes

* cleanup indentation
2018-03-04 11:46:15 +13:00
Míguel Ángel Mulero Martínez
73eb5d396e Add compass QMC5883L driver (#5309) 2018-03-04 11:45:54 +13:00
Míguel Ángel Mulero Martínez
37fa25606f Simplify HMC5883 Compass (#5289)
Remove the mag gain calculation. After some tests the maximun difference
is 6 degrees, so is not important.
2018-03-04 11:43:24 +13:00
conkerkh
742cb5f93b Add current sensor debug option. (#5260)
Allows for easy calculation of required scale and offset.

0 - miliVolts
1 - centiAmps
2 - amperageLatest
3 - mahDrawn
2018-03-04 11:42:41 +13: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
Dominic Clifton
c7f7846d39 Use GYRO_1/2 defines instead of GYRO_0/1 to make things less confusing. (#5274) 2018-03-04 02:00:28 +13:00
Petr Ledvina
c11d016bc7 optimize math (#5287)
* optimize math

Results in considerable flash saving

* log_approx, exp_approx, pow_approx

Taken from https://github.com/jhjourdan/SIMD-math-prims/blob/master/simd_math_prims.h

* Fix pow in rangefinder

* Use approximate function in baro calculation

Maximum error is < 20cm

* fixup! Fix pow in rangefinder
2018-03-04 01:26:33 +13:00
jflyper
122a967c24 Core temperature can be negative 2018-02-28 08:06:53 +09:00
Bruce Luckcuck
e9686c0ef8 Change gyro_overflow_detect to use filtered instead of raw gyro data - 2nd try
Noise and momentary spikes in gyro data (particularly in 32K mode) were causing false triggering of the gyro overflow detection. Changing to using filtered instead of raw gyro data eliminates the false triggering.

Also adjusted the trigger and reset rates slightly (approx. 1950dps and 1850dps respectively).

Fixed bug for gyros that may not be +-2000dps full scale. The trigger threshold will be 97.5% full-scale and reset at 92.5% (corresponds to 1950 and 1850 for 2000dps gyros).
2018-02-22 18:56:15 -05:00
Bruce Luckcuck
9ea965c549 Add gyro rate checking to runaway takeoff activation to improve bench testing
Changed the triggering phase so that in addition to the pidSum needing to exceed runaway_takeoff_threshold, the gyro rate on any axis must exceed a threshold value to indicate the quad is actually moving. The threshold for the yaw axis is much higher since the torque of the motors can still yaw the craft without props.
2018-02-19 17:22:04 -05:00
Michael Keller
e5364ee764
Revert "Change gyro_overflow_detect to use filtered instead of raw gyro data" 2018-02-18 09:25:04 +13:00
Bruce Luckcuck
b49a9ec928 Change gyro_overflow_detect to use filtered instead of raw gyro data
Noise and momentary spikes in gyro data (particularly in 32K mode) were causing false triggering of the gyro overflow detection.

Also adjusted the trigger and reset rates slightly (approx. 1950dps and 1850dps respectively).

Optimized the gyro loop slightly by eliminating 3 floating point multiplies.

Fixed bug for gyros that may not be +-2000dps full scale.
2018-02-14 17:50:09 -05: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
Michael Keller
8a95474bff
Merge pull request #5135 from codecae/battery_telemetry_init_fix
Corrected issue with telemetry init when battery cell estimation is undefined
2018-02-11 13:24:12 +13:00
Curtis Bangert
3a7540e042 Corrected issue with telemetry init when battery cell estimatation is undefined 2018-02-08 22:31:50 -05:00
Dan Nixon
22874d8ba2 CMS power menu
Menu including:
- Voltage meter selection
- Current meter selection
- Max cell voltage (moved from MISC menu)
- Voltage scale adjust (moved from MISC menu)
- ADC current scale and offset adjust
- Virtual current scale and offset adjust
2018-02-01 15:31:45 +00:00
Adrian Miriuta
b21d681153 Introduced cli parameter <gyro_offset_yaw>
It allows to manually compensate gyro drift over time.
rebased squashed.
2018-01-25 12:45:38 +01:00
Martin Budden
3116ef4008 Moved compass health check into compass.c 2018-01-21 14:51:59 +00:00
Martin Budden
78cc4f65a1 Avoided compass task wrapper function 2018-01-20 13:35:22 +00:00
qba667
5748e75408 Additional IBUS telemetry implemented. 2018-01-18 13:37:02 +01:00
AJ Christensen
17bd318ec1 Biquad RC+FIR2 Filter: Prototype of ledvinap's suggestion on #4890
https://github.com/betaflight/betaflight/pull/4890#issuecomment-356636997
2018-01-16 15:37:19 +13:00
Martin Budden
740234c909 Fix F1 builds 2018-01-11 09:35:08 +00:00
Martin Budden
3747d6742b Whitespace tidy 2018-01-10 16:56:54 +00:00
Michael Keller
4258651b3a
Merge pull request #4881 from jflyper/bfdev-adc-internal-full-task-version
VREFINT and core temperature support, full task polling version
2018-01-10 16:12:05 +13:00
jflyper
a03b85025c Internal ADC support, full task polling version 2018-01-10 11:49:56 +09:00
Michael Keller
05304e07d0
Merge pull request #4890 from fujin/rs2k-fast-kalman-implementation-only
Fast Kalman Gyro Filter: Implementation and parameter groups only
2018-01-10 00:55:02 +13:00
Michael Keller
72712b348d Fixed defines for BARO_LPS. 2018-01-09 17:22:06 +13:00
Kalyn Doerr
6e6aafe6d5 Fast Kalman Gyro Filter: Implementation and parameter groups only
Signed-off-by: AJ Christensen <aj@junglistheavy.industries>
2018-01-08 08:15:20 +13:00