Подписка на новости

Опрос

Нужны ли комментарии к статьям? Комментировали бы вы?

Реклама

 

2009 №6

Применение акселерометров в задачах локации мобильных объектов

Цыкунов Илья


Современные технические решения в области безопасности, в медицине и промышленности, в сфере развлечений, в спорте и в быту часто включают в себя использование акселерометров. О попытке применения акселерометра в проекте локации мобильных устройств рассказано в данной статье. Также выделены широко распространенные применения low-g диапазона и частично — с захватом medium-g диапазона для акселерометров и инклинометров, так как важных применений для всех типов существует еще больше (системы развертывания подушек безопасности, сейсмология и т. п.).


Введение

В качестве примеров успешного применения акселерометров можно привести следующие устройства:

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

Теоретически, зная ускорение тела в каждый момент времени, можно рассчитать траекторию его движения. Но в реальной ситуации дело обстоит несколько иначе.

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

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

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

Из предлагаемых в интернет-магазинах акселерометров различных фирм был выбран SMB380 производства BOSCH.

Обзор характеристик SMB380

Акселерометр SMB380 представляет собой микросхему с размерами 3×3×0,9 мм. Тип корпуса — QFM (рис. 1).



Рис. 1. Внешний вид и назначение выводов SMB380

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

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

Акселерометр SMB380 имеет шину SPI, причем есть возможность выбора режима обмена по данной шине. Это обмен по стандартному протоколу SPI с использованием четырех линий, SPI с тремя линиями управления и данных, а также обмен по протоколу I2C. Большинство простейших микроконтроллеров умеют работать с данным интерфейсом.

У SMB380 существует три диапазона измеряемых значений ускорений: ±2g, ±4g, ±8g; подходящий диапазон выбирается программно. Разницу между верхней и нижней частотами фильтра среза (bandwidth) можно выбрать из девяти значений, лежащих в пределах от 25 до 1500 Гц.

Немаловажным фактором, особенно при проектировании мобильных устройств, является энергопотребление. У SMB380 имеется два режима работы: «спящий» и активный. В «спящем» режиме энергопотребление акселерометра составляет от 1 до 2 мкА, в активном — от 200 до 290 мкА. Большинство аналогов в таких же режимах потребляют миллиамперы. В SMB380 реализована возможность автоматически переключаться из «спящего» режима в нормальный через определенный период времени. Величину этого периода можно устанавливать, но разрешенных значений всего четыре: 20, 80, 230 и 2560 мс. При выходе из «спящего» режима акселерометр анализирует критерии генерации сигнала о запросе на обслуживание прерываний. Критерий— это некоторое неравенство, проверяющее выполнение некоторых событий, к примеру: значение ускорения по оси X больше 2g. Если хотя бы один критерий сработал, соответствующий сигнал появляется на выводе прерываний акселерометра (обычно такой вывод обозначается на схемах как INT), если нет — акселерометр снова переходит в «спящий» режим.

Согласно документации на SMB380, последний может отслеживать пять видов событий, от которых генерируется сигнал INT. Когда соответствующий критерий прерывания выполняется, уровень сигнала на выводе INT переходит из низкого состояния в высокое. Обычно производители микросхем делают этот вывод инверсным. К примеру, если требуется использовать SMB380 для пробуждения микроконтроллера ATmega644 фирмы Atmel, который выходит из «спящего» режима по удержанию в течение некоторого времени сигнала на низком уровне на соответствующем пине, то придется добавить в схему решение для инверсии логики. Генерацию прерываний разных типов можно программно включать и отключать, причем делать это можно и «на лету», и изменив настройки по умолчанию в EEPROM. Допускается включение генерации сигнала о прерывании для нескольких видов событий одновременно.

Наиболее интересными являются следующие виды событий.

В первом случае (Range Mode) сигнал на выводе INT появляется при выходе значения ускорения за заданные границы в течение некоторого времени. Нижнюю и верхнюю границы, а также время можно выставлять программно. При выполнении указанных критериев в регистре статуса микросхемы будут выставлены флаги “status low-g” и “status high-g”, сигнализирующие о том, за какую границу вышло ускорение.

Во втором случае (Any Motion Mode) сигнал INT будет выставлен, если модуль разности значений ускорения в соседние моменты времени будет больше порогового значения. В формульном виде критерий выглядит следующим образом:

где bandwidth — полоса пропускания фильтра.

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

При выставлении определенного бита в регистре управления сигнал с вывода INT не будет снят, пока управляющий микроконтроллер сам его не снимет. Эта особенность позволяет работать с акселерометром в режиме опроса и использовать его для вывода микроконтроллера из «спящего» режима.

Дополнительной особенностью акселерометра является наличие в нем восьмиразрядного датчика температуры. Это очень удобно, когда существует потребность в измерении температуры и наряду с этим требуется миниатюризация изделия. Диапазон измеряемых температур датчика от –30 до +97,5 °С.

