Skocz do zawartości

Płytka sterująca z serwa jako mostek H


Pomocna odpowiedź

Witam.

Potrzebuje mieć/zrobić miniaturowy mostek H - jako, że miałem fajne małe serwa modelarskie, z których używałem tylko same silniki, to przydałoby się sterować silniczkiem tą małą płytką (oczywiście jeżeli jest taka możliwość). Scalak jakie jest na płytce to: KC8801 1208A.

Serwa są takie: http://abc-rc.pl/p/115/3223/serwo-cys-s0403-4-3g-0-8kg-cm-plastic-serwa-analogowe-serwa.html

Jeżeli nie byłoby możliwości zrobienia z tej małej płytki mostka sterującego samym silnikiem (jak mostek H), to będę zmuszony zrobić coś małego (tzn. też na mały prąd max ~500mA) na małych MOSFET'ach.

Z góry dziękuję za odpowiedzi!

Link to post
Share on other sites

Wlutuj zamiast potencjometrów zwykłe rezystory, będziesz sterował wychyleniem(kontrola lewo/prawo plus prędkość). Prawdopodobnie ten potencjometr ma 5k, czyli potrzebujesz dwa 2.5K rezystory. Zrobiłem tak już w niejednym projekcie np.: CNC, aucie, pojeździe gąsienicowym , tyle że ja wykorzystałem również przekładnie.

  • Lubię! 1
Link to post
Share on other sites

Tak jak mówiłeś potek ma ~5kΩ, mój miernik pokazuje 4.36kΩ.

Czyli będę mógł sterować silnikiem lewo/prawo + PWM? Tylko w jaki sposób? Tak jak zwykłe serwo, czy jak zwykły mostek H? Hmm... wtedy miałbym tylko 3 piny do sterowania, dobrze myślę?

Zauważyłem Twój "edit".

Ja też używam mocno przerobionej przekładni z tego właśnie serwa 🙂

Link to post
Share on other sites

Podłączasz plus i minus jak zwykle, a sygnał pwm wykorzystujesz do sterowania.

Musisz sobie tylko środkową pozycje wyłapać i sterować odchyleniem od niej.

Co do serwa ja używam jego wielkich braci w wersji standard.

Uważaj by silnik ci się nie spalił nie są przyzwyczajone do zbyt długiego kręcenia pod obciążeniem(starczy dać radiator).

Link to post
Share on other sites

No tak mam przy przewody: jeden VCC, drugi GND, a trzeci sygnał/PWM - czyli powyżej pewnej wartości będzie mi się silnik kręcił, np. w lewo, poniżej w prawo, a na środku będzie stał, tak?

Link to post
Share on other sites

Ok, fajnie 🙂 Ten przewód, który wychodzi z obudowy serwa maj kolory odpowiednio: brązowy, czerwony, żółty - czyli odpowiednio: GND, VCC, sygnał?

A przewody przy płytce, które idą do potka odpowiednio: brązowy, żółty, pomarańczowy i ze zdjęcia, które robiłem wcześniej wynika, że ten żółty kabelek jest podłączony do środkowej nóżki potencjometru, czyli brązowy powinien być masą, a pomarańczowy plusem. To taka rozkmina, aby czegoś nie zepsuć 🙂

Wszystko fajnie, tylko nasuwa mi się myśl jak to napisać tzn. program do sterowania w C. Mam otwartą notę uC. Oczywiście muszę odpowiednio skonfigurować Timer1 od PWM'a (OCR1A, OCR1B). Mikrokontroler to ATmega8.

Link to post
Share on other sites

Spoko, spróbuję sam 🙂

Tylko mam pytanie, jak sygnał podłącze pod OC1A (PWM1A), to jak napiszę w kodzie, aby wypełnienie było równe - powiedzmy 150, to silniczek powinien już kręcić?

Link to post
Share on other sites

Zakładam, że do serw musi być wysłany sygnał co 20ms, co daje nam częstotliwość 50 Hz, natomiast Amtega8 jest taktowana wewnętrznym oscylatorem 8 MHz. Wykorzystując więc Timer1 do tego celu, trzeba tak go stawić by na jego wyjściach OCR1A i OCR1B był przebieg o częstotliwości 50 Hz. Niech trybem timera będzie Fast PWM, gdzie TOP to ICR1 (mode 14). Wykorzystując wzór ze strony 90 datasheetu F_ocnx=F_cpu/(N*(1+TOP)), gdzie N to preskaler timera, TOP to max wartość do której zlicza timer, F_cpu to częstotliwość taktowania mikrokontrolera, a F_ocnx to częstotliwość wyjściowa pinów 15 (PB1) oraz 16 (PB2). Podstawiając nasze dane: 50 = 8 000 000 / (N*(1+TOP)). Wybierając N równe 8, wychodzi że 1+TOP = 20 000, czyli TOP to 19 999. Mając te wszystkie dane możemy przystąpić do inicjalizacji timera:

//inicjalizacja Timera1 jako Fast PWM: czestotliwosc -> 50 Hz | preskaler - > 8 | piny -> clear on compare

//clear on compare oba wyjscia
TCCR1A |= (1<<COM1A1) | (1<<COM1B1); 

//tryb 14 - Fast PWM, TOP = ICR1
TCCR1A |= (1<<WGM11);
TCCR1B |= (1<<WGM13) | (1<<WGM12);

//preskaler - 8
TCCR1B |= (1<<CS11);

//TOP - 19 999
ICR1 = 19 999;

Chcąc sterować serwem/serwami wykorzystujemy do tego rejestry OCR1A i OCR1B. Środek powinien się znajdować około wartości 1 500, max wychylenie kolo 2 000 - 2 200, minimalne 800 - 1 000, np.:

 OCR1A = 1 500; //serwo stoi
OCR1B = 2 000; //serwo maksymalnie wychylone w jedna strone

Korzystałem z tego datasheetu pisząc kod http://www.atmel.com/images/atmel-2486-8-bit-avr-microcontroller-atmega8_l_datasheet.pdf Mam nadzieję, że będzie to pomocne 😋

  • Pomogłeś! 1
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.