Arduino - Барометер (MS5540).

В рамках стремления создания метеостанции на базе ардуины встала задача подбора и изучения практического применения датчика давления. Как обычно в поисках электронных компонентов, а уж тем более достаточно дорогостоящих, обратился сначала к гуглу, а потом на ебэй ... М-да разнообразие, а уж тем более наличие в продаже датчиков явно не велико ;-(

MS5561Лирическое отступление. Приобретя метео-станцию на базе контроллера Microchip серии pic24 и оценив имеющийся на ней датчик давления MS5561 ... был удивлен его конструктивом: металлический корпус и никаких отверстий! Чем он воспринимает давление? - не корпусом же? (Черные "точки" по углам очень малы и отверстиями не являются - размер всего датчика 4.75 x 4.25 мм!). Несмотря на такую странность демо-программа отображает некоторое показание снимаемое с него (за отсутствием иного барометра сравнить его было не с чем). К покупке для использования совместно с ардуиной я уже тогда запланировал "более изящный" (с точки зрения восприятия), а также более удобный для запайки датчик. Как паять такую "кроху" вручную даже представить сложно.


MS5540Выбирать, если честно, то особенно и не пришлось. Была возможность и я приобрел пару датчиков MS5540 (по 20 баксов за штуку на ебэе, а в россии они стоят более полутора тысяч!). Тут вроде все ясно: сенсорное окошко, размер ... если честно то по фотке я думал, что он существенно более габаритный - оказалось это типовой smd-формфактор, т.е. без переходничка (типа этого) на макетную платку его примаять проблематично. Ну да ладно.

Теперь ВАЖНОЕ ПРЕДОСТЕРЕЖЕНИЕ! В документации на это не делается явного акцента, незная этого я "убил" один датчик. Обратите внимание - никакой менбраны в "окошке" датчика нет! Корпус стального"баченка" заполнен вязким прозрачным гелем, сверху которого находится тонкий слой белой мастики. Под гелем на керамичекой платформе (собственно на ней же и контакты снизу) располагаются два кристалла (безо всякой защиты) которые имеют контакт через тончайшие проводки с контактами платформы. Так вот - ни в коем случае недопустимо касаться "содержимого" (иначе не назовешь) активной области датчика (белой мастики - любыми предметами и чем либо вообще!) - мастика хаотично размазывается, тянет за собой гель ... короче ж0.. полная!!! Мыслей как обезопасить датчик от случайного воздействия на чувствительную область (хотябы пыли) пока никаких. Удивляюсь как производитель создал такую несовершенную хрень конструкцию. Что мешало прикрыть окошко частой металлической сеточкой (по аналогии с микрофонами)? Вобщем так. Несмотря на вышесказанное, документайия гласит, что датчик может работать в воде и даже в соленой! (как то с трудом верится).


Перейдем к тестированию этого "чуда" иначе бл..ть не назовешь! Как уже говорилось выше использовать датчик намного более удобно, запаяв его единожды на переходник SMD->DIP (что можно видеть на фотке выше), разумеется, что сначала припаиваются гребенки контактов (более термостойким припоем), а затем маленьким паяльничком и сплавом Розе сам датчик (контакты датчика предварительно залуживаются тем же сплавом Розе). Размер датчика 6.2 x 6.4 мм (по фотке видна его миниатюрность).

Как гласит даташит - использование датчика крайне простО - не требуется никакой объвязки, интерфейс цифровой, достаточно применения даже 4-х разрядного контроллера (есть еще и такой архаизм?). Но это только реклама. На практике можно начать с того, что питание датчика не более 3.3В (т.е. использование стабилизатора, в случае 5В питания основной схемы необходимо). Далее: датчик содержит в себе помимо сенсора еще и микроконтроллер (вспоминаем про два кристалла внутри) - а ему необходим внешний синхросигнал 32кГц - причем использование кварца не предусмотрено! Т.е. где хочешь возьми и подай ему прямоугольник, да и еще с как можно более высокой точностью!

Конечно при использовании ардуины генерировать синхроимпульс можно и средствами ардуины (по таймеру) ... Но я решил собрать отдельный генератор и привлечь для этого таймер NE555. Какие заморочки пришлось преодолеть на пути создания простейшего генератора - заслуживают отдельной статьи (будет позже) ... Но вот задача решена, продолжаем ...

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

Поясню принцип съема и расшифровки показаний с бараметра MS5540: трехпроводный интерфейс можно считать совместимым с SPI; данные можно лишь считывать из датчика (не считая управляющих команд сброса, и указания произвести оцифровку показаний для последующего их чтения). А считать можно (и нужно) помимо значения измеренной температуры и давления еще и калибровочные константы.

О константах чуток подробнее. Всего их шесть, размерноть (количество значимых бит, и соответственно максимальное значение) у них разная! Причем размерность констант зависит от модели датчика весьма сильно (у MS5541 они совсем другие, нежели чем у MS5540). Хранятся константы в упакованном виде в четырех 16-ти разрядных словах. Где и какие биты какой из констант находятся - прописанно в документации. Соответственно перво-наперво нужно считывать эти 4 слова с константами и далее преобразовывать их в реальные числа (в строгом соответствии с документацией на конкретную модель датчика). Константы (на то они и константы) неизменны для конкретного экземпляра (записываются на заводе с учетом поверки).

Далее нужно произвести ряд арифметических вычислений над значениями снятых показаний в комбинациях с полученными калировочными константами. Формулы опять-таки строго специфичны для каждой модели датчика. Математика не самая простая, это я к тому, что благо с C-подобным синтаксисом программ для ардуины - проблем с описанием арифметики не возникает. Но даже представлять себе перспективу написания подобного кода на ассемблере как-то не очень хочется ... (это к тому, что разработчик датчика анонсирует его беспроблемное юзание даже с 4-х битными контроллерами! - фи).

Вот вобщем-то и все. Тактировать датчик  можно как от альтернативного генератора (см. фотку) или формировть импульсы контроллером ардуины (по таймеру) - приведенный скетч формирует их на 9 цифровом пине ардуины. Есть вопросы ?

MiGeRA (февраль 2012)

Заглавная » Радиоэлектроника » Arduino - Высокоуровневая платформа устройств на микроконтроллерах » Arduino - Барометер (MS5540)