[BASCOM] Jak wykryć położenie serwa ?

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

[BASCOM] Jak wykryć położenie serwa ?

Post autor: matrix » 13 paź 2011, 9:38

Ogólnie wiadomo jak steruje się serwomechanizmem z poziomu bascoma. Komenda brzmi:

Kod: Zaznacz cały

servo(1)=  ' tu liczba bądź zmienna
Jeśli będę przesuwał serwo co jeden lub nawet dwa żeby osiągnąć zadany punkt to serwo działa dość wolno. Z pełną prędkością działa wtedy gdy zadam mu skrajne wartości czyli na przykład jeśli będę kazał przesuwać się w lewo od pozycji powiedzmy 60 to nie napiszę decr tylko:

Kod: Zaznacz cały

servo(1)=24
Ale co jeśli chcę zatrzymać serwo gdzieś wcześniej niż położenie skrajne? Powiedzmy że wcześniej znajduje się stycznik który poda mi informacje że serwo dotarło do punktu do którego chciałem, ale nie jest to skrajna pozycja serwomechanizmu.

Skąd mam wiedzieć jaką wpisać liczbę by akurat w tym miejscu ustawić serwo? Nadmienię że mój pożądany punkt zatrzymania serwa nigdy nie jest stały, jego położenie może się zmieniać i zmienia się.

Wiadomo że polecenie:

Kod: Zaznacz cały

servo(x)=XX
korzysta z przerwania od timera1, da się wykryć to przerwanie pisząc on timer1?
Czy nie zakłóci to normalnej pracy serwa?
Ostatnio zmieniony 13 paź 2011, 20:23 przez matrix, łącznie zmieniany 1 raz.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 13 paź 2011, 11:16

Obliczając skok serva dla zadanej wartości. Kontretnie to jak trzeba zmienić impuls sterujący aby się obrócić o 1°. Przy czym będziesz musiał śledzić to w czasie, co skomplikuje cały problem.
Aczkolwiek to co ty chcesz zrobić nie robi się servami, tylko zwykłymi silnikami, no chyba że przerobisz sobie serwo. Chyba prostrze podejście.

Awatar użytkownika
c4v2
Użytkownik
Posty: 426
Rejestracja: 22 lis 2005, 15:14
Lokalizacja: z przed monitora

Re: [BASCOM] Jak wykryś położenie serwa ?

Post autor: c4v2 » 13 paź 2011, 18:34

matrix pisze:...Nadmienię że mój pożądany punkt zatrzymania serwa nigdy nie jest stały, jego położenie może się zmieniać i zmienia się. Wiadomo że polecenie:

Kod: Zaznacz cały

servo(x)=XX
korzysta z przerwania od timera1, da się wykryć to przerwanie pisząc on timer1?
Czy nie zakłóci to normalnej pracy serwa?
Czyli krańcówka(i) o zmiennym położeniu w płaszczyźnie prostopadłej do osi serwa?
Co do wykorzystywania Timera1 przy sterowaniu przedefiniowanymi poleceniami do obsługi serw to kożystanie z Timer1 w innych fragmentach programu na pewno zakłóci działanie serwa. Ogólnie to przedefiniowane polecenia Bascom AVR działają nie stabilnie przy większej ilości serw. Temat sterowania serw "na piechotę" był poruszany na forum:Temat

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 13 paź 2011, 20:31

kayron pisze:Aczkolwiek to co ty chcesz zrobić nie robi się servami, tylko zwykłymi silnikami, no chyba że przerobisz sobie serwo. Chyba prostrze podejście.
Znacznie prostsze ale do wartości zmiennej dla serwa później muszę dorzucić jeszcze wartość drugiej zmiennej i to "zmiksować"
c4v2 pisze:Czyli krańcówka(i) o zmiennym położeniu w płaszczyźnie prostopadłej do osi serwa?
Raczej chyba nie ma to znaczenia? Krańcówki będą jednocześnie oddziaływać z ramieniem serwa. Taki jakby force feedback. Jak popychacz umocowany z małym luzem do ramienia ruszy się i naciśnie na któryś stycznik, to ten uruchomi serwo w przeciwną stronę do chwili aż nacisk na popychacz ustąpi.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 14 paź 2011, 7:06

Tym bardziej opłacalene jest przerobienie serva na silnik z przekładnią o dużym momencie, i dorobienie własnej elektroniki co nie będzie ani drogie, ani skąplikowane.
Ja ma tak przerobione serva, w środku spokojnie znieścił mi się mostek H do sterowania sinikiem Lewo-prawo-stop, tylko zamiast 3 z serwa wychodzę 4 przewody.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 14 paź 2011, 8:07

kayron pisze:Tym bardziej opłacalene jest przerobienie serva na silnik z przekładnią o dużym momencie
Tylko powiedz mi jak do takiego sterowania dorzucić zmienną z zakresu PWM?
Choć przyznam że mam pewną koncepcję.

A mogę do tak przerobionego serwa podłączyć do mostka H oba wyjścia sprzętowego PWM z procka? Czyli na jednym wejściu mostka będzie PWM up a na drugim PWM down. Jak długo pozyje taki silnik jak będzie sterowany dajmy na to 70% w jedną stronę i 30% w drugą?

Silniki z zasady nie lubią takiego szybkiego przełączania kierunku obrotów.

Awatar użytkownika
c4v2
Użytkownik
Posty: 426
Rejestracja: 22 lis 2005, 15:14
Lokalizacja: z przed monitora

Post autor: c4v2 » 14 paź 2011, 11:25

matrix pisze:...A mogę do tak przerobionego serwa podłączyć do mostka H oba wyjścia sprzętowego PWM z procka? Czyli na jednym wejściu mostka będzie PWM up a na drugim PWM down. Jak długo pozyje taki silnik jak będzie sterowany dajmy na to 70% w jedną stronę i 30% w drugą? Silniki z zasady nie lubią takiego szybkiego przełączania kierunku obrotów.
Mostek H pozwala jedynie na zmianę kierunków obrotów Jeżeli na jednym wyjściu mostka będzie zasilanie to na drugim będzie masa i odwrotnie. Każda inna konfiguracja powoduje że przez obciążenie (silnik) nie płynie prąd. Zasilając mostek H przebiegiem PWM sterować będziemy prędkością obrotową silnika a nie położeniem osi.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 14 paź 2011, 12:43

Jeżeli tym PWM, chcesz sterować szybkość i kierunek obrotów to się da, na wszystko jest sposób. Potrzebny jest tylko jeden kanał PWM, i dowolny inny pin CPU do zmiany kierunku DIR, przy czym działało by to w ten sposób, jeżeli jedziesz np. w prawo z szybkością PWM = 70% i zmienisz stan końcówki DIR na przeciwny, to silnik pojedzie ci z czybkością 100%-70% = 30% w przeciwną stronę. Wszystko wg tej ideii, tylko mostek byłby inny bo pojedyńczy.
Załączniki
PWM.JPG

_adam_
-
Posty: 73
Rejestracja: 16 maja 2009, 0:14
Lokalizacja: ------

Post autor: _adam_ » 14 paź 2011, 12:53

Może dałoby się podłączyć do potencjometru wbudowanego w serwo i z niego odczytywać kąt skręcenia.

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 14 paź 2011, 19:03

c4v2 pisze:Zasilając mostek H przebiegiem PWM sterować będziemy prędkością obrotową silnika a nie położeniem osi.
To wiem kolego c4v2, znam podstawy choć z moich pytań może wynikać nieco inaczej.
kayron pisze:Jeżeli tym PWM, chcesz sterować szybkość i kierunek obrotów to się da, na wszystko jest sposób.
Dzięki za podpowiedź, będę mocno myślał. Tylko jakbyś mógł kolego kayron rozwinąć swoją myśl? Podając na wejście o oznaczeniu KIERUNEK stan H/L sterujemy kierunkiem obrotów?
_adam_ pisze:Może dałoby się podłączyć do potencjometru wbudowanego w serwo i z niego odczytywać kąt skręcenia.
Coś w tym jest. Z niego między innymi będę brał max skręt czyli ograniczenie dla mechaniki serwa, żeby mi jej szlag nie trafił.

ODPOWIEDZ