Инклинометр или угломер на базе акселерометра
Автор: icsn Здравствуйте, уважаемое общество! ПОЗДРАВЛЯЮ Кота с Днем рождения! Вкусной сметаны, свежей рыбки, теплого удобного места и послушных хозяев. В связи с замечательным днем и хорошим конкурсом хочу поделиться с Вами историей создания устройства измерения углов - инклинометра. Данное устройство понадобилось для измерения углов наклона лопастей модели вертолета для безфлайбарной системы. Данное устройство возможно использовать и для замены строительного уровня (при размещении его на ровном бруске, который используется в качестве основы), контроля отклонения от вертикали или горизонтали и т.д. Для настройки флайбарной системы использовался простейший механический угломер который мало подходил для настройки безфлайбарой системы вследствии конструктивных особеносте модели и сложности его применения. При начальных изысканиях по просторам Интернета, аналогичного самодельного устройства найдено не было. Промышленные устройства в продаже есть, но зеленое земноводное не давало его пробрести (цена нормального устройства для моделирования – от 20 вечнозеленых). При более детальном поиске найдено устройство схожее по функционалу но реализованное на компонентах которых или не найти в нормальные сроки (хитрый акселерометр), или опять земноводное давит ставить (PIC18 – который надо идти покупать) (источник – журнал Everyday Practical Electronics 2013-03). Но кто сказал что мы боимся трудностей! Порывшись в закромах Родины было найдено кучка микроконтроллеров попроще, индикатор, который очень понравился по выводимой инфомации и дешевая платка с акселерометром. Все фото кликабельны. Данное фото не мое (источник - dx.com), не успел сфотографировать новый модуль до его установки. Итак, начнем. Инклинометр должен уметь : - измерять углы параллельно уровня рамы модели от -15º до +15º с точностью не меньше 0,1º; - иметь возможность относительных измерений; - возможность калибровки относительно горизонта Земли; - малые габариты; - малое потребление; - автоматическое выключение (для меня самая главная сервисная функция). Дополнительные возможности: - измерение углов от 0º до 360º. С заданием определились и ... Немного теории измерения углов или наклона. Для отслеживания наклона возможно применение индукционного датчика, использовавшего магнитное поле Земли, с помощью двух перпендикулярных катушек индуктивности. Данная система использовалась в первых шлемах виртуальной реальности
Это фото тоже не мое - нашел в интернете не помню где(да прости меня автор данного фото), но свой шлем уже в таком виде ... что стыдно фотографировать. Выцарапав этот датчик из старого шлема, посмотрел на его размеры и … отложил до лучших времен. Дальше с ним не разбирался. Думал использовать гироскоп, выцарапанный из мобильного телефона обкусанной марки, но посмотрев на сложность монтажа (BGA), тоже отложил в сторону. Покупать гироскоп не давало зеленое земноводное (да и вообще – покупать – самый мой последний вариант). Акселерометр. Это именно то что нужно. При современном развитии технологий, 3-ох осевой акселерометр за 2,5 убитых енотов – это то что нужно. Особенно если он есть в наличии (когда-то давно брал на «поиграться»). Основную теорию брал с сайта [1] и [2].
Краткое изложение теоретического материала. Чаще всего наклон определяют с помощью силы гравитации Земли, геомагнитного поля, гироскопического эффекта или применяют косвенные измерения. Если единственной силой, действующей на объект является сила гравитации, то в этом случае для определения статичного угла наклона может быть использован MEMS-акселерометр , прибор, который измеряет проекцию ускорения (суперпозицию собственного ускорения акселерометра и вектора гравитации) на его чувствительную ось. По величине измеренной проекции определяется угол наклона. Сила гравитации имеет постоянную величину любые дополнительные силы, действующие на объект, изменят выходные данные акселерометра, а следовательно в расчете угла наклона появится ошибка. Применив предварительную обработку выходного сигнала акселерометра, можно свести влияние других сил к минимуму, но это приведет к задержке выдачи актуального значения угла. Для начала рассмотрим идеальный случай, в котором ось X объекта всегда находится в плоскости действия силы гравитации. Воспользовавшись школьным курсом элементарной тригонометрии, получим выражение для вычисления проекции силы гравитации на ось Х:
Ax=g*sin(alfa)
где alfa - угол между осью акселерометра и горизонтом. Обычно за горизонт принимают плоскость, ортогональную силе гравитации.
Из-за того что выходное значение акселерометра пропорционально синусу угла наклона в поле гравитации, для определения угла наклона получим формулу: alfa=arcsin(Ax/g) Если угол наклона близок к значению 90º, большое изменение угла приводит к маленькому изменению измеряемого ускорения. Таким образом, чувствительность измерения угла наклона будет стремиться к нулю с приближением значения угла к 90º. Достижение высокой разрешающей способности на широком диапазоне измерений, в одноосевом случае, возможно лишь с применением акселерометра обладающего высокой разрешающей способностью. Кроме того, такая схема не может работать в полном диапазоне углов 0º-360º так как значения синуса совпадают для углов Nº и 180º-Nº. Избавиться от перечисленных недостатков поможет введение в систему измерения дополнительной оси чувствительности y, ортогональной оси x и также находящейся в плоскости действия силы гравитации .
Подобно ситуации с одним сенсором, значение ускорения измеренное акселерометром по оси X будет пропорционально синусу угла наклона, а значение ускорения измеренное акселерометром по оси Y– косинусу угла наклона. Из свойств функций синуса и косинуса следует, что в то время как чувствительность по одной оси будет уменьшаться, она же по другой будет увеличиваться. Расчет угла наклона можно провести воспользовавшись следующей формулой: tan(alfa)=Ax/Ay, alfa=arctan(Ax/Ay) Дополнительная ось дает нам возможность измерять углы в диапазоне 0-360 градусов. Достигается это благодаря смене знака в зависимости от принадлежности угла к тому или иному квадранту.
Принадлежность угла к тому или иному квадранту, может быть определена в результате анализа значений, полученных для каждой из чувствительных осей. Введение третьей чувствительной оси позволит измерять все углы наклона сенсора в пространстве. В начальной позиции положение устройства такое, при котором оси x и y находятся в плоскости горизонта, а ось z ортогональна осям x и y . В начальной позиции, когда сила гравитации действует только на ось z, получим, что все значения углов равны 0. При этом, значения углов могут быть вычислены по следующим формулам:
Выбор аппаратной части Посмотрев формулы, понял, что без математических библиотек не обойтись. Математические библиотеки требуют достаточно много места в памяти, так что надо микроконтроллер с относительно большим объемом памяти. Из имеющихся в наличии контроллеров хватало по памяти ATMEGA8 и PIC16F1829 [3]. ATMEGA8 была отклонена из-за отсутствия у меня внутрисхемного отладчика (в программных отладчиках все работало, но, «то акула глухая, то свисток сломан», в железе постоянно находил ошибки и устал перепрограммировать контроллер). Для PIC у меня было все, и я остановился на нем (хотя контроллер и предназначался для другого проекта – но был успешно заменен на более простой контроллер). Как было сказано выше, в качестве акселерометра использовался готовый модуль на базе ADXL345 [4]. И с моей удачей (помните про акулу?) на нем не работал стабилизатор из 5В в 3.3В (маленькая пятиножка), который был заменен на TL431 [5] в корпусе SOT23 и резистор 680 Ом размера 0805. TL431 включен по схеме обыкновенного стабилитрона с напряжением стабилизации 2,5 В по стандартной схеме включения из Datasheet. Такая замена оказалась более чем удачным решением – по Datasheet на ADXL345 рекомендуемое напряжение питания именно 2,5В. Индикатор TIC15D или его аналог RDX0003 [6], драйвер - ML1001 [7]. Выбор индикатора определился из «понравился» (небольшие размеры, малый ток потребления, статичная структура и красивые цифры). Сегменты индикатора Кнопки и корпус – какие нашел по размерам индикатора и красоты установки. Источник питания – элемент CR2032. В устройстве отсутствует выключатель питания – контролер построен по XLP Technology и в спящем режиме «кушает» 20мкА при 3В. Включение устройства производится нажатием любой кнопки и, примерно, через 7 минут, устройство «засыпает». При средней емкости элемента CR2032 в 200мА*ч и потреблении 20мкА элемента хватит на 200мА*ч/20мкА=10000ч или примерно на 1 год работы. В режиме измерений устройство потребляет максимум 1,2 мА.
Итак – схема.
Схема (в формате PDF) - проще не придумаешь. Все резисторы подтяжки для функционирования i2с шины находятся на плате модуля акселерометра, для кнопок и индикатора – в контролере. Схема нормально работает при напряжении от 2 до 5 В. Если напряжение ниже 2В – некорректные значения выдает акселерометр, хотя контролер и индикатор продолжают работать. Кнопки. Калибровка – настройка «нуля» относительно горизонта Земли Режим – переключение между измерениями -90º --- +90º и 0º---360º REL – режим относительных измерений
Монтаж. Проект был «выходного дня» и минимальных соединений поэтому был выбран «макетный» монтаж. В качестве основы использована плата-переходник SSOP28-DIP28 на которую термоклеем из пистолета приклеен модуль акселерометра, запаян микроконтроллер и проводками припаяно все к площадкам контроллера. В корпусе прорезано окно под индикатор, просверлены отверстия для кнопок и приклеено это все термоклеем. Кнопку Калибровка желательно спрятать от случайного нажатия (например: спрятать кнопку внутрь корпуса с доступом к ней через специальное отверстие). Для батарейки использовано крепление с материнской платы, которое также приклеено термоклеем. Вспоминая известный журнал - «собранная схема в наладке не нуждается и начинает работать после (прошивки контролера и) включения питания». Немножко фотографий сборки устройства с небольшими описаниями: Подготовка корпуса для вырезания окна под индикатор. Вырезание (точнее "вышкрябывание") производилось резаком из ножовочного полотна. Для сохранения корпуса от повреждений, в углах окна высверливаются маленьким сверлом отверстия в которых тормозиться резак при порезке. Рез получается достаточно ровным и почти без заусениц. Извините за качество фото, на готовом устройстве можно увидеть ровные края. Перед окончательной установкой индикатора в корпусе высверливаются на свободном месте отверстия под кнопки. Примерка индикатора для определения места под кнопки. Вид спереди при проверке установки. Индикатор еще не ровно стоит. Индикатор просто помещается в корпус и заливается термоклеем. Вот так выглядит плата, собранная и налаженная, но еще не подпаяны кнопки А вот так выглядит полностью собранное устройство внутри, осталось только закрыть крышку. Вся фиксация выполнена термоклеем. Все, устройство собрано. УРА-А-А! Нормальный цвет индикатора на нижнем фото (ну не умею я нормально фотографировать). Программная часть. Программа написана на языке С (версия Microchip XC8 ver3.10) в среде Microchip MPLABX. Все программные продукты можно абсолютно бесплатно скачать с сайта Microchip. Проект лежит во вложениях. Так как программа разрабатывалась «для себя» - сильно не пинать за исходники и комментарии. Память программ занята на 70%, так что есть место для дополнительных функций. Старался писАть понятно, но …. Основные модули: - main.c - основной модуль с настройками инициализации контроллера и всей математикой; - adxl345.c – модуль работы с акселерометром (настройка, чтение из акселерометра); - i2c.c – модуль работы с «квадратной» шиной; - ti15lib.c – модуль работы с индикатором (вывод подготовленных символов на индикатор).
Общее описание работы программы 1.После включения питания инициализируются внутренние модули контролера, модуль индикатора и акселерометр. 2.Производится 16 измерений акселерометром и вычисляется среднее арифметическое из измерений по всем осям акселерометра для устранения случайных скачков. 3.В зависимости от режима вычисляются углы из измерений. 4.Значения выводятся на индикатор. 5.Опрос кнопок и переключение режима. 6.Увеличение и проверка таймера отключения 6.а. Если таймер не закончился – переход на пункт 2 6.б. Если таймер закончился – переход на пункт 7. 7. Выключение всех модулей и переход в режим сна. 8. На аппаратном уровне контроль состояния кнопок – по изменению – переход на пункт 1 Настройка и работа с прибором Проверяем монтаж на правильность сборки и отсутствие замыканий «Залить» в контроллер прошивку любым программатором. Подсоединить батарейку. Установить прибор на ровную, относительно Земли, поверхность и, при установке показаний, нажать на 3 секунды кнопку калибровки. На индикаторе отобразятся нули и значение калибровки запишется в энергонезависимую память. Данная процедура выполняется только 1 раз. После калибровки прибора
Для сравнения измерений использовал телефон обгрызеной марки 5 модели (не реклама). Других электронных приборов под рукой не было, с транспортиром (школьным, обыкновенным) совпадало. После включения прибор находится в режиме измерения углов от -90º до +90º. Данный режим отображается двумя направленными вверх стрелочками. Эти-же стрелочки показывают на верх прибора. Большими цифрами отображается угол в целых значениях, маленькими - в дробных. Проверка правильности При необходимости можно сменить «ноль» измерений нажатием на кнопку REL (калибровка прибора не сбивается а вводится для измерений «виртуальный» ноль), Данный режим отображается спец значком под стрелочками. Включение относительных измерений
При необходимости кнопкой Режим переключаем режим измерений на измерение в диапазоне от 0º до 360º. Режим отображается двойными стрелочками в обе стороны. При перевороте прибора больше 120º, изображение цифр переворачивается на 180º. В данном режиме отображаются только целые значения. Корпус прибора переверну на 180º вокруг горизонтальной оси (не совсем ровно закреплена плата модуля акселерометра и показывает с учетом ошибки - корректировать не стал т.к. для меня это только дополнительная функция. В первом режиме меряет точно.) При наклоне корпуса прибора вперед или назад относительно индикатора на угол больше 45º появляются очень большие ошибки в вычислениях (из-за свойств акселерометра), поэтому на индикаторе отображаются прочерки - ошибка. Полностью собранный прибор лежит горизонтально на столе и отображает ошибку. По завершению измерений просто положить прибор. Примерно через 7 минут прибор выключится сам. Для новых измерений просто нажать любую кнопку (желательно кроме кнопки Калибровка)
Вот и все. Все вопросы, замечания пожелания и предложения писать в почту или на форум. Спасибо за внимание!
Приложения 1. Сайт https://www.bitaks.com/ 2. Сайт https://www.st.com/ 3. Документация PIC16F1829 4. Документация ADXL345 5. Документация TL431 6. Документация TIC15 7. Документация ML1001 8. Исходники проекта и файл прошивки (архив)
Файлы: Все вопросы в Форум.
|
|
|||||||||||||||||||
|
||||