How to Setup the MPU-9150 9-Axis Accelerometer, Gyro, & Compass with an Arduino

Какие бывают характеристики шума и откуда что берётся?

Источники шума можно в общем разбить на электронный шум схемы, преобразующей движение в сигнал напряжения (джонсоновский тепловой шум, дробовой шум, розовый 1/f фликкер-шум и т.д.), и тепловой механический (броуновский, обусловленный наличием мелких подвижных частей) от самого сенсора. Характеристики последнего будут зависеть от резонансной частоты механической части системы

(собственной частоты колебаний сенсора

Что такое разрешение (resolution)?

Минимальная величина, которую достоверно видит датчик, крайне важная при попытке соблюсти баланс между ценой и производительностью. Это не точность — сенсор с высоким разрешением может быть не особо точным, равно как и сенсор с малым разрешением в определённых областях может обладать достаточной точностью.

К сожалению, LSB определяет лишь теоретическое минимально-различимое значение при условии, что мы можем использовать все 16 бит АЦП. Это разрешение в цифровом мире. В аналоговом какая-то часть ступеней будет зашумлена и число эффективных бит будет меньше.

Итак, что такое lsb и как его посчитать? инструкция по добыче

Допустим, наш акселерометр сейчас работает в диапазоне измерений

, то есть полный размах возможных значений будет

. Соответствующие им значения напряжений оцифровываются 16-битным АЦП, который может разбить весь интервал максимально на

ступеней. Минимальный инкремент, который можно засечь, — это как раз одна ступенька

. Тут надо помнить, что счёт ведётся с нуля, так что на самом деле максимально измеряемое значение будет

. То есть, чем больше бит в цифровом слове АЦП или ЦАП, тем меньше будет расхождение. При этом

чувствительность (иногда называется масштабным коэффициентом, sensitivity scale factor)

датчика на конкретном диапазоне будет определяться как соотношение электрического выходного сигнала и механического воздействия. Традиционно указывается для частоты сигнала 100 Гц и температуры

Для MPU-9250 чувствительность составляет

ступеней на каждые g или

), для другого IMU, BMI088 от Bosch Sensortec, чувствительность гироскопа высчитывается так же, а для акселерометра используется

ступеней на каждое g.

Варианты FS вытаскиваем из спецификации на гироскопы и, чтобы дважды не вставать, акселерометры.

FS для акселерометров я брала ещё и из документации на BMI088 (см. ниже).

Гироскоп, 16 бит $(2^N = 65535)$Акселерометр, 16 бит $(2^N = 65535)$
Диапазон (FS), $^{circ}/s$ (dps)LSB, $^{circ}/s$ (dps)Диапазон (FS), gLSB, mg
$pm 125$ (FS = 250)0,004$pm 2$ (FS = 4)0,06
$pm 250$ (FS = 500)0,008$pm 3$ (FS = 6)0,09
$pm 500$ (FS = 1000)0,0015$pm 4$ (FS = 8)0,12
$pm 1000$ (FS = 2000)0,03$pm 6$ (FS = 12)0,18
$pm 2000$ (FS = 4000)0,06$pm 8$ (FS = 16)0,24
$pm 12$ (FS = 24)0,37
$pm 16$ (FS = 32)0,48
$pm 24$ (FS = 48)0,73

Всё, вроде бы, встало на свои места, можно идти дальше. В некоторых случаях (ниже, например, вырезка из документации на BMI088) отдельно указывается такой параметр, как разрешение (Resolution).

По факту, вроде бы, получается, что это должен быть LSB. Но почему тогда мы видим одно значение вместо нескольких, завязанных на конкретные диапазоны? Пришлось расширять список исследуемых источников в поисках ответов.

Bandwidth, она же frequency response (частотный отклик)

диапазон частот, в котором датчик обнаруживает движение и выдает действительный выходной сигнал. В некоторых спецификациях приводится частотная характеристика датчика — зависимость электрического выходного сигнала акселерометра от внешних механических воздействий с фиксированной амплитудой, но различными частотами.

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

