Hi,
Ich habe das gleiche Problem bei einem Nackten servo der auf dem Tisch steht - der zappelt auch die ganze Zeit.Das mit den Signalverdoppelungen sieht verdächtig aus, und ich würde das nicht sofort aufs Oszi schieben. Vielleicht lohtn es sich den Code nochmal genauer anzuschauen. In der aktuellen Firmware wird das Servosignal mit dem Empfängersignal "synchronisiert".
Im Empfänger IRQ steht:
If Channel = 5 Then 'when all relevant channels were read, enable the servo interrupt
Enable Timer1
End If
im servo IRQ steht:
If Portd.6 = 0 Then
Timer1 = Servopwm
Portd.6 = 1
Else
Portd.6 = 0
Disable Timer1
Timer1 = 65400
End If
Du könntest also mal die disable/enable Zeilen rausnehmen, und im ServoIRQ den Wert für Timer1 auf 31535 setzen (=17ms pause). Vielleicht löst das dein problem.
Außerdem könntest du mal versuchen das Servo abzuschrauben. Dein motor hat ne ziemlich hohe masse, dadurch könnte sich die Regelung innerhalb des Servos aufschwingen. Das ist bei günstigeren Servos relativ schnell mal der Fall.
Danke auch für die Glückwünsche!![]()
Ich habe auch vermutet das irgendwas in der Software schief läuft, aber ich kann mir nicht erklären warum das auf einmal auffällt, ich hatte zwar das Failsave und die Signalglättung auf 6 Kanäle geändert aber auch ohne diese Sache geht es nicht, zumal das ja mit meiner 40MHz funke auch passiert. Das schließt ja aus, dass es am Code liegt, ich habe es schiesslich auch mit der Original Firmware geprüft.
Der servo bewegt sich ja auch sehr hackelig, lediglich wenn er an die Grenzen fährt und die Min/Max Abfrage greift ist er ruhig, oder wenn du ihm ein konstantes Signal (wie zB im Idle Mode) gibst. Sobald er (auch ohne Motoren) in Hover oder Acro kommt zuckt er...
Ich wollte heute mal eine Rampe zum rauf und runter fahren Probieren, wenn er da immer noch zittert dann ist das mal ne Aussage.
Ausserdem werde ich noch einmal dein Servoprogramm aus dem RN Wissen ohne Funke probieren.
Aber ich werde trotzdem eine neue Platine Löten und mir einen neuen Arduino bestellen.
Ich vermute ganz stark einen Hardwaredefekt an der Platine oder dem Arduino - alles andere hab ich gewechselt oder das Problem ohne diese Komponenten auch gehabt.
Und wenn der Mist dann endlich wieder fliegt, dann können wir hier auch wieder über was anderes Reden :-/
Nils
EDIT: Ich habe diese Disable Zeile garnicht mehr drin (seltsam). Das sieht bei mir so aus:
Code:Servoirq: 'generate servo PWM pulseIf Servo_nr_by = 0 Then If Portd.6 = 0 Then 'wenn port low Timer1 = Servopwm 'dann timer auf entsprechende verzögerung Portd.6 = 1 'und port anschalten Else 'das hier passiert erst bei dem darauf folgenden interrupt Portd.6 = 0 'dann port wieder ausschalten Incr Servo_nr_by 'und den nächsten kanal bearbeiten End If End If If Servo_nr_by = 1 Then If Portb.2 = 0 Then Timer1 = Servo_roll_pwm Portb.2 = 1 Else Portb.2 = 0 Incr Servo_nr_by End If End If If Servo_nr_by = 2 Then If Portb.3 = 0 Then Timer1 = Servo_nick_pwm Portb.3 = 1 Else Portb.3 = 0 Incr Servo_nr_by End If End If If Servo_nr_by = 3 Then Timer1 = 40000 'eine pause von ca. 12ms bis zum nächsten interrupt. Bei guten Servos oder Brushlessreglern kann man hier bis auf 65530 gehen ==> ansteuerfrequenz von ~ 200Hz Servo_nr_by = 0 End If







Zitieren


Lesezeichen