Skocz do zawartości

[C] Sterowanie serwomechanizmami


Pomocna odpowiedź

Napisano

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

  • 4 miesiące później...

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

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

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 😉

  • 2 miesiące później...

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

Bez ustawienia procka, czasami zdarzały mi się problemy, tak więc lepiej ustawić.

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