LC metr

LC metr

Téměř stručný úvod

LC metr má dneska doma snad každej správnej bastlič. Musím se přiznat, že jsem ho dosud neměl a už mnohokrát mi jeho nedostatek vadil. Některé multimetry mají sice možnost měřit kondenzátory, ale v rozsazích, které jsem většinou nepotřeboval. Běžný multimetr, který by měřil indukčnosti, je spíš raritou. Přístroje, které by mi vyhovovaly rozsahem měřených hodnot, byly už poměrně drahé. Rozhodl jsem se tedy (jak jinak) pro stavbu vlastního. Chtěl jsem zaplnit díru v měření pasivních součástek, která vzniká, pokud máte doma běžný multimetr. Tedy měřit kapacitu kompletní škály kondenzátorů, ESR elektrolytů, indukčnosti cívek. Jako vedlejší produkt mi vznikl přístroj na měření malých odporů. Přesnost měření nebyla při konstrukci kritickým parametrem, nicméně myslím, že přístroj měří velmi přesně, aspoň se tak tváří :-)

Na Internetu najdete spoustu návodů, dnes většinou na přístroje řízené mikrokontrolérem, které zobrazují naměřené hodnoty na LCD displeji. Touto cestou jsem se vydal i já. Hledal jsem dál... Našel jsem přístroje založené na měření rezonančního kmitočtu oscilátoru a následném výpočtu měřené veličiny. Tímto způsobem lze rozumně měřit celou škálu indukčností, kapacity lze ale rozumně měřit pouze do několika málo mikrofaradů. Druhá kategorie přístrojů nabíjela kondenzátor a měřila dobu nebo rozdíl napětí v závislosti na definované druhé veličině. Takto lze naopak rozumně měřit velké kapacity. S trochou kouzlení tak změříte i ESR. Nezbylo mi, než udělat logický krok a spojit oba přístroje do jediného - vstupní obvody jsou dvoje, mikrokontrolér a LCD displej samozřejmě jeden.


Výběr mikrokontroléru

Většina návodů se pyšnila buď mikrokontrolérem PIC 16F84A, nebo výkonově podobným PICem, případně Atmelem. Bohužel tyto mikrokontroléry nutily tvůrce dělat kompromisy v programu, aby se jim vešel do paměti. Byla například použita 24-bitová aritmetika, protože 32-bitová už se tam prostě nevešla. Navíc většina těch programů byla napsaná v Assembleru. Říkám si, copak jsem kretén, abych na stará kolena psal floatovou aritmetiku v Assembleru? Za kolik to mám? Sáhl jsem tedy o řadu výš, po kontroléru 18F252, se kterým už jsem udělal pár dobrých zkušeností. Prográmek jsem napsal v Céčku. Obrovským luxusem při psaní na displej je funkce sprintf(). Kdo někdy zapisoval na displej bez ní, pochopí, o čem mluvím. Připojení LCD displeje jsem mohl díky většímu množství I/O pinů udělat plné osmibitové. To výrazně zjednodušilo jeho obsluhu. Procesor je ale využit do mrtě, na ovládání mi zbyl jeden jediný vstup na tlačítko.

Popis zapojení a principu činnosti

Přístroj se skládá z několika funkčních celků. Samozřejmě zdroj. Na desku plošného spoje je přivedeno střídavých 9 V z trafa. Toto napětí je usměrněno, vyhlazeno a stabilizováno na 5 V - nic převratného. LCD displej. Jak jsem se zmínil, data jsou mezi mikrokontrolérem a displejem přenášena osmibitově, další tři piny jsou použity pro řídící signály. Všechno je přímo propojeno. Na tišťáku je také umístěn trimr pro regulaci kontrastu. Původně jsem přístroj oživoval s displejem 2 x 24 znaků, ten se mi ale nevešel do krabičky, takže jsem se musel spokojit s menším displejem 2 x 16 znaků. No a zbývají dva vstupní obvody:

Měření indukčností a malých kapacit

Pro tyto dva rozsahy je určen obvod postavený na čtveřici CMOS hradel 4011N. To zapojení jsem okopíroval z Internetu, prakticky beze změny. Principem činnosti se tedy nebudu nijak do hloubky zabývat. Pomocí relé se přepíná mezi RC oscilátorem, který měří kapacitu a LC oscilátorem, který měří indukčnost. Do mikrokontroléru je přiveden vytvarovaný signál. Mikrokontrolér změří frekvenci a hodnotu měřené veličiny z ní vypočítá. K výpočtu jsou použity konstanty natvrdo zapsané do programu, ve kterých jsou zahrnuty hodnoty součástek v obvodu, zjištěné měřením "nulové" kapacity, respektive indukčnosti. Program umožňuje při měření nastavit "nulu" - je to hodnota, která se odčítá od naměřené hodnoty. Přístroj je možno vynulovat i s připojenou indukčností nebo kapacitou, je potom schopen zobrazovat i záporné hodnoty. To je vhodné např. pro párování součástek.

Měření velkých kapacit, ESR a malých odporů

Tuto část obvodu tvoří dva zdroje konstantního proudu - zhruba 100 mA a 100 uA, výkonový FET, který má za úkol vybíjet měřený kondenzátor a tři operační zesilovače s různými zisky - 1:1, 1:10 a 1:100, které jsou připojeny do tří analogových vstupů mikrokontroléru. Vzniká tedy celkem šest možností měření, které umožňují měřit v rovnoměrných stupních v rozsahu šesti řádů. Mikrokontrolér automaticky přepíná během měření jednotlivé kombinace, dokud nenajde vyhovující.

Při měření kapacity je nejdříve kondenzátor vybit, potom je zapnut zdroj proudu. Mikrokontrolér periodicky měří napětí na zvoleném vstupu, dokud se hodnota neodlepí od nuly. Od tohoto okamžiku se začíná měřit čas a pokračuje se v nabíjení, dokud nepřeteče časovač nebo hodnota A/D převodníku nepřekročí horní limit. Pokud jsou naměřené hodnoty rozumné, je z nich vypočítána kapacita. Pokud je některá z nich příliš malá (v okamžiku, kdy ta druhá dosáhla maxima), přístroj zvolí jiný rozsah a měření opakuje.

Při měření ESR je kondenzátor vybit a nabíjen. Při dosažení určité hodnoty je změřeno napětí, vypnut zdroj proudu a napětí znovu změřeno. Úvaha je taková, že při průchodu proudu při nabíjení bude napětí na svorkách vyšší o úbytek napětí na sériovém odporu (ESR). Pokud nenabíjíme, proud neprochází a změříme tedy napětí, na které se kondenzátor nabil. Tato metoda spolehlivě měří ESR u kondenzátorů řekněme od 100 uF. U menších kapacit přístroj ukazuje hodnoty v jednotkách ohmů, což se mi zdá příliš. Možná, že mám bug v programu...

Měření malých odporů je triviální. Prostě se měří úbytek napětí na svorkách při průchodu proudu.


Popis programového vybavení

Obyčejná zařízení tohoto druhu mívají něco, čemu se říká FIRMWARE. Nicméně ve vyšších kruzích (myšleno mezi výrobci elektroniky) se tento obyčejný pojem nepoužívá. Místo něj existují různé OSy - BIOS, IOS, JUNOS atd. Po letech bastlení a tvorby obyčejných firmwarů jsem usoudil, že nazrál čas, abych i já učinil další krok. Tak vznikl KOS, neboli - jak jinak - "Kreténský operační systém". Tolik marketingové okénko.

Po inicializační fázi, neboli BOOTu, kdy KOS nastaví procesoru všechny možné parametry pro běh, vstoupí KOS do hlavní smyčky. Klíčovou je zde proměnná mode, která určuje, co se právě provádí. Na základě její hodnoty je zavolána vždy příslušná funkce, která provede jedno kompletní měření. Ovládací prvek uživatelského rozhraní (pro ty vzadu zkráceně "tlačítko") je připojen na vstup, jehož aktivace vyvolá přerušení. Rutina obsluhující přerušení má jediný účel a to nastavit novou hodnotu proměnné mode. Po ukončení přerušení se KOS vrátí do hlavní smyčky, tedy s největší pravděpodobností dokončí právě prováděné měření. Vzhledem k tomu, že jsme mu možná zasáhli do měření času, bude pravděpodobně naměřeno tzv. hausnumero, to ale nevadí, protože v zápětí hlavní smyčka KOSu zavolá novou měřící funkci na základě nové hodnoty proměnné mode a budeme měřit něco zcela jiného.


Diagnostika

Přístroj má speciální menu, které umožňuje kontrolovat funkci jednotlivých zdrojů konstantního proudu, vybíjecího FETu a jednotlivých A/D převodníků - lépe řečeno operačních zesilovačů na analogových vstupech mikrokontroléru. Tyto funkce jem použil při cejchování přístroje - z naměřených hodnot jsem vypočítal konstanty, které jsem natvrdo zapsal do programu.


Návod k použití

Zapněte přístroj síťovým vypínačem. Krátkým stiskem ovládacího tlačítka je možno volit mezi jednotlivými rozsahy:

  • měření kapacity [pF] - [uF]
  • měření indukčnosti [uH] - [H]
  • měření kapacity [uF] - [F] + měření ESR [mOhm] - [Ohm]
  • měření odporu [mOhm] - [kOhm]

Při měření malých kapacit a indukčností přístroj na druhém řádku zobrazuje kmitočet, na kterém kmitá oscilátor. Pokud je tam nula, něco není v pořádku :-)

Dlouhým stiskem ovládacího tlačítka je možno na právě zvoleném rozsahu nastavit nulu. Při měření indukčností a odporů vstup zkratujte, při měření kondenzátorů jej nechte rozpojený. Přístroj si novou hodnotu nuly uloží do paměti. Při měření elektrolytických kondenzátorů se nastavení nuly týká pouze měření hodnoty ESR, kalibrovat měření kapacity na tomto rozsahu (v této verzi KOSu) nelze.

Pokud během zapínání přístroje podržíte stisknuté ovládací tlačítko, vstoupíte do diagnostického menu, které umožňuje kontrolovat funkce přístroje. V diagnostickém menu je možno stiskem tlačítka přepínat mezi režimy:

  • kontrola zdroje proudu 100uA
  • kontrola zdroje proudu 100mA
  • kontrola vybíjecího obvodu

Na svorky přístroje připojte ampérmetr a zkontrolujte hodnoty proudu při testu 100 mA a 100 uA. Dolní řádek zobrazuje hodnoty, které naměří jednotlivé A/D převodníky. Jejich funkci otestujete tak, že na svorky přístroje připojíte voltmetr paralelně s reostatem a budete měnit hodnotu zátěže. Posledním testem je kontrola vybíjecího obvodu - ta pracuje tak, že je zapnutý zdroj proudu a zároveň vybíjecí obvod. Na svorkách přístroje byste voltmetrem měli naměřit napětí na sepnutém vybíjecím FETu - to by mělo být nulové. Všechny tři A/D převodníky ve spodním řádku by měly zobrazovat nulu. Diagnostické menu opustíte vypnutím přístroje.


Stavba

Nepředpokládám, že by tento přístroj stavěl úplný začátečník, takže nebudu obtěžovat s popisem triviálních věcí. Jenom pár poznámek: V zapojení je použit krystal 10 MHz, procesor si hodinový kmitočet násobí na 40 MHz. Jedna instrukce trvá čtyři takty hodin, tedy 100 ns - od toho se odvíjí nastavení předděliček časovačů a výpočty časů. KOS neinicializuje hodnoty v EEPROM - při prvním zapnutí je nutné provést na všech rozsazích nastavení nuly, jinak naměříte hodnoty, ze kterých Vám budou oči přecházet.

Oživení

Po základním oživení obvodu pro měření elektrolytických kondenzátorů, když nám HW jakž takž funguje, musíme provést základní kalibraci přístroje. Ta spočívá ve změření skutečných proudů, které dávají jednotlivé zdroje konstantního proudu, a skutečných rozližení jednotlivých A/D převodníků. Ze skutečných naměřených hodnot vypočítáme konstanty, které vložíme do zdrojového kódu, projekt přeložíme a do zařízení nahrajeme KOS takto parametrizovaný pro konkrétní hardware. Konstanty, které je třeba vypočítat, najdeme na začátku souboru lc_metr.c:

    // calibration values:

    const float low_current      = 98.5;	// low current source [uA]
    const float high_current    = 91600.0;	// high current source[uA]

    // A/D converter resolutions [uV]:
    const float low_ad_res   = 51.1056511056511;
    const float mid_ad_res  = 500.616522811344;
    const float high_ad_res = 5033.93665158371;

Kalibraci provedete nejlépe následujícím způsobem: do PICu nahrajete KOS s nějakými defaultními hodnotami, a vstoupíte do diagnostického menu. Na svorky přístroje připojíme ampérmetr. V módu testu zdroje proudu 100uA změříme skutečný proud, který dává zdroj 100uA. To bude hodnota, kterou uložíme do konstanty low_current. Obdobně v módu testu zdroje proudu 100mA změříme skutečný proud, který dává zdroj 100mA, tuto hodnotu přepočteme na uA a uložíme do konstanty high_current. Tím máme vyřešenu kalibraci zdrojů proudu.

Nyní přistoupíme ke kalibraci A/D převodníků. Potřebujeme určit skutečné rozlišení jednotlivých převodníků v uV na jednotku. K tomuto účelu použijeme voltmetr a nějaký potenciometr zapojený jako reostat. Pro citlivější nastavení je lepší zvolit malou hodnotu potenciometru a k němu do série vřadit rezistor, jehož hodnotu zjistíme experimentálně (pro měření každého rozsahu A/D převodníku bude jeho hodnota jiná). V diagnostickém módu se přepneme do režimu testu zdroje 100 uA. Ve spodním řádku displeje jsou zobrazeny výsledky převodu všech tří A/D převodníků, jsou to tři čtyřmístná hexadecimální čísla.

Pokud není na svorkách přístroje nic připojeno, ukazují všechny tři A/D převodníky maximální naměřenou hodnotu (zdroj konstantního proudu dává napětí do nekonečného odporu, převodníky jsou přebuzeny). Připojíme voltmetr paralelně s reostatem. Postupně snižujeme odpor připojené zátěže, až se začne první hodnota A/D převodníku měnit. Pokusíme se nastavit co nejvyšší hodnotu, na které je vidět, že vstup není přebuzen - někde kolem 0x0300, číslo musí být nižší, než hodnota bez připojené zátěže. Toto číslo převedene do desítkové soustavy. Na připojeném voltmetru odečteme napětí na svorkách přístroje a tuto hodnotu podělíme výše získaným číslem. Dostali jsme rozlišení převodníku. Tuto hodnotu, převedenou na uV uložíme do konstanty high_ad_res.

Dále snižujeme hodnotu připojeného odporu, až začne klesat hodnota měřená dalším A/D převodníkem. Stejným způsobem, jako v předchozím případě, tentokrát získáme konstantu mid_ad_res. A při dalším snižování odporu ještě nakonec hodnotu low_ad_res.

U oscilátorů v obvodech pro měření indukčností a malých kapacit jsem se ke konstantám použitým v programu dostal výpočtem korigovaným pomocí měření součástky známé hodnoty. V programu je třeba korigovat následující hodnoty:

const float lc_Q = 2676852.091;
const float rc_Q = 318309.88614;

Výpočet naměřené hodnoty při měření malých kapacit spočívá ve vydělení konstanty rc_Q naměřeným kmitočtem a následným odečtením konstanty rc_Cp, reprezentující kapacitu, která je součástí oscilátoru. Konstantu rc_Cp je možno korigovat vynulováním přístroje dlouhým stiskem tlačítka. Nová hodnota se uloží do EEPROM. Do této konstanty je tedy zahrnuta i kapacita přívodních šnůr. Kalibraci provedeme zhruba následovně: Dlouhým stiskem tlačítka vynulujeme přístroj bez připojeného kondenzátoru. Ve spodním řádku displeje vidíme kmitočet oscilátoru, který by měl být zhruba 250 kHz. Připojíme svitkový kondenzátor o kapacitě 1uF (pokud máme možnost jej jiným přístrojem změřit přesně, tím lépe). Zobrazovaný kmitočet by měl klesnout zhruba na 300 Hz. Skutečnou hodnotu připojeného kondenzátoru vydělíme hodnotou, kterou ukázal přístroj a výsledkem vynásobíme původní hodnotu konstanty rc_Q. S takto nově získanou hodnotou rc_Q kod znovu přeložíme, procesor naprogramujeme a postup kalibrace můžeme zopakovat pro kontrolu, případně další zpřesnění.

Výpočet naměřené hodnoty při měření indukčností spočívá ve vydělení konstanty lc_Q druhou mocninou naměřeného kmitočtu a následným odečtením konstanty lc_Ls, reprezentující indukčnost, která je součástí oscilátoru. Konstantu lc_Ls je možno korigovat vynulováním přístroje dlouhým stiskem tlačítka. Nová hodnota se uloží do EEPROM. Do této konstanty je tedy zahrnuta i indukčnost přívodních šnůr. Kalibraci provedeme zhruba následovně: Dlouhým stiskem tlačítka vynulujeme přístroj se zkratovanými přívodními šnůrami. Ve spodním řádku displeje vidíme kmitočet oscilátoru, který by měl být zhruba 250 kHz. Připojíme cívku o indukčnosti jednotek až desítek H. Asi nebudeme mít takovou tlumivku, ale můžeme využít menší transformátor. Takový trasformátor bude mít indukčnost primárního vinutí několik H a můžeme ji snadno změřit. Zobrazovaný kmitočet by měl klesnout na stovky Hz. Skutečnou hodnotu připojené indukčnosti vydělíme hodnotou, kterou ukázal přístroj a výsledkem vynásobíme původní hodnotu konstanty lc_Q. S takto nově získanou hodnotou lc_Q kod znovu přeložíme, procesor naprogramujeme a postup kalibrace můžeme zopakovat pro kontrolu, případně další zpřesnění.


Na tišťáku jsou vyvedeny piny pro programování v aplikaci. Na tyto piny je ale také připojen displej. Pro úspěšné naprogramování je potřeba displej odpojit.

LC metr

V přiloženém archivu najdete schéma a návrh desky plošných spojů, projekt firmwaru vytvořený v IDE Piklab, projekt firmwaru pro IDE MPLABX a další bordel, který souvisel s vývojem přístroje.

LC metr - projekt ke stažení

P15/1, K15 - prosinec 2006, naposledy aktualizováno: září 2015