Spisu treści:
- Krok 1: Generowanie sygnału Pwm dla 50Hz
- Krok 2: Program Arduino dla zmiennego cyklu pracy
- Krok 3: Naprzemienne przy 50 Hz piny Arduino
- Krok 4: Prowadzenie mostka H i filtrowanie sygnału Pwm
Wideo: Arduino Sinewave dla falowników: 4 kroki
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:32
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
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
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:
Szafka arkadowa dla 4 graczy dla MAME: 32 kroki (ze zdjęciami)
Szafka arkadowa dla 4 graczy dla MAME: To pokaże Ci, jak skonstruowałem szafkę MAME dla 4 graczy. Jest wiele rzeczy, które możesz chcieć dostosować do swoich upodobań. Pokażę ci, jak stworzyłem swoją, możesz ją dostosować do własnych upodobań. Mieści się w nim standardowe okno
Użyj 1 wejścia analogowego dla 6 przycisków dla Arduino: 6 kroków
Użyj 1 wejścia analogowego dla 6 przycisków dla Arduino: Często zastanawiałem się, jak mogę uzyskać więcej wejść cyfrowych dla mojego Arduino. Niedawno przyszło mi do głowy, że powinienem móc użyć jednego z wejść analogowych do wprowadzenia wielu wejść cyfrowych. Zrobiłem szybkie wyszukiwanie i znalazłem, gdzie ludzie byli a
Mod 3.3V dla czujników ultradźwiękowych (przygotuj HC-SR04 dla logiki 3.3V w ESP32/ESP8266, Particle Photon, itp.): 4 kroki
3.3V Mod dla czujników ultradźwiękowych (przygotuj HC-SR04 dla logiki 3.3V na ESP32/ESP8266, Particle Photon, itp.): TL;DR: Na czujniku odetnij ślad do pinu Echo, a następnie podłącz go ponownie za pomocą dzielnik napięcia (przebieg echa -> 2,7 kΩ -> pin echa -> 4,7 kΩ -> GND)
Pierwsze kroki z kodowaniem opartym na przeglądarce MBlock dla HyperDuino: 3 kroki
Pierwsze kroki z kodowaniem opartym na przeglądarce MBlock dla HyperDuino: Witamy w internetowym samouczku mBlock z HyperDuino. To pokaże Ci, jak skonfigurować mBlock i przesłać kod do HyperDuino. Pokaże ci to również, jak stworzyć podstawowy kod dla inteligentnego samochodu. Na początek wskoczmy w
Tania alternatywa dla lekkiego namiotu dla zdjęć: 3 kroki
Tania alternatywa dla lekkiego namiotu dla zdjęć: Cześć, to moja pierwsza instrukcja. Potrzebowałem taniego rozwiązania, aby robić lepsze zdjęcia mniejszych przedmiotów. Zrobiłem więc ten lekki namiot z materiałów wokół domu. W końcu kosztowało mnie to około 1,00 za kilka tablic plakatowych. Wszystko inne jest poddawane recyklingowi