То ли частная консультация "эксперту задан вопрос - от эксперта получен ответ либо вопрос больше неактуален либо вопрошавший самостоятельно решил свою проблему - короче автор удовлетворён и закрыли проехали", то ли публичные прения на какую-то такую заданную тему... шёл мимо, увидел щель, подумал вставить тоже:
1.
Если в больших выбросах, о которых сверху заголовок, старший бит в старшем байте =1 - тогда это не большие по модулю положительные, а малые по модулю отрицательные значения. "Минус немножко". Иностранными словами называется "2's complement" такая запись чисел.
Иначе любопытно, чем дело кончилось и как проблема устранена.
2.
angel_X = angel_X + gyroX*0.01
*К"Предполагаю, что" оригинальный подход к решению задачи... типа как ответ должен быть либо получен готовый уже от решавших её, либо угадан через интуицию?
gyroX
(поп/сек) * период опроса
(сек) = angel_X
(поп) ... получили угол поворота
в попугаях, один попугай ~ LSBit
angel_X
(поп) * чувствительность
(град/поп) = angel_X
(град) ... получили угол в градусах
(для диапазона 2000dps чувствительность = 70 миллиградусов на каждого попугая = 0.07 градуса на попугая)
... а дальше угол в градусах умножаем на ещё что-нибудь, чтобы результат получился в удобных для дальнейшего его использования единицах. Например, в единицах "1/256 полного оборота".
---
На бумажке карандашиком это всё красиво и просто, а в настоящей микросхеме придётся ещё помнить про каждого из нарисованных чисел
способ кодирования и
разрядность. В битах.
Чтобы сначала все исходные данные, а потом на каждом этапе вычисления результат помещался(ись) в отведённое(ые) ему(им) место(а). Без переполнения, но/и с приемлемой точностью.
И чтобы алгоритмы соответственно...
... но это актуально только для
задро ассемблерщиков красноглазых, а профессионалам можно не заморачиваться об такие мелочи, тупо всё сразу считая в супермегафлоатах @ стопицотмегагерцтактовой. Через готовые стандартные либы. Решая задачу вместо ковыряния байтиков под микроскопом.
3.
Прежде чем использовать полученный с сабжа очередной отсчёт, его полезно слегка обработать:
а). вычесть из него zero rate level (про который см. далее),
б). потом обнулить отсчёт, если он слишком близок к нулю (т.о. убираем шум, зато/и игнорируем
медленные вращения).
4.
Zero rate level:
а). наше изделие находится
в состоянии покоя,
б). собираем сколько-нибудь отсчётов, суммируем и делим на количество,
в). полученный zero rate level запоминаем, теперь нашему изделию можно начинать шевелиться.
г). время от времени перекалибровываемся повторно, начиная с п. 4а.
Обратить внимание на подчёркнутое
в состоянии покоя, много думать.
5.
Почитать:
AN3393 L3G4200D: three axis digital output gyroscope ... от производителя сабжа про "как подключать, настраивать и получать какие-то данные"
TA0343 Everything about STMicroelectronics’ 3-axis digital MEMS gyroscopes ... от производителя сабжа про "как понимать полученные данные и что с ними делать дальше"
Helmet Locating and Tracking System Final Report ... учебный проект студентов, на соответствующем уровне подробненько и понятненько в сочетании с TA0343