| Ваш IP: 34.204.191.0 | Online(26) - гости: 17, боты: 9 | Загрузка сервера: 0.52 ::::::::::::


Миллиомметр на АЦП 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

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

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

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

  • Устройство для получения СЕРЕБРЯНОЙ ВОДЫ

    Введение серебра в воду позволяет существенно улучшить ее свойства при длительном хранении. В качестве электродов используется серебро 875…999,9 пробы. Растворяемым электродом является анод, оптимальное межэлектродное расстояние 5-12мм, плотность тока 0,15…5,0 мА\кв.см., проводимое напряжение 3-12В. На рисунке 1 представлен базовый вариант схемы собранный на микросхеме К176ИЕ18. Задающий генератор выполнен на внутренних …Подробнее...
  • УКВ приемник на TDA7000

    УКВ приемник на TDA7000

    На рисунке показан схема УКВ (88…108 МГц) приемника на ИМС TDA7000. УКВ приемник содержит небольшое кол-во внешних элементов, прост в настройке. Выходной сигнал звуковой частоты (моно) подается на вход усилителя ЗЧ или на высокоомные наушники. Перечень элементов: С1, С9, С12, С17 —  0.1мкФ С2, С4, С5, С6, С13 —  0.01мкФ …Подробнее...
  • Инвертор 100Вт

    На рисунке показана схема инвертора с выходной мощностью 100В и выходным напряжением 220В 50 Гц. Питается инвертор от аккумуляторной батареи 12В. VR1  используется для более точной подстройки частоты 50 Гц, при большом расхождении частоты можно подобрать более точно емкость конденсатора Cx.   ИМС CD4047 используется в качестве генератора 50 Гц …Подробнее...
  • Электрические вольфрамовые лампы накаливания

    Электрические вольфрамовые лампы накаливания

    В 1879 году Т.А. Эдисон создал лампу накаливания запустив ее в серийное производство, в качестве нити накаливания он использовал угольную нить, которую он получал обугливанием длинный и тонких бамбуковых волокон. Так же он ввел откачку воздуха из баллона. В 1890 году А.Н. Лодыгин продемонстрировал лампу с нитью накала из тугоплавкого …Подробнее...
  • К140УД5А, К140УД5Б (справочные данные)

    К140УД5А, К140УД5Б (справочные данные)

    К140УД5А, К140УД5Б относят к ОУ средней точности. Электрические параметры: Uпит. ном — 2*12,0В I пот — 12мА Ku — 0,5*10³(А), 10³(Б) Uсм — 10мВ (А), 7мВ(Б) TKUсм — 35(А)мкв/Сº, 10(Б)мкв/Сº Iвх — 5*10³нА(А), 10000нА(Б) ΔIвх — 1000нА(А), 5000нА(Б) Кос.сф — 50дБ(А), 60дБ(Б) f1 — 5МГц(А), 10МГц(Б) Vu — 6В/мкс Uвых.мах …Подробнее...