МЭМС-акселерометры могут выдавать различные сигналы прерываний, сообщающие о готовности данных, свободном падении, горизонтальном/вертикальном расположении или каком-то воздействии. Некоторые акселерометры имеют функцию пробуждения и функцию определения отсутствия движения, для того, чтобы уменьшать скорость передачи данных в режиме пониженного энергопотребления, и увеличивать ее в нормальном режиме работы. Но такая функция сокращает энергопотребление только самого акселерометра.
Некоторые микропроцессоры имеют две или более линии ввода/вывода общего назначения, и пользователи могут подключить к ним выводы прерываний по пробуждению и определению отсутствия движения. Однако, в некоторых случаях микропроцессор может обладать только одной такой свободной линией, но пользователю нужно подключить два прерывания.
Ниже приводится метод, позволяющий с помощью одной линии прерывания определить начало движения, при котором акселерометр выходит из сна, и отсутствие движения, используя фильтр верхних частот (ФВЧ) и логическую операцию «И», на входе которой присутствует сигнал, сообщающий о свободном падении. При этом микропроцессору не нужно вмешиваться в работу акселерометра. Когда микропроцессор регистрирует передний фронт сигнала прерывания от акселерометра, это говорит об отсутствии движения, а появление заднего фронта сообщает о том, что устройство находится в движении.
Аппаратная часть
На рисунке 1 показано соединение хост-процессора или микроконтроллера с акселерометром. Хост-процессор после подачи питания должен по интерфейсу I2C или SPI один раз настроить акселерометр. Настройка производится в подпрограмме инициализации. Затем акселерометр начнет непрерывный мониторинг движения в фоновом режиме, потребляя при этом небольшое количество энергии.

Вывод акселерометра INT1 по умолчанию является двухтактным и настроен на активный высокий уровень выходного сигнала. Пользователь может переконфигурировать его на выход с открытым коллектором или на активный низкий уровень. Уровень напряжения INT1 в состоянии лог. «1» составляет минимум 0.9 * Vdd_IO, а в состоянии лог. «0» - максимум 0.1 * Vdd_IO.
Когда портативное устройство переходит в состояние покоя, то по прошествии некоторого времени акселерометр посылает сигнал прерывания, и на выводе INT1 появляется передний фронт. После этого хост-процессор может отключить другие компоненты и сам перейти в режим сна для экономии энергии.
Когда будет зарегистрировано движение, акселерометр пошлет сигнал прерывания, который приведет к появлению заднего фронта. Тогда процессор выйдет из режима сна и включит остальные компоненты.
Если портативное устройство остается в движении при нормальном режиме работы, то на выводе INT1 сохраняется состояние нижнего логического уровня. Когда устройство продолжительное время находится в состоянии покоя в любом наклонном положении, то на INT1 сохраняется состояние верхнего логического уровня. Процессор периодически может считывать уровень напряжения на выводе INT1 для дополнительной проверки того, находится ли портативное устройство в покое или движется.
Пример кода
Нижеприведенный пример кода был написан для акселерометра LIS3DH компании STMicroelectronics.
void init_ACC(void)
{
//конфигурация регистров управления
Write 27h into CTRL_REG1; // [записать 27h в регистр CTRL_REG1] включение датчика
//с частотой передачи данных 10 Гц в нормальном режиме
Write 01h into CTRL_REG2; // Включение ФВЧ с частотой среза 0.2 Гц
// при активной генерации прерываний на INT1 (AOI1)
Write 40h into CTRL_REG3; // сигнал прерывания AOI1 привязываем к выводу INT1
Write 88h into CTRL_REG4; // шкала +/-2 g, включение битов BDU (обновление блока данных)
// и HR (высокое разрешение выходных данных)
Write 00h into CTRL_REG5; // значение по умолчанию
//конфигурация функций пробуждения и определения движения
Write 08h into INT1_THS; // Порог (THS) = 8LSBs * 15.625mg/LSB = 125mg.
// LSB — наименее значимый бит
Write 32h into INT1_DURATION; // продолжительность = 50LSBs * (1/10 Гц) = 5 с.
Write 95h into INT1_CFG; // включение генерации прерываний XLIE, YLIE и ZLIE
// и логической функции «И». Это означает, что прерывания будут
// генерироваться, когда данные об ускорениипо осям X, Y и Z
// будут одновременно в пределах порога ±THS.
}
Конфигурация INT1_CFG производится как и при настройке определения свободного падения за исключением того, что для функции определения свободного падения не нужно включать ФВЧ и продолжительность такого падения составляет миллисекунды. 5 секунд в данном случае означало бы, что дистанция свободного падения составляет 122.5 метров, что редко случается с портативными устройствами.
Результат приведенной выше настройки показан на рисунке 2.

Когда портативное устройство находится в состоянии покоя в любом наклонном положении в течение более 5 секунд, состояние вывода INT1 сменится с низкого на высокое и останется таким, пока это устройство будет находиться в покое, потому что после ФВЧ данные об ускорении по осям X,Y,Z будут в пределах ±125mg THS.
Свободное падение портативного устройства не переведет INT1 из низкого логического уровня в высокое, потому что данные по осям X,Y,Z будут в пределах ±125mg THS менее 5 секунд.
Если показания любой из осей выдут за пределы ±125mg THS, выход INT1 перейдет из высокого логического уровня в низкое и будет оставаться в нем состоянии до тех пор, пока устройство будет находиться в движении.
Если устройство находилось в покое менее 5 секунд и снова начало движение, то логический уровень INT1 останется в низким, и когда устройство снова перейдет в состояние покоя, начнется отсчет пятисекундного интервала от 50 LSB до 0 LSB при частоте передачи данных 10 Гц.
Заключение
Благодаря использованию встроенного ФВЧ и схемы определения свободного падения акселерометр способен выдавать процессору сигнал прерывания как по выходу из сна, так и при отсутствии движения. Акселерометр работает в фоновом режиме, и вмешательство процессора в его работу не требуется. Пользователи могут настроить порог (THS) и длительность в зависимости от нужд их приложений. С точки зрения экономии энергии при выключении экрана, это решение является более эффективным, чем нажатие кнопки и выдержка по таймеру процессора.
Перевод © digitrode.ru