Skocz do zawartości

Funkcja "CONFIG SERVOS" w Bascomie


Pomocna odpowiedź

Napisano

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

Da się, ale nie możesz pominąć elektroniki, co chyba zrobiłeś, o ile się nie mylę.

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

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

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 😉

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

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ą

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

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

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.

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