Для акселерометров MPU-9250 границы полосы пропускания определяются так, чтобы внутри диапазона спектральная плотность сигнала отличалась от пиковой (на частоте 0 Гц) не больше, чем на -3дБ. Этот уровень примерно соответствуют падению до половины спектральной плотности (или 70.

Итог: сигналы, прошедшие через ФНЧ, менее зашумлены, у них лучшее разрешение, но при этом меньшая полоса пропускания.

Поэтому указание разрешения в спецификации без привязки к полосе пропускания смысла не имеет.

Calibrating the mpu-9150

We’ve already loaded the code, the MPU is now connected–so all it’s waiting for is to be initiated. To do this, open the Serial Monitor in the Arduino IDE (it’s under Tools), and you should see something like the screen shot here. If you don’t, here’s a few pointers:

Connecting the mpu-9150 to the arduino

Plugin the soldering iron, we’re about to get down and dirty. You are basically looking at only four wires: power, ground, SDA, and SCL. Ideally, you should already have this mounted in your box or wherever it will be for use, so that it is calibrated in exactly the same spot it will be used. But for this guide, I’m just going to do it at my dining room table. Here’s the wiring guide:

ArduinoMPU-9150
3.3VVCC
GroundGround
SDASDA
SCLSCL

Pretty simple, right? Using the male end of a jumper cable, plug each wire into it’s respective pin on the Arduino. Now, you have to be

very

careful with this next step so you don’t cross solder the pin headers. I strongly recommend you break off four header such that they stay connected to each other, and then solder them into the four pins on the MPU. They’re all right next to each other, so that part works out just fine. But now you have to plan ahead a little bit–my MPU is actually mounted on the underside of the lid of my box. The MPU’s orientation is printed on the board itself, so make sure it’s oriented such that the

Смотрите про коптеры:  Лего на радиоуправлении танк в Москве: 242-товара: бесплатная доставка, скидка-36% [перейти]

Mag X

is pointed to the bow of the boat (please note that it is different than the gyro and accelerometer orientation). Anyways, what this means is that I actually had to solder the pins such that the male prong sticks out the bottom of the chip (since it will be hanging that way when the lid of the box is closed). Confused? Just take a look at the pics to see my setup (ignore the Raspberry Pi and other gadgets).

How do you solder such small connections without spilling solder over to other pins?

Very carefully

. Also, use the little stand that came with the iron to hold it steady! After you solder the pin headers, connect the female end of the jumper cables to their respective pins. And now it’s ready to go!

Calibrating the mpu-9150

We’ve already loaded the code, the MPU is now connected–so all it’s waiting for is to be initiated. To do this, open the Serial Monitor in the Arduino IDE (it’s under Tools), and you should see something like the screen shot here. If you don’t, here’s a few pointers:

Delay (ms), или откуда берётся задержка


Из необходимости сохранять во внутреннем буфере переменные для деления фильтром сигнала на разные частоты

Итого. Чем ниже частота обрезания фильтра, тем меньше шума в сигнале. Но тут надо быть осторожным, потому что одновременно с этим вырастает и задержка. Кроме того, можно пропустить полезный сигнал [8].

MPU-9250BMI088
Гироскоп, 16 бит
Диапазон (FS), $^{circ}/s$ (dps)Разрешение, бит (BW=92Hz)Диапазон (FS), $^{circ}/s$ (dps)Разрешение, бит (BW=64Hz)
$pm 125$8
$pm 250$9$pm 250$9
$pm 500$10$pm 500$10
$pm 1000$11$pm 1000$11
$pm 2000$12$pm 2000$12
Акселерометр
Диапазон (FS), gРазрешение, бит $(N_{PP}=32mg)$Диапазон (FS), gРазрешение (по X,Y), бит $(N_{PP}^XY=14mg)$
$pm 2$6$pm 3$8
$pm 4$7$pm 6$9
$pm 8$8$pm 12$10
$pm 16$9$pm 24$11

И это лишь самые основные параметры.

Откуда что бралось:

  1. Самый приятный документ от Freescale Semiconductor — «How Many Bits are Enough?»
  2. [EE] — «Resolution vs Accuracy vs Sensitivity Cutting Through the Confusion»
  3. [Время электроники] — «МЭМС-датчики движения от STMicroelectronics: акселерометры и гироскопы»
  4. [LSB] — «An ADC and DAC Least Significant Bit (LSB)»
  5. [Measurement Computing] — «TechTip: Accuracy, Precision, Resolution, and Sensitivity»
  6. [KIT] — «Акселерометры Analog Devices — устройство и применение»
  7. [Easyelectronics] — «Сигма-дельта АЦП»
  8. [Радиолоцман] — «Магнитометры: принцип действия, компенсация ошибок»
  9. [SO] — «Noise Measurement»
  10. [Mide] — «Accelerometer Specifications: Deciphering an Accelerometer’s Datasheet»
  11. [CiberLeninka] — Delta-Sigma ADC Filter
  12. [SciEd] — «Особенности реализации цифровой фильтрации с изменением частоты дискретизации»
  13. [MPU6050] — «Using the MPU6050’s DLPF»
  14. [MPU9250_DLPF] — MPU9250 Gyro Noise DLPF work investigation
  15. Understanding Sensor Resolution Specifications
  16. Siemens Digital Signal Processing
  17. МЭМС-датчики движения от STMicroelectronics
  18. [TMWorld] — «Evaluating inertial measurement units»
  19. [Sklyar] – Скляр Б. Цифровая связь. Теоретические основы и практическое применение.

Mems-гироскоп

MPU-9250 состоит из трёх независимых одноосных вибрационных датчиков угловой скорости (MEMS гироскопов), которые реагируют на вращение вокруг X-, Y-, Z- осей. Две подвешенные массы совершают колебания по противоположным осям. С появлением угловой скорости эффект Кориолиса вызывает изменение направления вибрации (

, которое фиксируется емкостным датчиком. Измеряемая дифференциальная емкостная составляющая пропорциональна углу перемещения [Время Электроники]. Получившийся сигнал усиливается, демодулируется и фильтруется, давая в итоге напряжение, пропорциональное угловой скорости вращения.

Данный сигнал оцифровывается с помощью встроенного в плату 16-битного АЦП. Скорость оцифровки (sample rate) может программно варьироваться от 3.9 до 8000 выборок в секунду (samples per second, SPS), а задаваемые пользователем фильтры низких частот (LPF) предоставляют широкий диапазон возможных частот среза. ФНЧ нужен, в том числе, чтобы убирать вибрации от моторов (как правило, выше 20-25 Гц).

Setting up the arduino

This part is pretty simple. Head over to

the Arduino Getting Started page

and get familiar with the Arduino. In a nutshell, you download their IDE program, write your code in said program, upload it to the Arduino, and then use the program’s Serial Monitor to make sure it’s working correctly. But since we wan’t to do more than just make the little LED light blink (which is a good starter program, I think), we have to include

Libraries

that tell the Arduino how to interface with other devices… such as the MPU.

Problem is, it’s really difficult to find a good Library for the MPU that spits out the information I need, but doesn’t require a separate computer program to decode in the information. It all has to be contained in the Arduino, since this is going on my sailboat and it won’t be hooked up to my laptop. The reason why this is a particularly important issue to resolve is because the MPU is pretty worthless without calibration, and the calibration data needs to be saved on the Arduino itself. Most Libraries and calibrators save the data on your end machine to filter the output before you do anything. Like I said before, that’s not going to work for our application.

Fortunately, there is a library out there that does exactly that. It’s Richard Tech’s RTIMULib-Arduino, specifically for the Arduino, available at GitHub. This is a pretty simple library that saves the compass calibration data to the Arduino’s EEPROM, or it’s “read-only but writable memory.” But if you go to the GitHub page, you’ll see that in big bold letters it says, “Please note that this library is no longer supported.” Don’t panic. That’s totally fine. And just in case something happens over there, I’ve uploaded the library here, which is the exact copy I’m using. Please note, however, that you should always go to the GitHub page for the most recent software and that there’s no guarantee mine will work with updates.

Смотрите про коптеры:  Радиовыключатель света: технические характеристики и особенности, область применения

So go over to the RTIMULib-Arduino GitHub page and click the “Download Zip” button on the right side (or just download the zip above). Unzip and copy its contents over to your Arduino folder such that it looks like the screenshot here. Next, open up the Arduino IDE, open up the “sketch” (which is the fancy term for program) titled “ArduinoMagCal.ino” which is in the ArduinoMagCal folder. Ensure your Arduino is connected to your laptop (and you should have already made sure you can upload code when you went through the starter guide at the Arduino’s website), and click the right arrow at the top to upload the sketch to the Arduino.


Great, now the code is loaded onto the Arduino–we just have to connect the MPU itself for it to work.

Вернёмся к разрешению

В спецификации на MPU-9250 сведений о разрешении в принципе нет, для BMI088 под именем «Разрешение» представлены цифровое разрешение (LSB) и чувствительность»:

Оценить разрешение для каждой полосы пропускания можно по пиковому шуму $Noise_{pk-pk} = Total Noise_{RMS} times CrestFactor = Total Noise_{RMS}times 4.$ Среднеквадратичная величина шума на выходе связана с указанной в спецификации спектральной плотностью (а вернее, корнем из неё) и эквивалентной шумовой полосой пропускания (equivalent noise bandwidth, ENBW, — полоса пропускания эквивалентной системы, имеющей прямоугольную АЧХ и одинаковые с исходной системой значение на нулевой частоте и дисперсию на выходе, при воздействии на входы систем белого шума):

А шумовая полоса пропускания связана с 3dB полосой коэффициентами, соответствующим порядку низкочастотного фильтра:

Судя по исследованию в [MPU9250_DLPF], наш выбор 1.57. Полученное среднеквадратическое значение учитывает вклад белого шума (ни шума квантования, ни механического шума там нет). Например, для акселерометра расчётное значение для

получается

. При этом в спецификации отдельно указан полный среднеквадратичный шум

Расхождение значительное. К сожалению, он указан лишь для одной полосы, а для акселерометра BMI088 в спецификации указано только PSD. Так что будем использовать что есть. Кросс-фактор возьмём 4. Теперь самое интересное. Отношение

даст примерный порядок эффективных бит на данном диапазоне измерений, который прилично меньше 16-битного разрешения АЦП.

Зачем объединять фильтр низких частот и децимацию?

Честная выдержка из Вики:

Если исходный сигнал не содержит частот, превышающих частоту Найквиста децимированного сигнала, то форма спектра полученного (децимированного) сигнала совпадает с низкочастотной частью спектра исходного сигнала. Частота дискретизации, соответствующая новой последовательности отсчётов, в N раз ниже, чем частота дискретизации исходного сигнала.

Таким образом, для сохранения спектра необходимо до децимации удалить из исходного сигнала частоты, превышающие частоту Найквиста децимированного сигнала. В спецификации на MPU-9250 не очень много информации о характеристиках DLPF, но можно найти исследования энтузиастов [9].

И сразу про трёхосевой mems-магнетометр

Основан на высокоточной технологии эффекта Холла. Включает в себя магнитные сенсоры, определяющие напряжённость магнитного поля земли по осям, схему управления, цепь усиления сигнала и вычислительную схему для обработки сигналов с каждого датчика. Каждый АЦП имеет разрешение 16 бит, диапазон измерений

. Для измерения слабых магнитных полей применяют либо единицу в системе СИ микротесла (мкТл), либо гаусс (Гс, система СГС):

, [Радиолоцман]).

Наследие древнего рима

Частота дискретизации децимация $Delta Sigma $-АЦП = скорость обновления данных (digital output data rate, ODR)

С частотой дискретизации (она же частота семплирования) всё понятно — это количество взятых за секунду точек непрерывного по времени сигнала при его дискретизации АЦП. Измеряется в герцах.

Для того, чтобы в выборку попало значение, приближенное к пиковой амплитуде сигнала, важно брать частоту дискретизации минимум в 10 раз больше частоты полезного сигнала. MPU-9250 предлагает три варианта Fs = 32kHz, 8kHz, 1kHz.

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

Если взять те же дроны, тут всё упирается в борьбу за снижение энергопотребления, повышение скорости вычислений и снижение шума выходных данных. Можно понизить частоту обновления данных на выходе, позволив внутренним алгоритмам интегрировать входную информацию в течение некоторого периода времени.

Тут лучше сразу вспомнить теорему Котельникова. Она обещает, что при дискретизации аналогового сигнала можно избежать потерь информации (то есть восстановить сигнал без искажений), если частота полезного сигнала будет не больше половины частоты дискретизации, называемой также частотой Найквиста.

На практике классический антиалайзинговый фильтр (фильтр низких частот, уменьшающий вклад побочных частотных компонентов в выходном сигнале до пренебрежимо малых уровней — ГОСТ Р 8.714-2020) требует в большинстве случаев разницу минимум в 2.5 раза [Siemens].

Для Fs = 32kHz частота Найквиста будет 16kHz. При этом полезный сигнал вряд ли выйдет за полосу fa = 20Hz (мало кто может менять направление движения чаще 20 раз в секунду). Итого, частота дискретизации значительно превышает частоту, требуемую для сохранения информации, содержащейся в полосе fa (40Hz, в 400 раз превышает), то есть полезный сигнал избыточно дискретизирован.

Полоса между частотами fa и fs-fa не содержит никакой полезной информации. Можно уменьшить частоту дискретизации (на диаграмме это сделано с коэффициентом М, [7]), проредив последовательность семплов (отсчётов). Этот процесс и называется децимацией.

Согласно спецификации на MPU-9250, акселерометры снабжены сигма-дельта АЦП. Схемы на его основе потребляют минимальную мощность. Надо отметить, что полоса пропускания у данных преобразователей весьма узкая, не превышает звукового диапазона [Easyelectronics], но для штатного квадрокоптера больше и не нужно. Состоят они из двух блоков: $ Sigma Delta $-модулятора и цифрового децимирующего фильтра низких частот.

Смотрите про коптеры:  MYO: как мы делали бумажный самолётик на радиоуправлении / Хабр

Спектральная плотность

Иногда сигнал удобнее рассматривать в частотной области, где его описание называется

спектром

(зависимость амплитуды и фазы от частоты). Одна из возможных характеристик шума в спецификациях зовётся

power spectral density of noise (PSD), noise spectral density, noise power density,

или попросту

noise density

). Описывает распределение мощности шума по диапазону частот. Вне зависимости от представления электрического сигнала через ток или напряжение мгновенную рассеиваемую на нагрузке мощность можно нормировать (R = 1 Ом) и выразить её как

