feltételeket kielégítő logikai kapcsolatok, minden, ami szükséges a kész áramkörhöz. A Nextion HMI-hez készült függvénykönyvtár, melyet beimportálva nagymértékben rövidíti és egyszerűsíti a programírást. A kapcsolóüzemű tápegységet vezérlő Atmega328-PU alapú Arduino Nano V3 panelre írt programot nem mellékeltem, mivel az túl egyszerű, csak a D11 kimenetet kapcsolja ki-be 20 kHz-en 20%-os kitöltési tényezővel.
Az előző fejezetek alapján elkészült áramkörök és a programkódok mérés szerint az 5.1 ábránlátható feszültség-időfüggvényt hozzák létre. Ekkor az Rt értéke 10 Ohm volt, UG értéke pedig 15,9 V. A felbontás 1.024-re volt állítva 50.00 Hz frekvencián, 100%-os kitöltési tényező mellett, korrekció alkalmazás nélkül.
5.1 ábra: Az előállított váltakozó feszültség
A továbbiakban bemutatok különböző felbontáson előállított váltakozó feszültségeket. Az 5.2 ábrán a felbontás 64-re lett állítva. Az 5.3 ábrán már 128 léptékben áll elő a váltakozó feszültség, mellyel nagyobb pontosság valósul meg.
Az előállított váltakozó feszültséget ferrit vasmagos transzformátorra kötve LCL szűrőn keresztül előáll a szinuszos 230 V-os feszültség, melynek bemutatására már nem kerítek sort, ez a jövőben viszont rövidesen kivitelezve lesz. Méréseim alapján szükséges lenne még továbbá nagy induktivitású ferritvasmagos tekercs, mely biztosítja az áram és feszültség folytonosságát. Sajnos ennek a tekercsnek az elkészítésére nem került sor anyaghiány miatt, így mérésekkel nem tudom bemutatni a kialakuló feszültséget.
mikrovezérlő, a kapcsolóüzemű tápegységet vezérlő Arduino Nano V3 áramkör (mely Atmega328-PU alapú mikrovezérlő), az érintőképernyő, valamint a
feszültségstabilizátorok, melynek bemenetére az S1 kapcsolótól függően akkumulátor (UG), vagy szabályozható tápegység (UK) kerül. A H-híd kimenetein és sínjein bekeretezett számok a valóságban is megjelölt vezeték azonosítóját tünteti fel.
Irodalomjegyzék
[1] FAIRCHILD SEMICONDUCTOR:FGA25N120ANTD. 2013, p. 9.
[2] FAIRCHILD SEMICONDUCTOR: FOD3120 High Noise Immunity, 2.5A Output Current, Gate Drive Optocoupler. 2016, p. 2.
1. számú melléklet
2. számú melléklet
3. számú melléklet
4. számú melléklet
6. számú melléklet
#include <avr/interrupt.h>
#include <avr/io.h>
#include <math.h>
#include <Nextion.h>
#define max_kapcsolasi_frekvencia 50000
#define min_kapcsolasi_frekvencia 1000 int felbontas = 512;
int felbontas_regi = 0;
bool kimenet = false;
int microMHz = 16;
double frekvencia = 50.00;
int frekvencia_egesz = 50;
int frekvencia_szazad = 0;
double frekvencia_regi = 0.0;
long int periodus = 0;
int szinuszTomb1[1024];
int szinuszTomb2[1024];
double tomb1, tomb2;
double amplitudo = 100, amplitudo_regi;
double amplitudo_ertek;
int index = 0;
int hatvanykitevo = 9;
int korrekcio = 0;
int index_1 = 0;
bool ujrageneralas_kerveny = false;
long int kapcsolasi_frekvencia;
NexButton b0 = NexButton(2, 1, "b0");
NexButton b1 = NexButton(2, 2, "b1");
NexButton b2 = NexButton(3, 3, "b2");
NexButton b3 = NexButton(3, 4, "b3");
NexButton b4 = NexButton(2, 7, "b4");
NexButton b5 = NexButton(2, 8, "b5");
NexButton b6 = NexButton(0, 2, "b6");
NexButton b7 = NexButton(0, 3, "b7");
NexButton b8 = NexButton(0, 4, "b8");
NexButton b9 = NexButton(0, 5, "b9");
NexButton b10 = NexButton(4, 2, "b10");
NexButton b11 = NexButton(4, 3, "b11");
NexButton b12 = NexButton(0, 6, "b12");
NexButton b13 = NexButton(5, 2, "b13");
NexButton b14 = NexButton(5, 3, "b14");
NexButton b15 = NexButton(5, 4, "b15");
NexButton b16 = NexButton(5, 5, "b16");
NexButton b17 = NexButton(5, 6, "b17");
NexButton b19 = NexButton(7, 7, "b19");
NexRadio r0 = NexRadio(1, 1, "r0");
NexRadio r1 = NexRadio(1, 4, "r1");
NexTouch *nex_listen_list[] =
{ &b0, &b1, &b2, &b3, &b4, &b5, &b6, &b7, &b8, &b9, &b10, &b11, &b12, &b13, &b14, &b15, &b16, &b17, &b19, &r0, &r1, NULL };
void b0PushCallback(void *ptr) {
frekvencia_egesz += 1;
Serial2.print("n1.val=");
Serial2.print(frekvencia_egesz);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
}
void b1PushCallback(void *ptr) {
if (frekvencia_egesz > 1) { frekvencia_egesz -= 1;
Serial2.print("n1.val=");
Serial2.print(frekvencia_egesz);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
} }
void b2PushCallback(void *ptr) {
if (amplitudo <= 110) { amplitudo += 1;
Serial2.print("n0.val=");
Serial2.print((int)amplitudo);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
} }
void b3PushCallback(void *ptr) {
if (amplitudo > 0) { amplitudo -= 1;
Serial2.print("n0.val=");
Serial2.print((int)amplitudo);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
} }
void b4PushCallback(void *ptr) // szazad noveles {
if (frekvencia_szazad < 99) { frekvencia_szazad += 1;
Serial2.print("n2.val=");
Serial2.print(frekvencia_szazad);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
} }
void b5PushCallback(void *ptr) // szazad csokkenes {
if (frekvencia_szazad > 0) { frekvencia_szazad -= 1;
Serial2.print("n2.val=");
Serial2.print(frekvencia_szazad);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
} }
void r0PushCallback(void *ptr) {
kimenet = true;
}
void r1PushCallback(void *ptr) {
kimenet = false;
}
void b6PushCallback(void *ptr) //kimenet engedelyezes menupont {
if (kimenet == true) { Serial2.print("r1.val=");
Serial2.print(0);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.print("r0.val=");
Serial2.print(1);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
} }
void b7PushCallback(void *ptr) //frekvencia menupont {
Serial2.print("n1.val=");
Serial2.print(frekvencia_egesz);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.print("n2.val=");
Serial2.print(frekvencia_szazad);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
}
void b8PushCallback(void *ptr) //amplitudo menupont {
Serial2.print("n0.val=");
Serial2.print((int)amplitudo);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
}
void b10PushCallback(void *ptr)// felbontas noveles {
if (hatvanykitevo < 10) { hatvanykitevo++;
felbontas = pow(2, hatvanykitevo) + 1;
Serial2.print("n4.val=");
Serial2.print(hatvanykitevo);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.print("n5.val=");
Serial2.print(felbontas);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
} }
void b11PushCallback(void *ptr)// felbontas csokkentes
{
if (hatvanykitevo > 5) { hatvanykitevo--;
felbontas = pow(2, hatvanykitevo) + 1;
Serial2.print("n4.val=");
Serial2.print(hatvanykitevo);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.print("n5.val=");
Serial2.print(felbontas);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
} }
void b9PushCallback(void *ptr)// felbontas menupont {
felbontas = pow(2, hatvanykitevo) + 1;
Serial2.print("n4.val=");
Serial2.print(hatvanykitevo);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.print("n5.val=");
Serial2.print(felbontas);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
}
void b12PushCallback(void *ptr) //korrekcio menupont {
Serial2.print("n6.val=");
Serial2.print(index_1);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.print("n7.val=");
Serial2.print(korrekcio);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
}
void b13PushCallback(void *ptr) //ujrageneralas {
ujrageneralas_kerveny = true;
}
void b14PushCallback(void *ptr) // index + {
if (index_1 < felbontas / 2) {
index_1++;
Serial2.print("n6.val=");
Serial2.print(index_1);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
} }
void b15PushCallback(void *ptr) //index - {
if (index_1 > 0) { index_1--;
Serial2.print("n6.val=");
Serial2.print(index_1);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
} }
void b16PushCallback(void *ptr) //mertek + {
if (korrekcio < periodus) { korrekcio += 10;
Serial2.print("n7.val=");
Serial2.print(korrekcio);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
} }
void b17PushCallback(void *ptr) //mertek - {
if (korrekcio > 0) { korrekcio -= 10;
Serial2.print("n7.val=");
Serial2.print(korrekcio);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
} }
void b19PushCallback(void *ptr) //frissites {
Serial2.print("n9.val=");
Serial2.print(periodus);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.print("n10.val=");
Serial2.print(kapcsolasi_frekvencia);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
}
void setup() {
Serial.setTimeout(10);
Serial.begin(115200);
Serial2.begin(9600);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
b0.attachPush(b0PushCallback);
b1.attachPush(b1PushCallback);
b2.attachPush(b2PushCallback);
b3.attachPush(b3PushCallback);
b4.attachPush(b4PushCallback);
b5.attachPush(b5PushCallback);
b6.attachPush(b6PushCallback);
b7.attachPush(b7PushCallback);
b8.attachPush(b8PushCallback);
b9.attachPush(b9PushCallback);
b10.attachPush(b10PushCallback);
b11.attachPush(b11PushCallback);
b12.attachPush(b12PushCallback);
b13.attachPush(b13PushCallback);
b14.attachPush(b14PushCallback);
b15.attachPush(b15PushCallback);
b16.attachPush(b16PushCallback);
b17.attachPush(b17PushCallback);
b19.attachPush(b19PushCallback);
r0.attachPush(r0PushCallback);
r1.attachPush(r1PushCallback);
regiszterekBeallitasa();
ujrageneralas();
}
void loop() { delay(1);
nexLoop(nex_listen_list);
if (kimenet == false) { TCCR1A = 0b00000010;
}
if (kimenet == true) { TCCR1A = 0b10100010;
}
if (felbontas != felbontas_regi) { ujrageneralas();
felbontas_regi = felbontas;
}
if (amplitudo != amplitudo_regi) { amplitudo_ertek = amplitudo / 100.00;
ujrageneralas();
amplitudo_regi = amplitudo;
}
frekvencia = frekvencia_egesz + ((double)frekvencia_szazad * 0.01);
if (frekvencia != frekvencia_regi) { ujrageneralas();
frekvencia_regi = frekvencia;
}
if (ujrageneralas_kerveny == true) { ujrageneralas();
Serial2.print("n8.val=");
Serial2.print(periodus);
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
ujrageneralas_kerveny = false;
} }//loop
ISR(TIMER1_OVF_vect) {
OCR1A = szinuszTomb1[index];
OCR1B = szinuszTomb2[index];
if (++index >= felbontas) { index = 0;
} }
void regiszterekBeallitasa(void) { TCCR1A = 0b00000010;
TCCR1B = 0b00011001;
TIMSK1 = 0b00000001;
sei(); //Megszakitas engedelyezese
DDRB = 0b11100000; //pin24, pin25, pin26 kimenet ICR1 = 0;
}
void ujrageneralas(void) { TCCR1A = 0b00000010;
periodus = microMHz * 1e6 / frekvencia / felbontas;
kapcsolasi_frekvencia = 16 * 1e6 / periodus;
if (kapcsolasi_frekvencia < min_kapcsolasi_frekvencia ||
kapcsolasi_frekvencia > max_kapcsolasi_frekvencia) { frekvencia = 50;
felbontas = 512;
hatvanykitevo = 9;
periodus = microMHz * 1e6 / frekvencia / felbontas;
kapcsolasi_frekvencia = 16 * 1e6 / periodus;
}
Serial.println(kapcsolasi_frekvencia);
if (periodus > 65535) { periodus = 65535;
}
ICR1 = periodus;
for (int i = 0; i <= felbontas; i++) { if (i < felbontas / 2) { // elso periodus