PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Vier Servos steuern



Brantiko
09.04.2008, 11:38
Hallo,
Ich habe einen kleinen Modellbagger mit Servos ausgerüstet welcher nun von alleine ein automatisches Baggerprogramm abspielen soll.
Also Schaufel öffnen, Arm runter lassen, Schaufel zu, Arm hoch dann den Oberwagen drehen.. Schaufel wieder öffnen usw.
Das ganze wollte ich mit Bascom und einer sehr langen Case-If Anwendung realisieren.
Eine Variable wird hochgezählt und für jeden Wert der Variable wird dem Servo ein Wert zu gewiesen. Diese Wertetabelle wird manuel eingetragen (viel Arbeit) welche ich mit Funktionen brechene, Zeichne und dann eine Wertetabelle erstellen lasse. So kann ich z.b ein Servo langsam beschleunigen und abbremsen lassen (Z.b für die Drehfunktion)
Um diese Kurve in echtzeit berechnen zu lassen ist der Chip vermutlich zu lahm bzw. man müsste auch verschiedene Intervalle definieren usw.

So weit mein Plan.
Falls Jemand eine bessere Idee hat, bitte raus damit ;-)

Nun zur Frage: Ich wollte den Atmega8 nehmen da alle andere viel zu viele Pins haben (brauche ja eigentlich nur 4 I/Os)
Allerdings bin ich mir nicht sicher ob der Chip es schafft simultan vier lange Case-If Tabellen auszuwerten und gleichzeit noch die Signale sauber erzeugen kann.
Ich hatte mal aus spaß ein Servo nach einer Sinuskurve fahren lassen, die vom Atmega8 berechnet wurde.. da hat der Servo schon geruckelt. Ist es von vorteil mit einem Ext. Quarz dne Chip mit einer höheren Frequenz zu betreiben?

Ansonsten müsste ich mit zwei Chips arbeiten. Einer berechnet die Werte, der andere erzeugt die Impulse. Allerdings habe ich keien Ahnung von der Kommunikation zwischen zwei Chips 8-[

Gruss

Alex

PicNick
09.04.2008, 12:17
..sehr langen Case-If Anwendung realisieren. Eine Variable wird hochgezählt und für jeden Wert der Variable wird dem Servo ein Wert zu gewiesen
geht einfacher , Beispiel


dim variable as byte
FOR variable = 1 TO max
servo[1] = LOOKUP(variable, SERVO1_TAB)
servo[2] = LOOKUP(variable, SERVO2_TAB)
servo[3] = LOOKUP(variable, SERVO3_TAB)
servo[4] = LOOKUP(variable, SERVO4_TAB)
NEXT

SERVO1_TAB:
DATA 100, 110, .........
SERVO2_TAB:
DATA 100, 110, .........
SERVO3_TAB:
DATA 100, 110, .........
SERVO4_TAB:
DATA 100, 110, .........


Da die Servobefehle von Bascom in Interrupts passieren und das Wertesetzen in der Hauptschleife , sollte keine Beeinflussung erfolgen.

Also eigentlich auch nicht, wenn du komplizierte Berechnungen machst.
Details hier:
https://www.roboternetz.de/wissen/index.php/Bascom_Inside-Code#SERVO

Bedenke, dass ein Servo nur alle ~20mS einen neuen Wert übernehmen kann, das ist also bei langsamen Bewegungen schon ruckelig.

python_rocks
09.04.2008, 13:22
Ist es von vorteil mit einem Ext. Quarz dne Chip mit einer höheren Frequenz zu betreiben?
Hallo Alex!

Also mit 1 MHz waren meine Servos sehr schwach. Das liegt vielleicht daran, dass Bascom bei 1 MHz kein genaues Timing zustande bringt. Erst ab 8 MHz hatten sie volle Leistung. Ich würde einen 16 Mhz Quarz anschließen um genug Reserven für dein Programm übrig zu haben.

mfg
Gerold
:-)

Willa
09.04.2008, 13:26
Hi!
Vielleicht ist für dich auch das Servoboard von robotikhardware.de interessant. Dort kannst du im POLULU Mode dem Servo nicht nur eine neue Position sagen, sondern auch die Geschwindigkeit mit der es dort hin fahren soll. Würde dir eine Menge arbeit ersparen.

Brantiko
10.04.2008, 23:45
Hallo,
Ich habe mir mal den Code von PicNick angesehen.
Bascom meint den zweiten Teil (Werzuweisung) müsste ich hinter das END vom Programm packen. Soll ich das ganz in die Timer Routine tun? Ich denke mehr als 50Hz vom Timer macht keinen sinn? Denn öfter kann der Servo ja ein Signal nicht verarbeiten.

Gruss

Alex

Brantiko
11.04.2008, 01:53
Ich habe mir jetzt doch mal diesen Servotreiber angesehen..
Sehe ich das richtig dass ich nur ein Kabel zwischen AVR und Servocontroller brauche?

Gruss

Alex

Willa
11.04.2008, 08:57
Ja, du brauchst nur ein 2-adriges Kabel.
Gruß, William

Brantiko
11.04.2008, 09:45
Verstehe und wie heißt die Übertragungsart?

Willa
11.04.2008, 10:11
Naja, RS232 oder UART, kann man wohl beides nutzen... Lies dir halt mal die Anleitung durch. Könntest deinen Bagger dann auch vom PC steuern.

Brantiko
11.04.2008, 10:14
Habs soeben bestellt, schau mal weiter wenn ich den Krempel hier haben, Danke.

Brantiko
15.04.2008, 00:17
Hallo,
Der Servotreiber ist heute angekommen.
Für meien Anwendung habe ich, wie empfohlen den Pololu-Mode gewählt, die Übertragung usw. klappt soweit.
Allerdings kann ich ja nur die Geschwindigkeit und die Position anwählen..
Wenn ich nun möchte dass das Servo "abbremst"..?

Dann müsste ich ja berechnen/empirisch ermitteln nach welcher Zeit dass Servo mit dem abbremsen beginnen soll. Auch nicht das gelbe vom Ei.

Gruss

Alex