Skocz do zawartości

ATmega 328p (Arduino Nano) - dwa PWM


haes17

Pomocna odpowiedź

Witam.

Potrzebuję na wyprowadzeniach Arduino Nano D3 i D11 mieć sygnały PWM o częstotliwości 50Hz oraz jeden z sygnałów musi być odwrócony o 180.

Jedyne co mi się udało osiągnąć to odwrócenie sygnału i częstotliwość 30 Hz.

KOD:

#define PWM1_Pin1 3
#define PWM1_Pin2 11

void setup() {
  pinMode(PWM1_Pin1, OUTPUT);
  pinMode(PWM1_Pin2, OUTPUT);


  TCCR2A = bit (WGM20)| bit (COM2B1) | bit (COM2A0)| bit (COM2A1);       
  TCCR2B =  bit(CS22)| bit(CS21)| bit (CS20);
  OCR2A = 127;   
  OCR2B = 127;  
 
}

void loop() {

}

20190617_001142.jpg

Link do komentarza
Share on other sites

Acha, no to przykre. Zamiast jednak zmuszać nas do dekodowania Twojego programu i zastanawania się co w ogóle zrobiłeś, może napisz otwartym tekstem który tryb timera wykorzystałeś i dlaczego, jakim zegarem go napędzasz, jaki masz zegar CPU i co Ci przeszkadza w uzyskaniu tych upragnionych 50Hz. To dużo ciekawsze niż wgapianie się w czyjś kod. Potem przejrzyj tabelkę z trybami timera 2 i może spróbuj sam sobie odpowiedzieć napytanie: czy jest taki tryb w którym da się uzyskać programowaną długość okresu a nie tylko wypełnienie. Trybów jest kilka - może któryś przypasuje? A jeśli nie, to może czas zmienić timer na bardziej rozbudowany? To prawdopodobnie będzie rozwiązanie Twojego problemu.

Edytowano przez marek1707
Link do komentarza
Share on other sites

No, ale odwrócenie sygnału do serwa nic nie da, bo używany tu ciąg PPM jest niesymetryczny. Wypełnienie zmienia się od 2.5 do 7.5%. Jeśli to zwyczajnie zanegujesz dostaniesz sygnał niezrozumiały dla serwa, więc (mam nadzieję) tutejsza zbieżność 50Hz ze sterowaniem serwomechanizmami jest przypadkowa.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

Taktowanie procesora to  : 16Mhz

Tryb jaki wybrałem to :  WGM20 = 1   0xFF PWM Phase Corrected (zczytane z tabelki)

 COM2A0=1 COM2A1=1   Inverted mode (LOW at bottom, HIGH on Match)

  COM2B1=1 None-inverted mode (HIGH at bottom, LOW on Match)

Preskaler: CS22=1 CS2=1 CS20= 1   Clock / 1024  (zczytane z tabelki)

Słabo operuję jeszcze na rejestrach i też nie do końca wiem czy wybrałem odpowiedni tryb bazowałem trochę na przykładach z innych forów internetowych.

PWM potrzebuję do sterowania falownikiem.  PWM mają przełączać MOSFETY  raz jeden raz drugi dlatego potrzebuje to na dwóch pinach.

 Dane z jakich korzystałem https://sites.google.com/site/qeewiki/books/avr-guide/pwm-on-the-atmega328

TCCR2A = bit(COM2A0) | bit(COM2B1) | bit(WGM20);

 TCCR2B = bit(WGM22) | bit(CS22)| bit(CS21)| bit(CS20);        

OCR2A = 156;  

OCR2B = 4;

Znalazłem również coś takiego lecz w tym przypadku na jednym pinie jest 50Hz natomiast na drugim 25Hz i przy każdej zmianie jest na drugim zmiana o pół.

W tym przypadku:

Tryb: WGM20 = 1 WGM21 = 0 WGM22=1 OCR0A  PWM Phase Corrected 

Preskaler: CS22=1 CS2=1 CS20= 1   Clock / 1024 

COM2A1=0 COM2A0=1   WGM22 = 0: Normal Port Operation, OC2A Disconnected

                                             WGM22 = 1: Toggle OC2A on Compare Match

COM2B1=1 COM2B0=0 None-inverted mode (HIGH at bottom, LOW on Match)

Z czego może wynikać te zmniejszenie o połowę?

Edytowano przez haes17
Link do komentarza
Share on other sites

Żeby mieć dwa sygnały odwrócone w fazie nie potrzebujesz dwóch kanałów PWM. Wystarczy jedno wyjście i bramka lub inwerter. A najlepiej użyć drivera MOSFET z kanałem prostym i odwróconym. Z tego co napisałeś to obawiam się jednak, że nie doceniasz problemu. Czy możesz napisać więcej o tym falowniku?  W jakim układzie będzie pracował? Może wrzuć jakiś schemat? O jakich mocach mówimy? Czy myślałeś o czasach martwych dla tranzystorów? Jak to zrobisz? Są specjalne timery robiące takie rzeczy albo drivery rozsuwające sygnały Jak chcesz regulować napięcie/moc falownika mając tylko dwa symetryczne sygnały 50Hz? Czy nie potrzebujesz czasem regulacji współczynnika PWM? Do czego ten falownik? Czy schemat jest gotowcem z sieci, czy sam go wymyśliłeś? itd. itp..

Trochę nie rozumiem jak można napisać program i dopiero wtedy zastanawiać się dlaczego jakieś piny machają tak a nie inaczej. Nie planowałeś tego czy po prostu losowo ustawiasz bity i patrzysz co się stanie? Znalazłeś gdzieś i przeczytałeś opisy rejestrów tego timera i znaczenie bitów COM? To właśnie tam leży odpowiedź dlaczego jeno z wyjść pracuje dwa razy wolniej tzw. tryb toggle).

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.