Средняя мощность, рассеиваемая сигналом в течение промежутка времени

Мощность – скорость поступления энергии. Через энергию определяются детерминированные и непериодические сигналы. Периодические и случайные сигналы выражаются через мощность, поскольку они не ограничены по времени и, соответственно, энергии, при этом в любой момент времени их средняя мощность отлична от нуля

Можно вспомнить [Sklyar], что произвольный периодический сигнал выражается через комбинацию бесконечного числа гармоник с возрастающими частотами:

что после представления косинуса и синуса в экспоненциальной форме

и замены

можно записать в виде

где комплексные коэффициенты (спектральные компоненты) ряда Фурье для

$$display$$begin{equation} c_n = frac{1}{T_0}int^{T_0/2}_{-T_0/2} x(t)e^{-i nomega t},dt = begin{cases} frac{1}{2}(a_n-ib_n), & n>0\ frac{a_0}{2}, & n=0\ frac{1}{2}(a_n ib_n), & n<0 end{cases} end{equation}$$display$$

В общем случае эти коэффициенты представимы следующим образом:

Амплитудным и фазовым спектром называют графики зависимости

от частоты. Спектральная плотность мощности

периодического сигнала

даёт распределение мощности сигнала по диапазону частот:

и имеет размерность

Средняя нормированная мощность действительного сигнала будет

