Skocz do zawartości

Zastąpienie płytki z elektroniką w serwomechanizmie swoją własną twórczością


Pomocna odpowiedź

Witam,

Buduję ARM o 5 stopniach swobody ([Worklog][Manipulator/ARM] Kitten-One), do którego kupiłem już 5 serw Tower Pro MG995. Mam dwie realne możliwości (wg mnie) co do wysterowania ich:

1. Serwa zostawiam nienaruszone i steruję nimi poprzez impulsy 1-2ms

2. Wylutowuję płytkę z elektroniką, a kabel 3-żyłowy zastępuję 5-żyłowym (2x silnik, +/- i sygnał o pozycji z potencjometru).

Ponieważ chciałem trochę zagłębić się w elektronikę/programowanie uC tym projektem, bardziej skłaniam się ku opcji nr 2. Poza tym przyda mi się info o (względnie) dokładnej pozycji serwa do wykorzystania w niektórych wariantach sterowania.

Widzę, że na forum serwomechanizmy wykorzystuje się głównie na dwa sposoby - albo używa się ich w stanie nienaruszonym, albo wypruwa się elektronikę wraz ze sprzężeniem od potencjometru, aby uzyskać silnik 360 z przekładnią. Przejechałem wszystkie strony działu "Sterowanie" i nie doszukałem się opcji, którą chciałbym zastosować - nie ma tu totalnie nikogo, kto zrobiłby taki manewr, czy źle szukałem?

Przeczytałem art Nawyka, w którym pod koniec pisze o wyżej wymienionej metodzie, ale nie rozwinął specjalnie tematu... Czy jeśli ktoś jednak bawił się w takie rzeczy, mógłby wesprzeć mnie pomocnymi informacjami/linkami na co musiałbym uważać, co zastosować, aby otrzymać jak najwydajniejszy układ?

Moja wizja (zaznaczam, że jest to wizja, a nie konkretne plany):

- serwo zasilam 6V

- potencjometr idzie pod zasilanie uC (np. ATmegi8)

- środkowa nóżka potencjometru idzie pod ADC, do czego dodatkowo wrzucam rezystor zabezpieczający układ przed krańcowym położeniem serwa i prądem o wartości OVER9000 amperów)

- wartość zebrana na ADC mówi mi o położeniu wału serwa

Wizję tę używam w owym celu:

- wymagam od serwa określonego położenia - dajmy na to, że będzie to 75% wartości jaką max może mi dać potencjometr na ADC

- puszczam sygnał sterujący na mostek H (L293) do czasu, aż volatile int zmienna_do_której_zapisuję_stan_ADC> wymagana_wartość (nie użyłem "=", żeby przypadkiem wartości tej nie przeskoczyć przy pomiarze)

- jak zmienna przekroczy wymaganą wartość, to silnik zatrzymuję

* pominąłem tu algorytmy rozruchu i wcześniejszego hamowania (np przy przekroczeniu 80% wymaganej wartości) poprzez PWM, które również chciałbym zastosować

Czy to wszystko powyższe ma sens? A jak nie to jest jakaś inna droga wykorzystania serwa bez jego wewnętrznej elektroniki, czy jestem na nią skazany?

Pozdrawiam,
greebqmaster

Link to post
Share on other sites

1. Poza słabymi serwami L293D będzie za słabym sterownikiem (nie wspominając już faktu strat napięcia na nim).

2. Jest projekt openservo, który głównie się właśnie tym zajmuje - http://openservo.com/ - masz tam pełen schemat, soft i co nie tylko 🙂

Link to post
Share on other sites

1. A gdyby l293 zastąpić jakimiś porządnymi mosfetami?

2. Eh, widziałem ten projekt i przyznam, że zrobili kawał porządnej roboty... Ale zastanawiałem się, czy nie da się tego zrobić prościej 😃

Link to post
Share on other sites

1. Tak właśnie zrobilli w openservo 🙂

2. Prościej czyli jak? W wersji 2 schemat już trudno uprościć. Masz tam dwa podwójne mosfety, atmegę, stabilizator i kilka elementów biernych. Bonusowo jest pomiar prądu i napięcia, ale z tego możesz zrezygnować.

  • Pomogłeś! 1
Link to post
Share on other sites

Dzięki. Wcześniej sprawdzałem tylko wersję 3, a faktycznie v2.1 jest trochę prostsza. Mam nadzieję, że uda mi się to złożyć 😃

[ Dodano: 03-11-2014, 09:45 ]

Mała aktualizacja po dokładnym przejrzeniu schematu (Link do schematu OpenServo v2.1):

1. Nie bardzo rozumiem, po co potrzebny mi układ ZXCT1009 - nie obeszłoby się bez pomiaru prądu? Rozumiem, że gdyby przyłożyć na silnik duże obciążenie, to wzrósłby pobór prądu, ale w przypadku, gdy stosowałbym zasilacz i wszystko i tak szłoby przez mosfety chyba nie musiałbym dokonywać tego pomiaru?

2. I tak samo z pomiarem napięcia - jeżeli zamiast baterii używałbym zasilacza, to sprawdzanie poziomu baterii chyba odpada?

3. Czy układ IRF7309 istnieje w formie swojego odpowiednika nie-SMD? Przyznam, że nigdy nie miałem do czynienia z takim lutowaniem i nie wiem, czy dobrze by mi to wyszło.

4. Jeśli ktoś spojrzał na ten schemat - Wszystko to upchnięte jest na małej płytce, którą zamykamy w obudowie serwa. Fakt, że OpenServo to projekt, w którym modyfikujemy serwa pojedynczo, ale czy przypadkiem nie mógłbym za pomocą jednej atmegi sterować trzema takimi serwami? ATmega 168 dla przykładu posiada 6 kanałów PWM - nie mógłbym sterować trzema serwami z jednego kontrolera? A jeśli nie, to czy zamiast 168 nie mogę użyć np. ATmegi8? Żadnych specjalnych peryferiów zarezerwowanych dla 168 chyba się nie używa, moja wersja programu też będzie odpowiednio mniejsza, także zajmie pewnikiem mniej pamięci.. Pytam, bo wychodzą całkiem spore koszty... 😃

5. Jeszcze a propos mosfetów - czy układ L298N jest równie słaby co L293?

Pozdrawiam,
greebqmaster

Link to post
Share on other sites

1. Tak jak pisałem pomiar prądu i napięcia nie jest niezbędny. Jest to raczej bajer.

2. Możesz jedną atmegą sterować kilka serw. Pomysł openservo jest taki, żeby wszystko zmieściło się w oryginalnej obudowie...

3. To jest SO8, te układy naprawdę nie są małe i jak masz wprawę w lutowaniu to spokojnie sobie poradzisz.

4. Tak, możesz użyć atmega8 czy nawet jakiegoś attiny

5. Ma te same problemy. Generalnie by wystarczył, ale jego rozmiary...

Link to post
Share on other sites

Dzięki wielkie, nie wiem co bym bez Ciebie zrobił, MirekCz 😃

Na schemacie OpenServo v2.1 jest jedna mała rzecz, której nie rozumiem. Czy mógłbyś mi wyjaśnić dlaczego bramki P-MOSFETów podpięte są na sztywno do zasilania przez 100kohm? I dlaczego sygnał na te bramki idzie do złącz zasilających silnik?

Link to post
Share on other sites

Chcąc budować małe układy musisz przejść na SMD - nie możesz jednocześnie mieć ciastka i go zjeść.

Ja bym tak pochopnie nie rezygnował z pomiaru prądu. Akurat w przypadku serwa to ważny parametr a pomiar taki możesz zrobić na wiele sposobów. Nie musisz nawet używać układów high-side pracujących na dodatniej szynie zasilania. Mały opornik w źródłach dolnych MOSFETów + prosty (tani) wzmacniacz i masz sensowne napięcie proporcjonalne do prądu silnika. Z resztą wzmacniaczy obejmujących swoim napięciem wejściowym plus zasilania jest już sporo. Dodanie zwykłego tranzystora npn robi z tego źródło prądowe, którego wyjście możesz odłożyć na rezystorze i już masz dokładnie to samo co rzadki ZXCT1009.

Napięcie zasilania jest może mniej ważne, ale z kolei kosztuje dwa oporniki + kondensator. Te trzy elementy to pewnie 20gr - aż tak cienko z budżetem? Nigdy nie wiesz, czy tego samego projektu nie użyjesz za rok w zasilaniu akumulatorowym. Wtedy będzie jak znalazł.

Zastanów się przez chwilę co się dzieje w układzie gdy jedno wejście jest w stanie 0 a na drugie podajesz PWM. Jak zmieniają się napięcia na drenach MOSFETów gdy na wejściu raz masz stan 0 a raz 1 - tu masz odpowiedź na swoje wątpliwości dot. (siermiężnego) sterowania bramek PMOSów.

