Përmbajtje:

Arduino Sinewave për Inverters: 4 Hapa
Arduino Sinewave për Inverters: 4 Hapa

Video: Arduino Sinewave për Inverters: 4 Hapa

Video: Arduino Sinewave për Inverters: 4 Hapa
Video: как сделать простой инвертор 6000Вт, 4 трансформатора, синусоида, IRFz 44n, jlcpcb 2024, Shtator
Anonim
Arduino Sinewave për Inverters
Arduino Sinewave për Inverters

Në këtë projekt, unë kam krijuar një sinjal SPWM (pulsi valor sinus i moduluar gjerësisht) nga dy dalje dixhitale arduino pwm.

Sepse për të bërë një program të tillë më duhet të flas për shumë funksione dhe veti të tjera të arduino -s, projektin e plotë, përfshirë imazhet e oshiloskopit dhe për frekuenca të ndryshme, ju lutemi vizitoni faqen time në internet:

eprojectszone

Hapi 1: Gjenerimi i sinjalit Pwm për 50Hz

Për të gjeneruar një sinjal 50Hz në frekuencë më të lartë është e nevojshme të bëhen disa llogaritje. Frekuencat nga arduino mund të jenë në 8MHz, por ne duam një sinjal me cikël detyre të ndryshueshëm.

Për të kuptuar llojet e cikleve të ndryshueshme të detyrave të arduino, mund të lexoni këto 3 pjesë të të njëjtit postim 1, 2 dhe 3.

Le të supozojmë se frekuenca jonë është 50Hz që do të thotë se periudha kohore është 20ms. Pra, 10ms është gjysmë cikli. Në ato 10ms ne duhet të kemi shumë impulse me cikle të ndryshme detyre duke filluar me cikle të vegjël të punës, në mes të sinjalit kemi cikle maksimale të punës dhe përfundojmë gjithashtu me cikle të vegjël detyre. Për të gjeneruar një valë sinus do të përdorim dy kunja një për gjysmë cikli pozitiv dhe një për gjysmën e ciklit negativ. Në postimin tonë për këtë ne përdorim kunjat 5 dhe 6 që do të thotë Kohëmatësi 0.

Për një sinjal të qetë ne zgjedhim fazën e duhur pwm në një frekuencë 31372 Hz-shiko postimin e mëparshëm. Një nga problemet më të mëdha është se si ne llogarisim ciklin e nevojshëm të punës për secilin puls. Pra, për shkak se frekuenca jonë është f = 31372Hz periudha për secilin puls është T = 1/31372 = 31.8 ne, kështu që numri i impulseve për një gjysmë cikli është N = 10ms/31.8us = 314 impulse. Tani për të llogaritur ciklin e punës për secilin impuls kemi y = sinx, por në këtë ekuacion na duhen shkallë kështu që gjysma e ciklit ka 180deg për 314 impulse. Për çdo impuls kemi 180/314 = 0.57deg/impuls. Kjo do të thotë se për çdo puls ne ecim përpara me 0.57deg.

y është cikli i punës dhe x vlera e pozicionit në gjysmën e ciklit të punës. në fillim x është 0, më pas që x = 0.57, x = 1.14 dhe kështu me radhë deri në x = 180.

