Sadržaj:

Arduino sinusni val za pretvarače: 4 koraka
Arduino sinusni val za pretvarače: 4 koraka

Video: Arduino sinusni val za pretvarače: 4 koraka

Video: Arduino sinusni val za pretvarače: 4 koraka
Video: как сделать простой инвертор 3000W, синусоида, 16 mosfet, IRFz 44n 2024, Studeni
Anonim
Arduino sinusni val za pretvarače
Arduino sinusni val za pretvarače

U ovom projektu generirao sam SPWM (sinusno valno široko impulsno modulirani) signal iz dva arduino pwm digitalna izlaza.

Budući da za izradu takvog programa moram govoriti o mnogim drugim funkcijama i svojstvima arduina, cijeli projekt, uključujući slike osciloskopa, a za različite frekvencije posjetite moju web stranicu:

eprojectszone

Korak 1: Generiranje Pwm signala za 50Hz

Za generiranje signala od 50Hz na većoj frekvenciji potrebno je napraviti neke izračune. Frekvencije iz arduina mogu biti na 8MHz, ali želimo signal s promjenjivim radnim ciklusom.

Da biste razumjeli vrste promjenjivih radnih ciklusa arduina, možete pročitati ova 3 dijela istog posta 1, 2 i 3.

Pretpostavimo da je naša frekvencija 50Hz, što znači da je vremensko razdoblje 20 ms. Dakle, 10 ms je razdoblje polu ciklusa. U tih 10 ms moramo imati mnogo impulsa s različitim radnim ciklusima koji počinju s malim radnim ciklusima, usred signala imamo maksimalne radne cikluse i završavamo također s malim radnim ciklusima. Za generiranje sinusnog vala upotrijebit ćemo dva pina jedan za pozitivni poluciklus i jedan za negativni poluciklus. U našem postu za to koristimo igle 5 i 6 što znači Timer 0.

Za glatki signal odabiremo fazno ispravan pwm na frekvenciji 31372 Hz-vidi prethodni post. Jedan od najvećih problema je u tome kako izračunavamo potrebni radni ciklus za svaki impuls. Dakle, budući da je naša frekvencija f = 31372Hz, razdoblje za svaki impuls je T = 1/31372 = 31.8 us, pa je broj impulsa za pola ciklusa N = 10ms/31.8us = 314 impulsa. Sada za izračun radnog ciklusa za svaki impuls imamo y = sinx, ali u ovoj jednadžbi potrebni su nam stupnjevi pa poluciklus ima 180 stupnjeva za 314 impulsa. Za svaki impuls imamo 180/314 = 0,57deg/impuls. To znači da se za svaki puls krećemo naprijed s 0,57 stupnjeva.

y je radni ciklus i x vrijednost položaja u pola radnog ciklusa. isprva x je 0, a zatim je x = 0.57, x = 1.14 i tako dalje sve dok x = 180.

ako izračunamo sve vrijednosti 314 dobivamo niz 314 elemenata (tip "int" koji će se arduino lakše izračunati).

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

Možete vidjeti da je poput sinusnog vala radni ciklus najniži na prvom i posljednjem elementu, a najviši u sredini.

Korak 2: Arduino program za promjenjivi radni ciklus

Arduino program za promjenjivi radni ciklus
Arduino program za promjenjivi radni ciklus

Na gornjoj slici imamo signale promjenjivih radnih ciklusa s vrijednostima iz niza.

Ali kako napraviti takav signal ??

donji dio programa koristi prekide za promjenu vrijednosti radnih ciklusa

sei (); // omogući prekide

}

ISR (TIMER1_COMPA_vect) {// prekida kada se mjerač 1 podudara s OCR1A vrijednošću

if (i> 313 && OK == 0) {// konačna vrijednost iz vektora za pin 6

i = 0; // idite na prvu vrijednost vektora (niz)

OK = 1; // omogući pin 5

}

x = sinPWM ; // x uzima vrijednost iz vektora koji odgovara položaju i (i je indeksirano nulom) -vrijednost radnog ciklusa

i = i+1; // idite na sljedeću poziciju

}

Korak 3: Naizmjenično na 50Hz Arduino pinovi

Naizmjenično na 50Hz Arduino pinovi
Naizmjenično na 50Hz Arduino pinovi

Budući da svaki pin generira samo pola radnog ciklusa za stvaranje punog sinusnog vala, koristimo dva pina koji se izmjenjuju jedan za drugim nakon točno 10 ms (za 50Hz). Ova promjena pinova vrši se na kraju niza- nakon što je recimo pin 5 generirao 314 impulsa, ovaj pin se isključuje i omogućuje pin 6 koji čini istu stvar, ali za negativni radni ciklus.

Budući da arduino može generirati samo pozitivne signale, negativni radni ciklus je napravljen u h mostu- o tome možete pročitati ovdje

Program za promjenu pinova:

sei (); // omogući prekide

}

ISR (TIMER1_COMPA_vect) {// prekida kada se mjerač 1 podudara s OCR1A vrijednošću

if (i> 313 && OK == 0) {// konačna vrijednost iz vektora za pin 6

i = 0; // idite na prvu vrijednost vektora

OK = 1; // omogući pin 5

}

if (i> 313 && OK == 1) {// konačna vrijednost iz vektora za pin 5

i = 0; // idite na prvu vrijednost vektora

OK = 0; // omogući pin 6

}

x = sinPWM ; // x uzima vrijednost iz vektora koja odgovara položaju i (i je indeksirano nulom)

i = i+1; // idite na sljedeću poziciju

ako (U redu == 0) {

OCR0B = 0; // napravite pin 5 0

OCR0A = x; // omogući pin 6 odgovarajućem radnom ciklusu

ako (U redu == 1) {

OCR0A = 0; // napravite pin 6 0

OCR0B = x; // omogući pin 5 odgovarajućem radnom ciklusu

}

}

Korak 4: Vožnja H mostom i filtriranje Pwm signala

Signali dobiveni od arduina upravljački su dio za aplikacije pretvarača jer su oba pozitivna. Da bismo napravili potpuni sinusni val i praktičan pretvarač, moramo upotrijebiti h most i očistiti niskopropusni filtar pwm.

Ovdje je predstavljen H-most.

Niskopropusni filter testiran ovdje s malim AC motorima.

Preporučeni: