Ich habe 2 Servos in Gebrauch:
Nr. 1 ist für das schwenken einer Mini-Kamera zuständig und funktioniert perfekt.
Nr 2 ist der selbe Typ und soll die Lenkung für das Fahrzeug sein. Und hier harkts.
Der Lenk-Servo fährt nur hin und wieder in die programmierte Position.
Meistens rast er nur zur Soll-Position, schießt dann zurück über die Mittelstellung hinaus und "wiggelt" dann ein paar mal um die Mittelstellung herum bis er sie dann beibehält.
Oder er zuckt nur etwas um die Mittelstellung herum wenn man ihn nach rehchts oder links beordert.
Die Positionsbefehle gebe ich per RS232 an einen Mega8.
Das Programm ist so aufgebaut, das jeder vom PC gegebene Befehl vom Controller an den PC zurückgeschickt wird wenn der uC ihn verstanden hat.
Die Befehle werden in 99% der Fälle prompt bestätigt - ich bin also sicher das es nicht an der RS232-Kommunikation liegt.
Folgenden Code verwende ich:
Bei dem Servo hat auch ein "Reload"-Wert von 7 keine Besserung gebracht.Code:$regfile = "m8def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 19200 Enable Interrupts Config Pinc.1 = Output 'für Servo-Lenkung Config Pind.2 = Output 'für Kamera-Servo-Steuerung 'Für ANTRIEB (Buchse A) Config Pind.4 = Output 'Antrieb Kanal 1 Config Pind.5 = Output 'Antrieb Kanal 2 Config Pinb.1 = Output 'Antrieb PWM Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Tccr1b = Tccr1b Or &H02 'Prescaler = 8 Config Servos = 2 , Servo1 = Portd.2 , Servo2 = Portc.1 , Reload = 10 Dim SteerAngle as Integer 'Lenkwinel Dim SteerPosL as Integer Dim SteerPosM as Integer Dim SteerPosR as Integer Antrieb1 Alias Portd.4 'für Antrieb (PWM) Antrieb2 Alias Portd.5 AntriebPWM Alias Pwm1a SteerPosL = 97 'Servo-Lenkungs-Winkel-Vorgaben SteerPosM = 110 SteerPosR = 123 Servo(2) = SteerPosM '============================= 'Hauptschleife '============================= Do Do InByte = inkey() If InByte <> 0 then InString = InString + chr(InByte) End if Loop until InByte = 0 If InString <> "" Then Select Case InString Case "RT" 'REQUEST_TELEMETRIE call Compose_Telemetrie() print "ST" 'SET_TELEMETIRE print TelemetrieString Case "MOVE_STOP" print InString AntriebPWM = Aus 'Antrieb AUS Servo(2) = SteerPosM Case "MOVE_FWD" print InString Antrieb1 = 1 'Antrieb VOR Antrieb2 = 0 Servo(2) = SteerPosM AntriebPWM = MotorSpeed 'Antrieb aktivieren Case "MOVE_FWD_R" print InString Antrieb1 = 1 'Antrieb VOR Antrieb2 = 0 Servo(2) = SteerPosR AntriebPWM = MotorSpeed 'Antrieb aktivieren Case "MOVE_FWD_L" print InString Antrieb1 = 1 'Antrieb VOR Antrieb2 = 0 Servo(2) = SteerPosL AntriebPWM = MotorSpeed 'Antrieb aktivieren Case Else AntriebPWM = Aus print "uC hat ungueltigen Befehl" End Select End if InString = "" Waitms 100 'wieso geht RS232-Kommunikation nur damit? Loop
Die Versorgungsspannung kommt überigens von einem 5V Spannungsregler der auch den rest vom Board versorgt. Die empfohlenen Werte für die Puffer-Elkos ect. habe ich auch eingehalten.
Hat jemand eine Idee wo das Problem liegen könnte?







Zitieren

Lesezeichen