Sisällysluettelo:

Arduino Sinewave inverttereille: 4 vaihetta
Arduino Sinewave inverttereille: 4 vaihetta

Video: Arduino Sinewave inverttereille: 4 vaihetta

Video: Arduino Sinewave inverttereille: 4 vaihetta
Video: Part3 - 500W Sine Wave Inverter Using Arduino - H Bridge 2024, Heinäkuu
Anonim
Arduino Sinewave inverttereille
Arduino Sinewave inverttereille

Tässä projektissa olen luonut SPWM -signaalin (siniaallopulssileveä moduloitu) signaalin kahdesta arduino pwm -digitaalilähdöstä.

Koska tällaisen ohjelman tekemiseksi minun on puhuttava monista muista arduinon toiminnoista ja ominaisuuksista, koko projekti, mukaan lukien oskilloskooppikuvat ja eri taajuudet, käy verkkosivustossani:

eprojectszone

Vaihe 1: Pwm -signaalin luominen 50 Hz: lle

50 Hz: n signaalin luomiseksi korkeammalla taajuudella on tarpeen tehdä joitakin laskelmia. Arduino -taajuudet voivat olla 8 MHz, mutta haluamme signaalin, jolla on vaihteleva käyttöjakso.

Ymmärtääksesi arduinon muuttuvien käyttöjaksojen tyypit, voit lukea tämän 3 osan samasta viestistä 1, 2 ja 3.

Oletetaan, että taajuutemme on 50 Hz, mikä tarkoittaa, että ajanjakso on 20 ms. 10 ms on siis puolijaksoaika. Näiden 10 ms: n aikana meillä on oltava useita pulsseja, joilla on erilaiset toimintajaksot alkaen pienistä käyttöjaksoista, signaalin keskellä meillä on enimmäiskäyttöjaksot ja lopetetaan myös pienillä käyttöjaksoilla. positiivinen puolisykli ja yksi negatiivinen puoli. Tässä viestissämme käytämme nastoja 5 ja 6, mikä tarkoittaa ajastinta 0.

Sileä signaali valitaan vaiheen oikea pwm taajuudella 31372 Hz-katso edellinen viesti. Yksi suurimmista ongelmista on se, kuinka laskemme tarvittavan käyttöjakson jokaiselle pulssille. Joten koska taajuutemme on f = 31372 Hz, kunkin pulssin jakso on T = 1/31372 = 31,8 me, joten pulssien lukumäärä puolisyklin aikana on N = 10 ms/31.8us = 314 pulssia. Nyt jokaisen pulssin käyttöjakson laskemiseksi meillä on y = sinx, mutta tässä yhtälössä tarvitsemme astetta, joten puolijaksolla on 180 astetta 314 pulssille. Jokaiselle pulssille meillä on 180/314 = 0,57 astetta/pulssi. Tämä tarkoittaa, että kullekin pulssille siirrymme eteenpäin 0,57 astetta.

y on käyttöjakso ja x paikan arvo puolen käyttöjakson aikana. aluksi x on 0, sitten x = 0,57, x = 1,14 ja niin edelleen, kunnes x = 180.

jos laskemme kaikki 314 -arvot, saamme taulukon 314 elementtiä (tyyppi "int" lasketaan arduinon helpommin).

Tällainen matriisi on:

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, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 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};

Näet, että siniaallon tavoin toimintajakso on alin ensimmäisellä ja viimeisellä elementillä ja korkein keskellä.

Vaihe 2: Arduino -ohjelma muuttuvaan käyttöjaksoon

Arduino -ohjelma vaihtelevaan käyttöjaksoon
Arduino -ohjelma vaihtelevaan käyttöjaksoon

Yllä olevassa kuvassa meillä on vaihtelevat käyttöjaksosignaalit, joiden arvot ovat taulukosta.

Mutta miten saada tällainen signaali ??

alla oleva ohjelman osa käyttää keskeytyksiä käyttöjaksojen arvojen muuttamiseen

sei (); // ottaa keskeytykset käyttöön

}

ISR (TIMER1_COMPA_vect) {// keskeyttää, kun ajastin 1 vastaa OCR1A -arvoa

if (i> 313 && OK == 0) {// lopullinen arvo nastan 6 vektorista

i = 0; // siirry vektorin (taulukon) ensimmäiseen arvoon

OK = 1; // ota nasta 5 käyttöön

}

x = sinPWM ; // x ota arvo i: tä vastaavasta vektorista (i on indeksoitu nolla)-käyttöjakson arvo

i = i+1; // siirry seuraavaan kohtaan

}

Vaihe 3: Vaihtaminen 50 Hz: n Arduino -nastoilla

Vuorotteleva 50 Hz: n Arduino -nastoilla
Vuorotteleva 50 Hz: n Arduino -nastoilla

Koska jokainen nasta tuottaa vain puolet käyttöjaksosta täyden siniaallon muodostamiseksi, käytämme kahta nastaa, jotka vuorottelevat peräkkäin tarkan 10 sekunnin kuluttua (50 Hz). Tämä nastanvaihto tehdään taulukon lopussa- kun sanotaan, että nasta 5 on tuottanut 314 pulssia, tämä nasta on sammutettu ja otettu käyttöön nasta 6, joka tekee saman, mutta negatiiviselle käyttöjaksolle.

Koska arduino voi tuottaa vain positiivisia signaaleja, negatiivinen käyttöjakso tehdään h-sillassa- voit lukea tästä

Ohjelma nastojen vaihtamiseen:

sei (); // ottaa keskeytykset käyttöön

}

ISR (TIMER1_COMPA_vect) {// keskeyttää, kun ajastin 1 vastaa OCR1A -arvoa

if (i> 313 && OK == 0) {// lopullinen arvo nastan 6 vektorista

i = 0; // siirry vektorin ensimmäiseen arvoon

OK = 1; // ota nasta 5 käyttöön

}

if (i> 313 && OK == 1) {// lopullinen arvo vektorista nastalle 5

i = 0; // siirry vektorin ensimmäiseen arvoon

OK = 0; // ota nasta 6 käyttöön

}

x = sinPWM ; // x ota arvo i: tä vastaavasta vektorista (i on indeksoitu nolla)

i = i+1; // siirry seuraavaan kohtaan

jos (OK == 0) {

OCR0B = 0; // tee nasta 5 0

OCR0A = x; // ota nasta 6 käyttöön vastaavaan käyttöjaksoon

jos (OK == 1) {

OCR0A = 0; // tee nasta 6 0

OCR0B = x; // ota nasta 5 käyttöön vastaavaan käyttöjaksoon

}

}

Vaihe 4: H -sillan ajaminen ja Pwm -signaalin suodatus

Arduinosta saadut signaalit ovat ohjausosa invertterisovelluksille, koska molemmat ovat positiivisia. Jotta saataisiin aikaan täysi siniaalto ja käytännöllinen invertteri, meidän on käytettävä h -siltaa ja puhdistettava pwm alipäästösuodatin.

Tässä esitetään H-silta.

Alipäästösuodatin testattu pienillä AC-moottoreilla-täällä.

Suositeltava: