Prietaisas gali būti skirtas lituoklio galios arba apšvietimo (halogeninių) lempų, kurios maitinamos nuolatine įtampa, reguliavimui. Šio įrenginio veikimo principas pagrįstas maitinimo linijos Vs įtampos pusperiodžių karpymu, laiko ašyje keičiant karpančio impulso plotį VL (1 pav.). Kaip matyti iš paveikslo, atitinkamai sukarpyta maitinimo įtampa atitinka mažesnę galią. Todėl keičiant impulsų plotį, keičiasi jo retumas dėl to keičiama galia. Įtampos pusperiodžiai gaunami panaudojus diodų tiltelį. Impulsiniam 220 V įtampos karpymui pritaikytas aukštos įtampos MOSFET tranzistorius.
1 pav. Įtampos pusperiodžių karpymo pavyzdys
Tokiam įtampos karpymui panaudotas AT90S2313 „Atmel“ firmos mikrovaldiklis (2 pav.). Mikrovaldiklio grandinė yra elektriškai atskirta nuo 220 V grandinės, kadangi visą laiką yra pramušimo rizika, kuri gali sugadinti visą prietaisą. Elektriniam atrišimui naudojamas LTV816 optronas. Čia gali būti panaudojamas ir kitokio tipo optronas, galintis veikti prie 220 V įtampos. Vietoj lauko tranzistoriaus 2SK2545 (iki 600 V) gali būti naudojamas kitas analogiškų charakteristikų tranzistorius.
(spausti ant paveikslėlio)
2 pav. Principinė elektrinė schema
Reguliuojant galią, būtina žinoti skaitinę jos vertę. Šiuo atveju naudojamas šviesos diodų indikatorius (1 ir 2). Skaičiams atvaizduoti pritaikytas vienas mikrovaldiklio prievadas PORTD. Skaitinės vertės atvaizduojamos įjungiant ir išjungiant 1 arba 2 indikatorių. Esant 1 įjungtam, išjungiamas 2, ir atvirkščiai. Toks principas leidžia panaudoti tuos pačius mikrovaldiklio išvadus dviem indikatoriams. Taigi, gauname, kad vienu momentu viename indikatoriuje parodomas skaičius, kai tuo tarpu kitas yra išjungtas. Ir taip pat priešingai. Dėl to, kad taip skaičiai keičiami sparčiai, akis iš inercijos mato abu skaičius iš karto. Šioje schemoje nepritaikytas kalibravimas, todėl nėra vienareikšmio skaitinio ryšio su keičiama įtampa. Schema gali reguliuoti įtampas nuo 10 iki 220 V (tiek kintamą, tiek nuolatinę).
Nepriklausomai nuo reguliuojamos įtampos, indikatoriaus parodymas nereikš įtampos reikšmės ant apkrovos, bet rodys kažkokia konkrečią reikšmę. Norint padidinti reguliuojamą galingumą, galima lygiagrečiai sujungti keletą 2SK2545 tranzistorių ir juos pritvirtinti prie kokio nors radiatoriaus (tarkim seno procesoriaus radiatorius ar pan.).
Apačioje pateiktas (su autoriaus sutikimu) šio prietaiso programos kodas C kalba (rašyta su IAR). Šią programą galite redaguoti ar kitaip keisti.
#include "io2313.h"
int x,holdx,z;
void indikacija(int x);
int encode(int f);
int knopkes(int x);
// pagrindinė funkcija, parametrams nustatyti
void main()
{
x = 25;
DDRB = 8;
DDRD = 255;
TCCR1A = 194;
TCCR1B = 2;
while(1)
{
DDRB = 8;
x = knopkes(x);
if (holdx > 0) holdx--;
z = x;
OCR1 = (10 * z) + 1;
}
}
// mygtukų būsenų nuskaitymo-valdymo funkcija
int knopkes(int x)
{
int a;
DDRB = 8;
PORTB = 3;
a = PINB;
if ((a == 1) && (x < 50) && (holdx == 0))
{
x++;
holdx = 400;
}
else if ((a == 2) && (x > 0) && (holdx == 0))
{
x--;
holdx = 400;
}
else{}
DDRB = 255;
PORTB = 8 & PORTB;
indikacija(x);
return x;
}
// Indikatoriaus valdymo funkcija
void indikacija(int x)
{
int lo,hi,i;
lo = x % 10;
hi = x / 10;
PORTB = 4 + PORTB;
// pateikti duomenis žemesniam segmentui
PORTD = encode(lo);
for (i=0;i<25;i++){}
PORTD = 0;
PORTB = PORTB - 4;
// pateikti duomenis aukštesniam segmentui
PORTD = encode(hi);
for (i=0;i<25;i++){}
PORTD = 0;
}
// Indikatoriui skirtų reikšmių formavimas.
// Tai daroma dėl to, kad duomenys perduodami
// atitinkamiems segmentams (abcdefg žr. 2 pav.) įjungti
int encode(int f)
{
if (f==0) return 63;
else if (f==1) return 6;
else if (f==2) return 91;
else if (f==3) return 79;
else if (f==4) return 102;
else if (f==5) return 109;
else if (f==6) return 125;
else if (f==7) return 7;
else if (f==8) return 127;
else if (f==9) return 111;
return 0;
}
Sukompiliuota programa (*.hex) ir programos kodas (C kalba).