MPU-6050 и прерывание по свободному падению

AlexOs
Offline
Зарегистрирован: 28.07.2017

Доброго времени суток. Прочитал достаточно много литературы по mpu-6050. Но никак не могу понять как перевести его прерывания в прерывание по свободному падению. Кто-нибудь делал такое? И как это можно реализовать на ардуинке?

nik182
Offline
Зарегистрирован: 04.05.2015

Открыть библиотеку и посмотреть все методы прописанные в ней. Найти метод включающий прерывание при достижени ускорения определнного значения. Установить значение порога равным 0 по  оси Z. Включить прерывание. Бросать  MPU-6050 строго параллельно поверхности земли. При достижении невесомости сработает прерывание. Если бросать не получается, можно повернуть плату на 90 градусов отностительно оси Х или Y. При расположении оси Z строго параллельно поверхности земли значение ускорения по оси Z обнулятся и произойдет прерывание. При обычном положении платы по оси Z всегда значение равное ускорению свободного падения , по осям X и Y равны 0. 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Согласно даташиту у MPU-6050 нет возможности генерировать прерывание по факту  свободного падения.

nik182
Offline
Зарегистрирован: 04.05.2015

Факт свободного падения ножно определить по обнулению ускорений по всем осям. На этот случай можно генерить прерывание.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

nik182 пишет:

Факт свободного падения ножно определить по обнулению ускорений по всем осям. На этот случай можно генерить прерывание.

Факт свободного падения определить можно. Проблема в том, что MPU-6050 не умеет генерить прерывание по этому факту. То есть его придется постоянно опрашитвать. Лучше поискать другой акселерометр, который умеет генерить подобные прерывания.

nik182
Offline
Зарегистрирован: 04.05.2015

Из MPU-6000/MPU-6050 Product Specification. Там ещё картиночка есть. 

https://www.daedalus.ei.tum.de/attachments/article/57/PS-MPU-6000A.pdf

8.2 Free Fall Interrupt Free fall is detected by checking if the accelerometer measurements from all 3 axes have an absolute value below a user-programmable threshold (acceleration threshold). For each sample where this condition is true (a qualifying sample), a counter is incremented. For each sample where this condition is false (a nonqualifying sample), the counter is decremented. Once the counter reaches a user-programmable threshold (the counter threshold), the Free Fall interrupt is triggered and a flag is set. The flag is cleared once the counter has decremented to zero. The counter does not increment above the counter threshold or decrement below zero. The user is given several configuration parameters to fine tune Free Fall detection. Both, the acceleration threshold and counter threshold are user configurable. The FF_THR register allows the user to set a threshold in 1 mg increments. The FF_DUR register allows the user to set duration in 1 ms increments. The decrement rate for non-qualifying samples is also configurable. The MOT_DETECT_CTRL register allows the user to specify whether a non-qualifying sample makes the counter reset to zero, or decrement in steps of 1, 2, or 4.

 

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Интересно. А вот в даташите отсюда - https://www.invensense.com/products/motion-tracking/6-axis/mpu-6050/

Про free-fall ничего нет. 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015
AlexOs
Offline
Зарегистрирован: 28.07.2017

Нашёл вот такую библиотеку с примером на прерывания по свободному падению https://github.com/jarzebski/Arduino-MPU6050 . Загрузил скетч и начал аккуратно брость акселерометр. Вроде бы начал, по выводу из монитора прерывания происходят. Но не всегда. В ближайшее время буду дальше разбираться с этим скетчем