Sterowanie serwem


Witam

Mam problem z wysterowaniem serwa modelarskiego Tower Pro SG90. Napisałem taki program jak poniżej, serwo powinno się samo obracać ale niestety tak się nie dzieje :( po włączeniu zasilania obróci się o pewien kąt i nic nie reaguję. Jak sprawdzić czy w ogóle to serwo nie jest uszkodzone? Oraz dlaczego serwo nie chce się obracać?

Z góry dziękuję za wszelkie odpowiedzi. Pozdrawiam.

'$sim
$regfile = "m8def.dat"
$crystal = 8000000
 
'*******************************************************************************
 
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
 
 
'*******************************************************************************
 
Config Servos = 1 , Servo1 = Portd.0 , Reload = 10
Config Portd.0 = Output
 
'*******************************************************************************
 
Dim I As Byte
 
Enable Interrupts
 
'*******************************************************************************
 
Cls
Cursor Off
 
Lcd "   Test serwa   "
Lowerline
Lcd "  d(-_-)b "
Wait 1
 
Cls
 
Do
 
'****************** Program sterownika *****************************************
 
For I = 0 To 100
 
 Servo(1) = I
 
  Cls
 Upperline
Lcd "Dzien dobry!"
 Lowerline
Lcd "Pozycja: " ; I
 
Waitms 200
 
Next
 
 
 
For I = 100 To 0 Step -1
 
 Servo(1) = I
 
 Cls
 Upperline
Lcd " Dzien dobry!"
 Lowerline
Lcd "Pozycja: " ; I
'pokazuje pozycje serwa
 
Waitms 200
 
Next
 
Loop
End
 
'*******************************************************************************




Portret użytkownika matrix

Re: Sterowanie serwem

Zmień reload na 8 i najpierw eksperymentalnie dobierz początkową wartość zminnej sterującej kątem serwa. Jeśli będzie za mała lub za duża wartość to tak będziesz miał. Serwo nie startuje od 0.Jak ja bawiłem się serwem to startowało od 45.

Portret użytkownika Chester

Serwo

W jaki sposób mogę sterować prędkością serwa. Zakładając że mam graniczne wartości serwa i pomiędzy jedną a drugą wartością serwo ma powoli się poruszać po naciśnięciu przycisku. Czy zwiększając reload serwo wolniej będzie się poruszać?

Program poglądowy:

'$sim
$regfile = "m8def.dat"
$crystal = 8000000
 
'*******************************************************************************
 
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
 
 
'*******************************************************************************
 
Config Servos = 1 , Servo1 = Portd.0 , Reload = 8
Config Portd.0 = Output
Config Portb.1 = Input
Portb.1 = 1
Config Portb.2 = Input
Portb.2 = 1
Config Portb.3 = Input
Portb.3 = 1
 
'*******************************************************************************
 
Dim I As Byte
 
Enable Interrupts
 
'*******************************************************************************
 
Do
 
'****************** Program sterownika *****************************************
 
Servo(1) = I
 
If Pinb.1 = 0 Then I = 50
If Pinb.2 = 0 Then I = 170
If Pinb.3 = 0 Then I = 100
 
 
Upperline
Lcd "Dzien dobry!"
Lowerline
Lcd "Pozycja: " ; I
 
 
 
Loop
End
 
'*******************************************************************************

Pozdrawiam :)

Portret użytkownika matrix

Re: Prędkość serwa

Napisz sobie pętlę FOR...NEXT. Najprościej użyć wait. Pobaw się a jak zajarzysz o co chodzi to użyjesz timera.

do
   if pinb.1 = 0 then                  'jeśli naciśniemy przycisk na pinie b.0
      for i = 30 to 50                 'dla I między 30 a 50
          incr i                       'zwiększ wartość I
          waitms 100                   'tu regulujesz czas poruszania się serwa
          if pinb.1 = 0 then exit for  'jeśli w trakcie naciśnięto przycisk to wyjdź z pętli for
      next i
    end if
 
 
loop

A, nie testowałem tego więc nie wiem jak będzie działać.