nëse llogarisim të gjitha vlerat 314, marrim një grup elementësh 314 (lloji "int" për t'u llogaritur më lehtë nga arduino).

Një grup i tillë është:

int sinPWM = {1, 2, 5, 7, 10, 12, 15, 17, 19, 22, 24, 27, 30, 32, 34, 37, 39, 42, 44, 47, 49, 52, 54, 57, 59, 61, 64, 66, 69, 71, 73, 76, 78, 80, 83, 85, 88, 90, 92, 94, 97, 99, 101, 103, 106, 108, 110, 113, 115, 117, 119, 121, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 169, 171, 173, 175, 177, 178, 180, 182, 184, 185, 187, 188, 190, 192, 193, 195, 196, 198, 199, 201, 202, 204, 205, 207, 208, 209, 211, 212, 213, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 249, 249, 249, 249, 249, 248, 248, 248, 248, 248, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 240, 240, 240, 239, 238, 237, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 21 6, 215, 213, 212, 211, 209, 208, 207, 205, 204, 202, 201, 199, 198, 196, 195, 193, 192, 190, 188, 187, 185, 184, 182, 180, 178, 177, 175, 173, 171, 169, 168, 166, 164, 162, 160, 158, 156, 154, 152, 150, 148, 146, 144, 142, 140, 138, 136, 134, 132, 130, 128, 126, 124, 121, 119, 117, 115, 113, 110, 108, 106, 103, 101, 99, 97, 94, 92, 90, 88, 85, 83, 80, 78, 76, 73, 71, 69, 66, 64, 61, 59, 57, 54, 52, 49, 47, 44, 42, 39, 37, 34, 32, 30, 27, 24, 22, 19, 17, 15, 12, 10, 7, 5, 2, 1};

Ju mund të shihni se si një valë sinus, cikli i punës është më i ulëti në elementin e parë dhe të fundit dhe më i lartë në mes.

Hapi 2: Programi Arduino për Ciklin e Detyrës së Ndryshueshme

Programi Arduino për ciklin e detyrave të ndryshueshme
Programi Arduino për ciklin e detyrave të ndryshueshme

Në imazhin e mësipërm kemi sinjale të cikleve të detyrave të ndryshueshme me vlera nga vargu.

Por si të bëni një sinjal të tillë?

pjesa e programit më poshtë përdorni ndërprerjet për të ndryshuar vlerat e cikleve të punës

sei (); // aktivizoni ndërprerjet

}

ISR (TIMER1_COMPA_vect) {// ndërpritet kur kohëmatësi 1 përputhet me vlerën OCR1A

nëse (i> 313 && OK == 0) {// vlera përfundimtare nga vektori për pin 6

i = 0; // shko te vlera e parë e vektorit (grup)

OK = 1; // aktivizoni pin 5

}

x = sinPWM ; // x merr vlerën nga vektori që korrespondon me pozicionin i (i është zero i indeksuar) -vlera e ciklit të punës

i = i+1; // shkoni në pozicionin tjetër

}

Hapi 3: Alternimi në kunjat Arduino 50Hz

Alternuar në 50Hz kunjat Arduino
Alternuar në 50Hz kunjat Arduino

Sepse çdo kunj gjeneron vetëm një cikël gjysmë pune për të bërë një valë sinus të plotë, ne përdorim dy kunja të cilët alternohen njëra pas tjetrës pas 10 sekondave të sakta (për 50Hz). Ky ndryshim i kunjave bëhet në fund të grupit- pasi le të themi se pin 5 ka gjeneruar 314 impulse, ky pin fiket dhe aktivizon pin 6, i cili bën të njëjtën gjë, por për ciklin e detyrës negative.

Meqenëse arduino mund të gjenerojë vetëm sinjale pozitive, cikli negativ i punës bëhet në urë- mund të lexoni këtu për të

Programi për ndryshimin e kunjave:

sei (); // aktivizoni ndërprerjet

}

ISR (TIMER1_COMPA_vect) {// ndërpritet kur kohëmatësi 1 përputhet me vlerën OCR1A

nëse (i> 313 && OK == 0) {// vlera përfundimtare nga vektori për pin 6

i = 0; // shkoni në vlerën e parë të vektorit

OK = 1; // aktivizoni pin 5

}

nëse (i> 313 && OK == 1) {// vlera përfundimtare nga vektori për pin 5

i = 0; // shkoni në vlerën e parë të vektorit

OK = 0; // aktivizoni pin 6

}

x = sinPWM ; // x merr vlerën nga vektori që korrespondon me pozicionin i (i është zero i indeksuar)

i = i+1; // shkoni në pozicionin tjetër

nëse (OK == 0) {

OCR0B = 0; // bëni pin 5 0

OCR0A = x; // aktivizoni pin 6 në ciklin përkatës të punës

nëse (OK == 1) {

OCR0A = 0; // bëni pin 6 0

OCR0B = x; // aktivizoni pin 5 në ciklin përkatës të punës

}

}

Hapi 4: Drejtimi i Urës H dhe Filtrimi i Sinjalit Pwm

Sinjalet e marra nga arduino janë pjesa e kontrollit për aplikimet e inverterit sepse të dyja janë pozitive. Për të bërë një valë sinus të plotë dhe një inverter praktik ne duhet të përdorim një urë h dhe për të pastruar pwm një filtër me kalim të ulët.

Ura H është paraqitur këtu.

Filtri me kalim të ulët i testuar me motorë të vegjël Ac-këtu.

Recommended: