sunnuntai 3. joulukuuta 2017

LC-MITTARI

Kuva 1.
Tämä ei ole mikään tarkkuusmittalaite. Pyrkimyksenä onkin hiukan valottaa joitakin elektroniikan perusasioita. Mittausperiaate tässä on se, että sarjaan kytketyn sekä reaktanssin (kondensaattori tai kela) että ohmisen vastuksen yli oleva jännitehäviö on yhtä suuri.

Kuvassa 1 kytkentä on kondensaattorin osalta.

Sinijännite syötetään kondensaattorin napaan (U1) ja 10-kierrospotentiometrillä säädetään vastusarvo (R) sellaiseksi, että jännite (U2) säätövastuksen navassa on puolet syöttöjännitteestä. Jännitteitä mitataan Arduinon analogiatuloilla ja vertaillaan ohjelmallisesti. Seuraavassa kuvassa on laskentakaavat kondensaattorin ja kelan ”vastusten” riippuvuudelle taajuudesta. Niistä on helppo havaita, että kondensaattorin ”vastus” pienenee taajuuden kasvaessa, ja kelan vastaavasti kasvaa.

Kuva 2. Laskentakaavat
Kuva 3.
Vastuksessa jännite ja virta ovat samanvaiheisia, mutta kapasitanssissa virta on 90 astetta jännitettä edellä. (Vastaavasti induktanssissa virta on 90 astetta jännitettä jäljessä.) Kuva 2 havainnollistaa tilannetta kondensaattorin osalta.
Kuvassa suurempi signaali on U1 ja pienempi U2. Näytöltä on helppo havaita, miten vastuksen navoissa oleva jännite on puolet syöttöjännitteestä ja noin 45 astetta syöttöjännitettä edellä. Virta molempien läpi on samanvaiheinen, joten muutos näkyy jännitteessä.

Arduinolla, kuten muutamassa edellisessä päivityksessä on toteutettu, on varsin helppoa muodostaa suorakulmasignaalia aika korkeillekin taajuuksille. Sen sijaan siniaallon synnyttäminen on melko mahdotonta. Tämän mittausperiaatteen käyttäminen suorakaideaallolla on mahdotonta, sillä signaalin sisältämät harmoniset taajuudet sotkevat täysin jännitevertailuna toteutetun mittausperiaatteen.

Kuva 4. Testielektroniikan kytkentä.
Yllä olevassa kaaviossa on Arduinon lisäksi viisi (5) toiminnallista osaa. 1). Kondensaattorien 0,32 uF ja 1 kohm vastusten muodostamat (vasemmalla ylhäällä) vaiheensiirtopiirit. Niitä on kolme (3) kappaletta, ja tällä pyritään 180 asteen vaihesiirtoon. Kukin sarjapiiri kääntää jännitettä noin 60 astetta ( 3 x 60 = 180). Tosin kaikki muutkin kapasitanssit, kuten hajakapasitanssi vaikuttavat vaihesiirtoon, mutta niiden vaikutuksen vähäisyyden vuoksi ne voidaan tässä unohtaa. Joka tapauksessa ainoastaan yhdellä taajuudella voi tämä 180 asteen vaihesiirto toteutua, joten signaali on hyvin puhdasta siniaaltoa. Näillä arvoilla taajuudeksi tuli 403 Hz. Siniaallon puhtauden edellytyksenä on, että koko signaalitie toimii lineaarisella alueella. 2). Seuraavaksi signaali viedään vahvistinpiirille (LM3900) ja sen negatiiviseen tuloon. Vahvistinpiirissä tapahtuu täten jälleen 180 asteen vaihesiirto. Vahvistimen lähdöstä vahvistettu signaali johdetaan takaisin CR-vaihesiirto-osan alkuun. Tässä tapahtuu täten myötäkytkentä. Kun vahvistus kumoaa piirissä syntyvät häviöt, alkaa piiri värähdellä. Vahvistusta voi säätää trimmeripotentiometrillä P2.
   Säätö on hyvin herkkä ja liika vahvistus saa signaalin negatiiviset huiput ”tökkimään” maapotentiaaliin ja positiiviset huiput syöttöjännitteeseen (+12 VDC tässä tapauksessa). Signaali siis säröytyy, jolloin se ei enää ole puhdasta siniaaltoa. Yritinkin tehdä automaattisen säädön LDR-vastuksen ja LEDin avulla, mutta tuo tarjokkaana ollut valovastus ei toiminut vaihtojännitteellä.
   Signaalin saa säädettyä käsinkin puhtaaksi. Tuo operaatiovahvistin (siinä on yhdessä piirissä neljä (4) vahvistinta) on virtatuloinen piiri. Siksi negatiiviseen napaan johdetaan pieni virta (bias) ja positiiviseen napaan trimmerillä säädettävä virta, minkä avulla vahvistimen lähtö säädetään noin puoleen väliin, jotta lineaarinen alue olisi mahdollisimman laaja.
   Myös tämän vahvistimen lähtö on virtasyöttöinen, joten siinä on oltava kuormitusvastus. Maksimivirta on 1,3 mA, joten tuolla 5,7 kohm:in vastuksella on helppo säätää lähtöjännite syöttöjännitteen puoleen väliin. 3). Koska tuota vahvistinta ei voi juurikaan kuormittaa, toimii transistori 2N3904 emitteriseuraajana pienentäen lähtöimpedanssia. 4). Transistorin emitteriltä signaali johdetaan mittauspiiriin (TEST). Sen etupuolelta tasasuunnataan kahdella diodilla jännite Arduinon analogiatuloa varten.
   Jos vaihtojännitemittari (yleensä näyttää tehollisarvoa RMS) näyttää 1,5 VAC, on dioditasasuuntauksen (molempia puoliaaltoja varten on oltava diodi) jälkeen noin 4,3 VDC. Tehollisarvo pitää jakaa 0,7 :llä, jotta saadaan huippuarvo ja diodit vielä kertovat jännitteet kahdella. Siis: tuon huipusta huippuun (pp) 4,3 volttia pitää voida värähdellä piirin lineaarisella alueella. Samoin jännitteen tulee olla alle 5 VDC, mikä on Arduinon analogiatulon maksimijännite. 5). Kymmenkierrospotentiometrillä säädetään testikappaleen (kondensaattori tai kela) ja potikan välinen jännite puoleen väliin syöttöjännitteestä. Tämän indikointia varten on kaksivärinen LED, mikä vilkkuu punaista hitaasti, jos jännite on alle puolen välin ja nopeasti, mikäli jännite on yli puolen välin. Oikealla arvolla (luonnollisesti pieni toleranssi) palaa LED vihreänä.

Kymmenkierrospotentiometrin lukema syötetään EXELiin, missä lasketaan mitattavan komponentin arvo.
Kuva 5. Taulukkolaskennan tuloste.
Kuva 6. Kytkentähässäkkä.
Potentiometrin vastusarvo on siis kymmenkertainen säätimen lukemaan verrattuna. Tuo ylimääräinen 5 ohm johtuu siitä, että potikka ei mene aivan nollaan, vaan pohjalla on juuri tuo viisi (5) ohmia. Samassa taulukossa on myös induktanssin laskenta. Tuolla taajuudella ja potikan lukemalla induktanssi olisi siis 1,11 Henryä. Se on todella iso kela. Edellisen päivityksen tehohakkurissa oli käytössä 3,1 mH kela. Jos sitä kelaa mitatessa haluttaisiin potentiometrille sama lukema (165), pitäisi värähtelytaajuuden olla noin 144 kHz (tätä en edes kokeillut).

Oheisessa kuvassa on koko kytkentähässäkkä. Mitattava kondensaattori on tuo sininen suorakaide melko keskellä kuvaa. LED palaa juuri vihreänä, joten mittaus on ok.

Ohjelma on varsin yksinkertainen. Pääohjelmassa aluksi mitataan molemmat analogia-arvot ja vertaillaan if .. esle if .. else rakenteella, onko mitattavan kapasitanssin jälkeinen jännite alle puolen välin; miinus neljän (-4) toleranssi, jos ei, niin onko se yli puolenvälin; plus neljän (+4) toleranssi. JOS kumpikaan tilanne ei toteudu, on jännite toleranssin puitteissa puolessa välissä. Itse vilkutus tapahtuu aliohjelmassa (void Fun_Vilkku(int askel){), mihin kutsussa välitetään tulostusaskelta vastaava numero (1, 2 tai 3). Aliohjelmassa tutkitaan ensin, onko askel erisuuri kuin kaksi (2). Jos on, niin vihreä valo sammutetaan ja suoritus hyppää joko nopeaan tai hitaaseen vilkutukseen. Ohjelman suoritus ei kuitenkaan jää aliohjelmaan viiveen ajaksi, vaan käy ainoastaan katsomassa, milloin vilkun puolijakso on kulunut.

OHJELMA 52

/***************************************
* Ohjelma LC_Mittari_52
* 3.12.2017
* Ohjelma vertailee kahta jännitettä ja
* ohjaa LEDejä sen mukaan.
**************************************/

// MÄÄRITTELYT:
// Mittauksen märittelyt
    const int Con_AnaTulo1 = 0;
    int Int_AnaArvo1 = 0;
    const int Con_AnaTulo2 = 1;
    int Int_AnaArvo2 = 0;
    int Int_Ohjaus = 0;

// Vilkutuksen määrittelyt
    int intViive = 1;
     const int Con_LED_Vih = 2;
    const int Con_LED_Pun = 3;
    boolean LED_Tila = false;


// ALIOHJELMAT
    void Fun_Vilkku(int askel){
    const int conHid = 750;
    const int conNop = 200;
    if(askel != 2){digitalWrite(Con_LED_Vih, LOW);}

    switch (askel) {
        case 1:
            digitalWrite(Con_LED_Pun, LED_Tila);
            intViive--;
            if(intViive == 0){
                intViive = conHid;
                LED_Tila = !LED_Tila;
        }
        break;
        case 2:
            digitalWrite(Con_LED_Vih, HIGH);
            digitalWrite(Con_LED_Pun, LOW);
        break;
        case 3:
            digitalWrite(Con_LED_Pun, LED_Tila);
            intViive--;
            if(intViive == 0){
                intViive = conNop;
                LED_Tila = !LED_Tila;
        }
        break;
    }// Case-rakenteen loppu
}// Vilkku loppu


void setup() {
    Serial.begin(9600);
    pinMode(Con_LED_Vih, OUTPUT);
    pinMode(Con_LED_Pun, OUTPUT);
}

void loop() {

    Int_AnaArvo1 = analogRead(Con_AnaTulo1);
    Int_AnaArvo2 = analogRead(Con_AnaTulo2);

    if(Int_AnaArvo2 < Int_AnaArvo1/2 -4){Int_Ohjaus = 1;}
    else if(Int_AnaArvo2 > Int_AnaArvo1/2 +4){Int_Ohjaus = 3;}
    else Int_Ohjaus = 2;
    Fun_Vilkku(Int_Ohjaus);

delay(1);
}// Pääohjelma loppu

Ei kommentteja:

Lähetä kommentti