Przesunięty przez: daniel93 25 Cze 08 01:25 |
Funkcja "CONFIG SERVOS" w Bascomie |
| Autor |
Wiadomość |
ziober

Posty: 46 Skąd: Tarnów
|
Wysłany: 16 Gru 06 08:02 Funkcja "CONFIG SERVOS" w Bascomie
|
|
|
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)? |
|
|
|
|
 |
daniel93


Pomógł: 11 razy Posty: 376 Otrzymał 16 piw(a) Skąd: Wujskie
|
Wysłany: 17 Gru 06 02:12
|
|
|
| Da się, ale nie możesz pominąć elektroniki, co chyba zrobiłeś, o ile się nie mylę. |
|
|
|
|
 |
ziober

Posty: 46 Skąd: Tarnów
|
Wysłany: 17 Gru 06 07:43
|
|
|
Nie przerobiłem serw bo jeszcze ich nie kupiłem |
|
|
|
|
 |
daniel93


Pomógł: 11 razy Posty: 376 Otrzymał 16 piw(a) Skąd: Wujskie
|
Wysłany: 22 Gru 06 06:27
|
|
|
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... |
|
|
|
|
 |
ziober

Posty: 46 Skąd: Tarnów
|
Wysłany: 26 Gru 06 12:45
|
|
|
| Cytat: | 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... ;P |
|
|
|
|
 |
daniel93


Pomógł: 11 razy Posty: 376 Otrzymał 16 piw(a) Skąd: Wujskie
|
Wysłany: 27 Gru 06 01:02
|
|
|
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 |
|
|
|
|
 |
jogurt_wisniowy

Posty: 10 Skąd: Mysłowice
|
Wysłany: 16 Mar 07 04:22
|
|
|
| Małe pytanie co do tej instrukcji, jaki minimalny kąt obrotu można uzyskać za jej pomocą? |
|
|
|
|
 |
bogdan_p

Pomógł: 1 raz Posty: 20 Otrzymał 1 piw(a) Skąd: Pszczyna
|
Wysłany: 20 Mar 07 09:32
|
|
|
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ą |
|
|
|
|
 |
jogurt_wisniowy

Posty: 10 Skąd: Mysłowice
|
Wysłany: 24 Mar 07 06:52
|
|
|
ok już sobie z grubsza poradziłem, kod wygląda tak:
| Kod: |
$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 |
|
| Ostatnio zmieniony przez jogurt_wisniowy 31 Mar 07 07:59, w całości zmieniany 1 raz |
|
|
|
 |
bogdan_p

Pomógł: 1 raz Posty: 20 Otrzymał 1 piw(a) Skąd: Pszczyna
|
Wysłany: 24 Mar 07 08:06
|
|
|
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 |
|
|
|
|
 |
jogurt_wisniowy

Posty: 10 Skąd: Mysłowice
|
Wysłany: 31 Mar 07 08:08
|
|
|
| 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. |
|
|
|
|
 |
|
|