Суббота, 23.11.2024, 15:36
| RSS
Поиск
Главная |
Защита, контроль, управление
Форма входа

Меню

Авторские проекты

Статьи

Raspberry Pi

Полезная информация

Обратная связь

Ссылки

Форум

Чат

Канал YouTube

Группа в Facebook


Календарь
«  Июнь 2012  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
252627282930

Наш опрос

Ссылки


Яндекс.Метрика





.
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Датчик давления MPL115A2

Датчик давления MPL115A2

Наш канал в YouTube


MPL115A2 представляет собой миниатюрный цифровой барометрический датчик давления с интерфейсом I2С. Сразу отмечу, что помимо MPL115A2 существует аналогичный датчик MPL115A1, который отличается только способом управления – для него используется интерфейс SPI, во всём остальном оба датчика абсолютно идентичны. Мы будем рассматривать вариант датчика с управлением по шине I2C - MPL115A2. Заказать этот датчик можно на сайте производителя компании Freescale в виде бесплатного образца (сэмпла).

Основные характеристики MPL115A2:

Диапазон измерения давления – от 50 кПа до 115 кПа 
Диапазон измерения температуры – от -40 ºС до 105 ºС
Точность измерения давления (-20 ºС – 85 ºС) – ±1 кПа
Время преобразования давления и температуры – не более 1 мс
Напряжение питания – от 2.375В до 5.5В
Средний ток потребления – до 6 мкА 
Максимальная частота работы I2C – 400 кГц
Размеры – 5.0х3.0х1.2 мм
Корпус – LGA8

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

Рис. 1

 

Распиновка выводов датчика показана в таблице на рис.2:

Рис. 2

Схема подключения датчика к микроконтроллеру показана на рис. 3.

Рис. 3

Из внешних элементов необходимо добавить конденсатор на 1 мкФ, подключенный ко второму выводу датчика и подтягивающие резисторы 4,7 кОм для работы шины I2C. Для экспериментов была собрана тестовая схема с микроконтроллером 16F628А и жки-индикатором WH0802 (рис. 4). К показанным на индикаторе значениям мы вернемся немного ниже.

Рис. 4

 

 

 

Адрес датчика MPL115A2 (адрес устройства) по спецификации I2C имеет значение 1100000Х. Последний бит равен 0 в режиме записи, и 1 в режиме чтения. В даташите указан 7-битный адрес (без учета последнего бита) в связи с чем, зачастую возникает путаница, какой же реальный адрес -0х60 или 0хС0? Я обычно считаю адресом устройства, работающего по шине I2C, 8-битный адрес в режиме записи – т.е. в нашем случае - 0хС0

 

Датчик MPL115A2 имеет довольно сложный алгоритм вычисления атмосферного давления. Для того, что бы получить конечное значение давления, необходимо считать с датчика восемь параметров – необработанные значения давления и температуры, а так же шесть калибровочных коэффициентов. Необработанные значения давления и температуры являются переменными величинами, а калибровочные коэффициенты являются постоянной величиной, но разной для конкретного экземпляра датчика. Адреса, по которым считываются эти параметры, приведены в таблице на рис. 5

Рис. 5

В даташите рекомендуется отдельно считывать значение давления и температуры, а затем калибровочных коэффициентов. Я же читал значения из датчика одним блоком, сделав две задержки 5 мс после считывания давления и температуры.

Может сразу возникнуть вопрос – так этим датчиком можно измерять и температуру? На самом деле здесь температура служит одним из параметров для расчета давления. Значение температуры является некалиброванным, и использовать этот датчик в качестве датчика температуры очень нежелательно.

Итак, для расчёта компенсированного (обработанного значения) давления необходимо выполнить преобразование:

Pcomp = a0 + (b1 + c11*Padc + c12*Tadc) * Padc + (b2 + c22*Tadc) * Tadc;

где:
Pcomp – компенсированное абсолютное давление;
Padc – 10-битное, необработанное значение давления;
Tadc – 10-битное, необработанное значение температуры;
a0, b1, c11, c12, b2, c22 – компенсационные коэффициенты.

Хочу сразу сказать, что все вычисления пока мы будем рассматривать с точки зрения обычной математики, а не в контексте вычислений микроконтроллером. Т.е. будем использовать и дробные, и отрицательные числа (при проведения вычислений микроконтроллером отрицательные числа представляют в виде положительных в так называемом дополнительном коде). 

Значения Padc и Tadc представляют собой 10-битные числа, которые сохранятся в двух регистрах. Старшие 8 бит хранятся в старшем регистре (МSB), а младшие два - в 2-х старших битах младшего регистра (LSB). На рис.1 в верхней строке индикатора показаны считанные и преобразованные в десятичный вид значения необработанного давления (361) и необработанные значения температуры (502)

Если со значениями Padc и Tadc всё понятно, то с компенсационными коэффициентами далеко не все так просто. Дело в том, что эти коэффициенты представляют собой числа с дробной частью и, кроме того, могут иметь отрицательное значение. Формат значений компенсационных коэффициентов приведен в таблице на рис. 6

Рис. 6

