Skocz do zawartości

Balansujacy robot - silniki


Michal_3

Pomocna odpowiedź

Witam,

Zacząłem bawić się z mikrokontrolerami i postanowiłem zrobić balansującego robocika (bardzo mi się spodobały). Robię to na atmega328p. Do tej pory napisałem samemu obsługę mpu6050 pod atmege, filtr komplementarny, oraz kontroler PID. Stworzyłem też pierwszą konstrukcję z użyciem silników krokowych, które wydaje mi się, że są problemem, ponieważ mają dużą rezystnację cewki, potrzebują wysokiego napięcia i mają nieduży moment trzymający (zasilam je prądem około 200mA - przy wyższym prądzie grzeją się bardzo szybko i bardzo mocno). Do tego okazuje się, że były stworzone dla firmy produkującej urządzenia przemysłowe przez co nie ma dostępnej specyfikacji technicznej w internecie. W żaden sposób nie potrafię dostroić PIDa, aby utrzymał mi robota w pionie- wydaje mi się, że problem leży między innymi w ciężkich i słabych silnikach. Do sterowania używam sterownika drv8825. Konstrukcja zbudowana jest z dwóch uchwytów stalowych do silnika NEMA 17 i sklejki 9mm (8cmx22cm). Jeździć ma na kołach pololu 90mm.

Chciałbym prosić Was o poradę na temat zakupu silnika krokowego (bipolarnego), konkretnie jaki model byście polecili. Zależy mi oczywiście na wysoki momencie trzymającym i wysokiej prędkości silnika, bo rozumiem, że przyspieszenie to bardziej kwestia algorytmu po stronie kodu, tzw. rampy ?

PS.

Na drgania w krokowcach rozumiem, że nic nie poradzę ? Zaszumia, to trochę moje odczyty z sensorów ruchu.

Pozdrawiam!

Link do komentarza
Share on other sites

Jak wyglądają te silniki? Zdjęcie? Wymiary? Rezystancja cewki? Ile kroków/obrót?

Na moment trzymający to nie pomoże, ale na obroty podniesienie napięcia pomoże na pewno. Jeżeli drivery zasilasz z dokładnie takiego napięcia jakie wynika z prawa Ohma (dla prądu 200mA) to nic dziwnego, że słabną. Mając dużą indukcyjność uzwojeń (a na to wskazuje mały prąd) być może już przy kilkunastu krokach/s zdychają.

Przecież akurat DRV8825 ma wszystko czego potrzebujesz: pomiar prądu uzwojeń na rezystorach szeregowych, zasilanie do 45V no i microstepping. To ostatnie bardzo zmniejsza szumy od silników. Próbowałeś ze stanami wejść MODE0-2? Musisz co prawda generować dużo więcej kroków więc i obciążenie procesora rośnie, ale za to płynność jest rewelacyjna.

Jak wygląda algorytm sterowania silnikiem? Masz jakieś rampy rozpędzania/hamowania czy wprost z wyniku PID zadajesz prędkość chwilową?

Link do komentarza
Share on other sites

Silniki Minebea 17PM-k310-20VS

200 kroków na obrót = 1.8 stopnia na krok

wymiary 42mm x 42mm

opór zmierzony na cewce 55 Ohm. Czyli powinnienem ograniczyc na sterowniku do 350mA przy obecnym zasilianiu 19,4V. Docelowo chciałbym zasilać niższym napięciem.

Wał: 5mm, długość 4cm

Pracuję z mikrokrokiem 1/32 kroku, żeby możliwie maksymalnie ograniczyć drgania silnika. Mam kod do rozpędzania i hamowania silnika ale póki co jeszcze nie używam (tylko testowałem działanie). Posiadam też plastikowe silniki DC na których udało mi się na poliestyrenowej konstrukcji ustabilizować robota, więc chciałem możliwe analogicznie przenieść ten sam kod na silnik krokowy.

Tak więc przyjąłem, że na wejście kontrolera PID podaje odchylenie z filtru kompl. a na wyjściu dostaje kąt z którego przeliczam ilość kroków które silnik krokowy powinien wykonać, czyli:

Praca na 1/32 kroku -> pobieram dane z akc. i żyro. -> filtr komplementarny -> PID -> ruch silnika o daną ilość kroków.

Uchwyty ze stali i sklejka 9mm. Chyba trochę za dużo to waży i prze to silniki nie mają siły. Spróbuj go odchudzić a potem wymieniaj silniki.

Same silniki to 250g x 2

Widziałem silniki, które pracują przy bardzo niskich napięciach, przy dużym prądzie i posiadają wysoki moment trzymający - myślałem, że to może znacznie pomóc. Przykładowo: 42SHD0217-24B

Nie brać nic nowego, schodzić z wagi i próbować poprawić algorytm i wycisnąć wiecęj z obecnych silników ?

Pozdrawiam

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

W danych katalogowych tej rodziny silników widzę, że o ile wymiary "czołowe" są takie same, o tyle robione są różne długości i od tego zależy moment:

http://www.eminebea.com/en/product/rotary/steppingmotor/hybrid/standard/data/17pm-k.pdf

Tak więc niezależnie od tego jak jest nawinięta cewka moment powinien być Ci znany bo to wynika z wymiarowania. 55Ω cewki to jakoś strasznie dużo. Jeżeli dobrze zmierzyłeś, to ten silnik wymaga sterowania wysokim napięciem - trudno, taki masz egzemplarz. Ograniczenie prądu powinno być zrobione wyłącznie na driverze, musisz dobrać oporniki pomiarowe wg karty katalogowej DRV8825 (R=0.66V/I). Napięcie zasilające driver powinno być kilkukrotnie większe niż wynika to z prawa Ohma (U=55Ω * 0.2A). Ja bym celował w 32-38V, czyli będziesz pracował gdzieś na granicy możliwości swojego 8825.

