Skocz do zawartości

PWM 8bit 8MHz - ustawienia


marek_Cy

Pomocna odpowiedź

No niestety, timer 2 jest zbyt prymitywny i nie ma trybu w którym ustawiasz długość okresu i jednocześnie generujesz PWM. Zrób to programowo, wykorzystując tryb Non-PWM Mode i przerwania od OCR2 zgłaszane jednocześnie ze sprzetową zmianą odpowiedniego wyjścia. Dokładność będzie idealna a przy 8MHz obciążenie procesora nie przekroczy moim zdaniem 1%.

Link do komentarza
Share on other sites

1. Czy dla Timerów ATmega88 jest możliwość wykorzystania PWM dla 8MHz ?

2. Jak to jest z obciążeniem uC przy programowym PWM ?

Na stronie WWW jest napisane:

Ale programowe tworzenie sygnału sterującego dla wielu serw w znacznym stopniu zajmuje mikrokontroler i może mu braknąć czasu na realizowanie innych zadań. Tak więc, jeśli mamy tylko kilka serw, to lepiej korzystać z tajmerów.
Link do komentarza
Share on other sites

1. Nie rozumiem intencji pytania. Gdybym miał literalnie rozumieć to co napisałeś to: tak, timery ATmega88 mogą być taktowane z 8MHz i pracować w trybie PWM.

2. Po pierwsze wszystko jest kwestią skali. Pytałeś o jedno serwo (bo tylko tyle możesz napędzić jednym wyjściem PWM z timera 2) to odpowiedziałem, że możesz to zrobić programowo i szybkość Twojego procka przy tym nie ucierpi. Teraz przytaczasz przykład ostrzegający przed sterowaniem wieloma serwami. Tak, wielu serw się boimy ale (znowu) po pierwsze o ilu naprawdę myślisz a po drugie co oprócz tego ma procesor robić? No i po trzecie co to znaczy "programowo" lub "timerowo", bo obie wersje można zrobić na kilka sposobów i spaprać to dokumentnie zajmując 100% czasu procesora lub.. nie 🙂

A na koniec policzmy. Chyba można założyć, że wywoływana przez przerwanie od OCR funkcja programowej obsługi serwomechanizmu będzie polegała na:

- wyznaczeniu czasu następnego przerwania i załadowaniu tego do OCR

- ustawianiu lub wyzerowaniu odpowiedniego bitu portu wyjściowego

- odliczeniu niezbędnych liczników i zmodyfikowaniu wskaźników tablic długości impulsów w poszczególnych kanałach

co nie powinno zająć więcej jak powiedzmy 100 cykli procesora. Jeżeli podłączysz nawet 8 serw, to wciąż mieścisz się w typowej ramce PPM o długości 20ms czyli możesz obsługiwać serwa "szeregowo" tzn tak, by impulsy w poszczególnych kanałąch nie nakładały się na siebie. W każdej 20ms ramce będziesz zatem miał 8 impulsów czyli 16 przerwań. Ramka powtarzana jest 50 razy na sekundę co daje już 800 przerwań i zużywa 80 tys. cykli zegara. Ponieważ przy 8MHz dysponujesz ich 8 milionami w każdej sekundzie, to obciążenie CPU będzie wynosić dokładnie 1%. Czy To jakoś podnosi Cię na duchu?

  • Lubię! 2
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

A poco tyle złośliwości w poście...

To chyba oczywiste jakie ma znaczenie punkt 1. Wystarczy przeczytać poprzedni post i z kontekstu można zrozumieć, że pytanie odnosi się do możliwości ATmega88 i nowszych Timerów w nich zastosowanych. Czyli czy da się w nim ustawić sprzętowo PWM aby otrzymać 50Hz ?

Wytłumaczę na czym polega różnica między programowym i sprzętowym PWM.

Podczas działania sprzętowego PWM, procesor nie wykonuje żadnych czynności (nie zużywa swojego czasu) aby sygnał PWM był wystawiany na wyjście procesora.

Przy programowym, wystawianie sygnału PWM na wyjście zajmuje się uC i musi on część swojego czasu przeznaczyć permanentnie na ten sygnał.

Ciekawi mnie tylko, czy w M88 są ustawienia które daczą PWM dla ok.50Hz przy 8MHz procesora ?

Link do komentarza
Share on other sites

Czyli czy da się w nim ustawić sprzętowo PWM aby otrzymać 50Hz ?

Powinieneś dostać warna za lenistwo. Matematyki kolegi nie uczyli w szkole? Jeśli zastosujesz kwarc o odpowiedniej częstotliwości i ustawisz odpowiedni podzielnik preskalera na timerze to tak, otrzymasz 50Hz na wyjściu PWMu sprzętowego. Jedynie dość trudno kupić takie kwarce, a jeśli je kupisz to tylko w tej wysokiej obudowie. O ile dobrze pamiętam to jeden to 6,5536MHz drugiego nie pamiętam a liczyć za ciebie nie będę 😋.

Link do komentarza
Share on other sites

marek_Cy, może spokojniej? Gdybyś zadawał precyzyjnie pytanie nie byłoby problemów.

AVR są pod tym względem nie przyjemne w użytkowaniu, na timerze 8 bitowym i 8MHz nie dasz rady wygenerować 50Hz.

Link do komentarza
Share on other sites

Sam sobie kolego wystaw warna za lenistwo. Przecież jest napisane, że dla 8MHz.

Kolego jeśli zmieniasz posta w trakcie gdy ja piszę odpowiedź to niestety teraz nie kłam co jest napisane bo ja widzę co było:

Ciekawi mnie tylko, czy w M88 są ustawienia które daczą PWM dla ok.50Hz ?

Aby osiągnąć sprzętowy PWM o f=50Hz musisz dać kwarc o odpowiedniej f, bo przecież wynika to z przemnożenia dzielników, bitów timera i chyba stanów na pinie.

Link do komentarza
Share on other sites

Jeśli odebrałeś moje odpowiedzi jako złośliwości to przepraszam, absolutnie nie miałem takiej intencji. Nie wiem o czym myślisz pytając, oraz czy nowy post jest aby kontynuacją poprzedniego tematu jeśli przy okazji zmieniasz procesor i przechodzisz z jednego serwa na wiele.

W każdym razie (bo dym już chyba opadł..) mega88 ma ulepszony timer 2 w którym możesz ustawić długość okresu przebiegu PWM. Tak więc taktując procesor z 8MHz ustawiasz tryb pracy timera 2 na Mode7, prescaler na 1/1024, okres PWM (rejestr OCRA) na 156 i masz 50Hz z rozdzielczością długości impulsu 128us. Jeśli chcesz sterować serwem "od końca do końca" to to się nada ale jeśli ma to być jakieś pozycjonowanie, to raczej marnie to widzę. Osiem różnych ustawień w zakresie długości impulsu od 1 do 2ms to chyba mało 🙁

Domyślam się, że wciąż chodzi o timer 8-bitowy, bo 16-bitowy który potrafi zrobić PWM 50Hz to i mega8 posiada. Rozdzielczość będzie tam o niebo lepsza.

Przypominam też, że nie odpowiedziałeś na moje pytania dotyczące liczby serw jakie chcesz sterować oraz o spodziewane obciążenie procesora resztą zadań.

BTW: A jak nazwiesz metodę, w której to sprzęt zmienia stan portu w ściśle wyznaczonej przez komparator cyfrowy chwili, a oprogramowanie zajmuje się programowaniem właśnie tych chwil? W tym przypadku miałbyś z jednego Timera2 dwa wyjścia na serwa 50Hz PPM 🙂

Link do komentarza
Share on other sites

Jeśli odebrałeś moje odpowiedzi jako złośliwości to przepraszam, absolutnie nie miałem takiej intencji.

Nie ma sprawy 🙂

Wracając do tematu.

Chcę obsłużyć 4 serwa. W "porywach" potrzebuję prawie całej mocy uC.

Wcześniej tego nie zauważyłem, ale Mode_7 Timera2, to rzeczywiście jest fajny pomysł, szczególnie że M88 i M328 posiada te same opcje w Tim0.

Tylko ten przedział 0..156 daje zaledwie 128,2us. Trochę mało 🙁

Mam Arduino Pro Mini 328 (czyli seria M88) i niestety 8MHz. Czy wiecie, gdzie można dostać kwarc do niego 3,6864MHz ?

Szukałem i nie znalazłem. Ma rozmiaru 3*1mm i razem z kondensatorami w strukturze (dla lubiących precyzje).

Link do komentarza
Share on other sites

No to moim zdaniem metoda sprzętowo-programowa (timer+rejestr OCR+przerwania+funkcja obsługi tych przerwań) zjadająca 1% przy 8 serwach będzie OK. Gdybyś wciąż upierał się przy timerze 8-bitowym, to w tej metodzie musisz odliczać co najwyżej impuls maksymalny (czyli 2ms) a to pozwala na podkręcenie timera do prescalera 1/64 i daje rozdzielczość 8us.

Jeśli przy zagrożeniu zdjęcia 1% mocy procesora boisz się, że coś się nie wyrobi w czasie rzeczywistym to znaczy, że projekt już na wstępie jest zły. Moim zdaniem zbliżenie się w szacunkach do marginesu 30% wolnej mocy powinno zapalać w głowie czerwoną lampkę zmuszającą do rozejrzenia się za czymś szybszym. W docelowym programie znajdzie się na pewno jeszcze mnóstwo rzeczy których teraz nie jesteś w stanie przewidzieć a które zjedzą dużo więcej czasu.

Hm, 4 serwa i spodziewane duże obciążenie procesora pachnie mi quadrokopterkiem. Czy mógłbyś uchylić rąbka tajemnicy?

Kwarc 3.6864M mam, ale nie tak mały i bez kondensatorów.

Link do komentarza
Share on other sites

Jakbyś czytał uważnie to już wcześniej przeczytałbyś, że małe są szanse, aby znaleźć taki kwarc w małej obudowie. Zawsze możesz go dolutować osobno, byle połączenia były krótkie.

A pouczanie o lenistwie zostaw dla siebie, nikt Cie nie zmusza, aby szukać pomocy właśnie u nas.

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.