Spisu treści:

Arduino Sinewave dla falowników: 4 kroki
Arduino Sinewave dla falowników: 4 kroki

Wideo: Arduino Sinewave dla falowników: 4 kroki

Wideo: Arduino Sinewave dla falowników: 4 kroki
Wideo: jak zrobić prosty falownik 4200W, sinusoida, 4 mosfety, IRF3205, jlcpcb 2024, Lipiec
Anonim
Arduino Sinewave dla falowników
Arduino Sinewave dla falowników

W tym projekcie wygenerowałem sygnał SPWM (sine wave pulse wide modulated) z dwóch wyjść cyfrowych arduino pwm.

Ponieważ aby zrobić taki program muszę opowiedzieć o wielu innych funkcjach i właściwościach arduino pełny projekt wraz z obrazami oscyloskopowymi i dla różnych częstotliwości zapraszam na moją stronę:

Strefa e-projektów

Krok 1: Generowanie sygnału Pwm dla 50Hz

Aby wygenerować sygnał o częstotliwości 50Hz o wyższej częstotliwości konieczne jest wykonanie pewnych obliczeń. Częstotliwości z arduino mogą wynosić 8 MHz, ale chcemy sygnału o zmiennym cyklu pracy.

Aby zrozumieć rodzaje zmiennych cykli pracy arduino, możesz przeczytać te 3 części tego samego postu 1, 2 i 3.

Załóżmy, że nasza częstotliwość to 50Hz, co oznacza, że czas to 20ms. Tak więc 10ms to połowa okresu cyklu. W tych 10ms musimy mieć wiele impulsów o różnych cyklach pracy, zaczynając od małych cykli pracy, w środku sygnału mamy maksymalne cykle pracy, a kończymy również na małych cyklach pracy. Do wygenerowania fali sinusoidalnej użyjemy dwóch pinów, jeden do dodatnia połowa cyklu i jedna dla ujemnej połowy cyklu. W naszym poście używamy do tego pinów 5 i 6, co oznacza Timer 0.

Dla gładkiego sygnału dobieramy pwm z prawidłową fazą przy częstotliwości 31372 Hz – patrz poprzedni post. Jednym z największych problemów jest to, jak obliczamy niezbędny współczynnik wypełnienia dla każdego impulsu. Tak więc, ponieważ nasza częstotliwość wynosi f=31372Hz, okres dla każdego impulsu wynosi T=1/31372=31,8us, więc ilość impulsów na pół cyklu wynosi N=10ms/31.8us=314 impulsów. Teraz, aby obliczyć współczynnik wypełnienia dla każdego impulsu, mamy y=sinx, ale w tym równaniu potrzebujemy stopni, więc półcykl ma 180 stopni dla 314 impulsów. Dla każdego impulsu mamy 180/314=0,57deg/impuls. Oznacza to, że dla każdego impulsu poruszamy się do przodu o 0.57deg.

y jest cyklem pracy, a x wartością pozycji w połowie cyklu pracy. na początku x wynosi 0, potem x=0,57, x=1,14 i tak dalej, aż x=180.

jeśli obliczymy wszystkie 314 wartości, otrzymamy tablicę 314 elementów (wpisz "int", aby arduino łatwiej je obliczyć).

Taka tablica to:

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

Widać, że podobnie jak fala sinusoidalna cykl pracy jest najniższy na pierwszym i ostatnim elemencie i najwyższy na środku.

Krok 2: Program Arduino dla zmiennego cyklu pracy

Program Arduino dla zmiennego cyklu pracy
Program Arduino dla zmiennego cyklu pracy

Na powyższym obrazku mamy sygnały zmiennych cykli pracy z wartościami z tablicy.

Ale jak zrobić taki sygnał??

część programu poniżej używa przerwań do zmiany wartości współczynników wypełnienia

sei();// włącz przerwania

}

ISR(TIMER1_COMPA_vect){// przerwanie, gdy zegar 1 pasuje do wartości OCR1A

if(i>313 && OK==0){// wartość końcowa z wektora dla pinu 6

i=0;// przejdź do pierwszej wartości wektora(tablicy)

OK=1;//włącz pin 5

}

x=sinPWM;// x weź wartość z wektora odpowiadającego pozycji i(i jest indeksowane zerem)-wartość współczynnika wypełnienia

i=i+1;// przejdź do następnej pozycji

}

Krok 3: Naprzemienne przy 50 Hz piny Arduino

Naprzemiennie z pinami Arduino 50 Hz
Naprzemiennie z pinami Arduino 50 Hz

Ponieważ każdy pin generuje tylko połowę cyklu pracy, aby uzyskać pełną falę sinusoidalną, używamy dwóch pinów, które zmieniają się jeden za drugim po dokładnych 10msekundach (dla 50Hz). Ta zmiana pinów jest wykonywana na końcu tablicy - po tym, jak powiedzmy, że pin 5 wygenerował 314 impulsów, pin ten jest wyłączony i włączony pin 6, co powoduje to samo, ale dla ujemnego cyklu pracy.

Ponieważ arduino może generować tylko sygnały dodatnie, ujemny współczynnik wypełnienia wykonywany jest w mostku h- możesz o tym przeczytać tutaj

Program do wymiany pinów:

sei();// włącz przerwania

}

ISR(TIMER1_COMPA_vect){// przerwanie, gdy zegar 1 pasuje do wartości OCR1A

if(i>313 && OK==0){// wartość końcowa z wektora dla pinu 6

i=0;// przejdź do pierwszej wartości wektora

OK=1;//włącz pin 5

}

if(i>313 && OK==1){// wartość końcowa z wektora dla pinu 5

i=0;//przejdź do pierwszej wartości wektora

OK=0;//włącz pin 6

}

x=sinPWM;// x pobierz wartość z wektora odpowiadającego pozycji i(i jest indeksowane zerem)

i=i+1;// przejdź do następnej pozycji

jeśli(OK==0){

OCR0B=0;//zrób pin 5 0

OCR0A=x;//włącz pin 6 do odpowiedniego cyklu pracy

jeśli(OK==1){

OCR0A=0;//zrób pin 6 0

OCR0B=x;//włącz pin 5 do odpowiedniego cyklu pracy

}

}

Krok 4: Prowadzenie mostka H i filtrowanie sygnału Pwm

Sygnały uzyskiwane z arduino są częścią sterującą dla aplikacji inwerterowych, ponieważ oba są dodatnie. Aby zrobić pełną sinusoidę i praktyczny falownik musimy użyć mostka h i wyczyścić pwm filtrem dolnoprzepustowym.

Tutaj jest przedstawiony mostek H.

Filtr dolnoprzepustowy testowany z małymi silnikami prądu przemiennego – tutaj.

Zalecana: