Skocz do zawartości

Płytka sterująca z serwa jako mostek H


Pomocna odpowiedź

Napisano

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!

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

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 🙂

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

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?

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.

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ć?

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

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