PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo ansteuern von A bis Z



RCO
05.10.2004, 19:41
Also, es tut mir leid, dass ich das Thema Servo ansteuern nochmal aufgreifen muss, aber ich habs immer noch nicht kappiert.

Meine Ziele mit dem Servo:
- Vorwärts/Rückwerts fahren
- Positionierung innerhalb der 360°
- Geschwindigkeit regulieren

Ausgangspunkt sollte der 5€ Servo von Conrad sein!

Also bisher hab ich gehört, dass ich den Servo 'hacken' muss, also den kleinen Haken entfernen muss, der verhindert das der Servo durchdrehen kann. Dann hörts aber auch schon auf!

Ich hab dann noch gelesen, dass ich den Servo z.B. mit:


Config Servos = 1 , Servo1 = Portd.2 , Reload = 10
Config Pind.2 = Output
Enable Interrupts
Servo(1) = 120

ansteuern kann, und die Geschwindigkeit mit:


For I = 50 To 190 Step 10
Servo(1) = I
Waitms 100
next

regulieren kann. Nun bleiben aber noch ein par hundert Fragen offen:

- Muss ich den Poti im Servo nicht ersetzen? Denn schließlich, hätte er ja auch ohne Haken seinen Wert 0 und 255 nach 180° erreicht.
- Verhindert For... Step... nicht, dass in der Wait-Zeit was anderes getan wird. Schließlich soll der Roboter z.B. Dauerhaft etwas langsamer fahren, aber trotzdem noch andere Dinge rechnen.
- Wie krieg ich es hin, dass der Servo, wenn er einmal soweit ist auch wirklich weiter in die gleiche Richtung geht, denn wenn ich z.B. den Wert 0 gebe, und er ihn erreicht und ich dann den Wert 255 gebe würde er sich doch einfach anderrum drehen, oder?

Es wäre übrigens super, wenn jemand mal einen Artikel dazu schreiben würde, denn ich denke auf jeden Anfänger, der mit Servos als Antrieb arbeiten möchte, kommen früher oder später diese Probleme zu.

Bitte um Antworten

MFG Moritz

Michael
05.10.2004, 23:14
Hallo RCO,
wer suchet, der findet:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=2413&highlight=
Gruß, Michael

RCO
06.10.2004, 09:05
Danke für den Beitrag, also werde ich jetzt folgendes machen: Haken abfeilen, Poti ausbauen und durch Widerstände ersetzen.

Eine genaue Positionierung ist damit nicht mehr möglich, daher meine Frage, gibt es einen durchlaufenden Poti, also der bis Maximalen Wert geht, un ein wenig später auf den geringesten, dann wäre ein genaues Positionieren, und die genau Messung der Wegstrecke möglich.

Mein 2. Problem ist immer noch, dass ich, wenn ich es richtig verstehe, die Geschwindigkeit nicht kontrollieren kann, ohne gleichzeitig die gesamte aufmerksamkeit des Prozessors auf die Schleife zur richten.
Gibt es dafür einen Lösungsweg, der nach Festlegen der Geschwindigkeit gar keine Prozessorleistung mehr beansprucht, also z.B. so etwas wie ein PWM?

MFG Moritz

Michael
06.10.2004, 09:31
Hallo RCO,
Link gelesen?
Wenn der "Haken" abgefeilt und das Poti durch Festwiderstände ersetzt ist, hat sich die Geschichte mit der Positionierung ein für alle mal erledigt! Dann kannst du das Servo wie eine Fahrtregler-Getriebemotor-Einheit benutzen.
Zu deinem 2. Problem:
Du gibst doch deinem Servo einen Wert mit [Bsp.: Sevo(x)=150]. Dann hast du (fast) alle Zeit der Welt, dich darum zu kümmern, was der nächste Servowert sein soll. Die Ansteuerung erledigt Bascom doch im Hintergrund...
Gruß, Michael

RCO
06.10.2004, 09:59
Ach so, man kann also zwischenwert zwischen 100 und 200 setzen?
Würde er bei 150 nicht genau stehen? Das ist natürlich optimal.
Das mit der Positionierung hab ich befürchtet, aber dafür gibts ja Radencoder!

