PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Auslesen des Servo-Potis -->> machbar!!



Jon
12.03.2008, 21:21
Hallo Leute,
der User ni.c (https://www.roboternetz.de/phpBB2/profile.php?mode=viewprofile&u=33110) hat mich durch seinen Blog-Eintrag zum Roboter hal0 auf seiner Website (http://www.ni-c.de/category/halo/) auf die Idee gebracht, eine "Feedback-Leitung" vom Servo-Poti aus an den µC zu legen und die Spannung, die man mit am Poti abgreift, mit einem ADC auszuwerten. Nur war noch nicht geklärt, ob das geht, oder ob es vielleicht den Servo stört.

Das habe ich heute geklärt:
Es ist ohne viel Aufwand machbar und funktioniert auch!
Ich habe ganz einfach, wie von ni.c beschrieben, an den mittleren Pin des Servo-Potis ein Kabel angelötet, das zum ADC meines ATMega32 geht, der als Referenzspannung die interne verwendet (2,xxVolt). Dort bekomme ich bei dem einen Maximal-Ausschlag als Wert ca. 890, bei dem anderen ca. 245 und bei der Mittelstellung ca. 635.
Was mich stört ist hier das Wort "ca.", das ich leider nicht weglassen kann, da es eine Abweichung von +-30 Digits gibt.
Diese Abweichung könnte man jetzt wahrscheinlich noch durch mehrere Messungen, deren Ergebnis man mittelt verbessern. Habe ich aber noch nicht ausprobiert.

Wollte ich euch nur mal berichten, da es vielleicht für manche interessant sein kann.

Anwendungsgebiete wären z.B.:
1. ein Arm, bei dem herausgefunden werden soll, ob der Servo die gewünschte Position erreicht hat
2. alle Anwendungen mit Servos, bei denen verhindert werden soll, dass er versucht, weiter zu drehen, obwohl es aufgrund von Hindernissen nicht möglich ist -> schädlich für den Servo!

Über Feedback und vielleicht auch eigene Erfahrungsberichte würde ich mich freuen!

jon

radbruch
12.03.2008, 22:09
Hallo jon,

es war ja zu erwarten, dass das grundsätzlich funktioniert. Mit "30 Digits" meist du vermutlich ein Fehler von +-30, das wären ca.5% vom Mitte-Wert. Immerhin, besser als gar keine Rückmeldung. Anstatt den Mittelwert mehrerer Messungen zu bilden könnte man vielleicht einfach nur auf Änderung prüfen. Bleibt der Wert nach x Messungen stabil ist die Position erreicht.

Hast du auch mal die anderen Pins des Potis gemessen?

Gruß

mic

Benedikt.Seidl
12.03.2008, 22:30
hier wird auch das poti von einem servo abgegriffen. (http://www.cibomahto.com/?p=145) [via] (http://blog.makezine.com/archive/2008/02/how_to_servo_as_input_dev.html?CMP=OTC-0D6B48984890) evtl. hilft euch das auch noch ein bisschen weiter.

SEIDL.

radbruch
12.03.2008, 22:57
Hallo Seidl

danke für den Link. Es war ja zu erwarten, dass wir nicht die ersten sind, die diese Idee hatten. Aber der Typ zeigt deutlich dass es besser ist in Videos nicht selbst zu erscheinen. *lol*

Wie schon an anderer Stelle erwähnt wäre es optimal wenn man die Potistellung irgendwie auf die Steuerleitung des Servos mischen könnte. Dann hätte man Steuersignal und Rückmeldung auf dem selben Pin. Ein Ansatz dafür wäre der Servo-Sensor dessen Prinzip ich hier (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=37927) schon vorgestellt habe.

Gruß

mic

Jon
13.03.2008, 10:07
Shit. Ich hatte gehofft, dass noch niemand das probiert hatte. *grr*

Ich habe noch nicht an den anderen Pins des Potis die Spannung abgegriffen. Aber was sollte das denn bringen? Da liegt entweder die volle Versorgungsspannung an (bei mir 5Volt) oder die übrige Spannung im Vergleich zum mittleren Pin (ich hoffe ihr versteht, was ich meine). Bei dem Poti handelt es sich leider nur um ein 5%iges, das als Spannungsteiler verwendet wird... (Gibt es eigentlich auch Potis mit weniger als 5%??)

Ich werde heute den restlichen Vormittag über mal probieren, ob ich es schaffe, den Servo über den ADC Pin auch anzusteuern. Dann bräuchte man insgesamt nicht so viele Pins.

Viele Grüße,
jon

Jon
13.03.2008, 10:41
Ich werde heute den restlichen Vormittag über mal probieren, ob ich es schaffe, den Servo über den ADC Pin auch anzusteuern. Dann bräuchte man insgesamt nicht so viele Pins.
Ich habe es nun ausprobiert -->> es funktioniert!
Kleines Problem: Der Code ist deutlich länger und komplizierter, als wenn man einen ADC Pin für die momentane und einen Pin für die Servosteuerung nimmt.
Das liegt daran, dass man die ganze Zeit wieder den ADC stoppen/starten muss und den Pin umdefinieren (von Eingang zu Ausgang und umgekehrt) muss.
Da ist es bei dem Pulsein/Pulseout deutlich einfacher, da das eine BASCOM eigene Funktion ist, die das von vorherein vorsieht.
Hat vielleicht jemand eine Idee, wie man das machen könnte?

Viele Grüße,
jon

Jon
14.03.2008, 11:39
Hallo!
Ich bin mal wieder an meinem Testaufbau beschäftigt (seit 10 Uhr).

Eine kurze Beschreibung des Testaufbaus:
Ich habe einen Servo von Conrad (http://www.conrad.de/goto.php?artikel=233751), der mit 5Volt betrieben wird. An diesen Servo, der fest auf einer Holzplatte montiert ist, ist ein weiterer Servo, des selben Typs, über einen 4,5cm langen Hebel angebracht.

Wenn ich nun den Servo in die Mittel-Position bringe und den ADC Wert speicher, kann ich danach den Servo an jede beliebige Stelle drehen, er dreht sich an die abgespeicherte Stelle sehr exakt wieder zurück.
Mache ich das selbe jetzt aber nicht die Mittel-Position, sondern mit einer Position im Winkel von 90° zur Mittel-Position, so dreht der Servo nicht mehr exakt dahin, wo er hin sollte. Um genau zu sein ins die Abweichung sehr groß (ca. +-5°).
Auffällig ist, das an dieser Position beim zurückbewegen die Messwerte des ADCs super ungenau sind und die Abweichung an ein und der selben Stelle bei etwas 25% liegt. Die Ungenauigkeit ist allerdings nicht beim Speichern der Position ganz am Anfang zu erkennen, da ist die Abweichung sehr klein.
Woran kann das nun liegen?
Vielleicht daran, dass die Versorgungsspannung durch den recht hohen Motorstrom gestört wird, also einbricht?
Oder hat es einen ganz anderen Grund?

Ich würde mich freuen, wenn jemand sich darüber mal Gedanken machen würde und mir helfen würde, das Problem zu lösen.
Sollten noch Informationen fehlen, so fragt mich!

Viele Grüße,
jon

rideyourstyle
14.03.2008, 12:06
vielleicht würde es etwas bringen, wenn du die masse des servos mit der des adc eingang verbinden würdes. dann hast du eventuelle spannungsunterschiede, die sich durch das drehende servo ergeben, nicht in deiner potimessung mit drin! ?

Jon
14.03.2008, 12:55
Die Versorgungsspannung der Servos ist auch die der Steuerelektronik (ATMega16), somit ist auch der Masse-Anschluss der selbe.

Du bringst mich aber auf die Idee, dass ich mal meine 5Volt als Referenzspannung verwenden könnte. Dann müsste sich das Problem, wenn ich mich nicht sehr irre, in Luft auflösen.
Ich werde es ausprobieren, wenn ich heute Abend wieder zu Hause bin.

Wenn trotzdem jemand anderes noch eine Idee hat; her damit!

jon

rideyourstyle
14.03.2008, 13:08
nicht ganz der selbe masseblablabla ...

aber ich muss jetzt in die schule. schreibe später was ich meinte!

rideyourstyle
14.03.2008, 14:02
Also da ist die Skizze.

Die Spannung die über der Zuleitung zum Servo abfällt, fällt genau gleich ab über die Ableitung (Masseleitung)roter Pfeil. Das selbe gilt für den Prozessor. Da Dieser nicht so viel strom braucht und zusätlich noch Kondensatoren da haben sollte macht das weniger aus. aber ich denke wenn das Servo am arbeiten ist und die Kabel etwas länger sind als benötigt, kommt es da sicher zu (kleinen) Spannungsabfällen, die Du dann mit deinem ADC zusätzlich zu der Potispannung misst...

Also wer mist mist Mist, war eines Tages der Lehrspruch!


Klar? Wenn man eine genaue Position (Messung) haben will, dann sollte man die Fehler die mit kleinem Aufwand zu beseitigen sind zuerst eliminieren...

Jon
14.03.2008, 16:47
Klar?
Nö, irgendwie verstehe ich nicht so ganz, was und wo ich nun messen soll.

Deswegen habe ich bis jetzt folgendes ausprobiert:
1. Messen, ob ich bei Bewegungen des Servos an der Masse Leitung Spannungsänderungen habe. Ergebnis: Es gibt keine, die ich mit dem ADC des ATMega16 messen könnte.
2. Deswegen habe ich probiert Spannungsänderungen über einen Spannungsteiler (100k, 1%) an VCC (5Volt) zu messen, was ergab, dass es Abweichungen um bis zu 0,35Volt gibt.
Diese Abweichungen müssten ja auch die Ergebnisse am Poti verändern, weshalb ich nun versuchen werde, diese Abweichungen rauszurechnen.

Viele Grüße,
jon

Jon
14.03.2008, 19:09
Hi, ich bin's mal wieder :-)
Das Rausrechnen der Abweichung ist mir überhaupt nicht gelungen, sprich, der Servo hat gar nicht mehr das gemacht, was ich wollte.

Da ich erstmal klären wollte, ob es wirklich an den Schwankungen in der Stromversorgung liegt habe ich erstmal für die Servos ein eigenes (ausgebautes) PC-Netzteil genommen. Und siehe da, die Genauigkeit ist so, wie ich es will, nämlich sehr exakt. Bei 20 Versuchen eine gewünschte, bestimmte Position anzufahren ist vielleicht eine dabei, wo die Abweichung größer als 1° ist.

Da ich aber später im Roboter keinen eigenen Akku nur für die Servos haben will, werde ich nun (vielleicht noch heute Abend, sonst am Montag) mal versuchen, direkt in die Servos weitere Kondensatoren einzubauen, um die Spannungsschwankungen auszugleichen.
Nur schade, dass ich hier kein Oszi habe, dann könnte ich gleich schon ohne viel Herumraten in Etwa sagen, welche Kondensatoren ich brauche...
Hat vielleicht jemand einen Tipp, mit welchen Kondensatoren es am ehesten funktioniert?

Viele Grüße,
jon

rideyourstyle
14.03.2008, 19:44
also du misst mit deinem avr eigentlich die spannung zwischen dem masseanschluss des avrs und dem eingang adc. wenn in der servozuleitung irgendwo ein übergangswiderstand oder lange kabel (Widerstand fällt spannung ab) so ist dieser abfall auch auf deiner "messstecke" und wird somit vom avr gemessen.
verbinde doch den masseanschluss des potis mit einem zweiten kabel auf den adc gnd. so sollte es noch besser werden.

als elko würde ich sagen ein grosser elko und ein kleiner keramikondensator...

Jon
14.03.2008, 19:52
Dann werde ich das mal ausprobieren. Nun habe ich auch verstanden, was du meinst.

Die Elkos werde ich heute nicht mehr einlöten. Aber ich dachte aus in die Richtung von 1000µF Elko, 100nf Keramik und 10µF Tantal. Dann sollte theoretisch ich alles ausgeglichen haben.

Viele Grüße,
jon

rideyourstyle
14.03.2008, 20:03
also ich habe meine skizze nochmals überarbeitet. wenn am scheinwiderstand eine spannung abfällt, dann hast du die auf dem adc. ist das soweit klar?
und wenn das servo strom braucht, dann fällt da auch eine spannung ab. U=R x I.

Wenn du die zusätzliche rote masseleitung einbaust, dann hast du diesen spannungsabfall "überbrückt". denn auf dieser leitung zum avr sollte kein grosser strom fliessen ;-)

natürlich musst du kein rotes kabel nehmen :-P

rideyourstyle
14.03.2008, 20:05
ach ich war zu langsam. aber gut wenn du es verstanden hast. viel glück...

radbruch
14.03.2008, 20:48
Na klasse. Wenn sich durch die Stromaufnahme des Servos der GND des Servos gegenüber dem GND des AVR anhebt, dann gilt dies auch für den GND des Servo-Potis. Da war ich wohl mit meinem "Hast du auch mal die anderen Pins des Potis gemessen?" auf der richtigen Fährte. *lol*

Viel Spass beim Weiterforschen.

Gruß

mic

rideyourstyle
14.03.2008, 21:25
ja und mit der zweiten massenverbindung misst man wirklich nur noch den spannungsabafall über dem poti!
es reichen oft nur die übergangswiderstände, stecker, kabel...

Jon
19.03.2008, 11:44
Hallo,
eben war ich erst wieder an den Arm, davor hatte ich keine Lust 8-[
Ich habe nun mal den Minus-Pin des Potis abgegriffen, an dem ich nach Masse hin gemessen immer eine Spannung von 0,3 Volt habe.
Das Kabel, das ich da angelötet habe, habe ich an den GND Pin (31) des ATMega16 zw. den ADC Pins und den JTAG Pins angeschlossen, da es beim ATMega16 keinen speziellen AGND Anschluss gibt.

Das Ergebnis ist leider nicht all zu berauschend:
Das Anfahren bestimmter Positionen ist kein Problem und geht super schnell! Die Abweichung liegt bei 0,5 bis 1°. Aber; Der Drehbereich, bei dem das so möglich ist, ist stark eingeschränkt. Davor war es immer im gesamten Bereich möglich, den der Servo durch seine Mechanik zulässt. Nun ist es leider nur noch in einem Winkel von 155° Möglich. Im restlichen Bereich liegt die Abweichung bei ca. 10°(!). Das ist eine Abweichung, die das Arbeiten in diesem Winkel-Bereich unmöglich macht.

Soweit meine Ergebnisse dieses Froschungsabschnitts. Nun wäre es natürlich interessant zu klären, warum das so ist. Aber mir fällt im Moment kein Ansatz dafür ein. Hat jemand von euch einen?

Viele Grüße,
jon

rideyourstyle
19.03.2008, 12:38
vielleicht müsste man wüssen, was die 0.3v verursacht. vielleicht versuche îch das ganze auch einmal zu testen. hast du noch andere sorvos an denen du das testen könntest???

Jon
19.03.2008, 13:29
Ich habe nur noch so einen Servo hier (Top Line Mini-Servo ES-05): (Der Server von Conrad ist nicht erreichbar, Link kommt nach!)
Da kann ich es nochmal probieren. Problem bei dem ist aber, dass der Platz so kein ist und ich da irgendwie mit dem Lötkolben rann müsste...

Bei dem anderen Servo habe ich aber nochmal nachgemessen:
Zw. Servo Plus und VCC: ca. 23kOhm
Zw. Servo Minus und GND: ca 700Ohm
Würde auch den Spannungsabfall begründen.

Es wäre schön, wenn du das nochmal mit einem anderen Servo testen könntest!

jon

Jon
19.03.2008, 14:28
Hallo,
ich habe gerade versucht, das ganze mal mit dem anderen Servo auszuprobieren, der scheint mir aber schon so eine Macke zu haben. Irgendwie rudert der wie wild hin und her und ich kriege ihn gar nicht unter Kontrolle :-(
Wenn jemand anderes das mal mit einem anderen Servo testen könnte wäre das sehr schön!!

Viele Grüße,
jon