keskiviikko 8. marraskuuta 2017

SINIAALTOINVERTTERI

Kun siniaalto kokoaaltotasasuunnataan, muodostuu sykkivää tasajännitettä, mistä voidaan suodattamalla ja reguloimalla sada stabiilia tasajännitettä kulloiseenkin tarpeeseen. Kokoaaltotasasuuntauksen jälkeen signaali näyttää oheisin kuvan kaltaiselta. Siinä nollatason yläpuolella on 50 Hz siniaallon puolikkaita.
   Tässä päivityksessä teen täsmälleen päin vastoin. Arduinon avulla ”hakkaan” siniaallon puolikkaita, joita sitten kytkintransistorien avulla jaan muuntajan ensiön puolelta toiselle. Itse asiassa muuntajaakin käytän väärinpäin, sillä sen merkinnät ovat: ensiö 2 x 115V/50 – 60 Hz ja toisio 2 x 6V 1,25A. Eli tässä toisio muutetaan ensiöksi. Molemmat puoliskot kytketään sarjaan siten että keskikohtaan syötetään näitä aallon puolikkaita ja reunoja kytketään maahan aina puolijakson keston ajaksi. Toision puolikkaat kytketään sarjaan, jolloin lähdössä on 230V:in sinimuotoinen vaihtojännite.
  
Vaikka tämä nyt onkin lähinnä vain yksi Arduinon ohjelman sovellusesimerkki, tulee inverttereiden käyttö tulevaisuudessa voimakkaasti kasvamaan, koska sähköautot lisääntyvät ja mm. niiden akkuja tullaan käyttämään energiavarastona. Kaikki muukin uusiutuvan energia käyttö kasvaa tulevaisuudessa voimakkaasti. 
    Tätä laitetta ei kuitenkaan saa mennä kytkemään verkkoon, sillä se vaatii kytkijältä koulutuksen, osaamisen ja asianomaiset luvat. Invertterin kytkeminen verkkoon energian syöttötarkoituksessa ei ole jokamiehen oikeus, kuten marjastus ja sienestys.
   Videolla (antinarduvideo49.youtube.com) näkyy kylläkin, että kytkin tämän johtohässäkän verkkoon osoittaakseni sen, että tämä voitaisiin myös synkronoida verkkojännitteen tahtiin, jolloin energian syöttö sähköverkon suuntaan olisi mahdollista. Indikaattorina tässä on kaksi hohtopurkauslamppua sarjassa (jännite on maksimissaan siniaaltojen puolikkaiden ollessa vastakkaisvaiheisina 460V RMS, eli 649V (huippu on tehollisarvo (RMS) kertaa neliöjuuri 2, eli 460 * 1,41 = 648,6V)). Hehkulamppu (tai analoginen jännitemittari) olisi parempi osoittamaan synkronointia, mutta sopivan tehoisia ei ”miljoonalaatikko” sattunut sisältämään. Tuollainen glimlamppu syttyy ja sammuu noin 210 voltin (noin 150V RMS sinimuotoisella) jännitteellä. Kun nuo kaksi sarjassa olevaa lamppua palavat kirkkaimmillaan, ovat verkkojännite ja tämän invertterin jännitteet vastakkaisvaiheisia (huippujännite kaksinkertainen) ja puolessa välissä pimeäaikana samanvaiheisia. Tämä tarkkuus riittäkköön, sillä tarkoitus ei ole kytkeä tätä verkkoon. Jaksonaikaa on mahdollista säätää muuttujalla int Int_Kesto = 380; Tässä olen säätänyt sen havainnollisuuden vuoksi hiukan pieleen, jotta verkkojännitteen ja invertterin taajuusero tulisi videolla havainnollisemmaksi. Lamppujen värinästä voi myös nähdä, että invertterin jännite ei ole aivan puhdasta siniaaltoa (lähelle kylläkin), vaan siinä on säröä johtuen siniaallon muodostamisesta pulssinleveysmodulaatiolla (taajuus noin 200 kHz).
    Kuvassa näkyy koko hässäkkä. Kun käytetään suurempia tehoja, on hyvä kytkeä Arduinon ja tehoelektroniikan väliin optoerottimet. Tässä kuvassa nämä ovat kokonaan galvaanisesti erossa toisistaan, koska Arduino UNO saa syöttönsä tietokoneelta. Jos tämä olisi todellinen laite, jolloin kaikki tehosyöttö tulisi yhdestä lähteestä, esimerkiksi akusta, olisi erotus silloinkin tarpeen ja maat (- potentiaali) kytkeä yhteen ainoastaan yhdestä pisteestä, jolloin maajohtojen virrat ja niissä syntyvät jännitehäviöt eivät aiheuttaisi häiriöitä. Seuraavassa ”hässäkän” kytkentä:

