Например TDA7294

РадиоКот > Конкурс: Поздравь Кота по-человечески 2014!

Инклинометр или угломер на базе акселерометра

Автор: icsn
Опубликовано 08.09.2014.
Создано при помощи КотоРед.

Здравствуйте, уважаемое общество!

ПОЗДРАВЛЯЮ Кота с Днем рождения! Вкусной сметаны, свежей рыбки, теплого удобного места и послушных хозяев.

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

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

  При начальных изысканиях по просторам Интернета, аналогичного  самодельного устройства найдено не было. Промышленные устройства в продаже есть, но зеленое земноводное не давало его пробрести (цена нормального устройства для моделирования – от 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 градусов. Достигается это благодаря смене знака в зависимости от принадлежности угла к тому или иному квадранту.

90º

X > 0; Y<0

180º

 

X > 0; Y>0

 

X < 0; Y<0

270º

360º

X < 0; Y>0

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

Введение третьей чувствительной оси позволит измерять все углы наклона сенсора в пространстве. В начальной позиции положение устройства такое, при котором оси 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. Сайт http://www.bitaks.com/

2. Сайт http://www.st.com/

 3. Документация PIC16F1829

4. Документация ADXL345

5. Документация TL431

6. Документация TIC15

7. Документация ML1001

8. Исходники проекта и файл прошивки (архив)

 


Файлы:
Документ PDF
дока на драйвер индикатора
дока на стабилизатор
индикатор TIC15
проверка REL
неправильное измерение
дока на контролер
дока на индикатор
исходники


Все вопросы в Форум.


ID: 1970

Как вам эта статья?

 Нравится
 Так себе
 Не нравится

Заработало ли это устройство у вас?

 Заработало сразу
 Заработало после плясок с бубном
 Не заработало совсем

83 4 2
1
Подробно