16:20 Барометр на AVR | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Барометр на AVRСегодня хотелось бы рассмотреть устройство, представляющее собой барометр - измеритель атмосферного давления. Применения такого устройства необходимо для мониторинга текущего атмосферного давления выраженного на индикаторе устройства в двух единицах измерения - в международной системе единиц Паскали (Па или Pa) и во внесистемных единицах измерения - миллиметры ртутного столбца. Последнее скорее всего больше привычно для наших стран, так как применяется в прогнозах погоды. Однако функционал данного устройства не ограничивается измерением только атмосферного давления, также реализовано измерение температуры и определение высоты над уровнем моря (альтитуды). Схема устройства на AVR микроконтроллере ATmega8 представлена ниже: В качестве датчика атмосферного давления в схеме использован BMP180 производства компании Bosch. По правде говоря, эта компания делает хорошие и качественные вещи, но даташит на этот датчик составлен в сравнении с даташитами других компаний не очень развернуто, без опыта чтения подобной документации разобраться будет трудно. Инженеры Bosch посчитали необходимым дать информацию только по самым основным параметрам, но все что нам нужно все есть, хоть местами и кратко. Датчик атмосферного давления BMP180 может работать как по I2C интерфейсу, так и по SPI интерфейсу (выбирается подключением необходимых выводов датчика). В данной схеме используется I2C интерфейс. Так как датчик требует питания до 3,3 вольт, а микроконтроллер питается от 5 вольт постоянного напряжения, необходимо применить согласование уровней I2C для корректной работы. Для этой цели выбрана микросхема производства компании NXP PCA9517. Сам датчик берет питания от стабилизатора напряжения на 3,3 вольта, это же питание подается на подтягивающие резисторы R6 и R7. Уровни сигналов преобразовываются микросхемой PCA9517 и сигналы от датчика атмосферного давления передаются микроконтроллеру с уровнями до 5 вольт. 5 вольт подключается к подтягивающим резисторам R4 и R5. Эти подтягивающие резисторы (pull-up) необходимы для работы протокола I2C - с их помощью формируются высокие уровни сигнала, а когда микросхема проваливает это напряжение с подтягивающих резисторов в нулевой потенциал, формируется низкий логический сигнал. В данной конфигурации напряжений логических уровней 3,3 и 5 вольт можно обойтись на крайний случай и без согласования уровней, так как согласно стандартам при таких питающих напряжения потенциалы низких уровней у них одинаковые, а высокий уровень совпадает как у 5 вольт, так и у 3,3 вольт, разница заключается только в максимальных значениях. Однако было решено не рисковать и все же применить согласование уровней - сделать все по правилам. Номиналы подтягивающих резисторов можно взять от 4,7 кОм до 10 кОм. Конденсаторы C3 и C4 необходимы для стабильной работы датчика атмосферного давления. Важной функцией в данном датчике атмосферного давления является калибровка полученных измерений. В памяти датчика есть 11 коэффициентов, предназначенных для улучшения точности измерения параметров. Однако не все так просто - домножить на эти коэффициенты так просто нельзя. для получения конечных результатов в даташите приведен целый пример расчета на странице 15, документация на датчик ниже. В соответствии с этой информацией составляем программу для микроконтроллера на языке Си.
У каждого датчика калибровочные коэффициенты свои (видимо на заводе их полностью задают в соответствии с какими-то контрольными испытаниями). Перед использованием эти коэффициенты нужно прочитать из регистра хранения датчика.
Для получения значения альтитуды или высоты над уровнем моря используем также формулу, приведенную в даташите и получаем такую функцию:
В зависимости от надобности эту функцию можно выбросить из исходника, так как для расчета нужно использовать библиотеку - реализованные в ней методы расчета необходимых действий отбирают очень много памяти как флэш, так и оперативной, однако ничего лучше пока не придумал. Также данный датчик может измерять атмосферное давление с разной точностью. Для задания точности необходимо передать это значение датчику по I2C и правильно задать задержку перед чтением регистров с полученными данными (в зависимости от точности, датчику нужно больше или меньше времени на измерение). программный код выглядит так:
При сборке схемы датчик атмосферного давления BMP180 был применен на заводской печатной плате китайской сборки (модуль включает в себя стабилизатор питания на 3,3 вольта с конденсаторами, подтягивающие резисторы для интерфейса I2C и конденсаторы в обвязке самого датчика по питанию, микросхема или просто схема согласования уровней на данной плате отсутствует, поэтому необходимо применять в другом исполнении): Питается вся схема от простого модуля питания на силовом трансформаторе. Переменное напряжение выпрямляется четырьмя диодами VD1 - VD4 марки 1N4007, пульсации сглаживаются конденсаторами C1 и C2. Номинал конденсатора C2 можно увеличить до 1000 - 4700 мкФ. Четыре выпрямительных диода можно заменить одним диодным мостом. Трансформатор применен марки BV EI 382 1189 - преобразует 220 вольт переменного тока в 9 вольт переменного тока. Мощность трансформатора составляет 4,5 Вт, этого вполне достаточно и еще с запасом. Такой трансформатор можно заменить любым другим силовым трансформатором, подходящим для Вас. Либо данный питающий модуль схемы заменить на импульсный источник напряжения, можно собрать схему обратноходового преобразователя либо применить иже готовый блок питания от телефона, например - все это дело вкусов и потребностей. Выпрямленное напряжение с трансформатора стабилизируется на микросхеме линейного стабилизатора L7805, ее можно заменить на отечественный аналог пяти вольтового линейного стабилизатора КР142ЕН5А, либо применить другу микросхему стабилизатора напряжения в соответствии с подключением ее в схеме (например LM317 или импульсные стабилизаторы LM2576, LM2596, MC34063 и так далее). Далее 5 вольт стабилизируются другой микросхемой - AMS1117 в исполнении, дающей на выходе 3,3 вольта. Это напряжение используется для питания датчика атмосферного давления BMP180 в соответствии с документацией. Номиналы конденсаторов в обвязках микросхем стабилизаторов напряжения можно варьировать в широких пределах в области взятого порядка. Ну и сердцем схемы является микроконтроллер Atmega8. данный микроконтроллер можно использовать как в корпусе DIP-28, так и в СМД исполнении в корпусе TQFP-32. Резистор R3 необходим для предотвращения самопроизвольного перезапускания микроконтроллера в случае появления случайных помех на выводе PC6. Резистор R3 подтягивает плюс питания к этому выводу, надежно создавая потенциал на нем. Для индикации измеряемых параметров используется жидко кристаллический (ЖК или LCD) дисплей SC1602. Он имеет 2 строки символов по шестнадцать штук в каждой из них. ЖК дисплей подключается к микроконтроллеру по четырех битной системе. Переменный резистор R2 необходим для регулировки контраста символов на дисплее. Вращением движка этого резистора добиваемся наиболее четких для нас показаний на экране. Подсветка ЖК дисплея организована через вывод "А" и "К" на плате дисплея. Подсветка включается через резистор, ограничивающий ток - R1. Чем больше номинал, тем более тускло будет подсвечиваться дисплей. Однако пренебрегать этим резистором не стоит во избежание порчи подсветки. Мощность всех резисторов постоянного сопротивления составляет 0,25 Вт. Схема была собрана и отлажена на макетной плате для микроконтроллеров Atmega8: В итоге данная схема имеет следующий функционал:
В данном устройстве показание положения относительно уровня моря именно высчитывается, а не измеряется. Расчет происходит по рекомендованной формуле из даташита упрощенного расчета положения относительно уровня моря в зависимости от атмосферного давления. Как известно, чем выше мы находимся, тем давление атмосферы меньше. Именно эта зависимость и используется при расчете. Однако, в связи с тем что для любой отдельной территории погода может меняться, а вместе с ней и атмосферное давление будет колебаться. Исходя из этих размышлений, а также опытных наблюдений, положение над уровнем моря будет постоянно плавать в зависимости от колебаний атмосферного давления (по идеи то высота не должна изменяться с такой скоростью). Эта функция рассматривается как дополнительная и не совсем достоверная (уровень над морем в течении дня может плавать плюс минус процентов 5 - а это много, я считаю). Но именно атмосферное давление измеряется данным датчиком вполне точно - совпадение с текущим прогнозом погоды от полного до расхождения не более одного процента. Температура в данном датчике измеряется также весьма точно. Как вывод могу сказать, что данный датчик атмосферного давления выполняет свои основные функции очень даже не плохо и может сгодиться для домашней метеостанции, которой мы и займемся в скором будущем. Для программирования микроконтроллера Atmega8 необходимо знать конфигурацию фьюз битов (скриншот сделан в программе AVR Studio): К статье прилагается прошивка для микроконтроллера, полный исходный код для данного устройства для работы с датчиком BMP180 в AVR Studio документация на датчик, а также небольшое видео, демонстрирующее работоспособность схемы (наблюдаем как изменяются параметры, если зажать датчик атмосферного давления пальцем руки). Список радиоэлементов
Скачать список элементов (PDF) Оригинал статьи: http://cxem.net/mc/mc299.php Прикрепленные файлы:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Всего комментариев: 0 | |