Amicus18

Цифровой барометр

Цифровой барометр предназначен для измерения атмосферного давления и вывода результатов в килопаскалях и миллиметрах ртутного столба. Основу барометра составляет плата Amicus18, в качестве датчика используется MPL115A2.

Датчик атмосферного давления MPL115 позволяет измерять атмосферное давление в диапазоне от 50кПа до 115кПа с точностью 1кПа. Для повышения точности и стабильности показаний датчик оснащен термометром. В датчике не реализован механизм вычисления давления, требующий некоторых вычислительных мощностей. Пользователю предлагается самостоятельно реализовать этот механизм. Обмен с микроконтроллером производится по шине I2C, что позволяет использовать стандартные функции обмена.      

Принципиальная схема барометра практически не содержит дополнительных элементов. Для отображения показаний применяется двухстрочный ЖКИ-индикатор. Датчик смонтирован на отдельной печатной плате, что позволяет выполнить наиболее правильную его установку, согласно требованиям документации.

Схема цифрового барометра

 Принципиальная схема цифрового барометра

Программное обеспечение написано на «родном» для Amicus18 языке ProtonBASIC. Алгоритм обработки является стандартным, при этом производится непосредственная работа с числами с плавающей точкой. Такой подход, конечно, потребляет больше памяти программ, но более прост в реализации.  Для преобразования давления, изначально читаются коэффициенты датчика и приводятся в форму с плавающей запятой. Далее, для обеспечения стабильности показаний применена фильтрация кода АЦП по давлению и температуре. В качестве алгоритма выбрано простое усреднение по 16 значениям. Работа с дисплеем и функции реализованы с использованием стандартных процедур ProtonBASIC. Результирующий код имеет объем 3.5кБ.  

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

Показания барометра

  

Программа барометра

 ' Digital barometr MPL115

    LCD_DTPin = PORTB.4         ' LCD's Data lines (D4 to D7)

    LCD_ENPin = PORTB.3         ' LCD's EN line

    LCD_RSPin = PORTB.2         ' LCD's RS line

    LCD_Interface = 4           ' 4-bit interface to LCD

    LCD_Lines = 2               ' LCD contains 2 lines

    LCD_Type = Alphanumeric     ' LCD type is alphanumeric

    Dim a0  As Word             ' Коэффициент a0

    Dim b1  As Word             ' Коэффициент b1

    Dim b2  As Word             ' Коэффициент b2

    Dim c12 As Word             ' Коэффициент c12

    Dim Padc  As Word           ' Код давления

    Dim Tadc  As Word           ' Код температуры

    Dim Padc1  As Word          ' Код давления для фильтрации

    Dim Tadc1  As Word          ' Код давления для фильтрации

    Dim CN As Byte              ' Счетчик фильтра

    Dim a0f As Float            ' Коэффициент a0 в формате с плав.точкой

    Dim b1f As Float            ' Коэффициент b1 в формате с плав.точкой

    Dim b2f As Float            ' Коэффициент b2 в формате с плав.точкой

    Dim c12f As Float           ' Коэффициент c12 в формате с плав.точкой

    Dim pComp As Float          ' Компенсированное давление

    Dim P As Float              ' Итоговое давление в кПа

    Dim Pmmd As Word            ' Итоговое давление в мм.рт.ст

'*****************************************************************************

    DelayMS 100                 ' Задержка инициализации LCD

    Cls                         ' Очистка экрана

    Print "DigitalBarometer"    ' Название проекта

    'Установки I2C

    I2C_Slow_Bus On             ' Медленный режим для кварца > 4МГц

    I2C_Bus_SCL Off    

    Symbol Control = $C0        ' Адрес микросхемы

    Symbol SDA = PORTC.1        ' Линия SDA подключена к PORTC.0

    Symbol SCL = PORTC.0        ' Линия SCL подключена к PORTC.0   

Start:                         ' Начало программы

    DelayMS 100                ' Задержка для включения индикатора

    I2cIn SDA, SCL, $C0, $04 ,[a0,b1,b2,c12] 'Чтение коэффициентов по давлению

      a0f=0

      b1f=0

      b2f=0

      c12f=0

      ' Преобразование коэффициентов в формат с плавающей точкой

      If GetBit a0,15 > 0  Then

       a0f = (a0 - 65536)/8 

       Else

        a0f= a0/8

      EndIf     

      If GetBit b1,15 > 0 Then

      b1f=(b1 - 65536)/8192

      Else

      b1f= b1/8192

      EndIf     

      If GetBit b2,15 > 0 Then

      b2f=(b2 - 65536)/16384

      Else

      b2f= b2/16384

      EndIf     

      If GetBit c12,15 > 0 Then

      c12f=(c12 - 65536)/16777216

      Else

       c12f= c12/16777216

      EndIf

      CN=0

         

    ' Основной цикл 

    While 1=1

    I2cOut SDA,SCL, Control,$12,[$00]  ' Команда начала измерения давления  

    DelayMS 200 ' Задержка      

    I2cIn SDA, SCL, $C0, $00 ,[Padc,Tadc] ' Чтение значения давления и температуры

      Tadc=Tadc >>6      ' Удаление незначащих нулей температуры

      Padc=Padc >>6      ' Удаление незначащих нулей давления

      Padc1=Padc1+Padc

      Tadc1=Tadc1+Tadc

      CN=cn+1

      If CN=16 Then

        Tadc=Tadc1 >> 4  ' Фильтрация температуры

        Padc=Padc1 >> 4  ' Фильтрация давления

        ' Преобразование давления

        pComp = c12f*Tadc + b1f

        pComp = pComp*Padc + a0f

        pComp= pComp + (b2f*Tadc)

        P=pComp * (65/1023)

        P=P + 49.73

        Pmmd=P *7.50  ' Перевод в мм ртутного столба           

        Print At 2,1, Dec2 P,"kPa ",Dec Pmmd, "mm  "' Отображение давления  

        CN=0  

        Padc1=0

        Tadc1=0          

      EndIf                         

    Wend  

 

You have no rights to post comments