murata
2643e7e906
AP_InertialSensor: Unify from print or println to printf.
8 years ago
Lucas De Marchi
5472bc4de1
Global: change Device::PeriodicCb signature
...
Remove bool return as it's never being used and not supported on PX4.
8 years ago
mirkix
62fabca19d
AP_InertialSensor: Enable I2C bypass for MPU9250 conntected via I2C to access internal AK8963
8 years ago
Randy Mackay
946d30476a
AP_InertialSensor: fix whoami for MPU6k
8 years ago
Lucas De Marchi
9569ed94a9
AP_InertialSensor: Invensense: use capital letters for define
8 years ago
Andrew Tridgell
65b9b86099
AP_InertialSensor: unify MPU6000 and MPU9250 drivers
...
make a single AP_InertialSensor_Invensense driver. This avoids a lot
of duplication and will save time as new varients are added
8 years ago
Pierre Kancir
13c16e187f
InertialSensor: MPU6000 utilize an explicit type cast to avoid the loss of a fractional part
8 years ago
Randy Mackay
699279ed1f
AP_InertialSensor: fix build warning for MPU6000
8 years ago
Andrew Tridgell
f9845c93b1
AP_InertialSensor: keep transfers nicely setup for DMA on stm32
...
this avoids using stack based bounce buffers which may not support DMA
on stm32
8 years ago
Andrew Tridgell
771cedca3d
AP_InertialSensor: reduced number of SPI transfers
...
use cached copy of temperature in MPU6000 and MPU9250 to detect FIFO
error when possible
8 years ago
Andrew Tridgell
27605b0258
AP_InertialSensor: run invensese reg checking at low speed
...
config register read/write should be at low bus speed.
also change to check every 20 calls to reduce checking cost
8 years ago
Andrew Tridgell
f3a778f980
AP_InertialSensor: fixed freeing of fifo buffer
8 years ago
Andrew Tridgell
6f28c61c8d
AP_InertialSensor: changed SIZE to LEN
...
thanks to Lucas for suggestion
8 years ago
hiro2233
cb7f46d653
AP_InertialSensor: fixed handling of user_ctrl register
...
with aux bus implementations
8 years ago
Andrew Tridgell
9b4c588c09
AP_InertialSensor: adapt drivers for SPI-DMA capable systems
...
no longer need accumulate() transfers with SPI enabled DMA on stm32
8 years ago
Andrew Tridgell
28daddaaf2
AP_InertialSensor: don't use accumulate approach on Linux or I2C
8 years ago
Andrew Tridgell
d9c8db7024
AP_InertialSensor: implement a new strategy for fast sampling
...
this moves to using a 1p filter on the high rate data, followed by
averaging down to 1kHz then a 2p filter to apply configured cutoff
frequency.
It also fixes the FIFO reset to not cause data corruption. We need to
disable all FIFO channels before doing the reset, and wait for the
FIFO to stop in the sensor.
Finally it moves sampling of the MPU6000 and MPU9250 into the main
thread. That significantly improves scheduling performance as we no
longer get long FIFO SPI transfers happening during other tasks. All
transfers happen at the start of the fast loop. That makes timing much
more predictable.
Thanks to Leonard and Paul for help with this design!
8 years ago
Lucas De Marchi
87c6d5da13
AP_InertialSensor: replace panic() with return
...
When blocking forever there's no reason to call panic later since it
will never going to be reached. This reduces binary size in a few bytes
since the message isn't required anymore.
8 years ago
Andrew Tridgell
6129b1abb6
AP_InertialSensor: wait forever for semaphore on startup
...
some boards take a silly amount of time to get semaphore on startup
8 years ago
Andrew Tridgell
216cf53922
AP_InertialSensor: handle FIFO overflow for MPU6k and 9250
...
this prevents temporary corruption of INS data on FIFO overflow
8 years ago
Andrew Tridgell
624178f3be
AP_InertialSensor: added INS_FAST_SAMPLE parameter
...
this allows enable/disable of fast sampling per IMU, making
experimentation easier.
It also fixes the fast sampling to always average over 8 samples, and
fixes the 9250 to use the correct accumulator when not doing fast
sampling
8 years ago
Andrew Tridgell
c0303ffe8a
AP_InertialSensor: temporarily disable fast sampling
...
a problem has been found with the filtering with fast sampling on
ICM-20608 and MPU9250. Disable until it is solved.
8 years ago
Andrew Tridgell
c794ad9ee8
AP_InertialSensor: use smaller FIFO buffers
...
this allows for reading multiple chunks from the fifo per callback
8 years ago
Andrew Tridgell
77a83c091a
AP_InertialSensor: added register checking for MPU6000/ICM20608
8 years ago
Andrew Tridgell
af0ec41652
AP_InertialSensor: fixed accel clip detection with fast sampling
...
we need to check on every sample at the full rate
8 years ago
Andrew Tridgell
8da42b7a8b
AP_InertialSensor: fixed temperature for fast sampling case
8 years ago
Andrew Tridgell
e27a76e460
AP_InertialSensor: fixed auxiliary bus with FIFO enabled
...
make sure fifo reset doesn't check I2C master enable
8 years ago
Andrew Tridgell
46785e8ecf
AP_InertialSensor: improved method for FIFO integrity checking
...
check temperature every 255 samples against FIFO data
8 years ago
Andrew Tridgell
d2f6a514b9
AP_InertialSensor: catch FIFO alignment errors using temperature reading
...
Two cases of what seems to be FIFO alignment errors have been seen on
a Pixracer-beta board with a ICM-20608. At a cost of 2 extra bytes per
transfer we can catch these by looking for sudden temperature changes
caused by bad data in the temperature registers.
8 years ago
Andrew Tridgell
d248b33104
AP_InertialSensor: simplify config of MPU6000
...
use zero sample rate divider on both MPU6000 and ICM20608
8 years ago
Andrew Tridgell
84c3e29891
AP_InertialSensor: use AP_HAL rotations for MPU6000
8 years ago
Andrew Tridgell
2f01dfe81c
AP_InertialSensor: fixed from review by Lucas
8 years ago
Andrew Tridgell
81b933d9d0
AP_InertialSensor: use int32_t summation for fast sampling
...
very slightly faster
8 years ago
Andrew Tridgell
af1c5fd6d3
AP_InertialSensor: always use FIFO on MPU6000
...
and enable fast sampling on ICM20608 if on SPI
8 years ago
Andrew Tridgell
a9a5e50bd1
AP_InertialSensor: removed timer callback for MPU6000
...
Thanks to Lucas for pointing out this is not needed
8 years ago
Andrew Tridgell
bd84e592f8
AP_InertialSensor: check for NULL device pointer in probe()
...
handle missing devices
8 years ago
Andrew Tridgell
3d7d773883
AP_InertialSensor: added support for ICM20608 on Pixracer
8 years ago
Andrew Tridgell
aa4025bdf9
AP_InertialSensor: make INS sensor IDs match for PX4
...
in-tree driver IDs now match PX4Firmware driver IDs on Pixhawk2
8 years ago
Andrew Tridgell
9e7e1b2f01
AP_InertialSensor: fixed merge conflicts with patches from Lucas
8 years ago
Lucas De Marchi
104e29acf2
AP_InertialSensor: MPU6000: change accel scale to 16G
...
Also change the ID of MPU6000 so previous calibration values are not
considered valid.
8 years ago
Lucas De Marchi
dc09661b9e
AP_InertialSensor: MPU6000: save driver version
...
When registering accel and gyro we use the upper 16bits of the id to
store the driver version. When changing the driver behavior in
non-compatible ways, changing this version will trigger a request for
calibration.
8 years ago
Lucas De Marchi
0d3adef8b2
AP_InertialSensor: MPU6000: remove TODO leftover
...
This will never be done as blindly changing speed is not the way to fix
communication issues.
8 years ago
Lucas De Marchi
469efb00f6
AP_InertialSensor: save id for gyro and accel instances
...
This allows each sensor to be uniquely identified in the system by using
either the index inside the backend or for those that use the Device
interface, to use the bus type, location, and device id.
We leave 16-bit for each sensor to be able to change its own
identification in future, which allows them to be changed in an
incompatible manner forcing a re-calibration.
8 years ago
Lucas De Marchi
ace61087a1
AP_InertialSensor: remove product_id
...
We only leave the parameter there for backward-compatibility. However
product id on the inertial sensor is not much useful since it's only
kept for the first instance.
A better implementation per-gyro and per-accel is needed in order to
avoid problems with sensors taking the offsets configured for another
sensor.
8 years ago
Andrew Tridgell
64a5d3938c
AP_InertialSensor: implement device IDs for MPU6000 and MPU9250 AuxilaryBus
8 years ago
Andrew Tridgell
a5c5e033d2
AP_InertialSensor: fixed threading and locking in remaining backends
...
use a backend semaphore for shared data and use thread per bus where
available
8 years ago
Andrew Tridgell
2df6ed08c2
AP_InertialSensor: added optional per-instance orientation
...
this is needed for multi-sensor boards to get orientation right for
each sensor
8 years ago
Andrew Tridgell
919aa61918
AP_InertialSensor: support AuxiliaryBus without register_periodic_callback()
8 years ago
Andrew Tridgell
2b66df68a1
AP_InertialSensor: use thread-per-bus for lsm303d and mpu6000
8 years ago
Mathieu OTHACEHE
152edf7189
Global: remove mode line from headers
...
Using a global .dir-locals.el file is a better alternative than
reincluding the same emacs header in every file of the project.
8 years ago