Link to post
Share on other sites
Mały opornik w źródłach dolnych MOSFETów + prosty (tani) wzmacniacz i masz sensowne napięcie proporcjonalne do prądu silnika. Z resztą wzmacniaczy obejmujących swoim napięciem wejściowym plus zasilania jest już sporo. Dodanie zwykłego tranzystora npn robi z tego źródło prądowe, którego wyjście możesz odłożyć na rezystorze i już masz dokładnie to samo co rzadki ZXCT1009.

Dzięki, pomyślę o tym 🙂

Napięcie zasilania jest może mniej ważne, ale z kolei kosztuje dwa oporniki + kondensator. Te trzy elementy to pewnie 20gr - aż tak cienko z budżetem? Nigdy nie wiesz, czy tego samego projektu nie użyjesz za rok w zasilaniu akumulatorowym. Wtedy będzie jak znalazł.

Nie o 20 gr za dwa oporniki + kondensator mi chodzi, a o cenne wejścia ADC w mikrokontrolerze :> Ale to również rozważę!

Zastanów się przez chwilę co się dzieje w układzie gdy jedno wejście jest w stanie 0 a na drugie podajesz PWM. Jak zmieniają się napięcia na drenach MOSFETów gdy na wejściu raz masz stan 0 a raz 1 - tu masz odpowiedź na swoje wątpliwości dot. (siermiężnego) sterowania bramek PMOSów.

Zrozumiałem, dzięki 🙂

Dodatkowe pytanie:

A co sądzicie o gotowych układach sterujących silnikami? (w sumie pierwsze trzy to właściwie to samo - nieznacznie różnią się np. maksymalnie pobieranym prądem, czy dodatkowymi funkcjami) (...chyba)

1. DRV8838 - jednokanałowy sterownik silników - moduł

2. DRV8835 - dwukanałowy sterownik silników - moduł

3. DRV8833 - dwukanałowy sterownik silników - moduł

Albo taki wypas już z mikrokontrolerem 😃 MiniMoto DRV8830 - sterownik silników I2C - SparkFun

Pozdrawiam,
greebqmaster

Link to post
Share on other sites

Doszedłem do wniosku, że bez SMD się nie obejdzie więc kupiłem te MOSFETy. Teraz mam drugi problem, bo nigdy nie projektowałem płytki, ani nie wytrawiałem. Bardzo chętnie bym się tego nauczył i pewnie w końcu to zrobię, ale boję się, że nie zdążę przez to z inżynierką.

Znalazłem za to ciekawą płytkę uniwersalną SMD, na której zmieściłbym wszystkie tranzystory do sterowania manipulatora, z których wyprowadziłbym odpowiednie przewody w odpowiednie miejsca. Czy to miałoby sens? Gdzieś zasłyszałem, że elementy sterujące silnikiem powinny być jak najbliżej siebie (procesor, mostek H itp.), ale niestety, nie pamiętam gdzie to było i nie mogę podać źródła. Czy to prawda?

Pozdrawiam,
greebqmaster

Link to post
Share on other sites

greebqmaster, zapewne chodziło o to, żeby ściezki przez które płynie duży prąd były jak najkrótsze - najmniejsze straty. Sygnałowe też im krótsze tym lepsze, bo są bardziej odporne na zakłócenia (ścieżka działa jak antena).

Link to post
Share on other sites

Trekker, czytałem właśnie [Dla początkujących] Wykonywanie PCB termotransferem, ale im więcej informacji, tym lepiej 😃

Bobby, w takim razie najlepszym rozwiązaniem byłoby w ogóle zamontowanie płytki ze sterowaniem gdzieś w pobliżu serwa (ew. w jego obudowie jak w OpenServo)? Nie wiem jak z moimi zdolnościami manualnymi, dlatego trochę się o to martwię 😃 Wcześniej planowałem całą elektronikę upchnąć u podstawy robota, ale najwyraźniej nie będzie to dobry pomysł...

Link to post
Share on other sites

BlackJack, z potencjometrem również to jest możliwe, bo mamy położenie, a prędkość jest pierwszą pochodną położenia po czasie 😉 W pętli regulatora położenie aktualne - położenie z poprzedniej iteracji pętli regulatora = prędkość.

Link to post
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

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.