PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servos spinnen rum...



Razzorhead
01.03.2010, 14:27
Hi leute,
Ich habe eine Grundschaltung mit ner led und 3 servos.
Die servos bekommen 6V und die elektronik 4,9.
Mein problem ist einfach, das die servos zittern, was ja noch garnicht so schlimm ist.
Von einem servo hab ich mal den stecker abgemacht um die kabel festzulöten, später wieder drangemacht.
Sobald ich den dran mache und 2 servos gleichzeitig laufen lasse, spinnen die total.
Drehen sich wie sie wollen, manchmal wie vorgeschrieben, manchmal aber komplett andere positionen.
Woran liegt das? Die servos haben direkt 3 pins nebeneinander und sind auf stiftleisten PD6,7 und PB0 am atmega8.
ist es weil ich das kabel mal abgelötet habe und dann wieder zusammengelötet? Wie krieg ich es hin das die servos so laufen wie sie sollen?
Programmiert hab ich in bascom, da sollte nichts falsch sein weil es kein großartiger code ist.



...
Config Servos = 3 , Servo1 = Portd.6 , Servo2 = Portd.7 , Servo3 = Portb.0 , Reload = 20
...
Do

Portd.5 = 0
Waitms 500
Servo(2) = 50
Servo(1) = 70
Portd.5 = 1
Waitms 500
Servo(2) = 30
Servo(1) = 90

Loop

KingTobi
01.03.2010, 16:38
Hi

Die Servos sollten auf jedenfall eine eigene Spannungsversorgung bekommen! Auch solltest du den Strom den ein Servo ziehen kann nicht unterschätzen.

Razzorhead
01.03.2010, 18:43
Hi,
Ich weiss das ein servo schnell 1A ziehen kann ^^.

Die Stromquelle ist ein labornetzteil das auf 6V ist, ein spannungsregler ist vor die elektronik geschaltet und die servos ziehen direkt von den 6V.
Für die Elektronik ist noch ein 100nF kondensator dran.

LG Raz

021aet04
01.03.2010, 18:53
Versuche trotzdem einmal einen Elko direkt an den Servo. Habe schon ein ähnliches Problem gehabt (auch mit einem Labor NT).

MfG Hannes

Razzorhead
01.03.2010, 19:12
Wie groß muss der denn sein?
Hab eigentlich nur 100nF's hier, und einen 2200µF aus einem PC-netzteil (kann man doch nehmen?) Ich denke so ein Servo brauch schon etwas größere?, und vor jeden Servo einen? Oder Parallel? ^^

Sorry für die vielen fragen :D

LG Raz

021aet04
01.03.2010, 19:24
Die Servos und den C parallel. Wenn du einen 2m2 Kondensator hast ist das besser als nichts.

MfG Hannes

Razzorhead
01.03.2010, 20:09
Hab nun 2 2,2k µF drangehängt, ändern tut sich aber nicht das geringste.
Liegts vielleicht an den servos? Sind VDS-1 5€ servos von Conrad.
Es ist auch manchmal so das die ein bisschen machen was se sollen, dann zucken, sonstwas machen, und dann garnichts mehr bis zum nächsten Reset...

021aet04
02.03.2010, 13:06
Kann es sein, dass der µC neu startet? Hast du getrennte Versorgungen (µC, Servo)? Hast du am Reset einen 100nF Kondensator zu GND?

MfG Hannes

Razzorhead
02.03.2010, 15:16
... Hab grad gesehen hatte reset nicht angeschlossen.. ;D
Da ist nen 10k R dran.
Jetzt spinnt er schonmal nichtmehr, ich glaube aber es liegt echt an der spannungsversorgung.
Hab im AVR Studio mal ganze zeit HW-SEttings aktualisiert solange er sich noch bewegt hat, das fiel von 4,9 auf 3,3V runter, ich denke daran liegts, er hört nun meistens einfach auf nach einer zeit sich zu bewegen, bis ich einen reset mache.
Dann bewegen die sich die servos wieder, bis sie wieder aufhören.
Aber wenn die spannung am µC auf 3,3 runterfällt wird es wohl daran liegen.
Da brauche ich wohl doch 2 stromquellen.
Gibt es eine möglichkeit servos und elektronik mit strom zu versorgen, ohne noch eine zusätzliche stromquelle hinzuzunehmen?

Die servos haben wie gesagt 2x 2,2k µF C, und die elektronik 100nF.
Will nun keine Akkus kaufen, weil ich kein ladegerät habe :/

LG Raz

021aet04
02.03.2010, 16:04
So sollte es funktionieren. Wenn du keine Induktivität hast könntest du versuchen vor dem µC eine Diode geben (wo die Spule eingezeichnet ist). Mit der Diode fließt zwar Strom zum µC, wenn aber die Spannung bei den Servos einbricht bleibt die Spannung beim µC relativ konstant (gepuffert vom C). Hier ist noch ein Designsheet für Atmegas: http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf

PS: Die Induktivität bei den servos kannst du auch weglassen. Ob das was bringt weiß ich nicht.

MfG Hannes

Razzorhead
02.03.2010, 20:52
Danke,
Ich habe so eine Induktivität aus einem PC netzteil (ist doch so draht um nen kreis gewickelt? ;D)
Wie schließ ich das denn an, da sind einige dräte.
Und was genau bewirkt das?

Dioden habe ich hier 4007er geht das mit den?

LG Raz

021aet04
02.03.2010, 21:12
So eine Induktivität kannst du nehmen, zumindest als Versuch. Die Induktivität lässt den Strom langsam ansteigen, dadurch kann nicht bzw nicht so schnell der C entladen werden.

Eine 1N4007 kannst du nehmen.

MfG Hannes

Razzorhead
03.03.2010, 17:45
Ich wollte es erstmal mit der diode probieren, und das klappte schon verdammt gut!.
Hab dann noch ein 2,2k µF 10V ( zu den 2 vorhandenen) kondi hinzugetan und alles läuft reibungslos (naja gestestet mit 2 bewegten und ein stillstehenden servo ^^).
Also einfach dicke C's dran und dioden.
Danke für eure hilfe ^^, endlich kann es mit der programmierung weitergehen.
Werde mal schauen ob ich irgendwo geeignetere C finde, die jetzt sind nämlich aus einen ziemlich alten PC netzteil und sehen schon etwas mitgenommen aus.

LG Raz

021aet04
03.03.2010, 18:10
Solange die Elkos nicht aufgeplatzt sind sollten sie (zumindest zum Testen) ausreichen. Elkos die für den Versuchsaufbau gedacht sind nehme ich auch von Platinen. Wenn ich aber ein fertiges Gerät baue, baue ich neue Bauteile ein.

MfG Hannes

Razzorhead
03.03.2010, 20:20
Ist ja im moment ein test, und wenn ich dann alles für die finale platine zusammenlöte will ich halt neue elkos haben, und auch größere zur absicherung.
Ich habe nun ein 6800 µF für die servos bestellt und an den µC kommt etwas kleineres.

Endlich auch mal ein Display bestellt :D

LG Raz

invaider
07.03.2010, 18:26
Hi,

auf wieviel MHz läuft dein Mega8?
Weil ich hatte gleiches Phänomen als der Mega bei mir mit 1MHZ leif habs auf 8MHZ umgestellt und schon war das zittern weg.
https://www.roboternetz.de/phpBB2/viewtopic.php?p=340232#340232

Gruß invaider

Razzorhead
07.03.2010, 20:10
Hab ich auch schon gelesen, und meiner läuft schon auf 8Mhz.
Ich mach wohl bald mal ein atmega168-20PU dran, auch wenn ich nicht glaube das das noch großartig was ändert ^^

LG Raz

josua
07.03.2010, 20:16
hallo,

Ich wollte es erstmal mit der diode probieren, und das klappte schon verdammt gut!.
was willst du mehr? ;-) wenn es verdammt gut klappt? oder geht irgendwas immer noch nicht?

gruß josua

Razzorhead
08.03.2010, 14:48
Verdammt gut im vergleich zu vorher. ;P
Die servos laufen ja nun, aber zittern noch.
Glaube auch nicht das das problem durch noch größere kondis gelöst wird.
Ausserdem hab ich ein kondi nach dem spannungsregler, und der kondi macht irgendwie die spannung nochmal niedriger, werde ich aber in der endschaltung besser machen.
Wollte auch mal die ansteuerung ohne bascom mit C testen, hab damit aber noch nicht viel gemacht...
Ausserdem würd ich die servos gern langsamer bewegen lassen, geht aber wohl software seitig nicht?!

LG Raz

Jakob L.
09.03.2010, 21:30
Servos kann man durchaus auch langsam bewegen. Man muss nur den PWM Wert entsprechend langsam ändern. Zum Testen kann man auch mal die Elektronik mit einer 9V Batterie und einem 7805 versorgen. Dann kann man sicher sein, dass die Spannungsversorgung des Mikrocontrollers unabhängig von dem Stromverbrauch der Servos ist.

Hast du einen Low Drop Spannungsregler verbaut? Ein normaler 7805 braucht mindestens ca. 2-3 Volt Differenz zwischen Eingangsspannung und Ausgangsspannung.

Razzorhead
10.03.2010, 10:32
Die elektronik funktioniert ja einwandfrei ohne die servos.
Und ja es ist ein low drop spannungsregler.
Was meinst du genau mit PWM langsam ändern?
Wie gesag ich steuer die servos über Bascom.

LG Raz

021aet04
10.03.2010, 10:37
Wenn du den Wert von z.B. 1ms direkt auf 2ms stellst fährt der Servo mit voller Geschwindigkeit auf die andere Position.
Wenn du aber z.B. alle 5ms den Wert um 0,1ms erhöhst fährt er langsamer.


MfG Hannes

chris@franke
10.03.2010, 10:38
Na, einfach die Servoposition, die du ausgibst, langsam an den Sollwert angleichen. Einfaches Pseudocode-Beispiel:

if (Sollwert < AusgegebenerIstwert)
AusgegebenerIstwert -= Geschwindigkeitsfaktor
if (Sollwert > AusgegebenerIstwert)
AusgegebenerIstwert += Geschwindigkeitsfaktor

Das ganze schön getaktet z.B. in einem Timer-Interrupt aufrufen, schon hast du eine gleichmäßig lansame Bewegung zur Zielposition.