Skocz do zawartości

PWM 8bit 8MHz - ustawienia


marek_Cy

Pomocna odpowiedź

WOW.

Wracając do tematu.

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

A jak to możliwe, przy generowaniu tak wolnobieżnych sygnałów, jakim jest sygnał dla serva ? Z tym sobie poradzi AVR (dowolny) taktowany 1MHz, i będzie miał jeszcze dosyć czasu na inne rzeczy.

Pewnie twoje problemy wynikają z błędnych założeń.

Przy sterowaniu większą ilością serv, nie ma bardzo sensu używać sprzętowego PWMa.

Jak to zrobić. Otóż łatwiej wykożystać przerwania od Timera, do wytwarzania programowo PWMa, na pinach. O ile pamiętam sygnał sterujący dla serwa, ma cza od 1 do 2 ms i powtarza się co 20 ms. Teraz trzeba wybrać sobie jakaś wygodną podstawę czasu którą będzie wytwarzał uC, mi się wydaje że 100us, jest ok. 10 przerwań to 1ms (1000us). Teraz wystarczy w odpowiednich licznikach (zmiennych) zliczać przerwania, i porównywać, z zadanymi dla danych serw, i sterować odpowiednio końcówkami uC.

Taki system ma dodatkową zaletę. Otóż tworzymy na jednym Timerze, coś na wzór zegara systemowego, a to pozwala łatwo tworzyć, systemy o cechach prostych RTOS. bo te 100us, to wbrew pozorom bardzo wygodna podstawa czasu, do wielu innych rzeczy, a jednocześnie między przerwaniami, mamy sporo czasu na inne robótki dla CPU

Link do komentarza
Share on other sites

marek_Cy, jeśli uważasz, że ktoś za ciebie będzie szukał tego co potrzebujesz a ty jeszcze z pretensją będziesz się odnosił do osób, które chcą ci pomóc to jesteś w błędzie.

Jeśli spodziewasz się, że znajdziesz rezonator o nietypowej f w smd to życzę ci powodzenia i zmiany forum!

Link do komentarza
Share on other sites

... to życzę ci powodzenia i zmiany forum!

Nooo.. Dawno nie byłem na tak niekompetentnym forum, oprócz kolegi marek1707.

Sabre ostrzeżenie Za chamstwo i za lenistwo! to tylko udowadnia Twoje kompleksy.

Pozdrawiam.

Link do komentarza
Share on other sites

Nooo.. Dawno nie byłem na tak niekompetentnym forum,

Czy raczej dawno cię na żadne forum nie wpuścili ?

Co dla ciebie oznacza kompetencja ?

A tak w ogóle masz mistrza, chyba powinien być nawet dział czy nominacja, do zagrywki roku na forum.

Jesteś w sumie nowy 2 lvl, i skaczesz do gardła Administratorowi i Moderowi działu.

U mniesz masz na pewno nominacje roku w kategorii, kamikkadze. Daję pięć plusów na tego kandydata :plus: :plus:

Na elektrodzie już byś miał bana, tu masz tylko ostrzeżenie.

Z drugiej strony interesuje cię pomoc, czy tylko szarpanie się na słówka ?

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

BlackJack, czego wstydzisz się zacytować całe zdanie 🙂

Co to jest kompetencja i co to jest podlizywanie to powinieneś dobrze wiedzieć. Zapamiętaj tylko jedno ilość postów nie świadczy o rozumie...

Wracając do tematu.

marek1707 wersja z podziałem 1/64 raczej nie przejdzie, ponieważ OCRA jest 8 bitowy, chyba że o czymś nie wiem.

PS:

Teraz robię kilka projektów, ale do jednego potrzebuję kwarc 3,6864MHz 🙁

Link do komentarza
Share on other sites

