Sterowanie serwem modelarskim


Witam, dawno nie pojawiałem się na forum. Przez ten czas zdobyłem już trochę doświadczenia z bascomem i teraz nie mogę poradzić sobie z problemem sterowania serwem. Z tego co wiem serwo sterowane jest przez podawanie sygnału przez PWM uC. W bascomie istnieje funkcja servo(x) = wartość. Tyle że mam problem z ustawieniem wartości maksymalnej, minimalnej i środkowej wychylenia serwa. Mam zamiar w oparciu o parę serw zbudować jakiegoś robota przenoszącego niewielkie przedmioty np. ołówek czy linijkę. Moje pytanie: czy istnieje jakiś wzór na określenie tej wartości dla różnych wychyleń?




Portret użytkownika matrix

Re: Sterowanie serwem modelarskim

napisz sobie prosty soft i doświadczalnie dobierz wartości. kiedyś napisałem prosty programik który za pomocą dwóch przycisków zmniejsza i zwiększa wartość sygnału serwa. działa jak siemasz. wartości sobie zmodyfikuj według własnych potrzeb.

program jest na atmega8 i jest tak prosty że chyba nie wymaga komentarzy?

$PROG &HFF , &HA4 , &HD9 , &H00    ' generated. Take care that the chip supports all fuse bytes.
 
$regfile = "m8def.dat"
 
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
Config Portb.0 = Output
config pinb.1 = input
config pinb.2 = input
Config Adc = Single , Prescaler = Auto , Reference = avcc       'config ADC
Start Adc
 
Dim i As Byte
dim gaz as word
dim pomocnicza_gaz as byte
 
s1 alias pinb.1
s2 alias pinb.2
 
set s1
set s2
 
Enable Interrupts
 
Servo(1) = 50
pomocnicza_gaz = 30
 
 
 
 
  Do
  gaz = getadc(0)               '4 - krotne pobranie ADC dało mie lepszą dokładność
  gaz = gaz + getadc(0)
  gaz = gaz + getadc(0)
  gaz = gaz + getadc(0)
 
    shift gaz , right , 4
    i = gaz
 
    if s1 = 0 then
     incr pomocnicza_gaz
      if pomocnicza_gaz > 60 then
         pomocnicza_gaz = 60
      end if
      waitms 50
    end if
    if s2 = 0 then
     decr pomocnicza_gaz
      if pomocnicza_gaz < 1 then
        pomocnicza_gaz = 1
      end if
      waitms 50
    end if
    i = i + pomocnicza_gaz
 
  servo(1) = i
 
 
 
Loop
End

Portret użytkownika gosc

Już sobie sprawdziłem

Już sobie sprawdziłem wychylenia maksymalne i minimalne. Jedna rzecz mnie dziwi:
wychylenie minimalne to 34, a maksymalne to 178. Policzyłem gdzie powinien znajdować się środek - 72, ale "na oko" środek ma wartość ~107. Nie wiem czy jakaś nowa matematyka jest czy może te moje wartości są źle ustalone, ale dla większych(lub mniejszych) 0 1 wartość serwo próbuje obracać się cały czas i stuka w ograniczenie obrotu...

Portret użytkownika Kondziu

Poradziłem sobie z tym

Poradziłem sobie z tym problemem ;) Okazało się że środek jest (w moim przypadku) na 106. Bo 72+34=106. Nie dodałem wartości początkowej...

-

Wiem że nic nie wiem...

Portret użytkownika gosc

pomoc

Może kolega przedstawi projekt? Podeśle zdjęcia itp. jestem zainteresowany podobną konstrukcją.