Для примера рассмотрим коэффициент а0, который является 16-ти битным числом и в десятичной системе имеет значение 15614 (рис.1). Но это не значение самого коэффициента! Его необходимо разложить в соответствии с алгоритмом даташита по таблице на рис. 6. Для этого представим это число в бинарном (двоичном) виде:

11110011111110

т.к. значение этого коэффициента должно быть 16-битным (см. рис.6), то дописываем впереди два нуля:

0011110011111110

Согласно таблице на рис.6 старший разряд этого числа Sing Bits является знаком (0-положительное значение, 1 - отрицательное). Следующие 12 бит являются значениями целой части (Integer Bits), а последние 3 бита – значениями дробной части числа (Fractional Bits). 

0(+) — 011110011111(1951) — 110(6)

В итоге получаем реальное значение коэффициента а0 в десятичной системе: +1951,6

Следующий коэффициент (b1) для нашего датчика равен 47011. Представляем его в двоичном виде: 

1011011110100011

Старший бит равен 1, следовательно, коэффициент b1 имеет отрицательное значение и представлен в дополнительном коде. Т.к. мы говорили, что будем оперировать и отрицательными числами, то преобразуем это число из дополнительного в прямой код. Для этого оставшиеся 15 бит необходимо инвертировать и добавить единицу к младшему биту:

(1)100100001011101

Согласно таблице на рис.6 коэффициент b1 имеет 2 бита целого числа и 13 бит дробного:

1(-) — 10(2) — 0100001011101(2141)

Получили реальное значение коэффициента b1 в десятичной системе: -2,2141

Аналогично преобразовав коэффициент b2, который в «сыром» виде имеет десятичное значение 49045, получим его реальное значение -1,107. Кому интересно, может выполнить данное преобразование самостоятельно на основе выше приведенных примеров.

А дальше начинается самое интересное. Следующий коэффициент с12 имеет в отличие от предыдущих размерность не 16, а 14 бит. Кроме того, в таблице на рис.6 у этого коэффициента появляется такой параметр, как «dec pt zero pad» - количество нулей после запятой, в нашем случае - 9. Следовательно, коэффициент с12 в двоичном виде имеет вид:

 

Coef c12 = (S) — 0,000000000xxxxxxxxxxxxx

«Сырой» результат коэффициента с12, считанный с датчика, у меня получился 3115 (00110000101011). Поставляем это значение вместо (S) и xxxxxxxxxxxxx.

Coef c12 = 0(+) — 0,000000000—0110000101011 .

Преобразовываем полученный результат в десятичную систему. Получаем:

Coef c12 = + 2^-11 + 2^-12 + 2^-17 + 2^-19 + 2^-21 + 2^-22 = 0,0007427

Коэффициенты с11 и с22, считанные с датчика, равны нулю. Следовательно, формулу расчёта компенсированного давления в нашем случае можно упростить:

Pcomp = a0 + (b1 + c11*Padc + c12*Tadc) * Padc + (b2 + c22*Tadc) * Tadc = a0 + (b1 + c12*Tadc) * Padc + b2 * Tadc

Подставив в эту формулу полученные значения, рассчитаем компенсированное давление:

Pcomp = a0 + (b1 + c12*Tadc) * Padc + b2 * Tadc = 1951,6 + (-2,2141 + 0,0007427 * 502) * 361 + (-1,107) * 502 = 732

Согласно документации, датчик измеряет давление от 50 до 115 кПа и полученное значение Pcomp необходимо привести к величине в кПа. Т.к. значение Pcomp является 10-битным числом, можно выполнить следующее преобразование:

РкПа = (115-50) / 1023) * Pcomp + 50 = (65 * Pcomp / 1023) + 50 = (65 * 732 / 1023) + 50 = 97 кПа

Преобразуем значения давления из кПа в мм.рт.ст:

Рмм.рт.ст = РкПа * 7,50062 = 97 * 7,50062 = 728 мм.рт.ст

Как уже упоминалось, датчик давления MPL115A2 измеряет и температуру окружающей среды. Несмотря на то, что данные показания являются некалиброванным значением, но, тем не менее, приведём формулу расчёта и температуры. В соответствии с документацией на датчик, температура 25 ºС соответствует 472 отсчетам АЦП. Каждому градусу соответствует -5.35 отсчетов АЦП. В результате получаем формулу:

t = 25 + ((Tadc - 472) / -5.35) = 25 + ((502 - 472) / -5.35) = 20 ºС

Исходники программы вычисления давления микроконтроллером на языке Си, а так же методику последовательного вычисления (Multiply Accumulates), использующего целочисленную математику, можно найти в Application Note 3785. Кроме того, для датчика MPL115A2 производителем разработаны ещё два «апноута» – AN3956 и AN3914. Первый подробно описывает работу с демонстрационной платой Demo Apex Sensor, во втором размещена подробная информация, как использовать датчик в качестве альтиметра (высотомера). Всю эту документацию, вы можете скачать по следующим ссылкам:

 

Даташит MPL115A1 

Даташит MPL115A2 

Application Note 3785 

Application Note 3914 

Application Note 3956 
 




Категория: | Просмотров: 8743 | Добавил: Admin | Теги: | Рейтинг: 5.0/2 |
Всего комментариев: 0






T2M © 2024
Сайт управляется системой uCoz