PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wie viel Servos kann ich ansteuern



Zeroeightfifteen
30.04.2005, 11:06
Ich möchte mindestens 12 Servos ansteuern. welchen Controller brauche ich da? Ist da dann noch andere Hardware nötig? Wie viel Servos lassen sich über haupt mit einem Controller regeln?

vish
30.04.2005, 11:10
Hallo!

http://www.roboter-teile.de/Shop/pd-116159946.htm?categoryId=5
Kann bis zu 20 Servos steuern, wird über den I²C Bus angesteuert.

Grüße,
Jonas

Starchild
30.04.2005, 11:19
Absolute Geldverschwendung und auch noch schlecht programmiert.
Ich habe ein Programm, welches (im Moment) 5 Servos mit einer Refreshrate ab 10ms ansteuert (Die servos sind also viel stärker) und beliebig ausgebaut werden kann. Mit einem atmega8515 könnte man sogar 30 servos ansteuern.
Kleiner Nachteil ist der minimal höhere Takt von 10-12Mhz, dafür ist der AVR aber nur 1ms lang pro 20ms beschäftigt.

Joerg
30.04.2005, 12:18
Hi Starchild,


Absolute Geldverschwendung und auch noch schlecht programmiert.
woher weißt du das mit dem schlecht programmiert? Das Programm vom SD20 ist bislang nur dem Autor (Gerald Coe) bekannt. Wenn du irgendwelche Infos hast, worauf sich deine Annahme stützt, dann nur her damit!


Ich habe ein Programm, welches (im Moment) 5 Servos mit einer Refreshrate ab 10ms ansteuert (Die servos sind also viel stärker) und beliebig ausgebaut werden kann. Mit einem atmega8515 könnte man sogar 30 servos ansteuern.

Mit der höheren Refreshrate steigt die Anzahl der Soll-/Istwertvergleiche im Servo. Das Servo wird also nicht "stärker" (aus einem 3kgcm Servo wird kein 4kgcm Servo) es reagiert bei Abweichungen aus der Sollposition eben schneller. Man muss sich aber auch bewusst sein, dass dieser Betrieb außerhalb der Specs ist und die verschiedenen Servotypen halt unterschiedlich reagieren können.
Wenn du solch ein tolles Programm hast (30Servos mit 10ms Refresh) steht es dir frei, es zur Verfügung zu stellen oder ein Produkt daraus zu machen und zu verkaufen.


Kleiner Nachteil ist der minimal höhere Takt von 10-12Mhz, dafür ist der AVR aber nur 1ms lang pro 20ms beschäftigt.
Wieso ist das ein Nachteil (Stromverbrauch?). Wie lange der Controller zu tun hat ist normalerweise auch Wurscht, da es hier um dedizierte Servocontroller geht.

Was ich eigentlich sagen will, der SD20 ist seit ein paar Jahren auf dem Markt und hunderte Male erfolgreich im Einsatz. Mittlerweile gibt es neuere Mikrocontroller, die eine verbesserte Implementation zulassen (z.B. anx-S20 in Kürze bei uns im Angebot, mit variabler Refreshrate!, Stellgeschwindigkeiten, automatisch (parallel) ablaufende Positionstabellen, I2C/serial Interface).

Dennoch, wenn du ein etabliertes Produkt so deutlich niedermachst, dann bitte mit Fakten. Und ein Einhalten des RC-Servo-Standards ist nicht unbedingt ein Negativmerkmal.

Viele Grüße
Jörg

Starchild
30.04.2005, 12:30
Fakten?
Bitte:
Der SD20 steuert nacheinander alle Servos an.
Die 20ms Signalabstand sind übrigens nicht durch die Servos bedingt, sondern stammen vom Protokoll der alten analogen Modellbaufernsteuerungen.
Bei meinem Programm kann man diesen Signalabstand variablel einstellen was zu wesentlich besseren Servoverhalten führt.
Ich habe leider nicht besonders viel Lust programmierte Controller zu versenden.
Wer das Programm haben will kann sich aber gerne melden.

Joerg
30.04.2005, 13:40
Hallo Starchild,


Der SD20 steuert nacheinander alle Servos an.
Na und, eine vergleichbare Parallelansteuerung beim 16F872 war mit einem deutlichen Jitter behaftet gewesen, den Mega8 oder PIC18xx gab's damals noch nicht. Deshalb wird die zitierte Ausgangsbehauptung auch nicht viel wahrer.


Die 20ms Signalabstand sind übrigens nicht durch die Servos bedingt, sondern stammen vom Protokoll der alten analogen Modellbaufernsteuerungen.
hat auch keiner anders behauptet.


Bei meinem Programm kann man diesen Signalabstand variablel einstellen was zu wesentlich besseren Servoverhalten führt.
Kann man beim anx-S20 auch, sofern man das möchte, Hinweise auf mögliche Kompatiblitätsprobleme siehe oben.


Wer das Programm haben will kann sich aber gerne melden.

Im Gegensatz zu deinen anderen Aussagen gefällt mir dies wiederum sehr gut.

Viele Grüße
Jörg

Starchild
30.04.2005, 13:48
Klar gefallen dir meine Aussagen nicht. Anscheinend bist du ja der "Hersteller" des vollkommen überteuerten SD20.

Michael
30.04.2005, 13:56
Hallo Starchild,

Die 20ms Signalabstand sind übrigens nicht durch die Servos bedingt, sondern stammen vom Protokoll der alten analogen Modellbaufernsteuerungen.
naja, das ist nur die halbe Wahrheit. Die Innenschaltung eines analogen Servos verlangt nach Impulsen mit ca. 20ms Pause. Wenn du auf 10 runtergehst kann es klappen, muß aber nicht. Der SD20 ist da auf der sicheren Seite, er _muß_ ja funktionieren. Und das tut er zuverlässig schon seit der prä-AVR-Zeit.

Gruß, Michael

P.S.:

Klar gefallen dir meine Aussagen nicht. Anscheinend bist du ja der "Hersteller" des vollkommen überteuerten SD20.
ist das nicht ein bißchen unfair? Entwickel und verkauf doch selber mal sowas! Dann kennst du die Preise.

Zeroeightfifteen
30.04.2005, 15:43
jetzt weis ich aber immer noch nicht was für hardware ich da jetzt speziell brauche und welche die bessere is?

Starchild
30.04.2005, 15:49
also entweder > 10€ für ein veraltetes stück Hardware, welches aber komfortabel anzusteuern ist, oder einen ATmega8 für 2,75€ + 50Cent Quarz und kentnisse wie man ein c-Programm kompiliert und auf einen AVR lädt

Zeroeightfifteen
30.04.2005, 16:11
geht das mit Basic nicht irgend wie? Oder Bascom, was isn das? Da solls ja schon Befehle für Servos geben.

