• Nem Talált Eredményt

számú melléklet

In document TUDOMÁNYOS DIÁKKÖRI DOLGOZAT (Pldal 33-52)

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

In document TUDOMÁNYOS DIÁKKÖRI DOLGOZAT (Pldal 33-52)

KAPCSOLÓDÓ DOKUMENTUMOK