Skocz do zawartości

Poduszkowiec - problem z PWM


nowqaq

Pomocna odpowiedź

Witam,

Pracuję nad modelem zdalnie sterowanego poduszkowca.

Projekt wykonywany na atmedze128a.

Planuje użyć 2 EDF-ów:

1 - napęd poziomy, obroty sterowane,

2 - napęd pionowy (wytwarzający nadciśnienie), ustawiany "na pałę" bez regulacji obrotów,

oraz 1 x serwo: Ster

Problem polega na tym, że wspomniany mikrokontroler posiada 2 wyjścia PWM na timerze 16bitowym, pozostałe 4 są na 8bitach.

Czy w owym przypadku lepiej:

a) zmienić mikrokontroler na jakiś z większą ilością 16bitowych timerów (wolałbym tego uniknąć)

b) sterować serwem programowo

c) słyszałem, że można to rozwiązać kiedy na którymś z 8bitowych timerów, któryś tryb przyjmuje wartość MAX jako rejestr, co jest prawdą dla trybu CTC. Wtedy da się jakoś uzyskać 20ms okres, co pozwoliłoby mi sterować serwem, jednak nie wiem jak, czy mógłby ktoś objaśnić?

Link do komentarza
Share on other sites

M128 to całkiem spora maszynka i ma więcej timerów, także 16-bitowych 🙂 Przeczytaj dokumentację tego procesora - od tego powinieneś był zacząć.

Oczywiście programowa generacja 50Hz PWM/PPM dla serwa do żaden wysiłek dla procka 8 czy 16MIPSowego wspartego którymś timerem. Da się i tak i tak.

Jak chcesz rozwiązać sterowanie? Bo poduszkowce są słabo kontrolowalne. Moim zdaniem zwykłe RC sprawdza się najlepiej. Czy planujesz jakąś autonomię (muszę zapytać, to tradycja forum robotycznego) tj. czujniki odległości, mapowanie przeszkód itp?

No i napisz coś o pomysłach na co ciekawsze kąski: fartuch, z czego rama itd.

Jako główny wentylator nośny dobrze sprawdzają się zwykłe, duże śmigła np. 3-łopatowe. Tam nie musisz mieć żadnych dużych prędkości a wysokoobrotowy EDF ma tragicznie małą sprawność przy prędkości przepływu = zero. Jakie silniki? Bo zwykłe DC są marne, a tylko takie wysterujesz z PWM.

EDIT: I jeszcze jedno: EDF praktycznie nie ma ciągu wstecznego mimo zmiany kierunku obrotów, więc o jakimkolwiek cofaniu zapomnij. A czasem trzeba się z jakiegoś zakątka wycofać bez możliwości motorówkowego "narzucenia tyłu".

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Brak autonomii, typowe sterowanie RC. Jeśli gdzieś planowałem jakiekolwiek czujniki to tylko i wyłącznie informacyjne. Fartuch i rama raczej bez żadnych innowacji.

Ster umieszczony w pionowej osi napędu poziomego w postaci prostej lotki.

Propo biegu wstecznego jest w moim przypadku opcjonalny, więc w obecnej chwili mam kilka koncepcji jednakże mocniej ich nie przeanalizowałem. Myślałem o zastosowaniu EDF50 4800kv. (ciąg koło 450g)

EDIT: czy dałbyś radę nakierować mnie jak programowo generować owe 50Hz PWM dla serwa?

Jakiś link, wskazówki?

Link do komentarza
Share on other sites

Timer w swoim podstawowym trybie służy do odmierzania czasu a po jego upłynięciu ustawia jakąś flagę i ew. zgłasza przerwanie. Wykorzystaj to przerwanie do bezobciążeniowej generacji sygnału. Jeśli długość impulsu ma być T a okres P to np:

1. Najpierw, w inicjalizacji ustawiasz wyjście na zero, programujesz czas w timerze na cokolwiek i odblokowujesz jego przerwania oraz przerwania globalne. Dalej już wszystko odbywa się w ISR.

2. W obsłudze przerwania:

if (wyjście jest w stanie 0)

- ustawiasz je w stan 1

- programujesz timer na czas = T

else

- ustawiasz je w stan 0

- programujesz timer na czas = P-T

To wszystko 🙂 Taka generacja przebiegu dla serwa zajmuje 0.1% czasu procesora a program główny może w każdej chwili zmienić wartość P i od razu będzie to widać w najbliższym impulsie. Ustal sobie za pomocą prescalera taki "tick" timera, żeby dał radę odliczyć najdłuższy spodziewany czas z sensowną rozdzielczością. Np. w przypadku serwa masz czas prawie 20ms. Timer 16-bitowy będzie musiał liczyć nie szybciej niż 20ms/65536 tj. z okresem min. 0.305us. Dobry podzielnik dla zegara 8MHz wyniesie zatem 8, bo 8MHz/8 daje 1MHz czyli okres 1us. Wtedy czas typowego impulsu np. 1.5ms to 65536-1500=64036 załadowane do timera (pamiętaj, że ten liczy do przodu).

Kolejnym "stopniem wtajemniczenia" jest sprzętowa generacja impulsów - poczytaj o tzw. waveform generation w rozdziale o timerach. W przypadku sygnału serwa nie jest to konieczne, choć oczywiście jest bardziej "pro" 🙂

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

Jednak zakładając, że używałbym obu PWM-ów na timerze 16bit, zostaje mi do serwa jeden timer 8bit.

w tym przypadku okres minimalny wynosiłby aż 78,125ms. Czyli praktycznie można powiedzieć, że zadanie nie do zrealizowania na 8 bitach, prawda?

Link do komentarza
Share on other sites

Nieprawda, masz jeszcze timer 3 - upłynęły prawie dwie godziny a Ty z nich nie skorzystałeś i wciąż nie zajrzałeś do dokumentacji procesora Mega128.

A timer 1 (podobnie jak i 3) mają w M128 po trzy wyjścia więc z jednego puścisz nawet 3 sprzętowe PWMy. Cały 16-bitowy numer 3 zostaje dla serwa, a nawet ośmiu gdy się postarasz.

Gdyby nawet z jakiegoś powodu nie timer 3, to ustawiając odpowiednio fusebity odpalasz CPU na 4MHz. Wtedy timer 0 (lub 2) procując na preskalerze 1/256 liczy do maks. 16.3ms z kwantem 64us. Serwo na pewno nie zwariuje od lekko wyższej niż 50Hz częstotliwości. Lub podkręcasz proca do 16MHz (kwarcem) i masz to samo z preskalerem 1/1024.

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

Wybacz, faktycznie zachowałem się lekko mówiąc nierozsądnie. Czytałem datasheet po łebkach, co jak widać było moim błędem. Dziękuje za pomoc!

Tak więc dla innych początkujących czytających ten temat mogę od razu podzielić się wyciągniętym wnioskiem:

jak już się za coś zabierasz to przede wszystkim koncentracja i cierpliwość

Zabieram się do dalszej roboty.

Pozdrawiam!

Link do komentarza
Share on other sites

To napisz jak już będziesz miał jakieś konkrety - jak to zaplanowałeś (schemat?), no i oczywiście zdjęcia/filmy z montażu, uruchamiania i oblotu(?) prototypu. Mój latał niesamowicie fajnie, choć do beztarciowego poruszania się, dużo wcześniejszego przewidywania zakrętów i wielokrotnego hamowania awaryjnego poprzez wyłączanie głównego wentylatora długo się nie mogłem przyzwyczaić 🙂

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...