Tuosta kytkentäkaaviosta on hyvä huomioida seuraavaa: 6 voltin muuntajan syöttöön tarvitaan kuitenkin 18V syöttöjännite? Tuon verkkomuuntajan arvot ovat ensiö 230V (käämit sarjaan kytkettynä) ja toiso 2 x 6V. Nämä ovat nimellisarvot, mitkä toteutuvat nimelliskuormituksella. Tuo verkkomuuntaja on tarkoitettu käytettäväksi päinvastaiseen suuntaan. Kun sen ensiöön kytketään 230 V, on toisiossa kuormittamattomana 2 x 7 V. Eli muuntosuhde nyt käytettyyn suuntaan ei ole tuo 230/6. Lisäksi muuntajan ensiöön (siis tässä käytössä) pitää tulla jännite 9,87 V, eli sinijännitteen huippuarvo. Lisäksi muuntajan häviöt ovat nyt tähän suuntaan. Seuraavaksi kuristimen (tässä 3,1 mH, mikä ei ole optimoitu tähän käyttöön) yli pitää olla jännitettä myös siniaallon huipun kohdalla. Lisäksi pulssimodulaation kutsussa vähennetään (Fun_Pulssit(Int_Kesto - 50);) maksimista ”jotain, tässä tapauksessa 50 us. Tällöin induktanssin jälkeinen huippujännite jään alle maksimin. Tällä vähennyksellä voidaan säätää jännitettä kuormituksen tarpeen mukaan. Tätä säätöä ei ole toteutettu tässä esityksessä. Tietysti myös kytkintransistorin BDX34C yli jää myös pieni jännite, vaikka se ohjataankin täysin johtavaan tilaan.
   Transistorin kollektorilla oleva diodi (NFC25G) on välttämätön, sillä tuon kytkintransistorin siirtyessä johtamattomaan tilaan, on induktanssissa edelleen olemassa magneettivuo, mikä purkautuessaan synnyttää virran, millä täytyy olla purkaustie kondensaattoriin ja muuntajaan.
   Tässä käyttämäni puolijohteet eivät tietenkään ole ainoita mahdollisia, vaan sellaisia, mitä sattui olemaan. Toiminta ja komponenttien jännite- ja tehon kestot ovat oleellisia. Ongelmana minulla onkin, että lajitelmani alkaa olla niin iäkästä, että datan löytyminen netistä on toisinaan mahdotonta.

Toteutuksessa pääohjelman osuus on varsin vaatimaton. Siinä ainoastaan kutsutaan aliohjelmaa, missä muodostetaan siniaallon puolikkaita ja varmennetaan niiden välissä nollajännite. Sen jälkeen vaihdetaan muuntajan ohjaustransistoreiden tila.
Neljän kanavan optoerotin.
   Aliohjemassa on kolme (3) osaa: 1. Lasketaan ja ohjataan nousevan siniaallon arvo ja vastaava pulssin leveys yhdeksän (9) asteen välein. Koska Sini-funktio (Arduinon C-kielessä) käyttää radiaaneja, on asteiden ja radiaanin suhde laskettu valmiiksi ( 0.01744). 2. Saadulla sinin arvolla kerrotaan perusviive ja saadaan kullekin kulmalle kytkintransistorin (2N3904 ja BDX34C) johtavuusaika (ON). 3. Perusviiveestä vähentämällä johtavuusaika, saadaan taukoaika (OFF). Tämän muuttuvan suhteen ansiosta jännite muuntajan syötössä kasvaa siniaallon mukaan.
