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, Juli
Anonim
Arduino sinusni val za pretvarače
Arduino sinusni val za pretvarače

U ovom projektu generirao sam SPWM (sinusno valno široki 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 prorač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 vremenski period 20 ms. Dakle, 10ms je period polu ciklusa. U tih 10 ms moramo imati mnogo impulsa s različitim radnim ciklusima koji počinju s malim radnim ciklusima, u sredini 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 Tajmer 0.

Za glatki signal odabiremo fazno ispravan pwm na frekvenciji 31372 Hz-vidi prethodni post. Jedan od najvećih problema je u tome što izračunavamo potrebni radni ciklus za svaki impuls. Dakle, budući da je naša frekvencija f = 31372Hz, period 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čunavanje radnog ciklusa za svaki impuls imamo y = sinx, ali u ovoj jednadžbi potrebni su nam stupnjevi tako da poluciklus ima 180 stepeni za 314 impulsa. Za svaki impuls imamo 180/314 = 0,57deg/impuls. To znači da se za svaki puls krećemo naprijed za 0,57 stepeni.

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

ako izračunamo sve 314 vrijednosti dobivamo niz 314 elemenata (upišite "int" koje će 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 u 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 sa 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 tajmer 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 koja odgovara položaju i (i je indeksirano nulom) -vrijednost radnog ciklusa

i = i+1; // prelazak 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 ciklusa rada za stvaranje punog sinusnog vala, koristimo dva pina koji se izmjenjuju jedan za drugim nakon točno 10msekundi (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 nastaje 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 tajmer 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 preuzima vrijednost iz vektora koja odgovara položaju i (i je indeksirano nulom)

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

ako (OK == 0) {

OCR0B = 0; // napravite pin 5 0

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

ako (OK == 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čni pretvarač, moramo upotrijebiti h most i očistiti niskopropusni filtar pwm.

Ovdje je predstavljen H-most.

Niskopropusni filter testiran sa malim AC motorima-ovdje.

Preporučuje se: