КОСМОДРОМ - Электронные компоненты для разработки и производства - Харьков - Украина


 


Как купить...     


 

 

EnglishRussianUkrainian

Обратите внимание: запущена новая версия сайта

Перейти в корзину

 

HP03SA, HP03MA - недорогие цифровые датчики атмосферного давления,
работающие по двухпроводному интерфейсу I2C.


 

HP03SA, HP03MA – миниатюрный гибридный модуль, изготавливаемого на основе пьезорезистивного датчика давления и интерфейсной микросхемы аналогово-цифровых преобразователя. Формат цифровых данных читается в виде 16-разрядного слова, соответствующего измеряемому ADC напряжению в зависимости от давления и температуры. Реальное разрешение – 15 разрядов.

HP03SA - купить

HP03MA - купить


смотри раздел -
Цифровые барометры производства HopeRF

смотри так же раздел: Датчики малых давлений Freescale Semiconductor

HP03SA и HP03MA обладают малым током потребления около 500 микроампер и при этом могут питаться напряжением от 2.2В до 3.6В.
В датчиках есть функция автоматического переключения в режим экономии энергии, т.е. спящий режим. Поэтому они идеально подходят для носимых устройств, где энергопотребление играет немаловажную роль.

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

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

встроенный датчик давления
абсолютный диапазон измеряемого давления: 300kPa…1100kPa
16-разрядный  ADC
11 поправочных коэффициентов во внутренней памяти для программной компенсации
последовательный I2C-интерфейс
один вывод тактирования 32.768kHz
одна аппаратная линия сброса
высокая экономичность
разрешение ADC: 15bit
напряжение питания: 2.2V…3.6V
ток потребления в рабочем режиме: менее 500uA
ток потребления в режиме отключения: менее 1uA
внешние компоненты не требуются
разрешение датчика: 0.1kPa
относительная точность (750kPa…1100kPa): ±1kPa
абсолютная точность (750kPa…1100kPa): ±1.5kPa
максимальная ошибка по температуре (-20°C…+60°C): ±3kPa
долговременная стабильность (12 месяцев): 2kPa
зависимость от напряжения питания (2.4V…3.6V): ±1.5kPa
температурная точность: ±0.8°C

 

HP03SA имеет текстолитовое основание (9.5×9.0×4.8mm), удобное для ручного монтажа.

HP03MA имеет компактное текстолитовое основание (6.9×6.3×3.1mm) для автоматического монтажа. Также успешно монтируется вручную.

Оба рассчитаны на температурный диапазон: -20°C…+60°C.
 
HP03SA отличается от HP03MA исполнением корпуса. Все прочие характеристики одинаковы. На практике HP03SA показывали более стабильный результат и меньший разброс параметров в отличии от миниатюрных собратьев HP03MA.

На рисунках Приведены рекомендуемые в документации схемы сопряжения датчиков и микроконтроллеров. А так же схемы их корпусов.

  

Реальная схема может быть следующая:

Она отличается от предложенной схемы отсутствием подтягивающего резистора 10 КОм. В предложенном примере используется встроенные подтягивающие резисторы микроконтроллера серии ATmega.

Пример программы для ATmega8:

 

#include <stdio.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include «i2cmaster.h»

//#define F_CPU 3686400L

// Порт XCLR Датчика
#define XCLR_DDR DDRD
#define XCLR_PORT PORTD
#define XCLR PIND0

// Порт Тактирования АЦП Датчика
#define MCLK_DDR DDRD
#define MCLK_PORT PORTD
#define MCLK PIND1

// Калибровочные коэффициенты
long int c1, c2, c3, c4, c5, c6, c7, a, b, c, d;
// Значение АЦП
long int d1, d2;
// Температура
long int t;
// Давление
long int Pressure;
//#############################################################################
// Возведение двойки в степень
//
long int pow2(uint8_t i)
{
  long int uiData;
  uiData=2;
  i=i-1;
  while(i) {
 uiData *= 2;
    i–;
  }
  return uiData;
}

#define fospEEPROM_ADR  0xA0    // Адрес EEPROM
#define fospADC_ADR     0xEE    // Адрес ADC
#define PRESSURE        0xF0
#define TEMPERATURE     0xE8
#define mm_rt_st        0.7500638    // мм. рт. ст. (@ 0 гр. C)
//#############################################################################
// Инициализация HP03
//
void HP03Init(void)
{
  // Сброс HP03
  XCLR_PORT &= ~(1<<XCLR);
  _delay_ms(200);
  XCLR_PORT |= (1<<XCLR);
  _delay_ms(200);
  XCLR_PORT &= ~(1<<XCLR);
  _delay_ms(200);
}

//#############################################################################
// Считывает два байта
//
unsigned int HP03_Get2Bytes()
{
  unsigned int HiTemp, LowTemp;
  HiTemp=i2c_readAck();
  LowTemp=i2c_readAck();
  return (((int)HiTemp)  <<  8) + LowTemp;
}

//#############################################################################
// Чтение калибровочных коэффициентов из EEPROM (HP03)
//
void HP03ReadCoeff(void)
{
  unsigned int ret;

  ret = i2c_start(fospEEPROM_ADR);    // Адрес EEPROM

  if(ret)
  {
    // датчик не обнаружен
    i2c_stop();
  } 
  else
  {
 i2c_write(0×10);                  // Адрес коэффициентов в EEPROM
    i2c_start(0xA1);
   
 c1=HP03_Get2Bytes();
 c2=HP03_Get2Bytes();
 c3=HP03_Get2Bytes();
 c4=HP03_Get2Bytes();
 c5=HP03_Get2Bytes();
 c6=HP03_Get2Bytes();
 c7=HP03_Get2Bytes();
   
    a = i2c_readAck();
    b = i2c_readAck();
 c = i2c_readAck();
    d = i2c_readNak();

    i2c_stop();
  }
}

//#############################################################################
// Чтение данных АЦП (HP03)
//
unsigned int HP03ReadValue(unsigned char n)
{
 
  unsigned int ret;
  unsigned int temp;
  temp = 0;

  ret=i2c_start(fospADC_ADR); // Адрес ADC
   
  if(ret)
  {
    // датчик не обнаружен
    i2c_stop();
  } 
  else
  {
    i2c_write(0xff);
    i2c_write(n);    // Pressure(0xF0), Temperature(0xE8)
    i2c_stop();
 
    _delay_ms(50);
 
    i2c_start(fospADC_ADR);  // Адрес ADC
    i2c_write(0xfd);
 
    i2c_rep_start(0XEF);  // Адрес ADC
   
 temp = HP03_Get2Bytes();
 
    i2c_stop();
  }

  return temp;

}

//#############################################################################
// Вычисление температуры и атмосферного давления
// с учетом калибровочных коэффициентов
//
void PressureTemperatureMeasure(void)
{
  long int  dUT;
  long int  off, sens, x;
 
 
  XCLR_PORT |= (1<<XCLR);
 
  d1 = HP03ReadValue(PRESSURE);
  d2 = HP03ReadValue(TEMPERATURE);

  XCLR_PORT &= ~(1<<XCLR);
 
  //if(d2 >= c5) { dUT = (d2-c5) – (((d2-c5)/pow2(7))*((d2-c5)/pow2(7))*a)/pow2(c); }
  //else {         dUT = (d2-c5) – (((d2-c5)/pow2(7))*((d2-c5)/pow2(7))*b)/pow2(c); }
  if(d2 >= c5) { t = a; }
  else { t = b; }
  dUT = (d2-c5) – (((d2-c5)/pow2(7))*((d2-c5)/pow2(7))*t)/pow2(c);
 

  t = (250 + ((dUT*c6)/pow2(16)) – dUT/pow2(d));///10; // Вычисляем температуру в градусах по шкале Цельсия
 
  off = (c2+(c4-1024)*dUT/pow2(14))*4;
  sens = c1+(c3*dUT)/pow2(10);
  x = (sens*(d1-7168))/pow2(14)-off;
 
  //Pressure = (x*100/pow2(5)+c7*10);
  Pressure = ((x*100/pow2(5)+c7*10)/100)*mm_rt_st;    // Вычисляем давление в миллиметрах ртутного столба
}

//=============================================================================
//#############################################################################
// Тактирование АЦП Датчика
// Тактовая частота процессора 3.6864 МГц
//
ISR(TIMER0_OVF_vect) {
  if ((MCLK_PORT & (1<<MCLK)) == 0) {
    MCLK_PORT |= (1<<MCLK);
  }
  else {
 MCLK_PORT &= ~(1<<MCLK);
  }
}
//#############################################################################
//#############################################################################
int main(void){
  
  // Настраиваем порт для Сброса и Синхронизации датчика
  XCLR_DDR |= (1<<XCLR);
  MCLK_DDR |= (1<<MCLK);

  // Настраиваем таймер для тактирования АЦП
  TCCR0 = (1<<CS00);

  // Разрешаем прерывания
  TIMSK = (1<<TOIE0);
    
  // Запускаем таймера
  TCNT0 = 0;  
 
  sei();

  i2c_init();
 
  // TWI PULL UP Включаем внутренние подтягивающие резисторы, поэтому наружные резисторы можно не устанавливать.
  PORTC |= ((1<<PINC4) | (1<<PINC5));
 
  HP03Init();
  HP03ReadCoeff();
 

  while(1) {
      PressureTemperatureMeasure();
   // Выводим переменные
   // t – температура
   // Pressure – давление
  }

}

 

Скачать пример для HP03

P.S.
В примере использована частота кварца 3.6864 МГц. Это абсолютно НЕ принципиально. Будет работать и от внутреннего RC-генератора. Хотя в документации указано, что АЦП датчика необходимо тактировать частотой 32768 Гц, это не обязательное условие. На практике АЦП датчика можно тактировать меньшей частотой. Я снижал до 15000  Гц, при этом работоспособность сохранялась.

 
 


Поставляемые компоненты











^ Наверх

Электронные компоненты для разработки и производства. Харьков, Украина

  Украинский хостинг - UNIX хостинг & ASP хостинг

радиошоп, radioshop, радио, радиодетали, микросхемы, интернет, завод, комплектующие, компоненты, микросхемы жки индикаторы светодиоды семисегментные датчики влажности преобразователи источники питания тиристор симистор драйвер транзистор, диод, книга, приложение, аудио, видео, аппаратура, ремонт, антенны, почта, заказ, магазин, интернет - магазин, товары-почтой, почтовые услуги, товары, почтой, товары почтой, каталог, магазин, Internet shop, база данных, инструменты, компоненты, украина, харьков, фирма Космодром kosmodrom поставщики электронных компонентов дюралайт edison opto светодиодное освещение Интернет-магазин радиодеталей г.Харьков CREE ATMEL ANALOG DEVICES АЦП ЦАП