| Ваш IP: 3.236.96.157 | Online(38) - гости: 26, боты: 12 | Загрузка сервера: 1.62 ::::::::::::

Миллиомметр на АЦП MCP3421 (Arduino)

Миллиомметр выполнен на платформе Arduino с использованием 18-битного одно канального сигма-дельта АЦП MCP3421. АЦП имеет свой внутренний источник опорного напряжения и программируемый усилитель. Связь с АЦП осуществляется по интерфейсу I2C (SDA и SCL === А4 и А5).

Схема миллиомметра очень простая, помимо АЦП она содержит 4 конденсатора и одно эталонное сопротивление (манганин) через которое подается ток на измеряемое сопротивление, от точности эталонного сопротивления зависит точность прибора.

Миллиомметр имеет четыре диапазона которые позволяются измерять сопротивление от 0,0000 до 8,5000 Ом в первом диапазоне, от 8,500 до 18,000 во втором, от 18,000 до 38,000 в третьем и от 38,00 до 172,00 Ом в четвертом.

В качестве источника опорного напряжение используется напряжение 3,3 В подаваемое с платы Arduino, но все же рекомендую использовать отдельный источник опорного напряжения с выходным током не менее 50 мА.

#include <Wire.h> // SDA и SCL (А4 и А5)
#include <MCP3421.h> // https://github.com/liman324/MCP3421.git
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
  LiquidCrystal_I2C lcd(0x27,16,2);
  MCP3421 mcp;
 
 unsigned long dig,dig_sum;
 float u,r;
 const float u3300 = 3.241;  // опорное напряжение (V)
 const float  r_ogr = 100.00;// эталонное сопротивление (Om)
 const float r_0 = 0.0014;   // погрешность нуля (Om)
 int i,n=0,m;
 
void setup() {
 Serial.begin(9600);Wire.begin();
 mcp.setConfig(3,3);// 12 14 16 18 bit - 0-3 // 1x 2x 4x 8x gain - 0-3
 lcd.init();lcd.backlight();
}
 
void loop() {  
 /// авто переключение диапазонов /////////
 dig = mcp.readWire();  
 if(dig>131070&&n==0){mcp.setConfig(3,2);delay(50);n=1;}
 if(dig>131070&&n==1){mcp.setConfig(3,1);delay(50);n=2;}
 if(dig>131070&&n==2){mcp.setConfig(3,0);delay(50);n=3;}
 if(dig<65000&&n==1){mcp.setConfig(3,3);delay(50);n=0;}
 if(dig<65000&&n==2){mcp.setConfig(3,2);delay(50);n=1;}
 if(dig<65000&&n==3){mcp.setConfig(3,1);delay(50);n=2;}
 
  // калибровка диапазонов //
 dig = mcp.readWire(); 
 if(n==0){u = dig * 0.2569 /131071;}// n0 8   Om
 if(n==1){u = dig * 0.5156 /131071;}// n1 18  Om
 if(n==2){u = dig * 1.0270 /131071;}// n2 38  Om
 if(n==3){u = dig * 2.0510 /131071;}// n3 170 Om
 
 /// измерение /////////////////////////// 
 while(i<20){i++;dig = mcp.readWire();
 dig_sum = dig_sum+dig;delay(50);}
 i=0;dig=dig_sum/20;dig_sum=0;
 
 /// монитор порта ////////////////////////
 Serial.print(dig);Serial.print("  u=");Serial.print(u,6);Serial.print("  r=");
 Serial.print(((r_ogr*u)/(u3300-u))-r_0,4-n);Serial.print("  n=");Serial.println(n);
 
 switch(n){
  case 0: m=4;break;
  case 1: m=3;break;
  case 2: m=3;break;
  case 3: m=2;break;
  }
 r = ((r_ogr*u)/(u3300-u))-r_0;
 if(r>172){lcd.setCursor(0, 0);lcd.print(" R > 172.00 Om ");}
 else{lcd.setCursor(0, 0);lcd.print(" R = ");lcd.print(r,m);lcd.print(" Om   ");}
 lcd.setCursor(0, 1);lcd.print(" N ");lcd.print(n);
 if(r>172){lcd.setCursor(5, 1);lcd.print(" 0.000");lcd.print(" mA");}
 else{lcd.setCursor(5, 1);lcd.print(" ");lcd.print((u3300/(r+r_ogr))*1000);lcd.print(" mA");}
}