Also, sorry, wenn ich so hartnäckig nachfrage, aber eins will mir nicht in den Kopf, deshalb vermutlich auch meine vielen Fragen:
Der Poti hat ja eine Position zurückgegeben.
Diese Position konnte man mit Servo(x)=Position angeben, der Poti dreht entsprechend links oder rechtsrum.
Wenn der Poti nun diese Position aber nie erreicht, da 2 Widerstände drin sind, die die Position 128 zurückgeben, wird er doch vermutlich bei z.B. Servo(x)=100 unendlich in eine Reichtung drehen.
Warum sollte er das bei Servo(x)=110 langsamer tun?
ICh verstehe nicht ganz, ob Servo(x) jetzt die Position zwischen 0 und 255 angibt, oder die Imulslänge, die Wiederum zwischen 100 und 200 liegt, und die Geschwindigkeit regelt.
Bitte erklär mir nur diese eine Frage!

MFg moritz

Michael
06.10.2004, 22:53
Hallo RCO,
es ist sicher irgendwo im Netz besser beschrieben, ich versuchs aber: Zuerst: Löse dich von dieser ominösen Position 128 für die Mittelstellung des Servos. Das gehört überhaupt nicht hierhin.
Das Servo ist ein Motor mit Getriebe und einem Poti mit Elektronik. Dieses Poti gibt der Elektronik (im Servo) eine Rückmeldung, wo der Motor/Getriebe steht. Dazu wird intern (in der Servoelektronik) quasi ein Impuls erzeugt von 1 bis 2 ms Dauer. Dieser im Sevo analog erzeugte Impuls wird mit dem Impuls, der von außen (Fernsteuerung/µC) kommt, verglichen. Ist der Impuls von außen größer, als der mit dem Poti innen erzeugte, dreht sich der Motor solange , bis er das Poti soweit verstellt hat, daß die beiden Impulse wieder übereinstimmen. Ist der Impuls kleiner, gehts umgekehrt.
Soweit klar?
Jetzt kommts: Je größer der Unterschied zwischen dem intern erzeugten Impuls und dem von außen kommenden ist, umso schneller dreht sich der Motor. Ein Fahrtregler! ;)
Und richtig, bei Conrad gibt es doch tatsächlich einen sog. Minifahrtregler, der genauso arbeitet.
Jetzt zu Bascom:
Mit dem Reload-Wert von 10 hast du einen Wert von 10 Mikrosekunden eingestellt.
Das bedeutet, daß du den Servo(x)-Wert mit dem Reload-Wert multiplizieren mußt.
Bei servo(x)=100 sind das 1000µS = 1Millisekunde. Bei servo(x)=200 sind das 2000µS = 2Millisekunden.
Das ist der Bereich, den das Servo für gewöhnlich bekommt. Daraus folgt, daß der Wert 150 für servo(x) genau der Mittelstellung entspricht.
Das heißt: Wert 100 = vorwärts, Wert 150 = Stop, Wert 200 = rückwärts. Je nach Einbaulage kann vorwärts/rückwärts auch vertauscht sein.
Noch Fragen?
Gruß, Michael

RCO
06.10.2004, 22:59
[-o< Danke | Danke | Danke [-o<

Dann war das mit dem 0 bis 255 Schwachsinn.
Na gut, dann werde ich das jetzt mal so machen!

MFG Moritz

pebisoft
29.10.2004, 15:51
mein servo läuft mit dem obigen beispiel vorwärts und rückwärts.
braucht aber ca 2 sek bevor er die richtung ändert, woran liegt das.
ich möchte jetzt, das der servo sehr schnell umschaltet und wieder rückwärts läuft.

RCO
29.10.2004, 16:46
Meinst du das, was ich als ersten post geschrieben habe?


For I = 50 To 190 Step 10
Servo(1) = I
Waitms 100
next

Das bewirkt, das der Servo langsam in eine Richtung käuft, deshlab vermultich die 2 Sekunden, wenn der Sevo einfach nur in eine andere Position fahren soll, dann sag einfach Servo(1)=Position


Config Servos = 1 , Servo1 = Portd.2 , Reload = 10
Config Pind.2 = Output
Enable Interrupts
Servo(1) = 120

Hier Servoposition 120!

MFG Moritz