Skocz do zawartości

PWM tryb PWM, Phase and Frequency Correct


pawo90

Pomocna odpowiedź

Witam,

Chcę wygenerować sygnał PWM o czestotliwosci 50Hz i wypelnieniu 5% i 10%, stworzyłem kod ale niestety coś chyba jest nie tak.

Czy ktoś mógłby sprawdzić mój kod? I ewentualnie naprowadzić mnie co jest nie tak?

Kod znajduje się pod adresem:

http://pokazkod.pl/1c115c8b0608e36a36a1cfecd3c268521e33f2b8f6cc74e7a2

Link do komentarza
Share on other sites

Cześć, przede wszystkim witaj na forum 😉,

Nigdy nie zgłębiałem się specjalnie w tryb korekcji fazy i częstotliwości, ale jeśli zerkniemy w notę katalogowa ATmegi, to zobaczymy, że częstotliwość pracy jest podzielona dodatkowo przez 2, ponieważ licznik główny TCNT1 zlicza od TOP do 0, a potem z 0 do TOP, dlatego cykl się wydłuża dwukrotnie. Z tego względu należy w rejestr ICR1 należy wpisać nie 20000, a 40000. Potem rejestrem OCR1A dokonujesz ustawienia odpowiedniego wypełnienia 🙂

Oczywiście, to nie potwierdzona informacja, dlatego warto aby ktoś ją poparł o ile jest prawidłowa 😉

Link do komentarza
Share on other sites

Program piszę na Atmegę8A-PU, kod nie działał ponieważ na porcie PB1 (OC1A) nie generował się żaden sygnał.

Rozwiązałem już ten problem, okazało się, że źle ustawiłem bit w COM1A1.

Teraz PWM się generuje, niestety na dzien dzisiejszy nie posiadam oscyloskopu, ale zamówiłem analizator stanów logicznych:

http://allegro.pl/analizator-stanow-logicznych-saleae-8ch-arduino-i4551883645.html

mam nadzieję, że przy użyciu tego urządzenia będę mógł sprawdzić poprawność kodu.

Generalnie sygnał PWM, chcę wykorzystać do sterowania serwem modelarskim SG51R. Trochę czytałem na temat sterowania tym serwem, m.in. na tym forum 😉 i wiem, że do tego celu potrzebuję sygnał o f=50Hz i wypełnieniu 5-10%.

Schemat połączenia:

Pominałem pozostałe rzeczy takie jak zasilanie procesora, chcialem tylko przedstawic ideę sterownika.

Celem jest takie sterowanie, aby po przyciśnięciu przycisku 1 (lub 2) serwo obróciło się w lewo (lub prawo) a po krótkim czasie np. 200ms się zatrzymało.

Wpadłem na pomysł aby to założenie zrealizować przy pomocy tranzystora, który jest sterowany z portu PB3.

Obecnie kod wygląda tak:

http://pokazkod.pl/314944a39d4d07768424a72f687e85e7dd641b9ec37d0347f9

Jednak serwo zachowuje się trochę dziwnie, niby po wcisnieciu przyciskow kreci sie w lewo lub prawo, ale jest też tak, że gdy wciskam:

przycisk S1 (serwo obraca sie w lewo) -> przyciskam przycisk S2 (serwo obraca sie w lewo (a powinno w prawo) -> ponownie przyciskam S2 (serwo obraca sie prawo).

Nie wiem czy odpowiednio opisałem problem? Jeśli nie nagram i zamieszczę filmik...

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

Typ tranzysotra ma tak duzy wpływ?

Poza tym, przyszedł mi dziś ten analizator logiczny. Sprawdziłem swój PWM, zmieniłem trochę wartość do której zlicza Licznik, i w tej chwili jest tak:

F~20Hz,

I sygnały 1ms oraz 2ms... przy tych nastawach serwo obraca się tylko w jedną stronę 🙁

Już sam nie wiem co jest nie tak...

Link do komentarza
Share on other sites

No w tej chwili zrobiłeś z tego wtórnik emiterowy (podajesz napięcie na serwo równe napięciu wyjściowemu pinu, pomniejszone o wartość spadku napięcia na złączu baza-emiter) 😋. Proponuje, zrobić tak jak wcześniej napisałem 🙂.

A czy zmieniłeś i sprawdziłeś jak działa na wartości ICR1=40000? Pisałem o tym wcześniej.

Tak czytam, dlaczego zdecydowałeś się użyć tranzystora i zastanawiam się po co, skoro poprzez wypełnienie które podajesz na serwomechanizm, sterujesz jego położeniem. I jeśli podasz wypełnienie równe(czasowi) np:

1ms->serwo w skrajnej lewej pozycji;

2ms->serwo w skrajnej prawej pozycji;

1.5->serwo w neutralnym punkcie;

oczywiście regulujesz sobie wypełnienie w całym tym zakresie od 1ms do 2ms więc sterujesz serwem od 60stopni do -60stopni.

Każdy serwomechanizm ma jakiś określony czas dojścia z pozycji 0 do 60stopni. Zazwyczaj są to dziesiąte części sekundy i nie potrafię zrozumieć idei tego tranzystora 😋.

Chyba, że myślisz, iż podczas odłączenia serwomechanizmu od zasilania, zostanie ono w pozycji w jakiej było przed wyłączeniem? To miałoby racje bytu, jeśli serwo nie zostałoby obciążone. A jeśli zamontujesz jakiś wysięgnik, który będzie "ciężki", to po odłączeniu serwo po prostu zmieni swoja pozycje, to takiej na jaką pozwoli mu konstrukcja

Link do komentarza
Share on other sites

Tak zmieniłem wartość ICR na 10000, zrobiłem tak przy pomocy analizatora aby uzyskać 50Hz sygnał.

Natomiast do OCR1A wstawiam odpowiednio 500 oraz 1000, i wg analizy mam impulsy o długości 1ms i 2ms przy 50Hz 🙂

EDIT:

Problem rozwiązany, okazało się ze faktycznie problem byl ten tranzystor, po podlaczeniu bezpośrednio do zasilania serwo śmiga aż miło 🙂

Hmm idea tego tranzystora pojawiła się w wyniku moje frustracji 😃, ponieważ wcześniej metodą prób i błędów doszedłem do tego, że serwo obracało mi się albo całkiem w prawo, albo całkiem w lewo, wiec wpadłem na pomysł, że zastosuje tranzystor, który bedzie mi odcinał zasilanie 😋 (rozumowanie chyba poprawne 🙂 gorzej z wykonaniem.

Tak czy siak, dziękuję za zainteresowanie 🙂

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.