В акселерометре имеется два вида памяти. Наиболее интенсивно используется так называемая volatile (в переводе с английского— изменчивая, непостоянная) память. Она обладает хорошим быстродействием и хранит текущую конфигурацию микросхемы, то есть регистры действующих настроек. Non-volatile память, имеющая тип EEPROM, содержит настройки по умолчанию. При включении микросхемы либо после выполнения команды сброса данные из non-volatile памяти копируются в соответствующие регистры volatile памяти. В ходе работы можно, не беспокоясь, менять содержимое действующих регистров с целью подстройки для удовлетворения собственных задач.

Существует возможность получать доступ к настройкам по умолчанию, чтобы их измененять. Это можно сделать, выставив определенный бит в регистре управления. Однако следует помнить, что память EEPROM имеет ограниченное количество циклов перезаписи, примерно десять тысяч.

Тестирование

При тестировании акселерометра SMB380 в качестве управляющего микроконтроллера использовался экземпляр ATmega644 производства Atmel. И акселерометр, и контроллер были припаяны к разведенной для них печатной плате.

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

Чтение осуществлялось по интерфейсу SPI с помощью представленной ниже процедуры, написанной на языке С:

uint8 AccelReadSPI(uint8 addr)
{
  uint8 val=0;
SPCR=0x5C;
/* Выбор чипа */
PORTA &= ~(1<<PORTA3);
/*Выставление адреса, направление — чтение*/
SPDR = addr | 0x80;
/*Проверка бита окончания трансмиссии в регистре статуса*/
while(!(SPSR &(1 << SPIF)));
SPDR = 0xff;
/*Принятие данных, проверка бита окончания трансмиссии*/
while(!(SPSR &(1 << SPIF)));
val = SPDR;
/* Снятие выбора чипа */
PORTA |= 1<<PORTA3;
return val;
}

Полученные значения передавались на компьютер для анализа. При этом плату с установленным на ней акселерометром вращали на 360° вокруг одной оси, которую старались держать параллельно земле. Полученные значения представлены в графическом виде.

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

Приведение показаний к значениям в единицах g представлено в таблице.

Таблица. Преобразование показаний с акселерометра в актуальные значения

Ускорение Бинарные показания с акселерометра Десятичное
представление
–2g 1000000000 –512
–1,996g 1000000001 –511
–0,004g 1111111111 –1
0,000g 0000000000 0
+0,004g 0000000001 1
+1,996g 0111111110 510
+2g 0111111111 511

Так как вращение происходило медленно, то можно пренебречь влиянием центростремительного ускорения и учитывать только тяготение Земли.



Рис. 2. Графики значений показаний с акселерометра для каждой оси и идеальная синусоида

Как видно на рис. 2, показания с оси Z вначале были в районе –260, с осей X и Y — в районе нуля. Согласно таблице, значение –260 примерно соответствует ускорению 1g против оси. Учитывая то, что акселерометр находился в поле действия только лишь силы тяжести, полученные показания соответствуют истине. При медленном перевороте платы вокруг оси Y вектор силы тяжести раскладывается на оси. Проекция на Y оставалась в районе нуля, а проекция на Z уменьшалась при увеличении длины проекции X. Вращение осуществлялось с примерно постоянной угловой скоростью, поэтому изменение длин проекций силы на оси должно было происходить по синусоидальному закону. Размещенная на графике идеальная синусоида является тому подтверждением.

Примерно к 51-й секунде плата была развернута на 180°. На графике видно, как в этот момент направление силы тяжести совпадает с направлением оси Z. К 100-й секунде плата сделала полный оборот вокруг оси Y. Показания с осей вернулись к первоначальному состоянию, что подтверждает график. Согласно проведенному тесту, акселерометр SMB380 вполне корректно отображает ускорения (угол наклона).

Для проверки работы акселерометра в режиме с прерываниями было написано две небольшие тестовые программы.

Первая программа анализировала состояние пятой линии порта A контроллера ATmega644, на который был заведен вывод INT SMB380. Акселерометр был настроен на работу в режиме Any Motion Mode с удержанием сигнала INT до его принудительного снятия управляющим микроконтроллером. Появление сигнала INT при ускоренном движении акселерометра или при тряске свидетельствовало о том, что критерий срабатывает. При этом микроконтроллер выводил соответствующую информацию в COM- порт компьютера. После фиксации события по интерфейсу SPI в регистре управления выставляли бит снятия сигнала INT:

while(1){
if(PINA & 0x04) {
  printf(“ANY_MOTION!!!\n”);
    AccelWriteSPI(ACCEL_CONTROL,
(AccelReadSPI(ACCEL_CONTROL) | RESET_INT));
  }
}

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

Работа в режиме Any Motion Mode предельно проста и позволяет исключить постоянное влияние силы тяжести. Однако срабатывание критерия не фиксируется в регистрах статуса, а только появляется сигнал INT на соответствующем выводе.

Вторая программа была написана для проверки функционирования SMB380 в режиме Range Mode. В этом режиме наряду с выставлением акселерометром сигнала INT в регистре статуса выставляются соответствующие флаги. Акселерометр был снова настроен на удержание сигнала прерывания, даже когда соответствующий критерий перестал бы выполняться. Программа проверяла по очереди условия наличия сигнала INT и флагов в регистре статуса и выводила в компьютер информацию о том, какое прерывание произошло, за какую границу заданного интервала ускорений вышли показания. После фиксации события, как и в предыдущем тесте, по интерфейсу SPI в регистре управления выставляли бит снятия сигнала INT.

while(1){
if(PINA & 0x04) {
  tmp=AccelReadSPI(ACCEL_STATUS);
if(tmp & (LG_LATCHED | HG_LATCHED)){
    if(tmp & LG_LATCHED)
      printf(“Low-g interrupt has happened\n”);
    if(tmp & HG_LATCHED)
      printf(“High-g interrupt has happened\n”);
  }
  AccelWriteSPI(ACCEL_CONTROL,
      (AccelReadSPI(ACCEL_CONTROL) | RESET_INT));
  }    
}

В процессе тестирования менялись пределы срабатывания критериев. Информация, выдаваемая контроллером, была адекватна ожиданиям.

Работа с SMB380 в режиме Range Mode также несложна. Следует лишь помнить о постоянном влиянии силы тяжести.

Использование акселерометра для локации объектов

Как уже упоминалось, акселерометр планировалось использовать для решения следующих задач:

  • формирование флагов состояний «покой» и «движение»;
  • распознавание поворотов при движении.

С использованием алгоритмов из предыдущего раздела первая задача была решена без проблем. Управляющий микроконтроллер переходил в режим сна с периодическим пробуждением для проверки состояний, а акселерометр был настроен на высокую чувствительность срабатывания сигнала о прерывании. Поскольку сигнал INT способен сохраняться даже после того, как критерий перестал выполняться, то микроконтроллер всегда может «знать», анализируя соответствующий вывод, происходила ли тряска или перемещения, пока он «спал». Полученной информации достаточно для формирования программных флагов «покой» и «движение». Данная цель была достигнута в обоих режимах работы: и в Any Motion Mode, и в Range Mode.

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

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

В состоянии покоя или при равномерном движении ускорение тела должно соответствовать соотношению:

где a — длина вектора ускорения тела; g — ускорение свободного падения; acc(n) — ускорение по оси n.

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

На основании полученных данных об ускорениях с трех осей координат по формуле (2) было рассчитано значение ускорения в каждый момент времени и построены графики.

Эксперименты проводились с периодичностью снятия показаний с акселерометра 10 и 100 мс. Во всех опытах верхняя частота фильтра среза равнялась 190 Гц.

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



Рис. 3. Изменение ускорения модуля, закрепленного на человеке (время опроса акселерометра 10 мс)


Рис. 4. Изменение ускорения модуля, закрепленного на человеке (время опроса акселерометра 100 мс)

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

На рис. 5, 6 показаны зависимости ускорения от времени для случаев, когда акселерометр был закреплен на движущейся в горизонтальной плоскости платформе.



Рис. 5. Изменение ускорения модуля, закрепленного на подвижной платформе (время опроса акселерометра 10 мс)


Рис. 6. Изменение ускорения модуля, закрепленного на подвижной платформе (время опроса акселерометра 100 мс)

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

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

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

Заключение

Акселерометры применяются в разнообразных электронных устройствах. Возможность их применения в задаче об определении месторасположения мобильных узлов была продемонстрирована в данной статье.

Для проекта локации был выбран акселерометр SMB380. После обзора характеристик и тестирования можно заключить, что данная модель обладает достаточным количеством интересных особенностей, делающих ее удобной для работы и подходящей для использования в подобных разработках.

Акселерометр может быть гибко настроен на разную чувствительность для определения состояний движения или покоя, с определенными ограничениями его можно использовать для отслеживания моментов отклонения мобильного объекта от прямолинейного движения, но он не может рассматриваться в качестве самостоятельного прибора, способного измерять перемещения и не требующего постоянной корректировки.

Литература

  1. Вайнберг Х. Акселерометры: Фантазии или реальность. http://www.analog.com.ru/Public/ADXL.pdf
  2. SMB380 Triaxial acceleration sensor Data Sheet (preliminary), Rev. 1.3. Bosch Sensortec GmbH.
  3. Сысоева С. Датчики инерции за пределами автомобильных применений // Компоненты и технологии. 2007. № 7.
  4. 8-bit AVR Microcontroller with 64K Bytes In-System Programmable Flash ATmega644/V, Rev. 2593L— 02/07.

Благодарности

Данное исследование проведено в рамках проектов, поддерживаемых Министерством образования и науки РФ, Американским фондом гражданских исследований и развития (CRDF) и Правительством Республики Карелия, а также частично финансировалось в рамках других договорных работ. Автор также благодарит Алексея Петровича Мощевикина и Юрия Николаевича Степанова за помощь при подготовке статьи.

Скачать статью в формате PDF  Скачать статью Компоненты и технологии PDF

 


Другие статьи по данной теме:

Сообщить об ошибке