Hallo Ich hab ein Problem mit meinen beiden Servos. Es handelt sich um 2 HiTec HS422, beide neuwertig. Beide hängen an einem ATmega128, programmiert in BASCOM, betrieben mit 6V. Um das Tastverhältnis kümmert sich die BASCOM-eigene Servo()-Routine. Generiert werden die Pulse mit einem Timer-Interrupt. Das ganze dürfte recht zu Das Problem welches ich habe ist, dass zwar Richtungsanweisungen anstandslos und perfekt ausgeführt werden, aber der Servo dann in der Ruhelage anfängt zu zittern, und zwar gewaltig! An was kann soetwas liegen? Den Sourcecode will ich euch nicht zumuten, der stemmt locker 20k Zeilen. Ist aber sehr sauber geschrieben und vor allem da die Ansteuerung mit einem Interrupt arbeitet glaube ich kaum, dass es am restlichen Programm liegt. Gibts da allgemeine Probleme an was soetwas liegen kann oder auf was ich mal achten sollte?
Sowas hat bei mir mal an einer hochohmigen Versorgung aus alten NICD-Akkus gelegen. Am Labornetzteil haben die selben Servos perfekt funktioniert. Gruß Dr.Seltsam
Das problem hatte ich auch das liegt an dem Reload wert. http://bascom-forum.de/index.php?topic=71.msg953#msg953 mit dem wet klappts bei mir.
Ich kenne mich mit diesen Kauf-Servos nicht aus, aber - was liefern die als Feedback-Signal ? - Wie wertest du das aus? - Wie ist deine Regelung dafür? Wenn du willst dass die den Wert 512 (von 0 bis 1023) annehmen dann musst du ein gewisses Spiel einbauen. Durch die eigene Masse drehen die sich über diese Stellung hinaus und dann dreht sich der Motor wieder rückwärts um auszugleichen. Im Endeffekt bekommst du dann eine Schwingung, wobei die Frequenz von der Masse des Motors, der Übersetzung, der Betriebsspannung usw. abhängt. Wenn du jetzt die Mitte (512) willst dann sagst du dass der Motor stoppen soll wenn du in etwa in diesem Bereich bist. Also: 512 +/- 10 Intelligenter ist es das PWM- Ansteuerungssignal kurz vorher zu verkleiner, schon kurz vor 512 bei einer Pulslänge von NULL zu sein. Wenn der Motor durch seine eigene Trägheit noch etwas weiter läuft und dann zum halten kommt ist das recht genau bei 512. Der Vorteil: Du erreichst die 512 schneller
Atmega8 Atmega8 wrote:
> Ich kenne mich mit diesen Kauf-Servos nicht aus,
dann solltest du eine Antwort sein lassen.
Alle deine Punkte sind völlig irrelevant, da ein
Servo eine komplette Regelelektronik mit im Gehäuse
hat. Du schickst ihm lediglich einen regelmässigen
Puls wobei die Pulsbreite der gewünschten Servoposition
entspricht. Alles andere macht die Elektronik im Servo.
Normale Servos schnattern wenn man ihnen ein konstantes Drehmoment abverlangt. Falls das Servo konstante Kraft liefern muss und nicht schnattern darf, so ist ein Digitalservo einzusetzen. Falls die Pulse jittern, dh nicht konstante Laenge haben schnattert das Servo auch.
>Den Sourcecode will ich euch nicht zumuten, der stemmt locker 20k >Zeilen. Daran wird es aber vermutlich liegen...
Danke für eure Hilfe, hier noch ein paar weitere Infos: - Die gesamte Schaltung wird an einem geregelten Labornetzteil betrieben. Störeinflüsse, Oberschwingungen, etc. sind also auszuschließen. - Die Servos haben noch keine Last, die sie bewegen sollen - @bas_ratte Hab mir das angeschaut, habe den gleichen Relaodwert, meine Initialisierung sieht wie folgt aus:
1 | 'Initialisierungsroutine für die Servos |
2 | Config Servos = 2 , Servo1 = Portb.7 , Servo2 = Portb.4 , Reload = 10 , Timer = Timer0 |
3 | Config Portb.7 = Output |
4 | Config Portb.4 = Output |
5 | |
6 | 'Die Ansteuerung erfolgt dann so: |
7 | Servo(1) = 100 |
8 | Servo(2) = 100 |
- @ Atmega8 Atmega8 Ich kann bei den Servos kein Toleranzfeld definieren. Ihnen wird nur ein Wert zugewiesen, alles andere übernehmen sie selbstständig. Es kann doch nicht sein, dass die Servos ständig zittern? Digitale mögen von Vorteil sein aber das muss mit denen doch auch gehen.
> Den Sourcecode will ich euch nicht zumuten, der stemmt locker 20k > Zeilen. Besteht etwa damit ein Zusammenhang? Sperrst du womöglich irgendwo die Interrupts? Gibt es noch weitere Interruptroutinen, die den Prozessor bei gesperrten Interrupts belasten? Kannst du versuchen heauszubekommen, ob auf dem PWM-Signal ein Jitter ist? > Ist aber sehr sauber geschrieben und vor allem da die > Ansteuerung mit einem Interrupt arbeitet glaube ich kaum, dass es am > restlichen Programm liegt. Glauben heißt "nicht wissen".
sorry das Enable Interrupts ist im Code drin, hab ich nur hier vergessen reinzuposten. Ich sperre die Interupts an keiner Stelle, auch gibt es bis auf 2 PWM-Signale (laufen mit Timer1) keine anderen Interruptsroutinen im gesamten Programm und die Timer werden an keiner Stelle umkonfiguriert. Allerdings sehe ich gerade in den Specs des HS-422, dass er alle 15ms einen Puls braucht und nicht alle 20ms? Oder liege ich da falsch? http://www.hitecrcd.com/product_file/file/49/hs422.pdf Wie mache ich das Bascom klar? Der Relaodwert 10 steht ja für 20ms. Aber welcher wert steht dann für 15ms? Wie ist da der Zusammenhang? EDIT: Dreher reingebracht und verbessert
> Allerdings sehe ich gerade in den Specs des HS-422, dass er alle 15ms > einen Puls braucht und nicht alle 20ms? Oder liege ich da falsch? Also ich sehe im Datenblatt nur was von PULSE WIDTH CONTROL 1500usec NEUTRAL und CLOCK WISE/PULSE TRAVELING 1500 TO 1900usec 1500 µs sind 1,5 ms, nicht 15.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.