Ponieważ silnik jest sterowany krokami generowanymi co pewien czas, naturalnym wyjściem z Twojego algorytmu powinna być prędkość a nie kąt. To na jej podstawie powinieneś liczyć odstęp między krokami. Silnik nie może startować z dowolną prędkością od zera i nie może też zmieniać jej dowolnie więc musisz zaimplementować funkcję rozpędzania i hamowania. To może być zrobione poprzez proste ograniczenie szybkości zmian prędkości albo już w algorytmie samej generacji kroków - poprzez ograniczenie dopuszczalnych różnic w czasach między kolejnymi krokami. Najlepiej gdyby niskopoziomowe sterowanie silnikiem (generacja kroków w przerwaniu od timera) starało się nadążać za docelową prędkością wyznaczoną przez algorytmy wyższego poziomu, ale "jeżdżąc" po rampie czasów międzykrokowych wyliczonej wcześniej (np. w jakimś arkuszu kalkulacyjnym) do tablicy. Korzystanie z tak przygotowanych danych nie zabiera dużo czasu procesora i nie wymaga paskudnych obliczeń w czasie rzeczywistym. Oczywiście to wszystko ma sens, gdy możesz silnik rozkręcać odpowiednio szybko a więc gdy sterujesz go naprawdę twardo, z dużego napięcia przez driver ze stabilizacją prądu. Masz go, więc to tylko kwestia zasilania i ustawień oporników. Jeżeli nie możesz sobie pozwolić na zasilanie z ponad 30V, musisz zmienić silnik na niskonapięciowy, o dużo mniejszej rezystancji cewki.

EDIT: Czy silnik podłączyłeś 4 przewodami? Czy 50Ω to rezystancja jednej cewki, czy już dwóch szeregowo?

Link do komentarza
Share on other sites

Ograniczenie prądu powinno być zrobione wyłącznie na driverze

Ograniczam na driverze, wg. Current Limit = VREF × 2

Czy silnik podłączyłeś 4 przewodami? Czy 50Ω to rezystancja jednej cewki, czy już dwóch szeregowo?

Tak podłączyłem 4 przewodami. 55 Ohm to jedna cewka.

Odnośnie hamowania i przyszpieszania. Tak robię to przez timer zmieniając wartość do ktorej zlicza counter, przez co generuje w stalych odstepach czasu impulsy szybciej lub wolniej w zaleznosci od wartosci OCRnA. Jednak nie uzywam jeszcze takiego sterowania bo myslalem, ze moge zadzialac na wartosci kata zeby utrzymac robota w pozycji 0 stopni.

Link do komentarza
Share on other sites

Nie wiem co znaczy "Current Limit = VREF × 2" i jak to interpretujesz. Napięcie odniesienia wynosi 3V, ale po drodze od rezystora jest wzmacniacz x5 więc de facto masz próg komparacji na 660mV na rezystorze. Z tego wynika, że dla stabilizacji prądu 200mA powinieneś mieć R=3.3Ω.

Jeżeli jedna cewka to 55Ω (a silnik ma ich 4) to znaczy, że driver widzi 110Ω między swoimi wyjściami, czy tak? To jeszcze bardziej pogarsza sprawę napięcia zasilania.

To jasne, że kroki generujesz sprzętowo timerem bo inaczej byś zaorał procesor 100% obciążeniem. Pytanie tylko jaki algorytm wyznacza odległości między krokami. Stały gradient czasu (dodawanie lub odejmowanie stałej wartości od czasu poprzedniego kroku) nie prowadzi do stałej zmiany prędkości a więc do stałego (i możliwie maksymalnego w danym systemie) przyśpieszenia.

Jeśli główna pętla Twojego programu, po odczycie czujników i wyliczeniu wszystkiego zleca ruch silnikowi o zadaną liczbę kroków (bo wyjściem jest kąt przeliczany na kroki) to:

1. Albo pętla czeka na silnik i wtedy czas jej "obrotu" jest zmienny a to nie jest dobry pomysł bo sypie się matematyka symulująca stan obiektu (chyba że bierzesz po uwagę w obliczeniach zmienne odcinki czasu zabierane przez silnik)

2. Albo silnik ma stały czas w którym ma zrobić zadaną liczbę kroków i jeśli masz stałą prędkość to silnik czasem pracuje a czasem stoi różnie wypełniając przyznany mu czas i robiąc przy okazji paskudne drgania całości.

Skoro udało się to na silnikach DC - a te sterowałeś pewnie mostkiem H czyli prądem czyli momentem czyli żądanym przyśpieszeniem to powtórz to samo na krokowych tylko tak, by wejściem do funkcji wyliczania czasu kroku było np. przyśpieszenie lub choćby prędkość.

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

Nie wiem co znaczy "Current Limit = VREF × 2" i jak to interpretujesz

Mierze napięce przykładając miernik do potencjometra na driverze oraz masy układu - to jest moje napięcie referncyjne.

Chyba rzeczywiście muszę odchudzić układ, stalowe elementy i sklejka mają swoją wagę, co nie zmienia faktu, że silniki też kopnięcia nie mają.

Pozdrawiam

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.