Непериодические случайные сигналы (в частности, шум) можно описать как периодические в предельном смысле. Если

стремится к бесконечности, последовательность импульсов превращается в отдельный импульс

, число спектральных линий стремится к бесконечности, график спектра превращается в гладкий спектр частот

Для данного предельного случая можно определить пару интегральных преобразований Фурье

где

— Фурье-образ.

Спектральная плотность мощности случайного сигнала определяется через предел

и описывает распределение мощности сигнала в диапазоне частот.

Поскольку мы предполагаем, что среднее для белого шума датчиков в неподвижном состоянии равно нулю ($overline x = overline x^2 = 0$), то квадрат среднеквадратического значения равен дисперсии и представляет собой полную мощность в нормированной нагрузке:


Смотрим в спецификации — там на самом деле под именем спектральной плотности указан квадратный корень из неё с соответствующей размерностью

или

То есть значение RMS шума без указания полосы частот, на которой он считался (Bandwidth), бессмысленно.

Среднеквадратичное значение шумов во всём спектральном диапазоне — total rms (root mean square) noise

Уровни шума можно определять несколькими способами. Можно рассматривать их во временной или частотной области (после преобразования Фурье). В первом случае берут остаточный шум как среднеквадратичное значение сигналов от неподвижного датчика (по факту это стандартное отклонение для выборки при

) за некоторый промежуток времени:

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

Для белого шума отношение амплитуды (мгновенного пикового значения) к среднеквадратчному с вероятностью 99.9% составляет $N_{PP}/N_{RMS} = 6.6.$ Называется такое отношение крест-фактором (crest factor, cross ratio). Можно выбрать вероятность 95.5% — крест фактор будет равен 4.На деле же сигналы шума ведут себя не так хорошо и могут выдавать пики, увеличивающие крест-фактор до 10 раз. В некоторых спецификациях можно найти значения $N_{PP}$ или сам множитель.

В узкой низкочастотной полосе 0.1-10 Гц основную роль играет фликкер-шум “1/f”, для оценки которого используют значение размаха шумового сигнала (peak-to-peak).

Трёхосевой mems-акселерометр

Использует для каждой оси отдельную пробную массу, которая смещается при возникновении ускорения вдоль данной оси (фиксируются емкостными датчиками). Архитектура MPU-9250 снижает подверженность температурному дрейфу и вариациям электропараметров. При расположении устройства на плоской поверхности оно измерит 0g по X- и Y-осям и 1g по Z-оси.

Масштабный коэффициент

(scale factor — отношение изменения выходного сигнала к изменению выходного измеряемого сигнала) калибруется на заводе и не зависит от напряжения питания. Каждый сенсор снабжен индивидуальным сигма-дельта АЦП (состоит из модулятора и цифрового фильтра низких частот, подробнее про устройство в [Easyelectronics]), выходной цифровой сигнал которого имеет настраиваемый диапазон измерений.

Чуть подробнее про выбор полосы пропускания

На выходе MEMS-датчика мы получаем сигналы разной частоты. Предполагается, что мы заранее имеем некое представление об измеряемых нами процессах. К примеру, при определении вектора ускорения дрона шумом являются вибрации аппарата. Отделить их от полезного сигнала можно с помощью фильтра низких частот, который обрежет все частоты выше указанной (к примеру, 200 Гц).

DLPFCFG

. Расшифровывается он как Digital Low Pass Filter Configuration. Далее в спецификации там и тут всплывали не менее загадочные выражения типа (DLPFCFG = 2, 92Hz), но за расшифровкой пришлось лезть в другой документ, “Register Map and Descriptions”. Там показано, какие наборы битов в какие регистры надо записать для достижения желаемых эффектов:

Опуская технические подробности конфигурирования, можно сказать следующее. В данном датчике осуществляется настраиваемая фильтрация показаний не только акселерометров, гироскопов, но и температурного датчика. Для каждого существует в общей сложности от 7 до 10 режимов, характеризующихся такими понятиями, как полоса пропускания (Bandwidth) в Гц, задержка в мс, частота дискретизации (sampling frequency, Fs) в кГц.

В таблицу режимов фильтра акселерометра добавилась колонка «Плотность шума» в $mu g/rtHz = mu g/ sqrt{Hz}$, а “Bandwidth” колонка дополнилась значением “3dB”.

Легче не стало, так что пройдёмся прямо по списку.

The following contain Amazon Affiliate links, which supports King Tide Sailing and keep this page ad-free.

Оцените статью
Радиокоптер.ру
Добавить комментарий