Программирование AVR Датчик давления и температуры MS5541B компании Intersema Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Датчик давления и температуры MS5541B компании Intersema Печать
Добавил(а) microsin   

Датчик MS5541B представляет собой миниатюрное изделие (размер 6.2x6.4 mm). Он может мерить давление в диапазоне 0..14 бар (1 бар равен 75.00616 мм рт. ст.), а также (опционально) температуру.

MS5541B-package-TOP.GIF MS5541B-package-BOTTOM.GIF

Разрядность ADC датчика - 15 бит, что позволяет достичь точности 1.2 мбар. Данные передаются по 3-проводному SPI-совместимому последовательному интерфейсу. В датчик встроена память, в которую на заводе записывают 6 компенсационных коэффициентов, а также датчик температуры. Эта информация используется для точного вычисления текущего давления. Номинальное напряжение питания датчика 2.2..3.6 вольт, ток потребления очень мал - не более 5 мкА, что позволяет для питания использовать простой делитель напряжения на резисторах. Для работы датчику нужна также стабильная тактовая частота 32768 Гц (дрожание фазы должно быть минимально, чтобы повысить точность измерения). Диапазон температур - -40..85 oC. Датчик полностью совместим по интерфейсу с датчиками MS5535B и MS5535A, т. е. программы для них подойдут и для MS5535B.

MS5541B-blockdiagram.GIF

имя вывода

тип описание
SCLK 1 I такты данных
VSS 2 G земля
PV 3 N отрицательное программирующее напряжение (не используется)
PEN 4 I разрешение программирования (не используется)
VDD 5 P + напряжения питания
MCLK 6 I Master clock (32.768 кГц)
DIN 7 I вход для последовательных данных
DOUT 8 O выход для последовательных данных

Примечание: тип имеет следующие значения - I вход, G ground, N negative, P plus, O выход. Ножки 3 и 4 (PV и PEN) никуда не должны быть подключены пользователем (они используются только на заводе).

Даташит на датчик и апноут по его использованию можно скачать с сайта компании Intersema Sensoric SA, также см. архив [2]. Процедура получения корректных данных давления с датчика подробно описана в даташите и довольно сложна - включает в себя, кроме чтения данных с ADC датчика, еще и чтение ADC температуры, заводских корректирующих коэффициентов, а также корректирующие расчеты над всеми этими данными. Но беспокоиться особенно не о чем - вся работа уже проделана за нас, если воспользоваться исходным кодом примера из апноута an502 (см. [2]).

MS5534-MS5535-connect-to-LPT.GIF

Датчик можно подключить к параллельному порту компьютера LPT с помощью простейшей схемы (см. апноут an505.pdf в [2]). Для подключению к микроконтроллеру можно использовать порт SPI (см. апноут an510.pdf в [2]). Такой вариант лучше из соображений уменьшения загрузки микроконтроллера. Но если микроконтроллер у Вас ничего не делает, то проще использовать программный метод работы с датчиком, так как для этого достаточно взять готовый код из апноута an502 (см. [2]), и реализовать простейшие процедуры, управляющие логическими уровнями сигналов (SCLK, DIN, DOUT) интерфейса. Это процедуры setSCLK, getSCLK, setDIN, getDIN, getDOUT, которые должны управлять ножками микроконтроллера, а также WaitOnePulse. Тактовую частоту MCLK (32768 Гц) лучше формировать с помощью прерывания от таймера или, что еще лучше - без использования прерывания, если задействовать аппаратуру микроконтроллера (например, генератор сигнала или модуль PWM). Именно такой метод работы с датчиком я применил для микроконтроллера ATmega16 (см. [2]).

MS5541B-sch.jpg

К микроконтроллеру ATmega8 (ATmega168, ATmega16 и другие) датчик подключается чрезвычайно просто, даже если напряжение питания микроконтроллера не 3.3, а 5 вольт. На схеме показан как раз такой пример - микроконтроллер питается от 5 вольт, а уровни сигнала согласованы с помощью резисторных делителей напряжения. Питается датчик от простейшего стабилизатора на стабилитроне.

Код использует вычисления с плавающей запятой, а также функцию sprintf для преобразования данных из double в текстовый формат и вывода их в консольный порт USART, поэтому код получился довольно большой по размеру (в ATmega8 уже не влезает). Зато мы сразу получаем абсолютное давление в миллибарах и температуру в градусах Цельсия. Вот что выводит устройство в консольную программу через порт RS232 (при установленной перемычке TEST MODE):

977.0 mBar,     19.87 C
976.8 mBar,     19.87 C
977.0 mBar,     19.86 C
976.6 mBar,     19.87 C
976.8 mBar,     19.87 C
976.8 mBar,     19.86 C
976.4 mBar,     19.87 C
976.8 mBar,     19.85 C
976.6 mBar,     19.84 C
..

Одно измерение давление и температуры (вместе с чтением корректирующих коэффициентов и компенсирующими расчетами) занимает по времени около 74 мс. Для повышения точности измерений можно усреднять несколько результатов (в примере для микроконтроллера ATmega16 усредняется 5 последовательных измерений значения давления и температуры).

MS5541B_IMG_0458.JPG MS5541B_with_AVR-USB-MEGA16_IMG_0453.JPG

Байты перемычек (fuse bits) ATmega16 должны быть 0xFF (low) и 0x09 (high).

[Ссылки]

1. AN502: Software Library for MS5534 & MS5535 site:servoflo.com - апноут по примеру программной работы с датчиком исходный код для него an502src.zip. Описывается подключение датчика к компьютеру через порт LPT.
2100215ms5541b-pub.zip - работа с датчиком MS5541B на ATmega16 (исходные файлы в проекте для AVR Studio), даташит на датчик MS5541B, схема подключения, апноуты, фотографии.
3150521rs485-public.zip - работа с датчиком MS5535 на ATmega168.

 

Комментарии  

 
0 #1 Vladimir15 28.03.2011 23:58
Не разберусь, можно ли этим датчиком измерять давление на воздушном компрессоре (воздух с маслом) и как датчик крепить к трубопроводу, если можно?

microsin: про масло ничего в даташите не сказано. Вроде как датчик предназначен для измерения только давления воздуха и воды, масло наверное мембрана не выдержит. Крепится датчик на трубу с помощью уплотнительного резинового кольца.
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page