Starchild
30.04.2005, 16:38
SIGNAL(SIG_OVERFLOW0) { //alle 1ms aufgerufen
TCNT0 = 131; //Zaehler wieder vorladen

if (count < (WIEDERHOLRATE-1)) { //sofort zurueck
count++;
return;
}

if (count == (WIEDERHOLRATE-1)) { //Servogrundpuls 1ms
PORTD |= 0xec; //Pins D2-7 an, 0,1,4 lassen
count++;
return;
}

if (count == WIEDERHOLRATE) { //Servopulse 0...1ms
for (i = 0; i <= 254; i++) {

if (servo1 == i) //Servopin LOW
PORTD &= ~( 1<<PD2 );

if (servo2 == i)
PORTD &= ~( 1<<PD3 );

if (servo3 == i)
PORTD &= ~( 1<<PD5 );

if (servo4 == i)
PORTD &= ~( 1<<PD6 );

if (servo5 == i)
PORTD &= ~( 1<<PD7 );

/* for (w=0; w<= WAIT; w++){
asm volatile ("nop");
} */
}

PORTD &= 0x13; //Alle Servopins LOW

count= 0;
return;
}

pm
02.05.2005, 22:16
Hallo Leute,

jetzt schaltet mal nen Gang runter. Ich finde es persönlich recht schade, daß es zwischen Produzenten und Endanwendern immer so kracht. Ich bin glücklicherweise beides...

Und immer dran denken: Wenn niemand, der an der Herstellung und dem Verkauf etwas verdienen würde, hätte keiner Bock, sich den Vertrieb für sowas anzutun. Und dann gäbe es keine AVRs für €2,75 und dann könntest Du, lieber Starchild dir deinen AVR auf einer Lochrasterplatine aufbauen....;->

Zur Frage mit der Ansteuerung.
Wenn man noch keine große Erfahrung mit Servos hat, und sich diese auch nicht aneignen möchte, ist mit einem möglichst weit vorgefertigtem System sicher am Besten beraten.
Ich würde dafür einfach mal im Archiv der Elektor etwas herumstöbern.

Für einfache Anwendungen sind auch die Bausätze bei Conrad nicht schlecht...

Dann kommt es immer auf die Anwendung an. Ich habe auch schon eine Servoansteuerung für einen Motorenprüfstand, man mag es nicht glauben, ganz ohne uC realisiert.

Die Atmel Serie setzen wir auch sehr häufig ein.

Doch zum AVR muß man ganz klar sagen. Ohne Ahnung vom Programmieren- keine Chance. Denn schließlich sollen die Servos ja nicht nur angesteuert werden, sondern auch eine gewisse Funktionalität erfüllen. Welcher uC der bessere ist kommt auf die Anwendung und eigene Erfahrung an.
Was möchtest du denn machen?

Joerg
03.05.2005, 10:31
Hallo Starchild,

eigentlich wollte ich in dem Thread nichts mehr schreiben, weil ich nichts davon habe, wenn das hier weiter eskaliert. Ich habe keinen angegriffen, dennoch habe ich ein Interesse daran, dass die von mir vertriebenen Produkte nicht mit fadenscheinigen Argumenten schlecht gemacht werden.

Mit deinem Programmstück können wirklich nur AVR-Insider etwas anfangen, soviel steht fest.
Wie dem auch sei, ich habe es mal interessehalber getestet (12 Servos, Mega8, 16MHz, TCNT0=6, TCCR0=CK64, WAIT=3). Das Ergebnis ist gut (kaum Jitter), solange der Controller nichts anderes macht. Kommen Kommunikationsroutinen (andere Interrupts) hinzu, wird's Brühe.
Mal ganz abgesehen davon, dass es wirklich vollkommen daneben ist, in einer Interruptroutine bis zu 1ms in irgendwelchen Schleifen rumzuhängen. Das nur zum Zitat von weiter oben: "schlecht programmiert".

Auch evtl. schon mal überlegt was passiert, wenn alle Servos (oben stand mal was von bis zu 30 Stück) mit einem Schlag loslaufen? Ein gutes (leistungsstarkes) Servo, wie man es für einen Läufer verwendet hat einen Anlaufstrom von gut 1A. Das ist beim SD20 nun wiederum kein Thema, weil die Servos nacheinander angesteuert werden, beim SD21 (21Kanäle) werden immer nur 3 Servos gleichzeitig bedient.
Auch bietet der SD20 eine komfortable Dehnung des Bereiches (extended Mode, zur Anpassung des Drehbereiches der Servos) wo man die resultierende Pulszeit mit einer einfachen Formel bestimmen kann. Das vermisse ich hier. Kann man natürlich durch eine Programmänderung auch hinkriegen, das entsprechende Wissen vorausgesetzt.

Nicht falsch verstehen. Es gibt sehr gute Alternativen zu den verbreiteten Servocontrollern. Man kann die Funktionalität unter gewissen Voraussetzungen bei vielen Controllern gut mit in das Programm integrieren. Verschiedene Compiler (E-Lab, BASCOM) aber z.B. auch die PICAXE bieten entsprechende Funktionen mit an. Aus gutem Grund sind diese "fertigen" Funktionen zumeist aber auch auf 8 Servos begrenzt.

Dein Programm ist ein Ansatz, daraus lässt sich was brauchbares machen, mehr nicht.

@pm: ich gebe dir vollkommen Recht.


Viele Grüße
Jörg

Starchild
03.05.2005, 14:32
Ich weis ja das es nicht die Ideallösung ist, aber für meinen Zweck funktioniert es wunderbar.
Es gibt auch mit bidirektionaler UART-kommunikation, 6x AD - Wandlung und 3 PWM Ausgängen bei mir keinerlei Störungen, da der Timer/Counter Überlaufinterrupt nach Reset und den externen Interrupts die höchste Priorität hat. Alle anderen Interruptroutinen sind extrem kurz (Auswertung in Mainloop)
Der Vorteil meines Systemes ist, das der Controller eben noch in 19 von 20ms etwas anderes erledigen kann und das auch macht.
Das mit dem Anlaufstrom könnte schon stimmen, ist bei mir mit 5 starken Ruderservos aber noch nie aufgetreten.

Zeroeightfifteen
03.05.2005, 20:32
ich möchte mit den Servos so eine Art Arm ansteuern. Ich habe mir jetzt auch ein Buch bestellt "programmieren der AVR...". ich hoffe, dass das mir ein wenig weiter hilft. Ist der amega8 dann ein guter Einstieg oder was meint ihr?

Zeroeightfifteen
09.06.2005, 20:06
ich habe nun schon 6 Servos direkt am Atmega angeschlossen und das funktioniert super. werde nun weitere 6 Servos anschließen. denke dass das auch keine Probleme gibt. ich verstehe nur nicht warum es dann solche Servocontroller gibt.

Starchild
10.06.2005, 18:49
Ich auch nicht.
Unflexibel und / oder teuer

Manf
10.06.2005, 19:41
Ich auch nicht.
Unflexibel und / oder teuer
Es gibt ja genug Gelegenheit eigene Lösungen positiv darzustellen. Nun zieh' doch nicht ewig über das andere her, das provoziert doch nur eine Diskussion die dann mühsam gelöscht werden muß, weil hier der technische Teil des Forums ist.
Manfred

10.06.2005, 23:12
Wenn's unbedingt so viele Servo's sein sollen, dann verteil doch die Rechenarbeit auf mehrere Controller (der übersicht halber). Einer dient ausschließlich der Datenkommunikation zwischen dem Hauptrechner (PC???) und den anderen Controllern die sich mit der Bewegung der Servos beschäftigen. Und damit die Sache richtig spaß macht und die Servo steuernden Controller auch was zu tun haben könntest Du doch für jeden Servo einen Closed Loop aufbauen um immer zu wissen wo sich die Ruderhörner wirklich befinden. Ob man nun einen µC mehr oder weniger braucht dürfte bei Hobbyanwendungen doch wohl kaum eine Rolle spielen.
Ausserdem sollten sich auf diese Weise Fehler in der Programmierung deutlich schneller auffinden lassen. Im Multiplexverfahren (Servos werden nacheinander angesteuert) lassen sich ohne weiteres 8 Servos an einen µC anschließen so lange er entsprechend viele Ausgänge besitzt.
@Starchild: Da Du ja auf dem aktuellen Stand der Dinge bist wollte ich nur noch erwähnen das der Controller auch bei einer Multiplexansteuerung der Servos den größten Teil der Zeit mit nichtstun verschwenden und dabei keine 6 PWM-Kanäle braucht. Hier spielen aber andere Sachen eine größere Rolle. Aber wir wissen ja nun das Du es besser kannst... :-$

mfG der Anmeldefaule E-Fan

recycle
10.06.2005, 23:34
@Starchild


Unflexibel und / oder teuer

Klasse, du hast mich überzeugt.
Ich nehme einen von deinen selbstprogrammierten Servocontrollern.
Sagen wir 5 Euro, sollst ja auch was dabei verdienen.
Aber vergiss bitte nicht die Dokumentation beizulegen. Und komm mir nicht mit irgendwelchem Blubb von wegen Privatverkauf.
Ach ja, ne Rechnung brauche ich natürlich auch. Aber das sollte ja kein Problem sein, du wirst ja sicher keinen Schwarzhandel betreiben.

Dass ich einen Mordsaufstand machen werde, wenn das Ding schlechter funktioniert als der SD20 versteht sich ja hoffentlich von selbst.

Prima, dass es Leute wie dich gibt. Mich wegen ein paar Euro tagelang hinzusetzen und einen eigenen Controller zu entwickeln wäre mir nämlich echt zu blöd und wenn ich mir für einen vernünftigen Preis einen SD20 kaufe mach ich mich ja bei Millionen "Geiz ist geil" -Geschädigten lächerlich.

Zeroeightfifteen
11.06.2005, 00:01
ich werde es jetzt einfach mal versuchen mit 12 Servos. wenns nicht klapt kauf ich mir einen zweiten Atmega.

michiE
08.07.2006, 20:47
hats funktioniert ? würd mich interessiere , weil ich 8 servos an nen mega88-20pu hängen will ...
und in was für ner sprache hast du jetzt am ende geschreiben ?

mfg
Michi

Zeroeightfifteen
08.07.2006, 21:10
ja ich habe 12 Servos Problemlos mit einem Mega32 angesteuert. Ich habe auch mal alle 12 Servos gleichzeitig drehen lassen um zu sehen ob es Verzögerungen zwischen Servo1 und Servo12 gibt aber mit dem menschlichen Auge ist da nichts zu erkennen. Ich habe alles in Bascom geschrieben.