Skocz do zawartości

Manipulator sterowany potencjometrami


Dotli

Pomocna odpowiedź

Zaczekajcie aż się Dotli wypowie, bo jak chce obsługiwać serwa to mostek trzeba wywalić i problemu nie będzie - jak nie bascomowe "config servo", to zwykłe "pulseout" spełni dobrze swoją rolę.

Ja też z serwami miałem problem w bascom, ale po podpięciu kwarcu 12MHz "config servo" działało bezproblemowo (dla 3 serw). Mimo wszystko od niedawnej przesiadki wolę C 😉

Link do komentarza
Share on other sites

A mógłbyś opisać w jaki sposób, czy poleceniem bascomowym, na jakim kwarcu itp.

Jeśli chodzi o serva to korzystałem z bascomowego polecenia:

CONFIG SERVOS =

Trzeba pamiętać że polecenie to zaprzęga do pracy timer0 więc już do niczego innego nie można go użyć.

Moja atmega8 śmiga na wewnętrznym oscylatorze 8MHz.

Nadmienię tylko że zmniejszyłem czas RELOAD. Standardowo w bascomie jest

Reload=10

ja wpisałem 8.

  • Lubię! 1
Link do komentarza
Share on other sites

To odnośnie serw wypadałoby żebym ja coś napisał, bo obsłużyłem w Bascomie 12 😃 A jakby trzeba było więcej to chyba też dałbym radę, przy pomocy Config Servos można do 16 (a szkoda, bo bym się pokusił o 3DOF).

Po pierwsze i najważniejsze: trzeba zapewnić bardzo dobre filtrowanie napięcia (dobre nie wystarczy). Najlepiej zasilać serwa z osobnego stabilizatora (tylko nie takiego 1A 😋 ) niż procesor, bez elektrolitów przy stabilizatorze ani rusz, a ceramiczny 100nF przydałby się najlepiej przy każdym serwie (ja stosuję tylko 2x2 100nF przy stabilizatorze).

Po drugie: w książce Wiązani pisze, że do większej ilości serw dobrze jest użyć większego kwarcu. Ja mam maksymalny dla mojego procesora, 20MHz.

Po trzecie: parametr Reload. W zasadzie służy on tylko ustawieniu wartości jakie będą sterowały serwem. Ja dobierałem doświadczalnie, nie pamiętam teraz jaki, ale warto poszukać między 5 a 15, i dla wartości np. 100 znaleźć środkowe położenie. Jest to tylko dla naszej wygody.

[ Dodano: 04-11-2010, 16:50 ]

I jeszcze jedno. Podczas korzystania z Config Servos nie można (albo mnie się nie udało) wywołać przerwań wewnętrznych na timerze1 - u mnie powodowało to również przestanie podawania impulsów na serwo z timera0, przez co serwa "flaczały".

  • Lubię! 1
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

Po trzecie: parametr Reload. W zasadzie służy on tylko ustawieniu wartości jakie będą sterowały serwem.

Błąd, jest to czas (w mikrosekundach) pomiędzy wywołaniem kolejnych przerwań.

I jeszcze jedno. Podczas korzystania z Config Servos nie można (albo mnie się nie udało) wywołać przerwań wewnętrznych na timerze1 - u mnie powodowało to również przestanie podawania impulsów na serwo z timera0, przez co serwa "flaczały".

Raczej Ci się nie udało. Ja dla pewności właśnie wywołałem.

Link do komentarza
Share on other sites

Błąd, jest to czas (w mikrosekundach) pomiędzy wywołaniem kolejnych przerwań.

Tak, ale błędu się nie dopatruję. Bo jak ustawisz mniejszy czas impulsu, to będziesz musiał wpisać większą wartość żeby serwo znajdowało się w tym samym miejscu. Ja napisałem jak to wygląda od strony praktycznej. Ja wpisałem Reload = 8. Działało mi i przy 10 i 12, ale te wartości przy 8 są dla mnie najwygodniejsze.

Raczej Ci się nie udało. Ja dla pewności właśnie wywołałem.

U mnie to raczej była wina programu, za dużo podprogramów i opóźnień w podprogramie przerwania. W takim razie się da.

Link do komentarza
Share on other sites

Tak, ale błędu się nie dopatruję. Bo jak ustawisz mniejszy czas impulsu, to będziesz musiał wpisać większą wartość żeby serwo znajdowało się w tym samym miejscu.

To się zgadza, ale jak napisałem, jest błąd w tym co chciałeś przekazać. Młody użytkownik pakietu BASCOM pomyślał by Twoim tokiem,

Link do komentarza
Share on other sites

Posiadam serwa TowerPro SG-5010 ale niestety są przerobione :/ . Zastanawiam się właśnie co by działało sprawniej serwa czy sam silnik ?. Z waszych postów zrozumiałem ze chyba lepiej zrobić to na samych serwach i tak postąpię , tutaj zrobiłem schemat . Rozumiem ze przy budowie na serwach bede musiał sterować PWM , dobrze zrozumiałem . Tutaj schemat :

Łącznie będzie 5 serwo mechanizmów

Link do komentarza
Share on other sites

Można też napisać PWM programowe. Korzystałem kilka razy i działa naprawdę świetnie.

