Skocz do zawartości

PWM tryb PWM, Phase and Frequency Correct


pawo90

Pomocna odpowiedź

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

Jeśli chcesz załączać serwo tranzystorem, to moim zdaniem wybrałeś jego zły typ, powinieneś zastosować PNP(kolektor do serwa, emiter do VCC, baza do pinu procesora przez rezystor).

Link do komentarza
Share on other sites

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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.