Я немного искал этот форум в отношении гироскопа L3G4200D и не видел упомянутой проблемы, но я видел, как другие говорили об этом на других форумах. Я вижу странное большое значение в моем выходе, когда гироскоп неподвижен. К сожалению, никто так и не смог ответить, почему это так, поэтому я подумал
Итак, я собираю данные с гироскопа, используя i2c на частоте 400 кГц (быстрый режим), собирая данные гироскопа с помощью многобайтового чтения (шесть байтов за раз). Сэмплирование при 100 Гц (пробовал и верхние 800 Гц тоже), также пытался с включенной и выключенной фильтрацией при разных значениях. Я не использую вывод прерывания, но я использую атрибут «блокировать обновление данных» в GYRCTRLREG4, чтобы данные не выводились до тех пор, пока не будут прочитаны как LSB, так и MSB. Полный 2000dps и ничего не сделал с FIFO. Я могу опубликовать свои точные значения регистра, если это поможет, но думаю, что большинство из вас не будет иметь таблицы данных под рукой.
Изображение ниже показывает мою проблему. Выводимые данные хорошие, рассчитаны правильно (насколько мне известно), и общий шум очень приемлем. Но потом я заметил, что эти раздражающие «всплески» появляются случайным образом, когда устройство неподвижно. Если я оставлю его на пару секунд, я получу один из этих пиков, всегда равный 250-255 (то есть ~ 18 при конвертации, используя '(output * 70) / 1000'). Шипы, как я уже сказал, случайные, могут появляться в любой плоскости (на рисунке ниже вы можете увидеть первый шип в плоскости X, второй в Y), всегда около одного и того же значения, и один, два или все три могут произойти одновременно. Большое значение только для одного образца, затем возвращается к нормальному.
В другом потоке я где-то видел, что я должен использовать функцию ожидания данных блока в GYRCTRLREG4, как я упоминал ранее, но без изменений. Я сузил проблему до того, что MSB равен нулю или выше, то есть положительному числу, а затем, когда MSB и LSB объединены, я получаю эти большие числа. Например, я беру два байта, необходимые для плоскости X, получаю -6 в LSB и 0 в MSB, объединяя их, получаю 250, затем преобразование дает (250 * 70) / 1000 = 17,5 dps ( т.е. слишком большой для стационарного / неправильного). В том же примере два байта для плоскости Y составляют -3 LSB и -1 MSN, их объединение дает -3, а преобразование дает -0.21 (то есть ожидаемое / правильное).
Я уже несколько дней сталкиваюсь с этой проблемой, я также вижу немного таких случайных пиков с помощью моего магнитометра, так что я думаю, что я неправильно читаю устройство (через i2c)?
Любые предложения или вещи, которые можно попробовать, действительно приветствуются!