На дисплей LCD1602 (I2C) выводятся результаты измерения, а так же (во второй строке) номер предела и ток проходящий через измеряемое сопротивление.

Для правильной работы миллиомметра необходимо произвести настройку. Скетч содержит несколько переменных от которых зависит точность прибора.

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

const float u3300 = 3.241; // опорное напряжение (V)

const float r_ogr = 100.00;// эталонное сопротивление (Om)

const float r_0 = 0.0014; // погрешность нуля (Om)

После предварительной калибровки для повышения точности измерений Вам понадобится несколько эталонных сопротивлений или магазин сопротивлений с классом точности 0,02. Так как множитель АЦП не очень точен, необходимо подобрать поправочные коэффициенты для каждого диапазона.

if(n==0){u = dig * 0.2569 /131071;}// n0 8 Om

if(n==1){u = dig * 0.5156 /131071;}// n1 18 Om

if(n==2){u = dig * 1.0270 /131071;}// n2 38 Om

if(n==3){u = dig * 2.0510 /131071;}// n3 170 Om

Для подбора поправочного коэффициента необходимо подключить сопротивление с высокой точностью (магазин сопротивления) номиналами  8, 18, 38, 170 Ом и на каждом диапазоне установить нужный коэффициент добившись максимальной точности измерения сопротивления.

R0 = 0.0179 Ом

0.0287-0.0179 = 0.0108 Ом

0,0718-0,0179 = 0,0539 Ом

0,1210-0,0179 = 0,1031 Ом

0,5290-0,0179 = 0,5111 Ом

1,0201-0,0179 = 1,0022 Ом

5,0029-0,0179 = 4,985 Ом

10,024-0,0179 = 10,0061 Ом

Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=923#p923

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

Войти с помощью: 

Случайные статьи

  • Стабилизатор лабораторного источника питания

    Стабилизатор собран на микросхеме КР142ЕН2А и внешним регулирующим транзистором. Схема обеспечивает при входном напряжении 40В выходное регулируемое напряжение от 3 до 33В при токе нагрузки до 0,5А. Так же имеется защита от КЗ. Литература — Радиоконструктор 2000-10Подробнее...
  • ПРИСТАВКА-АВТОМАТ К ЗАРЯДНОМУ УСТРОЙСТВУ

    Дополнив   имеющееся  в  вашем  распоряжении  зарядное  устройство  для автомобильной  аккумуляторной  батареи  предлагаемым  автоматом, можете быть спокойны  за  режим  зарядки  батареи  — как только напряжение на ее выводах достигнет  (14,5+-0,2)В,  зарядка  прекратится.  При  снижении напряжения до 12,8…13 В зарядка возобновится. Приставка  может быть выполнена в виде отдельного блока либо встроена в …Подробнее...
  • АЦП-модуль ADS1115 (Arduino)

    АЦП-модуль ADS1115 (Arduino)

    АЦП-модуль ADS1115 представляет собой 16-битный  аналого-цифровой преобразователь, который имеет 4 входа для преобразования аналоговый сигнал в цифровой. АЦП-модуль ADS1115 основан на одноименном чипе и содержит все необходимые для его работы внешние компоненты. АЦП-модуль совместим с I2C шиной. Оснащен программируемым усилителем и цифровым компаратором. Выполняет преобразования со скоростью передачи данных от 8 до …Подробнее...
  • Видео-разветвитель

    Это устройство полностью исключает взаимное влияние устройств принимающих сигнал от видео-разветвителя, в добавок это уст-во можно расширить до любого числа выходов. В основе видео-разветвителя специализированная микросхема ВА7604N. Каждая микросхема содержит 2-а усилителя расчитанные на 75-и омную нагрузку. Коэффициент усиления таких усилителей 1. Номинальное входное напряжение входного и выходного видеосигнала 1В …Подробнее...
  • Автомат световых эффектов

    Автомат световых эффектов создает картину бегущего огня или бегущей тени (при переключении SA1). R1 позволяет менять частоту генератора прямоугольных импульсов (К155Ла3). Триггеры DD2 (К155ТМ2) соединенные последовательно образуют двоичный счетчик импульсов поступающих на его вход от генератора на DD1. В итоге частота на выходе первого триггера вдвое меньше, а на выходе …Подробнее...