marek_Cy, odpowiedź na wszystkie twoje pytanie brzmi: Google. Na wyniki na tym forum nie zwracaj uwagi bo widocznie nie jesteś mentalnie gotowy na merytoryczną dyskusję. Nie znajdujesz się na podwórku z 'kolesiami' tylko na forum gdzie osoby z wiedzą i chęcią przekazania jej próbują pomóc innym.

Szczerze mówiąc to podziwiam adminów, bo na ich miejscu już parę postów temu dałbym ci bana... Nie uzupełnisz braków w swojej wiedzy ubliżając innym. Możesz to zrobić jedynie własną, ciężką pracą, na co jeszcze nie wpadłeś w całej swojej mądrości, sądząc po twoim banalnym pytaniu.

Weź w łapkę specyfikację i otwórz ją na rozdziale Modes of Operation dla każdego z timerów. Potem zadecyduj, którego możesz użyć. Wymaga to mniej wysiłku niż wklepanie tych wszystkich milutkich postów.

Link do komentarza
Share on other sites

Nie wiem o czym nie wiesz 😐 ale:

8MHz/64 → 125kHz czyli 8us

8us * 256 → 2.048ms

czyli cały zakres 8-bitowego timera pokrywa maksymalny impuls PPM (2ms) jaki możesz wysłać do serwa. Ponieważ proponowana przeze mnie metoda polega na wyznaczaniu a priori czasu następnej zmiany pinu, to najdalszy czas czyli Twój horyzont zdarzeń leży w odległości 2ms od teraz.

Zakładając, że masz 8 wyjść S0..S7 dla serw oraz dysponujesz tablicą aktualnych długości impulsów T[8] to działa to mniej więcej tak:

czas 0: ustawiasz S0 i wyznaczasz następne przerwanie za czas T[0]

czas T[0]: zerujesz S0 i wyznaczasz następne przerwanie za czas 2.1ms-T[0]

czas 2.1ms: ustawiasz S1 i wyznaczasz następne przerwanie za czas T[1]

czas 2.1ms+T[1]: zerujesz S1 i wyznaczasz następne przerwanie za czas 2.1ms-T[1]

czas 4.2ms: ustawiasz S2 i wyznaczasz następne przerwanie za czas T[2]

czas 4.2ms+T[2]: zerujesz S2 i wyznaczasz następne przerwanie za czas 2.1ms-T[2]

itd..

To generuje Ci 8 impulsów PPM na 8 wyjściach. Każdy impuls pojawia się w swoim, zawsze tym samym momencie ramki 20ms a jego początek jest opóźniony względem początku poprzednika o przykładowe 2.1ms. Musisz tylko zadbać o to, by po wygenerowaniu ostatniego impulsu odczekać czas wyrównujący właśnie do 20ms i potem zacząć wszystko od nowa. Na każdy impuls musisz obsłużyć dwa przerwania tej samej funkcji. Wyznaczanie następnego czasu polega na odczytaniu rejestru OCRn, dodaniu do niego odpowiedniej wartości i zapisaniu z powrotem. Cała operacja odbywa się oczywiście przy jadącym modulo 256 timerze bez jego zatrzymywania. Dzięki temu wszystkie czasy są spójne a timing nie rozjeżdża się przez jakieś programowe opóźnienia. Jeśli chcesz mieć mniej wyjść to po ostatnim musisz wygenerować sobie "na pusto" kilka opóźnień 2ms (bo to przecież max) a na końcu dopakować to co zostało do 20ms. Proste 🙂

Link do komentarza
Share on other sites

Lux jeśli uważasz, że google wszystko znajdzie, to np. udowodnij swoją tezę i znajdź kwarc 3,6864MHz do płytki Arduino Pro Mini 328.

Jeśli to się uda to przeproszę wszystkich. Jeśli nie, to udowodnisz, że nie jesteś mentalnie gotowy na merytoryczną dyskusję.

Poza tym gratuluję moderatorowi, że nie daje Tobie ostrzeżenia za łamanie Regulaminu punkt 2a i kilku innych.

marek1707 zgadzam się z Twoją wypowiedzią, tylko że napisałeś:

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.

Myślałem, że opisujesz tryb pracy timera 2 w Mode7 z prescalerem na 1/64 🙂

__________

Komentarz dodany przez: Sabre

Ja mam już dość twojego chamstwa.

Nie pozwolę tobie na dalsze trolowanie na tym forum.

Link do komentarza
Share on other sites

Wracając do "sprawy kwarcu" 3.68MHz, to przede wszystkim źle szukałeś Kolego. Szczerze mówiąc już żałuję, że to napisałem bo znów mi się od Ciebie oberwie "za złośliwość" albo za jakieś słowo które Ci nie przypasuje, ale co tam, raz kozie śmierć.

Przyjrzyj się bliżej płytce swojego małego Arduino. Kwarce nie są montowane w obudowach 3-wyprowadzeniowych i na dodatek z kondensatorami montowanymi wewnątrz. Nie masz tam rezonatora kwarcowego tylko ceramiczny. To zupełnie inna klasa elementów. Autor projektu poszedł tu na taniochę, bo takie coś ma dużo gorsze tolerancje częstotliwości i stabilność ale i tak oczywiście lepsze niż prosty generator RC.

Ja nie szukam elementów w przeglądarce tylko odwiedzam "dobre sklepy elektroniczne" więc nie wiem czy Google tu coś pomoże. W każdym razie znalazłem bez problemu co najmniej dwa typy w takich obudowach jakie potrzebujesz. Jakoś nie chce mi się opisywać szczegółów ale jestem pewien, że ze swoją wiedzą i siła przebicia na pewno sobie poradzisz. Powodzenia.

BTW: Napiszesz co robisz, czy musimy zadowolić się ściemą typu "robię wiele projektów"?

Link do komentarza
Share on other sites

BTW: Napiszesz co robisz, czy musimy zadowolić się ściemą typu "robię wiele projektów"?

Raczej już nie napisze, bo ilość ostrzeżeń przyznanych mu przez moderatora zablokowała możliwość pisania.

Link do komentarza
Share on other sites

Jak to zrobić. Otóż łatwiej wykożystać przerwania od Timera, do wytwarzania programowo PWMa, na pinach. O ile pamiętam sygnał sterujący dla serwa, ma cza od 1 do 2 ms i powtarza się co 20 ms. Teraz trzeba wybrać sobie jakaś wygodną podstawę czasu którą będzie wytwarzał uC, mi się wydaje że 100us, jest ok. 10 przerwań to 1ms (1000us). Teraz wystarczy w odpowiednich licznikach (zmiennych) zliczać przerwania, i porównywać, z zadanymi dla danych serw, i sterować odpowiednio końcówkami uC.

Błąd w założeniach. 100us to kilkadziesiąt stopni ruchu, czyli bardzo dużo. w praktyce lepiej mieć rozdzielczość 1us. Ale i tak nawet robiąc prymitywnie na delayach, można obsłużyć bez większych problemów 10 serw i jeszcze robić inne rzeczy. Robiąc tak jak sugeruje marek1707 można obsłużyć te 10 serw na każdy dostępny timer, a dodając trochę komplikacji można tą wartość łatwo podwoić czy potroić.

Link do komentarza
Share on other sites

Cześć!

Uwielbiam odkopywać tematy - bo nic mnie tak nie denerwuje w internecie, jak dobrze wypozycjonowane strony z zagadnieniami bez rozwiązania...

Chciałem tylko zwrócić uwagę (bo nie zauważyłem, by ktoś o tym tu pomyślał), że rozwiązując PWM programowo - na przerwaniach - nawet poświęcając na to 50% czasu procesora taktowanego 8MHz, zostaje nam połowa cykli, czyli 4 miliony w sekundzie (a jak wspomniano wcześniej - dobrze napisany kod zużyje koło 1%). Używając kwarca 3MHz - nigdy nie osiągniemy powyższej mocy obliczeniowej...

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.