Тема: L - metr 1uH...10mH
Данный контент доступен только зарегистрированным пользователям.
Основная статья - 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 метра (измерение емкости электролитических конденсаторов)
#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