Получение данных с MEMS гироскопа (часть I)

DIY

Введение

Основной целью на данном этапе было получение данных с MEMS гироскопа, подключенного к макетной плате по I2C шине. В этой статье мне хотелось бы рассказать, что получилось. Кому интересно прошу под кат(осторожно трафик).


Что для этого потребовалось приобрести

  • Макетная плата STM32L-DISCOVERY

Почему же выбор пал именно на неё? Потому что в ней было соотношение довольно таки оптимальное цены и её возможностей из доступных на тот момент времени.

  • MEMS гироскоп L3G4200D

Среди трех осевых гироскопов особо выбора не было поэтому взяли этот, так как суть заключалась пока просто изучить что и как работает, этого вполне было достаточно.

  • Пара конденсаторов и резисторов

Что для этого пришлось сделать

  • Разработать плату для MEMS гироскопа

Для подключения гироскопа требовалось сделать печатную плату для подключения по шине I2C согласно Datasheet'у.

  • Изготовить её (сразу две на всякий случай)


  • Припаять MEMS гироскоп в печке


  • Припаять конденсаторы, резистор и шлейф


  • На этом этапе вспомнилось, что для I2C требуется подтягивающие резисторы на питание, пришлось пренебречь эстетическим видом :( получилось вот так:


  • Осталось подключить к макетной плате питание и I2C шлейф


Что для этого пришлось программно реализовать

  • Получение данных с гироскопа по прерыванию на макетную плату по шине I2C, для этого потребовалось использовать библиотеку «Stm32 peripheral library»
  • Передача данных на компьютер: макетная плата определяется как HID устройство и предоставляет компьютеру сформированный пакет данных с гироскопа, для этого была использована библиотека «STM32L1xx USB full-speed device library»
  • Получение данных на компьютере с HID устройства, на ПК приложение писалось на C# и требовалась библиотека которая бы помогла общаться с HID устройством, в этом нам помог GNU проект «USB Generic HID Communications 2_0_0_0»


Что в итоге получилось

  • В одном случае было реализовано интегрирование данных с гироскопа прямо на контроллере макетной платы и дальнейшая передача на компьютер уже значений углов, ниже пример видео:

  • На самом деле, данные с гироскопа сильно зашумлены и требуют основательной математической обработки.
  • Сейчас для более подробного анализа на компьютер принимаются сырые данные с гироскопа, вот как они выглядят:
Тут черным изображены сырые данные и три метода получения скользящего среднего(красный, синий и фиолетовый), гироскоп находится в состоянии покоя

Данные с оси X, гироскоп вращается

Данные с оси Y, гироскоп вращается

Данные с оси Z, гироскоп вращается

Заключение

В заключении хотелось бы сказать, что работы над проектом еще идут и хотелось бы получить более точные значения от гироскопа путем применения различных фильтров, избавится от шумов и более качественно проинтегрировать данные что бы в итоге получить углы ориентации гироскопа. Если у кого то есть советы по этому поводу то я с радостью их выслушаю. В следующей части я постараюсь рассказать о том что получилось с обработкой этих данных. Всем спасибо за внимание.
Tags:memsstm32гироскопc++csharp
Hubs: DIY
+49
28.4k 113
Comments 68

Popular right now

Разработчик C#, C++
to 110,000 ₽DioramСанкт-Петербург
Rust Developer (Java / C#/ C++ to Rust)
from 7,000 to 12,000 $IT ATLASМоскваRemote job
C++-программист
from 80,000 ₽Singularis LabВолгоградRemote job
C++-программист
from 60,000 ₽Singularis LabВолгоградRemote job
C++-программист (техлид проекта)
from 100,000 ₽Singularis LabВолгоград