Skocz do zawartości

[C] Arduino UNO, kontrolowanie silników przez ESC bez użycia biblioteki <Servo.h>


Khanrad

Pomocna odpowiedź

Tak jak w temacie, chce wysterować silni bez szczotkowy połączony przez ESC do Arduino UNO.

Mogę użyć biblioteki Servo, wtedy wszystko śmiga jak należy tylko czas reakcji siników jest bardzo długi, co automatycznie dyskwalifikuje tą metodę, spotkałem w necie, metodę wykorzystująca:

analogWrite(pinNumber, value), ale gdy podaję to w loop (po uprzednim zainicjowaniu oczywiście pinów jako OUTPUT) regulatory tylko piszczą i nic się nie dzieje.

Czy możecie podrzucić mi jakieś info/materiały które pomogą mi wysterować te silniki?

Korzystam z :

Silnik

ESC

Link do komentarza
Share on other sites

Akurat masz regulator łykający impulsy PPM z częstotliwością do 400 lub - jak pisze producent, nawet 500Hz. Zwykła biblioteka servo generuje PPM z typową częstotliwością 50Hz i to może być pierwsza przyczyna wolnych reakcji.

Jeżeli jednak zauważasz to naocznie, to raczej poszukałbym w ustawieniach regulatora. Przeczytaj jego instrukcję - tam producent napisał jak wejść do trybu programowania i jak zmieniać nastawy. Pierwsze, najważniejsze do charakterystyka startu. Nawet po szybkiej zmianie wysterowania regulator "zmiękcza" silnik po to, by np. nie urwać łopat helikoptera. Zwykle są trzy stopnie spowalniania. Zobacz jak masz obecnie i ustaw na najostrzejszy.

Druga sprawa to timing silnika czyli wyprzedzanie komutacji faz w stosunku do rzeczywistego położenia wału. Zwykle jest to ustawione dość zachowawczo. Przestawienie na większe wyprzedzenia może skutkować zrywaniem obrotów, ale daje za to szybsze reakcje silnika - trzeba to wypróbować z konkretnym silnikiem. I dopiero ostatnią sprawą jest przyśpieszenie PWM przez zrezygnowanie z biblioteki servo i napisanie generacji PPM samemu. To proste i było tu na forum o tym wiele razy.

Podłączanie napięcia analogowego do wejścia tego regulatora to jakiś żart. Jeśli już grzebiesz po sieci, to rób to z głową bo zginiesz.

Link do komentarza
Share on other sites

marek1707, AnalogWrite() w arduino to nic innego jak... PWM :x tak, to jest głupie. No i wszystkie PWMy w arduino mają zafiksowaną częstotliwość na 500Hz, więc to mogłoby działać (oczywiście po ustawieniu regulatora tak jak piszesz i dobraniu odpowiednich wypełnień).

Link do komentarza
Share on other sites

O, na to nie wpadłem. Górne ograniczenie 500Hz bierze się wprost z potrzebnej długości impulsów PPM. Po prostu te najdłuższe mają 2ms (czyli cały okres przy f=500Hz) no i zaczyna brakować czasu na odstęp między nimi. Zakładając, że jednak chcemy dociągnąć do tych 2ms a nawet lekko powyżej, to można by trochę oszukać Arduino i dać z 20% niższy zegar procesora niż wpisaliśmy do IDE. Wtedy (bez filtru RC) zamiast napięcia analogowego mielibyśmy 400Hz PPM ze zwykłego AnalogWrite(). No, niezłe, choć trochę pokrętne 🙂

Mam jednak przeczucie, że Autor wątku narzekał raczej na poważne spowolnienie startu silnika spowodowane ustawieniami regulatora niż takimi niuansami jak kilka milisekund zaoszczędzone na szybszym PPM. To mógłby zauważyć gdyby robił oprogramowanie do już latającego koptera lub innego systemu dynamicznego. Na etapie badać organoleptycznych (ciekawe czy się zakręci jeśli podłączę tak) to PPM 50Hz czy 400Hz jest nieodróżnialne. No ale zapadła cisza i nie wiemy czy coś w temacie "przyspieszyło".

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

Tak jak napisałeś ustawiłem regulatory w rożne konfiguracje i z braku czasu testowałem raczej empirycznie niż przy pomocy urządzeń pomiarowych.

Najlepsze efekty osiagnałem przy wartościach:

timing: high

krzywa startu: high

freq: 12KHz

i zakres pracy ustawiłem od 1000 do 2000.

Na tą chwilę system reaguje na tyle sprawie, przy użyciu biblioteki, że da się na nim pracować.

Po deadlinie spróbuję jeszcze przeprogramować obsługę silników a zrezygnować z biblioteki.

Dzięki za rady:)

Link do komentarza
Share on other sites

Timing "high" daje największego kopa, ale też jest najbardziej ryzykowny. Masz tu największe prawdopodobieństwo utraty synchronizacji regulatora z pozycją wirnika i szarpania lub nawet gwałtownego zatrzymania szczególnie przy większych obrotach i większych obciążeniach. Żeby się nie przejechać na "efekcie generalskim" (nic nie działa gdy wszyscy zainteresowani odbiorem właśnie zbierają się w sąsiednim pokoju) sprawdź działanie w całym zakresie pożądanych obrotów i obciążeń silnika również przy zimnych/rozgrzanych uzwojeniach i/lub skrajnych poziomach zasilania.

A tak z ciekawości, co to będzie? Weź coś napisz, bo mnie zeżre.

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.