Skocz do zawartości

[C] Sterowanie serwomechanizmami


siemian

Pomocna odpowiedź

zakupiłem serwa z conrada jednak nie potrzebuje ich przerobionych jako napęd lecz normalnie. nie mogę znaleźć nigdzie w sieci w jaki sposób napisać program aby serwo wychylało się o tyle stopni ile chcę, procesor jakiego chcę użyć to ATMEGA8, jeszcze jedno pytanie czy napięcie które będę podawał na serwo musi być dodatkowo stabilizowane czy wystarczy dać normalne z zasilacza?

Najlepiej żeby program było można napisać w c

Link do komentarza
Share on other sites

Nareszcie znalazłem czas i środki żeby się zająć tym porządnie i od razu porażka. Program który mi podałeś nie działa poprawnie, nie reaguje na klawisze a serwo jak by próbowało się kręcić tylko w jedną stronę, ale tylko próbowało bo się nie kręci, nie wiem może ja popełniam jakiś błąd, żeby nie było niedomówień, serwo i uC zasilam stałym napięciem 5V (stabilizator L7805) z jednego źródła, serwa są sprawne bo są to nówki, działanie sprawdzałem na dwóch sztukach i na obu to samo, uC tak samo sprawdzałem 3 sztuki. Czy element podpięty oprócz serwa do PB1 jest niezbędny? nie potrafiłem tego zidentyfikować więc pomyślałem że to tylko coś dla lepszego zobrazowania działania.

Chciałem w takim razie zacząć od czego prostszego więc napisałem program w bascomie:

$crystal = 10000000

Config Servos = 1 , Servo1 = Portb.2 , Reload = 10

Config Portb = Output



Enable Interrupts





Do


  Servo(1) = 20

  Waitms 500

  Servo(1) = 80

  Waitms 500

  Servo(1) = 120

  Waitms 500

  Servo(1) = 180

  Waitms 500

  Servo(1) = 200

  Waitms 1000

Loop

End

Tutaj serwo nawet się nie poruszyło i nie słychać aby próbowało.

Już nie wiem co dalej, chciałem zrobić mechaniczne ramię zakupiłem 6 serw, a nawet jednego nie potrafię zaprogramować. Liczę na waszą pomoc we wskazaniu błędu lub przy napisaniu nowego programu.

Pozdrawiam

Z góry dziękuję.

Link do komentarza
Share on other sites

a zadeklarowałeś w programie odpowiedni procek np. $regfile = "2313def.dat"

masz to przykładowy program bo mi się nie podoba twój między DO a LOOP.

$regfile = "2313def.dat"

Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10

Config Portb = Output

Enable Interrupts

Servo(1) = 100 'włącz na 1000 mikrosekund

Servo(2) = 200 'włącz na 2000 mikrosekund

Dim I As Byte

Do

For I = 1 To 100

Servo(1) = I

Waitms 1000

Next

For I = 200 To 1 Step -1

Servo(1) = I

Waitms 1000

Next

Loop

End

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

dzięki za pomoc na reszcie serwo się ruszyło, ja wzorując się na przykładzie z polskiego helpa nie dopisałem regfile ponieważ był tam przykładowy program na użycie serw i nic o tym nie wspomniano

Teraz mam kolejne pytanie, jak ustawiać parametry dla "servo(1)=" bo przy wykonywaniu takiego programu:

$regfile = "m8def.dat" 
$crystal = 1000000
Config Servos = 1 , Servo1 = Portb.2 , Reload = 10
Config Portb = Output
Enable Interrupts


Do

  Servo(1) = 20

  Waitms 500

  Servo(1) = 80

  Waitms 500

  Servo(1) = 120

  Waitms 500

  Servo(1) = 180

  Waitms 500

  Servo(1) = 200

  Waitms 500


Loop

End

serwo ustawia się w pewnej pozycji wtedy wykonuje obró o jakieś ok. 120 stopni i wali o blokadę,

Czy przy projekcie mechanicznego ramienia warto wykorzystać bascoma? czy lepiej posiedzieć trochę więcej i próbować swoich sił w "c", jeżeli tak to proszę o wskazówki gdzie szukać potrzebnej mi wiedzy 😉

Link do komentarza
Share on other sites

Jeśli chcesz programować w C, możesz przetestować ten (poprawiony ) program, nie wiem czy działa, dziś nie mam po ręką żadnego sero żeby go sprawdzić.

http://abxyz.eu.interia.pl/servo1/main.c

http://abxyz.eu.interia.pl/servo1/main.hex

A na tej stronie jest jeszcze jeden przykład sterowania servo w C

http://martin.roboterbastler.de/?p=21

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

Witam, mam pytanie, czy tego programu do sterowania serw można użyć do mikrokontrolera Atmega16-16PU DIP40, a jeśli nie to jakie zmiany należałoby wprowadzić ? ( nie wiem, czy to pytanie jest banalne, ale dopiero się zapoznaje z mikrokontrolerami ).

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.