1

Тема: L - metr 1uH...10mH

http://forum.rcl-radio.ru/uploads/images/2019/09/b55b7b91578a62d0fff78f0b1ac39e57.gif

http://forum.rcl-radio.ru/uploads/images/2019/09/1a02f158331e74962cf3894f648eda71.gif

Данный контент доступен только зарегистрированным пользователям.

Основная статья - http://rcl-radio.ru/?p=66450

Измерение индуктивности катушек от единиц мкГн до 10 мГн (и более - измерения не проводились)
Калибровка - замкнуть вход прибора, нажать кнопку уст.0. (сохр. в EEPROM)

L - метр

#include <FreqCount.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 7, 2, 3, 4, 6);// RS,E,D4,D5,D6,D7
#include <EEPROMex.h>
// вход частотомера 5 
unsigned long f;
const float c = 1000.0*pow(10,-12);
float l_pop=0.00;
float l;
int l_int;


void setup() {Serial.begin(9600);
  lcd.begin(16, 2);// LCD 16X2
  FreqCount.begin(1000);
  pinMode(13,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()){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);
  }
  l = float(1000000/(4*PI*PI*f*f*c))-l_pop;
//  Serial.println(l_pop,2);
  Serial.println(l_int);
  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       ");}  
}

L/C метр

#include <FreqCount.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 7, 2, 3, 4, 6);// RS,E,D4,D5,D6,D7
#include <EEPROMex.h>
// вход частотомера 5 
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;}

Третий вариант LC метра (измерение емкости электролитических конденсаторов)

http://forum.rcl-radio.ru/uploads/images/2019/09/abe938cde7e8d4d53c55d8f6445afd15.gif

#include <FreqCount.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 7, 2, 3, 4, 6);// RS,E,D4,D5,D6,D7
#include <EEPROMex.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

2 (2021-11-30 15:09:04 отредактировано etkbis)

Re: L - metr 1uH...10mH

Собрал я этот девайс. В коде допущена ошибка. Неправильно указан порт для измерения ёмкости конденсатора, в схеме он D9. В программе обращение прописано к D11. Еще было не плохо добавить в часть измерения ёмкости электролитов, перед выводом на экран, произвести пять измерений, потом усреднить значение и только после этого вывести на экран. На время измерения очистить экран и вывести надпись "wait..."

3

Re: L - metr 1uH...10mH

Спасибо что заметили ошибку, поправил скетч (поменял D11 на D9).

Еще было не плохо добавить в часть измерения ёмкости электролитов, перед выводом на экран, произвести пять измерений, потом усреднить значение и только после этого вывести на экран. На время измерения очистить экран и вывести надпись "wait..."

К сожалению какие то правки в код я не смогу внести, проект старый, был выполнен на макетной плате которая в последствии была разобрана.