Hmmm... Kannst Du ein grobes Schema posten, das zeigt wie die Stromversorgung in Deinem Bot aussieht? Ich denke das Problem mit dem Zucken wird sich nicht durch Ferritkerne ausbügeln lassen.
Werbung
Hmmm... Kannst Du ein grobes Schema posten, das zeigt wie die Stromversorgung in Deinem Bot aussieht? Ich denke das Problem mit dem Zucken wird sich nicht durch Ferritkerne ausbügeln lassen.
Siehe Beitrag #126 da ist meine "Primäre Versorgung" zu sehen. Von dort geht 3,3V - 5V und GND zum µC und die Signalkabel zu den Servos (in Reihe ein 100Ohm Widerstand). Vor jedem Bein ist eine "Verteilerplatine" gebaut hier werden die Servos mit 6V Spannung versorgt und mit 100nF + 100µF gepuffert. Seit gestern ist diese 6V Schiene mit EMV Geflecht ummantelt und von der Signalleitung getrennt (Signale sind nun unten verlegt und Versorgungsspannung oben).
Zusätzlich habe ich heute noch die längsten Servoleitungen in der Nähe des µC mit Feritkernen versehen (die liegen eh noch rum also kann ich sie auch einbauen).
Das Zucken des Servos E0 kommt allerdings nicht von der Servospannung, Signalleitung oder sonst was, sondern von der kaputten Elektronik im inneren. Er bewegt sich zwar, aber ohne Kraft. Irgendwas ist an dem nicht mehr ganz in Ordnung und daher wurde er jetzt ausgetauscht. Schon funktioniert alles wie gewünscht.
Frage an alle die Mitlesen:
Ich möchte die Bewegung einens Servos mathematisch invertieren.
Folgende Situation ich habe Servos die sich nach oben bewegen wenn der Vorgabewert steigt (max 2170 Ticks) und sich senken, wenn die Vorgabe sinkt (min 810 Ticks). Nun ist es aber durch den Einbau bedingt, dass manche Servos invertiert laufen, d.h. sie sinken bei hohen werten und steigen bei niedrigen. Für die Ansteuerung wäre es aber leichter, wenn sich alle Servos gleich verhalten. Ich müsste also bei den Servos die sich invertiert verhalten im Programm eine Umrechnung implementieren die aus dem Vorgabewert hohe Werte = steigen und niedrige Werte = sinken, entsprechende Ticks generieren:
Servo A = hoch bei 2170 und niedrig bei 810 (Mitte 1490)
Servo B = hoch bei 810 und niedrig bei 2170 (Mitte 1490)
Irgendwie komm ich gerade nicht drauf, wie ich das mathematisch abbilden kann.
Ich hab' bei meinem Roboter die Servos einfach wie folgt kalibriert: per Taster wurden die beiden Endlagen sowie Winkel von +45° und -45° angefahren. Die jeweiligen Pulslängen bei diesen Winkeln (schließlich sind die Winkel ja das Ergebnis der IK) wurden im EEPROM gespeichert. Dann einfach eine Gerade durch diese Punkte legen (wofür ja schon 2 Punkte reichen sollten) - und fertig ist die Kalibrierung...
Schöne Grüße
Hallo
Ich würde die Servos umbauen:
Externes Bild anzeigen
(Aus https://www.roboternetz.de/community...l=1#post426347)
Beide Servo erhalten das selbe Signal.
Bisher hatte ich nur Billigservos verwendet. Die drehen nicht linear. Das bedeutet, Impulsdaueränderungen auf der einen Seite bewirken einen anderen Drehwinkel als auf der anderen Seite. Dadurch wird eine rechnerische Lösung sehr kompliziert.
Gruß
mic
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo,
ich würde einfach sagen z.B. bei jedem Servo 1490 mitte, dann würde ich eine Seite minus und eine plus rechnen lassen, oder nicht?
Falls Korrekturen nötig sind würde ich die als Paramter vorher erfassen(Korr_servo1_b).
Hier sind die Werte für um 90° gedrehte Servos direkt eingeschrieben.
Für die Hitecs habe ich noch keine extra erstellt.
Ich habe eine "Variablen-Pflegebereich(Geometrie und Versatz)" eingebaut, in dem legt man die kompletten "Konstanten" fest (alle festen Längen, Korrekturwerte, .....). Änderungen der Geometrie müssen/dürfen aussschliessliche dort gemacht werden.
Das Problem trat beim mir auf als ich von RS-2 (Bein-Prototyp) auf Hitec Servos gewechselt habe. Die drehen entgegengesetzt![]()
Ich würde es auf jeden Fall rechnerisch lösen, nicht mechanisch durch Umbau.
Denn dazu ist ein µC da.
Du kommst noch drauf, geh schlafen - morgen gehts wieder![]()
Gute Nacht.
Geändert von HeXPloreR (02.03.2013 um 16:14 Uhr) Grund: Code entfernt
Eigentlich ist es ziemlich billig:
t_Servo = tmax + tmin - t_Soll
Wobei t_Soll der Wert ist, den der Servo einnehmen soll und t_Servo der Wert, den der Servo tatsächlich bekommt. tmax und tmin sind die obere und die untere Grenze, wobei du darauf achten solltest, dass diese auch wirklich von der Mittelstellung gleich weit entfernt sind. Obwohl, eigentlich lässt sich das mit Kalibrierung herausrechnen.
So, wie bin ich nun auf die Formel gekommen?
Erstmal hab ich das Signal invertiert, allerdings hat man dann nur negative Werte. Das heißt, dass man den Bereich jetzt noch geeignet verschieben muss. Zieht man den Wert tmin vom Sollwert ab, so hat man den Abstand zwischen beiden. Jetzt muss man diesen Abstand nur noch von tmax abziehen, und man hat sein Ergebnis:
t_Servo = tmax - (t_Soll - tmin) = tmax + tmin - t_Soll
Lesezeichen