Commit Graph

10970 Commits

Author SHA1 Message Date
allenfor2017 a02c404157 add new target SpeedyBee F4 (#5552)
* add new target speedybee f4

* modify BEEPER define
2018-03-30 17:54:25 +13:00
codecae 22004cfd56 Created generic Tramp protocol interface (#5527) 2018-03-30 17:50:19 +13:00
Míguel Ángel Mulero Martínez 39904a3065 Add default telemetry for iBus (#5570)
The "standard" telemetry is RPM, temperature and external voltage.
2018-03-30 17:41:50 +13:00
etracer65 59dbe0e4e3 Correct accelerometer initialization for MPU6000 and MPU9250 (#5559)
Accelerometer should be initialized to 16G scale.
2018-03-30 17:11:14 +13:00
Anders Höglund 11e22e634f Spektrum SRXL improvements. Collect TM data in sync with transmission instead of async 30Hz, performancs +50%. B-channel Cap/Cur/temp was visible even though not used, corrected. Incomplete compile conditions corrected. (#5556) 2018-03-30 17:02:38 +13:00
Míguel Ángel Mulero Martínez efef50ced1 Increment AG GAIN step in CMS (#5568) 2018-03-30 16:54:55 +13:00
Míguel Ángel Mulero Martínez 7ad4bbfa0f Simplify the precompiler condition for MSP_VOLTAGE_METERS (#5554)
... and MSP_CURRENT_METERS
2018-03-28 08:11:08 +13:00
Míguel Ángel Mulero Martínez 8095d3442c Fix MSP_VOLTAGE_METERS and MSP_CURRENT_METERS (#5547)
Only sustract the unused voltage/current meters from ESC when
USE_ESC_SENSOR is defined
2018-03-28 03:34:53 +13:00
Michael Keller 5a7b1879ee
Fixed spurious 'bad RX' arming disable detection. (#5541) 2018-03-27 09:52:14 +13:00
Andrey Mironov 9cf0eca620
Fixed missing extern on throttleBoost (#5549) 2018-03-26 23:01:25 +03:00
Michael Keller 83e614c139
Made MSC initialisation pin configurable. (#5535) 2018-03-27 01:04:59 +13:00
zuim 605962d9a5 Get current time using gps (#5520)
* Get time using gps with nmea and ublox protocol. The rtctime is set once gps time is available.

* Fix issues with Gps time

* Fix problems with gpstime
2018-03-27 01:04:41 +13:00
Michael Keller 3a8901daa8
Added assertion about OSD warning field size. (#5533) 2018-03-26 20:53:12 +13:00
Michael Keller 4b20ab5d7b
Fixed naming inconsistency for OSD elements. (#5534) 2018-03-26 11:30:19 +13:00
Michael Keller 474d99e77c
Removed conditional from struct for SD card parameter group. (#5537) 2018-03-26 10:50:46 +13:00
joelucid ee8daac41d ITerm rotation (#5469)
* ITerm rotation

* address requested changes

* now counting up

* scale errors according to Ki while rotating

* iterm_rotation profile setting

* revert to non scaled version, style related fixes

* Triggering a CI build.
2018-03-26 10:50:21 +13:00
Michael Keller d6af4c2d6b
Fixed blinking of OSD RSSI element. (#5542) 2018-03-26 10:46:46 +13:00
Michael Keller 71cd500b99
Simplified code path in fc_rc. (#5536) 2018-03-25 22:35:30 +13:00
etracer65 9edce2359a Add current battery voltage as an option for the OSD stats page (#5531)
Allows the user to configure a new OSD stat item called "BATTERY" that will display a live and updating battery voltage. This would allow the user to see how their battery was recovering after disarming by comparing to the stat "END BATTERY".
2018-03-25 13:56:25 +13:00
conkerkh b9ab42d6a7 Enable Composite USB HID for all F4, add PG for USB device. (#5525) 2018-03-25 12:44:57 +13:00
joelucid efda704ee5 Throttle boost (#5508)
* throttle boost which temporarily boosts throttle in both directions to improve response

* fix comment and use pt1FilterGain

* incorporate review suggestions

* incorporate review suggestions

* use float constant to avoid double promotion

* formatting changes

* formatting change

* hopefully last style changes
2018-03-25 11:33:22 +13: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 0c7ae49464 Fix OSD stats not clearing when entering OSD menu (#5522)
The pitch stick high can be used to clear the OSD stats screen, but it's also part of the sequence to enter the OSD menu. Entering the OSD menu from the stats page should have cleared the stats, but because of a race condition they weren't always cleared and the OSD menu would draw on top of the stats.  Changed the logic to ensure that if the OSD menu is entered the stats page is exited and cleared.
2018-03-24 18:03:43 +13:00
etracer65 c8a646ebc3 Cleanup 32K capable gyro includes (#5523)
Added a `USE_32K_CAPABLE_GYRO` define set in `common_fc_post.h` that replaces the repeated testing for each gyro define wherever 32KHz compatibility is checked.
2018-03-24 18:02:27 +13:00
Michael Keller a8e86880f5
Generalised USB MSC use for all F4 targets with SD card. (#5519) 2018-03-24 16:00:53 +13:00
Michael Keller 79debdc993
Increased MSP API version for 3.4.0 to 1.39. (#5518) 2018-03-24 01:54:52 +13:00
conkerkh 56e916932c Add DiscF407 target for developers (#5442)
* Add DiscF407 target for developers

* Requested changes
2018-03-23 20:18:48 +13:00
githubDLG cd72348dd3 add new target CrazyBee F3 FS (#5495)
* add new target CrazyBee F3 FS

add new target CrazyBee F3 FS

* merge crazybeef3fs to crazybeef3fr
2018-03-23 20:11:59 +13:00
joelucid 98a77dcd96 Discontinuity fix (#5509)
* use continuous feed-forward

* use continuous feed-forward

* formatting
2018-03-23 14:13:32 +13:00
AJ Christensen a0add440f0 common filters: pt1FilterGain must accept uint16_t (#5513)
* all places that call pt1FilterGain use lpfHz which is of type uint16_t. I have
  not confirmed yet but believe that when lpfHz were greater than 255 we would
  have seen data loss / overflow / wrap around. TBC
2018-03-23 13:42:56 +13:00
Andrey Mironov eca6fb3a0c Simplified lmaSmoothingUpdate and made it's state aligned for all members (#5510) 2018-03-23 13:41:40 +13:00
conkerkh a539bd60bc CDC+HID HotFixes (#5512)
- For now disables Composite (it can be enabled, with USB_CDC_HID define)
- Modified descriptors so they are properly recognized
- Changed PID for Composite device (otherwise it doesn't work probably due to windows feature - automatically finding drivers based on those values)
2018-03-23 13:19:14 +13:00
Michael Keller 5dc23e662f Fixed display of CLI lookup options. (#5493) 2018-03-22 09:40:49 +03:00
conkerkh 4786e1a333 Add Composite CDC+HID device option. (#5478)
* Add Composite CDC+HID device option.

- It passes on though HID interface 8 channels received from TX
- Endpoints are reconfigured to support HID interface
- Potentially this can slow down SPI Flash transfer though CDC interface...
- This could be addressed by support for MSC when using SPI Flash (emulating FATFS)

* Different way to handle MIN redefine
2018-03-22 15:21:22 +13:00
githubDLG b2e807be6c add flysky rx indicating led (#5476)
* add flysky rx indicating led

add flysky rx indicating led

* add Conditional compilation directives

add Conditional compilation directives

* rewrite some code

rewrite some code and add some definitions/defines according to comments

* delete extra whitespace
2018-03-22 14:04:47 +13: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 a453063dd7 Restricted Dterm lowpass filter options (#5492)
* Restricted allowed filter types for Dterm lowpass 1

* Fixed output of CLI lookup entires with skips

* Reverted trailing NULLs

* Revert whitespace changes
2018-03-22 10:28:10 +13:00
Andrey Mironov b98bdcc3f8 Made gyro debug and no-debug code paths the identical (#5491) 2018-03-22 09:31:50 +13:00
Michael Keller 09f52d420d Allow the use of NULL values in CLI lookup tables. (#5489) 2018-03-21 20:13:02 +03:00
conkerkh 3a917a3755 Add USB Mass Storage Class support (#5443)
* Add MSC support

* Add support for MSC to WORMFC and SDIO_DMA

* Cleanup in fc_init

* Fix headers
2018-03-22 00:11:34 +13:00
Dan Nixon bc283cf5b9 Refine extended CMS menu toggles (#3601) 2018-03-22 00:07:53 +13:00
SteveCEvans 5558174d33 Support programming of Arduino devices in serial passthrough mode (#5129)
* Support DTR in serial passthrough mode to enable programming of Arduino
based devices such as MinimOSD.

Use 'serialpassthrough 5 57600 rxtx 56' and then use Ardino to program MinimOSD
Use 'serialpassthrough 5 115200' and then use MWOSD configurator to setup

* Fix comment for CDC_SetCtrlLineStateCb routine

* Handle F7 CDC interface

* Use strToPin() to allow easy port/pin specification

* Fix use of CDC_SetCtrlLineStateCb for all processor types

* Only set baud when specified

* Fix unit tests for cli

* Only register callback if needed

* Fix white space

* Provide implementation of IOConfigGPIO in SITL

* Update serialpassthrough help text

* DTR handling through serial drivers

* Fix F3, F7 and SITL builds

* If serialpassthrough command specifies baud rate of 0, set baud rate over USB. MWOSD configurator can now access config and reflash MinimOSD without rebooting and changing baud rate.

* Fix F3 build

* Fix failing unit tests

* Use resources to declare DTR pin assignment

* Don't assert DTR during normal operation as MW_OSD doesn't like it

* MW_OSD must be built with MAX_SOFTRESET defined in order to support DTR resets

* Minimise changes after dropping DTR pin param from serialpassthrough cmd

* Remove DTR pin param from serialpassthrough cmd

* Treat ioDtrTag as boolean in conditional statements

* Tidy buffer check

* Check buffer size in CDC_Itf_Control

* Fix unit test

* Add documentation for DTR

* Add note on MAX_SOFTRESET to documentation

* Remove superfluous function definitions

* Fix tabs

* Fix tabs

* Removed superfluous entried from vtable

* Backout whitespace changes unrelated to this PR

* Pass true/false to IOWrite()

* Fix line coding packing

* Add LINE_CODING structure defintion

* Revise serial documentation

* Prevent tx buffer overflow in serialPassthrough()

* Revert change unrelated to PR

* Review feedback from ledvinap

* Fix unit test

* Use PINIO to drive DTR

* Fix unit test

* Remove change unrelated to PR

* Fix SITL build

* Use shifted bits for mask definition

* Fix serialpassthrough documentation

* Only compile PINIO functionality if USE_PINIO defined

* IOConfigGPIO not needed

* Move cbCtrlLine callback to cli.c

* serialPassthrough params changed

* Check packed structure size

* Fix unit test

* Tidy up baud rate handling
2018-03-21 23:17:31 +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
Michael Keller a579fc5b22
Revert "Reinstate software serial (#5480)" (#5486)
This reverts commit f7c10593be.
2018-03-21 15:28:56 +13:00
jflyper f7c10593be Reinstate software serial (#5480) 2018-03-21 14:06:53 +13:00
mice5 93d86f3dab [KAKUTEF4] Move ADC to DMA2_Stream0 to avoid conflict (#5481)
* Move ADC to DMA2_Stream0 to avoid conflict

Motor 6 output is declared to use DMA2_ST4, which is used by default by ADC so Dshot is not possible on that output.

* Omitting channel defines

ADC channels are inferred from corresponding pins.
2018-03-21 13:48:08 +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 d2bc4e5af5 F7 Internal ADC (VREFINT and TEMPSENSOR) (#5322) 2018-03-21 00:52:37 +13:00
jflyper 462672ffb7 Increase ibata_offset range to accommodate certain Hall effect sensors (#5467) 2018-03-21 00:27:25 +13:00