-
-
ja klar, das geht schon, aber die Technik in den Servos stammt eben aus
den 60,70gern. Heute würde man einen Wert schicken und das Servo hält den Wert bis zum nächsten Urknall. Leider ist es aber nicht so.
Wer mehr als 16 Servos braucht, der sollte einfach einen
zweiten Atmel "Huckepack" aufsetzen und beim Versenden der Daten
einfach eine ID vergeben "A1" "A2" um den Chip zu selektieren.
Der Andere wartet eben solange bis er wieder dran ist und updated
seine Servos solange mit den alten Werten.
Wer genug Geld hat, kann auch Servos mit höherem Interval kaufen.
Diese liegen bei rund 3KHz (300ns) und werden für den Heckrotor
in Hubschraubern eingesetzt. Jeder Hersteller hat so welche.
Manchmal aber nur in Verbindung mit einem Kreisel.
Mit denen sollten 32 oder mehr kein Problem sein. Aber eben teuer !
Der Standard (20ms) wird sich sicher in den nächsten Jahren nicht ändern, da im Modellbau dafür eigentlich kein Bedarf ist (ausser Hubi).
Hier mein Code um per RS232 zwei Servos zu steuern.
Kann durch Erweitern von Var "Servo3..4..5" ,
den Abfragen "$S3..,4...,5" und pulsout auf
mehr Servos ausgelegt werden.
Mit Hyperterm (o.ä.) können die Servos gesteuert werden.
Ich benutze einen STK200.
$crystal = 4000000
$baud = 1200
Config Portb = Output
Config Serialin = Buffered , Size = 20
Dim Servo1 As Integer
Dim Servo2 As Integer
Dim Scount As Byte
Dim Sinp As String * 20
Dim Stemp As Byte
Dim Temp As String * 20
Config Timer0 = Timer , Prescale = 1024
On Timer0 Timover
Enable Interrupts
Enable Timer0
Portb = 0
Servo1 = 1000
Servo2 = 1000
'Anfang:
'kleine Testschleife
'For Servo1 = 200 To 2400 Step 1
'Waitms 1
'Next Servo1
'For Servo1 = 2400 To 200 Step -1
'Waitms 1
'Next Servo1
Do
If Ischarwaiting() = 1 Then
Gosub Check
End If
Loop
Check:
Stemp = Inkey()
If Stemp <> 13 Then
Sinp = Sinp + Chr(stemp)
Return
End If
If Left(sinp , 3) = "$S1" Then
Temp = mid(sinp , 4 , 4)
Servo1 = Val(temp)
Print "Servo1 = " ; Temp
End If
If Left(sinp , 3) = "$S2" Then
Temp = mid(sinp , 4 , 4)
Servo2 = Val(temp)
Print "Servo2 = " ; Temp
End If
If Left(sinp , 3) = "$S?" Then
Print "Servo1 = " ; Str(servo1)
Print "Servo2 = " ; Str(servo2)
End If
Sinp = ""
Return
'Goto Anfang
Timover:
Pulseout Portb , 0 , Servo1
Pulseout Portb , 1 , Servo2
Timer0 = 180
Return
Gruß
Frank
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen