mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Servos zittern in Ruhelage


Autor: Florian S. (buddl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Dr.Seltsam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Eismann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
denen is einfach nur K A L T

Autor: bas_ratte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Atmega8 Atmega8 (atmega8) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: egal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so, jetzt könnt ihr euch wegen der definition "servo" streiten!

Autor: 1328 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Den Sourcecode will ich euch nicht zumuten, der stemmt locker 20k
>Zeilen.

Daran wird es aber vermutlich liegen...

Autor: Florian S. (buddl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
'Initialisierungsroutine für die Servos
Config Servos = 2 , Servo1 = Portb.7 , Servo2 = Portb.4 , Reload = 10 , Timer = Timer0
Config Portb.7 = Output
Config Portb.4 = Output

'Die Ansteuerung erfolgt dann so:
Servo(1) = 100
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.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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".

Autor: bas_ratte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Enable Interrupts
ja das könnte sein.

Autor: Florian S. (buddl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.