Tehot pieniä, mutta tukeva kiinnitys.
   Seuraavaksi muodostetaan laskevan siniaallon (eli kokoaallon neljännes) päinvastaisessa järjestyksessä. Periaate on kuitenkin sama. Lopuksi ohjataan nollaustransistori (IRFZ44N) johtavaksi, eli oikosulkuun, jotta päätetransistorien vaihdon aikana muuntajan syöttöpisteen jännite on varmasti nolla (0) volttia.
   Miksi sitten ei käytetä Arduinon tarjoamaa analogialähtöä (PWM), mikä on myös pulssinleveysmoduloitu, johtuu siitä että sen taajuus on 1 ms, jolloin 50 Hz taajuudella neljännesaallolle tulisi ainoastaan viisi (5) porrasta. Tämä on liian karkea ohjaus. Mitä korkeampi ohjauksen kytkintaajuus on, sitä paremmin ohjaus noudattaa siniaallon muotoa.

OHJELMA 49
/*******************************
* Ohjelma SiniInvertteri_49
* 07.11.2017
* Muodostetaan 230V:in 50H:n siniaaltoa
*/

// Määrittelyt
    const int Con_Pulssit = 6;
    const int Con_Nollaus = 5;
    const int Con_VasenTr = 8;
    const int Con_OikeaTr = 9;
    boolean Bol_Vaihto = false;
    int Int_Kesto = 380; // Määrittää puolijakson keston
    int Int_MaxArvo = Int_Kesto;

// Siniaallon puolikkaan aliohjelma
void Fun_Pulssit(int maksimi){
    int Viive = maksimi;
    int kulma = 9;
    float radian = 0.0;
    double sini = 0.0;
    int ONviive = 0;
    int OFFviive = 0;

// Kasvava looppi
    for(int i = 0; i < 91; i = i + kulma){
        radian = 0.01744 * i;
        sini = sin(radian);
        ONviive = sini * Viive;
        OFFviive = 380 - ONviive; //Int_Kesto - ONviive;

    // Kasvava sinineljännes
        bitSet(PORTD,Con_Pulssit);
        delayMicroseconds(ONviive);
        bitClear(PORTD,Con_Pulssit);
       delayMicroseconds  (OFFviive);
    } // Kasvava neljännes loppu

// Laskeva sinineljännes
   for  (int i = 90; i > 0; i = i - kulma){
        radian = 0.01744 * i;
        sini = sin(radian);
        ONviive = sini * Viive;
        OFFviive = Int_Kesto - ONviive;

    // Laskeva sinineljännes
       bitSet  (PORTD,Con_Pulssit);
       delayMicroseconds  (ONviive);
       bitClear  (PORTD,Con_Pulssit);
       delayMicroseconds  (OFFviive);
    } // Laskeva neljännes loppu

// Puolijakson nollaus
   bitSet  (PORTD,Con_Nollaus);
   delayMicroseconds  (70);
   bitClear  (PORTD,Con_Nollaus);
   delayMicroseconds  (70);
} // Pulssien aliohjelma loppu

// Asetukset
    void setup() {
    pinMode(Con_Pulssit, OUTPUT);
    pinMode(Con_Nollaus, OUTPUT);
    pinMode(Con_VasenTr, OUTPUT);
    pinMode(Con_OikeaTr, OUTPUT);
    Serial.begin(9600);
}

//Pääohjelma
 void loop() {
    Fun_Pulssit(Int_Kesto - 50);// Vakiolla voi säätää jännitettä
    digitalWrite(Con_VasenTr, Bol_Vaihto);
    digitalWrite(Con_OikeaTr, !Bol_Vaihto);
    Bol_Vaihto = !Bol_Vaihto;
} // Pääohjelma loppu
 

Ei kommentteja:

Lähetä kommentti