Как подключить аналоговый датчик MPX4250 к мк AVR?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
mig192
Родился
Сообщения: 6
Зарегистрирован: Пт дек 09, 2011 07:09:47

Как подключить аналоговый датчик MPX4250 к мк AVR?

Сообщение mig192 »

Приветствую Участников Форума!

Суть вопроса:

Хочу подключить ко встроенному 10-ти разрядному АЦП микроконтроллера AVR датчик MPX4250 (даташит прикреплен ниже)но до этого вообще не работал ни с АЦП ни с датчиками

Прошу вас разъяснить, как лучше подключить этот датчик схемно (нужны ли фильтры и тд и тп), и как потом считывать и преобразовывать значения c АЦП, учитывая что выходное напряжение у него от 0.2 В до 4.7 В? т.е нулевому значению давления соответсвует 0.2 В напряжения на выходе датчика?
Вложения
MPX4250.pdf
ДАТАШИТ
(146.54 КБ) 551 скачивание
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Как подключить аналоговый датчик MPX4250 к мк AVR?

Сообщение Engineer_Keen »

Учитывая выходной диапазон датчика, его в принципе можно подключать прямо ко входу АЦП. Необходимость фильтров зависит от условий работы схемы и необходимой точности. У меня работало без фильтров (MPX550, MPX6300 и 6400), но мне и точность была не сильно важна. Ну как считывать это понятно, просто определяем нужную частоту, выставляем прескалер, выравнивание, канал АЦП, читаем напряжение, переводим в давление вот и все.
Реклама
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Как подключить аналоговый датчик MPX4250 к мк AVR?

Сообщение Леонид Иванович »

Подключается он очень просто - выход датчика ко входу АЦП. Ну можно, если хотите, поставить фильтрующую RC-цепочку, скажем, 10 кОм и 10 нФ. Датчик ратиометрический, поэтому питать его нужно от того же источника, что питает контроллер (AVCC), а для АЦП выбрать в качестве опорного AVCC.

Вот мой код для похожего датчика:

Код: Выделить всё

//----------------------------------------------------------------------------

//Модуль обслуживания датчика давления MPXH6400A

//----------------------------------------------------------------------------

#include "Main.h"
#include "MPXH6400A.h"

//------------------------------- Константы: ---------------------------------

#define ADC_RES  1023L //количество квантов ADC
#define N_FIR     100  //количество точек цифрового фильтра
#define K_MUL      4130L //получаем из формулы в datasheet
#define S_ADD      35 //получаем из формулы в datasheet

//------------------------------- Переменные: --------------------------------

static long AdcCode; //суммарный код ADC
static int FirPnt;   //счетчик точек цифрового фильтра
static int Code;     //код давления

//----------------------- Инициализация модуля АЦП: --------------------------

void MPX_Init(void)
{
  ACSR = (1 << ACD);      //запрещение аналогового компаратора      
  ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1);//разрешение ADC, CK/64:
  ADMUX = (1 << REFS0) | MUX_MPX; //REF = AVCC, выбор входа
  AdcCode = 0;          //обнуление суммарного кода ADC
  Code = 0;             //обнуление измеренного значения
  FirPnt = N_FIR;       //загрузка счетчика точек цифрового фильтра
  ADCSRA |= (1<<ADSC);  //запуск ADC
}

//------------------------- Обработка данных ADC: ----------------------------

void MPX_Exe(bool t)
{
  if(t)
  {
    if(FirPnt)
    {
      int Code = ADC;   //чтение ADC
      AdcCode += Code;  //суммирование отсчетов
      FirPnt--;         //следующая точка
    }
    else
    {
      Code = AdcCode * K_MUL / (ADC_RES * N_FIR) + S_ADD; //вычисление давления (x0.1 кПа)
      AdcCode = 0;      //обнуление суммарного кода ADC
      FirPnt = N_FIR;   //загрузка счетчика точек цифрового фильтра
    }
    ADCSRA |= (1<<ADSC); //запуск ADC
  }
}

//------------------------ Чтение давления (x0.1 кПа): ----------------------------

int MPX_GetP(void)
{
  return(Code);
}

//----------------------------------------------------------------------------
mig192
Родился
Сообщения: 6
Зарегистрирован: Пт дек 09, 2011 07:09:47

Re: Как подключить аналоговый датчик MPX4250 к мк AVR?

Сообщение mig192 »

Engineer_Keen писал(а):Ну как считывать это понятно, просто определяем нужную частоту, выставляем прескалер, выравнивание, канал АЦП, читаем напряжение, переводим в давление вот и все.
Спасибо вам за информацию

К сожалению не до конца понятно) с частотой и настройками АЦП это разберусь, а вот как перевести полученный результат в давление, по каким формулам? И еще
вот допустим у меня датчик меряет давление 0- 250 кПа, АЦП микроконтроллера 10-битный, то получается с какой точностью я могу измерить давление?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Как подключить аналоговый датчик MPX4250 к мк AVR?

Сообщение Леонид Иванович »

mig192 писал(а):как перевести полученный результат в давление, по каким формулам?
Формула в datasheet, стр. 5, в самом верху. Выражаете из нее P и масштабируете всё для целочисленных вычислений. А если процессорного времени не жалко, можно посчитать и с плавающей запятой, как есть.
mig192 писал(а):у меня датчик меряет давление 0- 250 кПа, АЦП микроконтроллера 10-битный, то получается с какой точностью я могу измерить давление?
Точность - вопрос скользкий. Нужно смотреть datasheet. А вот разрешение будет примерно 0.25 кПа.
Реклама
mig192
Родился
Сообщения: 6
Зарегистрирован: Пт дек 09, 2011 07:09:47

Re: Как подключить аналоговый датчик MPX4250 к мк AVR?

Сообщение mig192 »

Леонид Иванович,

Выражаю вам свою благодарность! Разъяснили!)) Теперь все ясно :idea: , будем работать)
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»