| Ваш IP: 3.238.184.78 | Online(29) - гости: 12, боты: 16 | Загрузка сервера: 1.29 ::::::::::::


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(11,OUTPUT);digitalWrite(11,HIGH);    
  time0=micros();while(analogRead(A0)<644){time2=micros()-time0;if(time2>=10000000){break;}}time1=micros()-time0; 
  while(analogRead(A0)>0){pinMode(11,OUTPUT);digitalWrite(11,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

Комментарии

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

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

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

  • Электронный выключатель по хлопку

    Предлагаемое уст-во выключает освещение при одном хлопке, а включает при 5-и хлопках в течении 10 с. Входное устройство — конденсаторный микрофон который преобразует хлопки в эклектический сигнал, который усиливается каскадом на Т1. Этот усиленный сигнал запускает таймер 555, сигнал с выхода 3 которого является счетным для декадного счетчика IC2. Выход …Подробнее...
  • Радиопередатчик с АМ в диапазоне 27…30МГц

    Основное достоинство передатчика в том что он питается от сети 220В и в качестве антенны использует провода сети. Приемник же принимает сигнал либо от антенны или через специальный сетевой адаптер. Задающий генератор собран на VT2. Для питания микрофона применен параметрический стабилизатор на R1VD1. VT1 — унч, сигнал которого модулирует по …Подробнее...
  • УНЧ на TDA1521

    УНЧ на TDA1521

    Напряжение питания ±7,5…21В Максимальный ток нагрузки 2,2А Выходная мощность при Uп=12В Rн=8Ом: КНИ = 0,5% — 6Вт КНИ = 10% — 8Вт Ток покоя 70мАПодробнее...
  • Приемник прямого усиления 2-V-1 на трех транзисторах

    Приемник предназначен для приема СВ ДВ диапазона. Источник питания — 3 элемента по 1,5В, ток потребления не превышает 3 мА. Контур магнитной антенны состоит из L1 L2 C1. при приеме ДВ катушки включены последовательно, а при приеме СВ L1 замыкается. С катушки L3 сигнал снимается и поступает на усилитель РЧ …Подробнее...
  • Многоуровневый индикатор воды

    Многоуровневый индикатор воды

    На рисунке показана схема простого многоуровневого индикатора воды. Индикатор имеет семь градаций. В схеме использована всего одна микросхема ULN2004 и несколько внешних элементов. В качестве зондов можно использовать медную или алюминиевую проволоку. Провод к которому подключен зонд должен быть экранированным. Используйте светодиоды разного цвета, для удобства восприятия уровня воды в емкости. …Подробнее...