| Ваш IP: 3.91.92.194 | Online(49) - гости: 20, боты: 29 | Загрузка сервера: 1.49 ::::::::::::

L/C метр (Arduino)

На платформе Arduino можно собрать простой измеритель емкости и индуктивности. Прибор позволяет измерять индуктивность катушек от единиц мкГн до десятков мГн и емкость конденсаторов от десятков пФ до 0,5 мкФ с достаточно большой точностью. Схема собрана на компараторе LM311 и нескольких пассивных элементах, на плате Arduino собран частотомер (до 6,5 МГц).

Измерение емкости и индуктивности происходит достаточно просто, так как L/C элементы представляют собой колебательный контур, то компаратор совместно с колебательным контуром будет генерировать частоту, а частотомер на Arduino произведет пересчет частоты в значения индуктивности или емкости. В уст-ве две кнопки управления, первая переключение режимов измерения L/C, вторая калибровка нуля. Из схемы видно, что в уст-ве уже имеется индуктивность и емкость, индуктивность необходима для измерения емкости, а так же для измерения малых величин индуктивности. Емкость нужна для измерения индуктивности, при этом индуктивность встроенная в прибор может иметь большой разбег в номинале, а конденсатор должен быть точным, от него зависит базовая погрешность прибора. При первоначальной настройке прибора необходимо закоротить контакты «⊥» и «L», нажать на кнопку калибровки нуля, при этом произойдет измерение индуктивности встроенная в прибор, значение индуктивности будет сохранено в энергонезависимой памяти. Далее можно подключить любую катушку или конденсатор выбрать нужный режим (L/C) и провести измерение. Для измерения емкости необходимо нажать на кнопку L/C, закоротить контакты «⊥» и «L», а  емкость подключить к контактам «⊥ или L» и «C».

При измерении индуктивности или емкости значения индуктивности или емкости внутренних элементов (L1 C1), будут автоматически вычтены из конечного результата. Полученные значения выводятся на LCD индикатор 1602 на первую строку, а во второй строке выводится резонансная частота.

#include <FreqCount.h> // freqcount.zip
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 7, 2, 3, 4, 6);// RS,E,D4,D5,D6,D7
#include <EEPROM.h>
unsigned long f;
const float c = 1000.0*pow(10,-12);
float l_pop=0.00;
float l,c_iz;
int l_int;
byte lc,w;
 
 
void setup() {Serial.begin(9600);
  lcd.begin(16, 2);// LCD 16X2
  FreqCount.begin(1000);
  pinMode(13,INPUT);pinMode(12,INPUT);
  l_pop = float(EEPROM.read(0)*256 + EEPROM.read(1))/100; 
  Serial.println(float(EEPROM.read(0)*256 + EEPROM.read(1))/100);
}
 
void loop() {
    lcd.setCursor(0,1);lcd.print("F = ");
  if(FreqCount.available()&&w==0){f = FreqCount.read();lcd.print(f);lcd.print(" Hz      ");}
  if(digitalRead(13)==HIGH){
   l_pop = float(1000000/(4*PI*PI*f*f*c));lcd.clear();lcd.setCursor(0,0);lcd.print(" calibration  0 ");
   l_int=round(l_pop*100);EEPROM.update(0,highByte(l_int)); EEPROM.update(1,lowByte(l_int));delay(1000);
  }
  if(digitalRead(12)==HIGH&&lc==0){lc=1;delay(200);w=1;} if(digitalRead(12)==HIGH&&lc==1){lc=0;delay(200);w=1;}
  if(lc==0){
  l = float(1000000/(4*PI*PI*f*f*c))-l_pop;
  lcd.setCursor(0,0);lcd.print("L = ");
  if(l<=1000){lcd.print(l,1);lcd.print(" uH       ");}
  if(l>1000){lcd.print(l/1000,3);lcd.print(" mH       ");}}
 
    if(lc==1){
c_iz=float(1000000000000/(4*PI*PI*f*f*l_pop*pow(10,-6))-c*pow(10,12));
  lcd.setCursor(0,0);lcd.print("C = ");
  if(c_iz<=1000){lcd.print(c_iz,1);lcd.print(" pF       ");}
  if(c_iz>1000){lcd.print(c_iz/1000,2);lcd.print(" nF       ");}}
w=0;}

В скетче необходимо указать точную емкость эталонного конденсатора:

const float c = 1000.0*pow(10,-12); // == 1000 пФ

 

Конденсатор 0,1 мкФ

Конденсатор 82 пФ

Эталонный конденсатор

Так прибор способен проводить измерения емкости только до 0,5 мкФ, было принято решение немного доработать уст-во. Добавлена еще одна клемма для подключения электролитических конденсаторов емкостью от 0,1 до 10000 мкФ и пара резисторов.

Процесс измерения емкости электролитических конденсаторов достаточно прост, через резистор номиналом 1 кОм подается напряжение 5 В на конденсатор, одновременно аналоговый вход микроконтроллера производит измерение напряжения подаваемое на конденсатор, как только напряжение достигнет 63% от 5 В, микроконтроллер подсчитает время заряда и пересчитает его по формуле: T = RC. Как и в первых двух режимах измерения, можно воспользоваться кнопкой калибровки нуля, для более точного измерения емкости конденсаторов небольшого номинала.

#include <FreqCount.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 7, 2, 3, 4, 6);// RS,E,D4,D5,D6,D7
#include <EEPROM.h>
 
unsigned long f,time0,time1,time2;
const float c = 1000.0*pow(10,-12);
float l_pop=0.00;
float l,c_iz,c_uf,null0;
int l_int;
byte lc,w;
 
 
void setup() {Serial.begin(9600);lcd.begin(16, 2);// LCD 16X2
  FreqCount.begin(1000);// 1000 мс - время измерения частотомера
  pinMode(13,INPUT);pinMode(12,INPUT);pinMode(A0,INPUT);
  l_pop = float(EEPROM.read(0)*256 + EEPROM.read(1))/100; // eeeprom
}
 
void loop() {
  ///////////////////// F ///////////////////////////////////////////////////
  if(lc<2){lcd.setCursor(0,1);lcd.print("F = ");
  if(FreqCount.available()&&w==0){f = FreqCount.read();lcd.print(f);lcd.print(" Hz      ");}}
  //////////////////// calib 0 //////////////////////////////////////////////
  if(digitalRead(13)==HIGH&&lc<2){
   l_pop = float(1000000/(4*PI*PI*f*f*c));lcd.clear();lcd.setCursor(0,0);lcd.print(" calibration  0 ");
   l_int=round(l_pop*100);EEPROM.update(0,highByte(l_int)); EEPROM.update(1,lowByte(l_int));delay(1000);}
  ///////////////////////// button L/C/Cuf ////////////////////////////////////// 
  if(digitalRead(12)==HIGH){lc++;lcd.clear();w=1;delay(200);if(lc>2){lc=0;}}
  /////////////////// L /////////////////////////////////////////////////////
  if(lc==0){
  l = float(1000000/(4*PI*PI*f*f*c))-l_pop;
  lcd.setCursor(0,0);lcd.print("L = ");
  if(l<=1000){lcd.print(l,1);lcd.print(" uH       ");}
  if(l>1000){lcd.print(l/1000,3);lcd.print(" mH       ");}}
  ////////////////// C pF nF ////////////////////////////////////////////////
    if(lc==1){
c_iz=float(1000000000000/(4*PI*PI*f*f*l_pop*pow(10,-6))-c*pow(10,12));
  lcd.setCursor(0,0);lcd.print("C = ");
  if(c_iz<=1000){lcd.print(c_iz,1);lcd.print(" pF       ");}
  if(c_iz>1000){lcd.print(c_iz/1000,3);lcd.print(" nF       ");}}
  //////////////// C uF /////////////////////////////////////////////////////
      if(lc==2){
    lcd.setCursor(15,0); lcd.print("*");
    pinMode(9,OUTPUT);digitalWrite(9,HIGH);    
  time0=micros();while(analogRead(A0)<644){time2=micros()-time0;if(time2>=10000000){break;}}time1=micros()-time0; 
  while(analogRead(A0)>0){pinMode(9,OUTPUT);digitalWrite(9,LOW);}
  lcd.setCursor(0,0);c_uf=time1;c_uf=c_uf/1000-null0;c_uf=abs(c_uf);
 
   if(time1>=10000000){lcd.setCursor(1,0);lcd.print(" TEST uF   ");}
  else{lcd.print(" C = ");lcd.print(c_uf);lcd.print(" uF       ");}
  if(digitalRead(13)==HIGH){null0=c_uf;lcd.clear();lcd.setCursor(0,0);lcd.print(" calibration  0 ");delay(1000);}
  delay(100);}w=0;}//loop

Форум — http://forum.rcl-radio.ru/viewtopic.php?id=61

Комментарии

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

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

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

  • Параллельное и последовательное соединение резисторов, конденсаторов и катушек индуктивности

    Параллельное и последовательное соединение резисторов, конденсаторов и катушек индуктивности

    Резисторы Последовательное соединение резисторов   Последовательное соединение резисторов это такое соединение когда резисторы подключаются последовательно друг за другом. При этом через все резисторы будет протекать одинаковый ток. Для расчета общего сопротивления всех последовательно соединенных резисторов используется формула: Rобщ = R1 + R2 + R3 + … + Rn. Параллельное соединение …Подробнее...
  • Расчёт стабилизатора напряжения (источника опорного напряжения)

    Расчёт стабилизатора напряжения (источника опорного напряжения)

    Для расчёта стабилизатора, как правило, используются только два  параметра — Uст (напряжение стабилизации) , Iст (ток стабилизации), при условии что ток нагрузки равен или меньше тока стабилизации. Для простого расчета стабилизатора на примере будем использовать следующие параметры: Входное напряжение 10 В Выходное напряжение 6,8 В Ток нагрузки 10 мА Из …Подробнее...
  • Простой стрелочный частотомер

    Частотомер имеет диапазон измеряемых частот от 0-100Гц до 100кГц. Схема весьма проста и не содержит дорогостоящих элементов. Чувствительность частотомера 100мВ. В качестве индикатора используется миллиамперметр 0-100мкА, частотомер имеет 4-е диапазона 100Гц, 1Кгц, 10кГц, 100кГц.  В частотомере использованы две микросхемы — ОУ  CA3130 и таймер LM555. Оу имеет высокое входное сопротивление, тем …Подробнее...
  • Простой УКВ-приемник

    УКВ-приемник работает в диапазоне 64-108МГц. Схема приемника основана на 2-х микросхемах: К174ХА34 и ВА5386, дополнительно в схеме присутствуют 17 конденсаторов и всего 2-а резистора. Колебательный контур один, гетеродинный. На А1 выполнен супергетеродинный УКВ-ЧМ без УНЧ. Сигнал от антенны поступает через С1 на вход ПЧ микросхемы А1(вывод12). Настройка на станцию производится …Подробнее...
  • Регулятор громкости и  тембра на PT2319 (Arduino)

    Регулятор громкости и тембра на PT2319 (Arduino)

    ИМС PT2319 представляет собой аудиопроцессор специально разработанный для регулирования параметров аудиосигнала с минимальными искажениями. Аудиопроцессор включает в себя регулятор громкости, тембра, коммутатор входов и предусилители входа и выхода. Более подробно об аудиопроцессоре можно узнать из статьи Аудиопроцессор PT2319 (Arduino). Регулятор громкости и тембра построен на базе Arduino Nano. Основные параметры …Подробнее...