Ja jeszcze chciałem nawiązać do programowego PWM. Programowe PWM ma delikatnie rzecz ujmując przewagę nad sprzętowym PWM'em, ponieważ programowym PWM'em można sterować masą różnych urządzeń czy silników czy kto czym tam chce, każdy może mieć inną wartość, a ilość ograniczona jest jedynie do ilości wyprowadzeń użytego mikrokontrolera.

Jak ktoś będzie chętny to pokażę jak napisać programowy PWM. Od razu zaznaczam że to nie mój soft, tylko kolegi Mirleya.

Link do komentarza
Share on other sites

Jak ktoś będzie chętny to pokażę jak napisać programowy PWM. Od razu zaznaczam że to nie mój soft, tylko kolegi Mirleya.

Ja bym prosił o jakiś przykład jeśli można oczywiście.. 🙂

Link do komentarza
Share on other sites

Ja bym prosił o jakiś przykład jeśli można oczywiście..

To jest (niepełny) soft z Mirleya (mam nadzieję że Mirek nie będzie miał mi za złe). W razie co -> TUTAJ <- jest całość ze strony Mirka.

'trzeba odpowiednio skonfigurować porty

Config Timer0 = Timer , Prescale = 8 'konfiguracja timera
Enable Timer0 : On Timer0 Prztimer0
Enable Interrupts

programowe_pwm Alias Portb.0 'do portu b.0 przypisuje nazwe programowe_pwm

Dim Licznik As Byte 'zmienna do liczenia ilosci przerwan
Dim zmienna_do_pwm as byte 'wisujac odpowiednia wartosc do tej zmiennej ustalamy wypelnienie PWM

zmienna_do_pwm = 100 'tu PWM wynosil bedzie 0

Do
Loop
End

Prztimer0:
Incr Licznik
If Licznik = 100 Then Licznik = 0'to powoduje ze PWM ma wartosc miedzy 0 a 100 co daje 1% na kazda jedna czesc ze 100

If Licznik < zmienna_do_pwm Then Set programowe_pwm Else Reset programowe_pwm
' tu wstawiajac wiecej zmiennych w podobny sposob mozemy rozszerzyc ilosc PWM'ow
Return
Link do komentarza
Share on other sites

no tak ale ja chce sterować proporcjonalnie ruchem potencjometru do ruchu serwo mechanizmu . Bardzo was proszę o sprawdzenie schematu , jeżeli będzie poprawny to w tygodniu zrobię pierwsze testy i się pochwalę

Link do komentarza
Share on other sites

no tak ale ja chce sterować proporcjonalnie ruchem potencjometru do ruchu serwo mechanizmu

No to w czym problem? Niestety pisząc:

config servos=

deklarujesz już dzialanie timera0 więc nici z programowego PWM'a.

Jeśli procek będzie pracował Ci przy częstotliwości 8MHz i wpiszesz wartość RELOAD = 8, to efektywne działanie serwa będziesz miał w przedziale

servo(x)=30 do 155

Podziel sobie wartość ADC przez 7 i napisz to tak:

zmienna_adc=0
zmienna_adc=getadc(x)            'x to numer adc z jakiego korzystasz
zmienna_adc=zmienna_adc/7

servo(x)=zmienna_adc              'servo(x) to numer serwa jakie chcesz wysterowac

po takiej operacji powinieneś dostać na serwo wartości z wejścia ADC, ale na zakresie potrzebnym Tobie.

mały edit:

Trzeba jeszcze to dopracować bo dla ADC poniżej wartości 210 nie będzie się działo nic, więc dla prawie jednej piątej obrotu potencjometru, a jest to niedopuszczalne. Zaraz coś pomyslę.

edit2:

wystarczy napisać:

zmienna_adc=0 
zmienna_adc=getadc(x)            'x to numer adc z jakiego korzystasz 
zmienna_adc=zmienna_adc+210
zmienna_adc=zmienna_adc/7 
servo(x)=zmienna_adc              'servo(x) to numer serwa jakie chcesz wysterowac 

i dla całego zakresu potencjometru masz proporcjonalny ruch serwa.

Link do komentarza
Share on other sites

Warto jeszcze uwzględnić, że potencjometr będzie pewnie miał większy zakres obrotu (większy kąt) niż serwo - myślę, że kalibrację trzeba by przeprowadzić metodą prób i błędów już po złożeniu całości.

Dotli, po raz ostatni Cię proszę, żebyś zadeklarował czy ostatecznie chcesz serwo, czy silnik z przekładnią! Jeśli serwo, to schemat jest zły.

Link do komentarza
Share on other sites

Warto jeszcze uwzględnić, że potencjometr będzie pewnie miał większy zakres obrotu (większy kąt) niż serwo - myślę, że kalibrację trzeba by przeprowadzić metodą prób i błędów już po złożeniu całości.

Ale dla mojego kawałka programu nie ma to znaczenia, bo nie przypisuje on konkretnej wartości ADC do konkretnego miejsca serwa. Korzysta tylko z przetworzonej wartości pobranego napięcia. Więc czy będzie się ów potencjometr obracał o 180st. czy 270 to nie ma znaczenia. Przy większym kącie obrotu będzie dokładniej.

Chyba że chodzi o to by miejsce orczyka serwa było dokładnie w tym samym miejscu co gałka potencjometru. Wtedy to już wyższa szkoła jazdy.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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