Kazalo:

Arduino Sinewave za pretvornike: 4 koraki
Arduino Sinewave za pretvornike: 4 koraki

Video: Arduino Sinewave za pretvornike: 4 koraki

Video: Arduino Sinewave za pretvornike: 4 koraki
Video: #11 LM35 и промышленный датчик температуры 4–20 мА для герметизации ПЛК Arduino 2024, November
Anonim
Arduino Sinewave za pretvornike
Arduino Sinewave za pretvornike

V tem projektu sem iz dveh arduino pwm digitalnih izhodov ustvaril signal SPWM (sinusno valno široko moduliran impulz).

Ker za izdelavo takega programa moram govoriti o številnih drugih funkcijah in lastnostih arduina, celotnem projektu, vključno s slikami osciloskopa, za različne frekvence obiščite mojo spletno stran:

eprojectszone

1. korak: Ustvarjanje Pwm signala za 50Hz

Za generiranje 50Hz signala pri višji frekvenci je potrebno narediti nekaj izračunov. Frekvence iz arduina so lahko pri 8MHz, vendar želimo signal s spremenljivim delovnim ciklom.

Če želite razumeti vrste spremenljivih delovnih ciklov arduina, si lahko preberete te 3 dele iste objave 1, 2 in 3.

Predpostavimo, da je naša frekvenca 50Hz, kar pomeni, da je časovno obdobje 20 ms. Torej je 10 ms obdobje pol cikla. V teh 10 ms moramo imeti veliko impulzov z različnimi delovnimi cikli, ki se začnejo z majhnimi delovnimi cikli, sredi signala imamo največje delovne cikle in končamo tudi z majhnimi delovnimi cikli. Za generiranje sinusnega vala bomo uporabili dva zatiča, enega za pozitivni polcikel in eden za negativni polcikel. V naši objavi za to uporabljamo zatiče 5 in 6, kar pomeni Timer 0.

Za nemoten signal izberemo fazno pravilen pwm pri frekvenci 31372 Hz-glej prejšnjo objavo. Eden največjih težav je, da izračunamo potrebni obratovalni cikel za vsak impulz. Ker je naša frekvenca f = 31372Hz, je obdobje za vsak impulz T = 1/31372 = 31.8 us, zato je število impulzov za pol cikla N = 10ms/31.8us = 314 impulzov. Zdaj za izračun obratovalnega cikla za vsak impulz imamo y = sinx, vendar v tej enačbi potrebujemo stopinje, tako da ima polcikel 180 stopinj za 314 impulzov. Za vsak impulz imamo 180/314 = 0,57 stopinj/impulz. To pomeni, da se za vsak impulz premaknemo za 0,57 stopinje naprej.

y je delovni cikel in x vrednost položaja v polovičnem delovnem ciklu. sprva je x 0, potem pa je x = 0,57, x = 1,14 in tako naprej, dokler x = 180.

če izračunamo vse vrednosti 314, dobimo matriko 314 elementov (tip "int", ki ga arduino lažje izračuna).

Takšen niz je:

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};

Vidite lahko, da je kot sinusni val delovni cikel najnižji na prvem in zadnjem elementu ter najvišji na sredini.

2. korak: Arduino program za cikel spremenljive obremenitve

Arduino program za spremenljiv delovni cikel
Arduino program za spremenljiv delovni cikel

Na zgornji sliki imamo signale spremenljivih delovnih ciklov z vrednostmi iz matrike.

Toda kako narediti tak signal ??

v spodnjem delu programa uporaba prekinitev za spreminjanje vrednosti delovnih ciklov

sei (); // omogoči prekinitve

}

ISR (TIMER1_COMPA_vect) {// prekinitev, ko se časovnik 1 ujema z vrednostjo OCR1A

if (i> 313 && OK == 0) {// končna vrednost iz vektorja za pin 6

i = 0; // pojdi na prvo vrednost vektorja (matriko)

OK = 1; // omogoči pin 5

}

x = sinPWM ; // x vzame vrednost iz vektorja, ki ustreza položaju i (i je indeksirano nič) -vrednost obratovalnega cikla

i = i+1; // pojdite na naslednji položaj

}

Korak 3: Izmenjava pri 50Hz Arduino zatiči

Izmenjujejo se pri 50Hz Arduino zatiči
Izmenjujejo se pri 50Hz Arduino zatiči

Ker vsak pin ustvari le pol delovnega cikla za izdelavo polnega sinusnega vala, uporabljamo dva nožica, ki se po natančno 10msekundah (za 50Hz) izmenično spreminjata. Ta sprememba nožic je narejena na koncu matrike- potem ko je recimo pin 5 ustvaril 314 impulzov, se ta pin izklopi in omogoči pin 6, ki naredi isto, vendar za negativni obratovalni cikel.

Ker arduino lahko generira samo pozitivne signale, negativni delovni cikel nastane v h mostu- o tem lahko preberete tukaj

Program za menjavo zatičev:

sei (); // omogoči prekinitve

}

ISR (TIMER1_COMPA_vect) {// prekinitev, ko se časovnik 1 ujema z vrednostjo OCR1A

if (i> 313 && OK == 0) {// končna vrednost iz vektorja za pin 6

i = 0; // pojdite na prvo vrednost vektorja

OK = 1; // omogoči pin 5

}

if (i> 313 && OK == 1) {// končna vrednost iz vektorja za pin 5

i = 0; // pojdite na prvo vrednost vektorja

OK = 0; // omogoči pin 6

}

x = sinPWM ; // x vzamemo vrednost iz vektorja, ki ustreza položaju i (i je indeksirano nič)

i = i+1; // pojdite na naslednji položaj

če (OK == 0) {

OCR0B = 0; // naredimo pin 5 0

OCR0A = x; // omogočimo pin 6 ustreznemu delovnemu ciklu

če (V redu == 1) {

OCR0A = 0; // naredimo pin 6 0

OCR0B = x; // omogočimo pin 5 ustreznemu delovnemu ciklu

}

}

4. korak: Vožnja po H mostu in filtriranje Pwm signala

Signali, pridobljeni iz arduina, so nadzorni del za uporabo pretvornikov, ker sta oba pozitivna. Za izdelavo polnega sinusnega vala in praktičnega pretvornika moramo uporabiti h -most in očistiti nizkoprepustni filter pwm.

Tu je predstavljen H-most.

Nizkoprepustni filter, preizkušen z majhnimi AC motorji-tukaj.

Priporočena: