Skocz do zawartości

Funkcja "CONFIG SERVOS" w Bascomie


ziober

Pomocna odpowiedź

Witam!

Ostatnio w pomocy do Bascoma (AVR) znalazłem taką opcje jak "CONFIG SERVOS".

W przeznaczeniu pisze:

Określa ile serwomechanizmów będzie kontrolowanych przez uC i z jaką rodzielczością.

W składni:

CONFIG SERVOS=liczba SERVO1= końcówka [SERVOn=końcówka] RELOAD= czas

gdzie:

liczba ilość serwomechanizmów

końcówka nazwa portu sterującego odpowiednim serwomechanizmem

czas czas opóźnienia pomiędzy kolejnymi przerwaniami licznika TIMER0,

roździelość

Reszty nie przepisuje bo mi sie nie chce 🙂 (polski help do bascom AVR jest na elektrodzie)

A teraz mam pytanie: 🙂

Czy da się za pomocą tego polecenia sterować przerobionymi serwami, tak aby regulować ich prędkość (bez mostków h) i jaką wartość mam wpisać w REOLAD (kwarc 4MHz)?

Link do komentarza
Share on other sites

Dać się da.

Złam blokadę na trybku, wyciąg potencjometr i ustaw go ma w lewo.

W RELOAD wpisz 20ms (nie wiem jak, nie czytałem o tym poleceniu).

Niestety regulować prędkości to się nie da 🙁

Można spróbować dodać tranzystor na zasilanie serwa i sterować tranzystorem przez PWM. ALE nie jestem pewny czy to zadziała...

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

Złam blokadę na trybku, wyciąg potencjometr i ustaw go ma w lewo.

Daniel93, jak wyciągne ten potemcjometr to po jakiego grzyba mam wtedy ustawić go na lewo... 😋

Link do komentarza
Share on other sites

Prosta sprawa *🙂*

Chodzi o "oszukanie" układu sterowania w serwie.

Tylko muszę się poprawić bo powinno być na środku 😳

Jeśli ustawisz potencjometr na środku, to potem każąc procesorowi skręcić serwem np. w prawo, procesor będzie dążył do pozycji wyznaczonej w programie, aż wartość ta zrówna się z wartością wyznaczoną przez potencjometr. A jeśli potencjometr będzie na środku, to wartość z programu nigdy nie zrówna się z wartością na potencjometrze, więc serwo b0ędzie obracać się cały czas w kółko 🙂

To samo tyczy się obracania w lewo 😉

Link do komentarza
Share on other sites

proponuje najpierw poczytać o budowie , zasadzie działania i sposobie sterownia serwami

http://www.edw.com.pl/pdf/k13/32_05.pdf

http://www.edw.com.pl/pdf/k10/56_07.pdf

daniel93 jak wyłamiesz ogranicznik to następnym krokiem jest pozbycie się elektroniki i potencjometru z serwa , zupełnie bez sensu jest wyłamanie ogranicznika mechanicznego pozostawiając całą resztę i tak przy sterowaniu impulsowym bez ograniczenia mechanicznego wyłamiesz potencjometr , przy takiej przeróbce zupełnie bez sensu jest stosowanie instrukcji z Bscoma do ich obsługi , po prostu z serwa robisz silnik DC z dość dobrą przekładnią

Link do komentarza
Share on other sites

ok już sobie z grubsza poradziłem, kod wygląda tak:

$regfile = "m8def.dat" 
$crystal = 10000000
$baud = 9600

Config Servos = 4 , Servo1 = Portc.0 , Servo2 = Portc.1 , Servo3 = Portc.2 , Servo4 = Portc.3 , Reload = 2


Config Portc = Output
Config Portd.0 = Input

Enable Interrupts


'Dla reload 2 i 10 Mhz od 126-250 kąt 1.45 stopnia
Servo(1) = 126
Servo(2) = 150
Servo(3) = 150
Servo(4) = 250


Dim Servo_pos(4) As Byte

Do

  Servo_pos(1) = Servo(1) 
  Servo_pos(2) = Servo(2) 
  Servo_pos(3) = Servo(3) 
  Servo_pos(4) = Servo(4) 


Dim A$ As String * 1
  A$ = Waitkey() 


If A$ = "z" And Servo_pos(1) > 126 Then
  Servo(1) = Servo_pos(1) - 1
End If

If A$ = "x" And Servo_pos(1) < 250 Then
  Servo(1) = Servo_pos(1) + 1
End If

If A$ = "c" And Servo_pos(2) > 126 Then
  Servo(2) = Servo_pos(2) - 1
End If

If A$ = "v" And Servo_pos(2) < 250 Then
  Servo(2) = Servo_pos(2) + 1
End If

If A$ = "b" And Servo_pos(3) > 126 Then
  Servo(3) = Servo_pos(3) - 1
End If

If A$ = "n" And Servo_pos(3) < 250 Then
  Servo(3) = Servo_pos(3) + 1
End If

If A$ = "m" And Servo_pos(4) > 126 Then
  Servo(4) = Servo_pos(4) - 1
End If

If A$ = "," And Servo_pos(4) < 250 Then
  Servo(4) = Servo_pos(4) + 1
End If


Loop
End

Precyzja sterowania serwem zależy od częstotliwości kwarcu i parametru reload, udało mi się dojść do wielkości rzędu 0.8 stopnia (16MHz, reload = 1) ale brakuje mi zakresu w przypadku instrukcji servo() (jest ona typu BYTE i obsługuje wartości do 255) i serwo nie wykonuje obrotu w pełnym zakresie swoich możliwości. Czy można to ominąć pisząc swoją procedure obsługi serwa, i do jakich wielkości można dojść. Jak bardzo to jest skomplikowane do napisania? I pytanie z innej beczki, próbuje dogadać się z mikroprocesorem przez rs232 ale nie bardzo mi wychodzi, na dole widać kawałek kodu który wymyśliłem posiłkując się googlem i helpem, ale to bydle nie chce działać, można prosić o jakieś wskazówki?

//zmieniłem kod na taki jaki mam obecnie, żeby nie wklejać kolejnego prawie że identycznego kawałka kodu w kolejnym poście. Transmisja rs232 działa już jak należy

Link do komentarza
Share on other sites

sprawdź sobie komunikację jakim prostym programem bez procedur obsługi serw

w PC użyj systemowego Hyper Terminal , zobacz czy komunikacja działa w obie strony

powodem braku komunikacji może być MAX 232 lub zamienione końcówki 2-3 wtyku DB9

Link do komentarza
Share on other sites

Teraz kolejne pytanie jak widać w mojej poprzedniej wiadomości zmiana kątu serwa jest dokonywana co jeden krok po wykryciu naciśnięcia odpowiedniego znaku. Chciałbym jednak żeby obrót był dokonywany przy pomocy jakiejś dłuższej sekwencji znaków (np: A10 wtedy mógłbym to przerobić takżeby serwo A obróciło się za jednym zamachem o 10 kroków) Jaką instrukcję do tego użyć? bo kombinowałem z inkey, input i jakoś niespecjalnie mi to wychodzi. Nie wiem czy to ma jakieś znaczenie ale układ na razie testuje nie na rzeczywistym modelu lecz w Proteusie.

Link do komentarza
Share on other sites

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

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.