Hallo allerseits,
für ein Projekt möchte ich mit einem Arduino/Arduino Mega mehrere
Motoren ansteuern (keine Servos, normale DC-Motoren bzw.
Getriebemotoren) ... um genau zu sein 20 Motoren, im Moment gehe ich von
6V Motoren aus, sind im Prinzip diese ganz normalen Modellbau Motoren.
Es kann sein, dass es am Ende auch weniger als 20 Motoren werden, aber
im Moment ist das erstmal das Ziel.
Diese Motoren sollen einzeln ansteuerbar sein und ihre Aufgabe besteht
darin, je eine Schnur auf- und abzuwickeln. Man kann es sich so
vorstellen, dass an jedem Motor eine Rolle befestigt ist, auf die eine
Schnur aufgerollt wird.
Jetzt wäre meine Frage, ob schon jemand hier Erfahrung darin hat so eine
große Zahl von Motoren mit einem Arduino anzusteuern.. geht das? Meine
Tests mit einem Motor mache ich im Moment mit einem Arduino und
folgendem Motortreiber:
http://www.sparkfun.com/commerce/product_info.php?products_id=9457
Was bei dem Motortreiber schonmal gut ist.. Stromkreise für
Motoversorgung und Motorsteuerung sind getrennt. Bei der großen Anzahl
an Motoren kann ich das Arduino als Stromquelle für die Motoren
natürlich vergessen. Dieser Motortreiber hat aber nur 2 Kanäle, einen
Motortreiber mit mehr Kanälen habe ich leider bisher noch nirgends
gefunden. Ist es möglich sich den Schaltplan vom Motortreiber
anzuschauen, und das ganze dann auf 20 Kanäle "hochzuskalieren"... d.h.
das ganze auf einer eigenen Platine x10 zusammenzubasteln?
Eine weitere Frage von mir betrifft die Drehung der Motoren. Es wäre
nämlich perfekt wenn ich bei jedem Motor abfragen könnte, wieviele
Umdrehungen er bisher gemacht hat.. dann könnte ich präzise bestimmen,
wie weit jeder Motor seine Schnur aufgewickelt hat. Gibts es Motoren in
der Größe mit soetwas wie Drehzahlgeber, wenn ja in welchem Preisbereich
würde sich das dann bewegen? Oder muss ich mir da irgendwas mit
Lichtschranke zusammenbauen um festzustellen an welcher Position die
Motoren jeweils sind?
Habe gelesen, dass sowas angeblich mit Schrittmotoren möglich sein soll
... eine andre Möglichkeit sollen "rotary encoders" sein. weiss bloss
leider überhaupt nicht was am günstigsten bzw. praktikabelsten ist :(
Ich hoffe ihr könnt mir da irgendwie weiterhelfen :)
Schrittmotoren sind etwas aufwendiger anzusteuern (man braucht 2 Kanäle
pro motor statt nur einem), dafür kann man die schritte mitzählen.
Wieviel kraft müssen die Dinger denn haben?
Danke euch schonmal für die Hilfe!
Einer schrieb:> 74HC595 mit ULN2803 reicht für je zwei unipolare Schrittmotoren,> und ist einfach zu erweitern und günstiger als L293 mit bipolar.
Das klingt in meinen (unerfahrenen) Ohren ja schonmal recht gut, und
vorallem günstig. Sind in diesem Fall die zwei genannten Teile die
einzigen, die ich für den Schaltkreis benötige? Ich frage deswegen weil
ich zwar schon viele Arduino Experimente gemacht hab, aber noch nichts
in dem Ausmaß. Deshalb habe ich keine Ahnung was den Einsatz von
Kondensatoren, Dioden usw. angeht :(
Kann mir im Moment einfach nicht vorstellen wie einfach so ein
Schaltkreis mit Schrittmotoren für mich als fast-Anfänger zu realisieren
wäre
Nächste Frage: Wie schwer wäre es, den Code für die Ansteuerung der
Motoren zu schreiben, wenn ich obigen Schaltkreis realisiert habe. Mit
den Schieberegistern und Darlington-Arrays klingt das irgendwie nach
sehr viel low-Level Programmierung, wo ich auch nicht so viel Erfahrung
habe. Einen Stepper mit dem Arduino zu steuern wird ja nicht so
schwierig sein, aber 20 Stück die über Schieberegister
nebeneinandergeschaltet sind?
Für mein Projekt ist Stabilität (sowohl von software als auch hardware
seite) sehr wichtig deswegen möchte ich sicher gehen, dass das mehrere
Stunden fehlerfrei laufen wird
jonas schrieb:> Nächste Frage: Wie schwer wäre es, den Code für die Ansteuerung der> Motoren zu schreiben, wenn ich obigen Schaltkreis realisiert habe.
Sobald du begriffen hast, wie ein Schieberegister arbeitet und wie man
es ansteuert, schreibst du dir zwei Funktionen die 1 bestimmten Ausgang
am Schieberegister auf 1 oder 0 setzen.
Und ab dann, ist das Schieberegister für dich einfach nur noch eine
Porterweiterung, die dir eine Unmenge von Ausgängen zur Verfügung
stellt, die du gezielt auf 0 oder 1 setzen kannst.
> den Schieberegistern und Darlington-Arrays klingt das irgendwie nach> sehr viel low-Level Programmierung, wo ich auch nicht so viel Erfahrung> habe. Einen Stepper mit dem Arduino zu steuern wird ja nicht so> schwierig sein, aber 20 Stück die über Schieberegister> nebeneinandergeschaltet sind?
Ob 1 oder 20 ist schon egal.
Entscheidend ist, ob du verstehst wie ein Schrittmotor arbeitet und wie
daher seine 4 Leitungen bedient werden wollen.
Hast du das für einen, dann hast du es auch für 20.
Das Array ist in C schon erfunden.
Für mich stellt sich allerdings die Frage, wie sinnvoll es ist, einen
einzelnen AVR mit so vielen Motoren zu beauftragen. Was im Prinzip gehen
mag, kann in der Praxis zum Horror werden.
Mein Vorschlag wäre, pro Motor einen ATtiny2313 oder Mega48 zu nehmen
und alle kleinen AVRs zentral zu steuern. Für einen Neueinsteiger
zunächst eine kniffelige Angelegenheit, aber am Ende der beste Weg -
meine ich.
Ich habe mir auch schon einige Links zu Schrittmotoren rausgesucht und
werde mich da mal einlesen, vielleicht stelle ich es mir im Moment
wirklich komplizierter vor als es ist :)
Tropenhitze schrieb:> Für mich stellt sich allerdings die Frage, wie sinnvoll es ist, einen> einzelnen AVR mit so vielen Motoren zu beauftragen. Was im Prinzip gehen> mag, kann in der Praxis zum Horror werden.>> Mein Vorschlag wäre, pro Motor einen ATtiny2313 oder Mega48 zu nehmen> und alle kleinen AVRs zentral zu steuern. Für einen Neueinsteiger> zunächst eine kniffelige Angelegenheit, aber am Ende der beste Weg -> meine ich.
Daran hatte ich auch schon gedacht. Wobei ich dachte, dass ich vlt.
nicht für jeden Motor einen eigenen AVR brauche ... dachte daran vlt.
immer 5 Motoren mit einem Steckboard-Arduino (also praktisch einem
selbstgebastelteten arduino mit atmega168 oder so) zu steuern und so die
rechenlast aufzuteilen und die komplexität der software ein bisschen zu
reduzieren. aber wie gesagt das sind jetzt meine vorstellungen... bin
leider (noch?) kein experte.
Keine Angst.
Abblockkondensatoren an den ICs sollten schon sein.
20 Motoren ziehen schon einiges an Strom.
Da du hier nicht so viel Drehmoment brauchst kann es reichen wenn du
jeweils nur 1 Spule bestromst.
jonas schrieb:> selbstgebastelteten arduino mit atmega168 oder so) zu steuern und so die> rechenlast aufzuteilen
So hoch ist die ja auch wieder nicht.
Deine Motoren müssen ja nicht mit zig-tausend Umdrehungen drehen.
Die einzige wirklich interessante Frage ist: brauchst du beim
Anfahren/Abbremsen der Motoren eine Rampe oder nicht. Wenn ja, dann kann
das komplizierter werden. Wenn nein, dann spielt es keine grosse Rolle,
ob du 1 oder 20 Motoren ansteuerst. Ein regelmässiger Timer-Interrupt in
dem alle Motoren überprüft werden, ob sie ihre vorgegebene Sollposition
erreicht haben und wenn nicht machen sie einen Schritt in Richtung
Sollposition.
> und die komplexität der software ein bisschen zu> reduzieren.
Dafür kriegst du durch die Kommunikation einen neuen Komplexitätslevel
rein.
Es gibt natürlich auch Ausnahmen, aber oft vereinfacht ein Mehr-µC
System die Dinge nicht, sondern macht es nur noch komplizierter.
Ausnahmen sind, wenn die einzelnen Aufgaben wirklich streng voneinander
entkoppelt sind. Wäre zwar bei dir der Fall, aber dann bleibt immer noch
der Teil: Die Dinger müssen an einem Bus miteinander reden können.
Wenn das 'Projekt' etwas mehr als reine Bastelei sein soll, und die
Antriebe nicht gerade vom Grabbeltisch sein sollen, sehe ich die Sache
so:
Entweder man nimmt je einen DC-Motor mit Drehgeber (Magnet+Hallsensoren)
oder einen Schrittmotor mit gängiger Auflösung 1,8° (200
Schritte/Umdrehung).
Beim DC-Motor wird die Soll-Position mit der aktuellen Ist-Position
verglichen und ggf. angefahren. Damit keine ruckartigen
Bewegungen/Stromspitzen auftreten wird der Motor per PWM gestartet und
gestoppt. Die Ist-Position muß permanent gemessen werden. Als Referenz
dient entweder ein Endschalter oder man fährt den Motor gegen die Bande
und testet das Erreichen des Anschlages durch Strommessung.
Beim Schrittmotor kann man sich die Messung der Ist-Position sparen,
braucht aber einen eigenen Timer um zügige Bewegungen zu erreichen. Auch
ohne Rampen kann man 1000 (Halb-)Schritte/s fahren. Wieder wird die
Soll-Position vorgegeben und der Schrittmotor folgt mit seiner
Ist-Position. An einem Ende der Fahrstrecke braucht man einen
Endschalter zur Positionserkennung/0-Punkt Vorgabe.
Wenn man diesen Anspruch hat, braucht man pro Motor einen µC. Nur
dadurch erreicht man überschaubare Komplexität.
Ein kleines "Bussystem", bei dem nur der Hauptprozessor reden darf und
die Sub-Prozessoren nur ausführen oder antworten, ist mit USARTs kein
großes Problem. Im einfachsten Fall überträgt man die Befehle per
Klartext.
So würde ich es angehen, um erfolgreich zu sein.
Tropenhitze schrieb:> Wenn das 'Projekt' etwas mehr als reine Bastelei sein soll, und die> Antriebe nicht gerade vom Grabbeltisch sein sollen, sehe ich die Sache> so:
soll auf jeden fall nicht nur reine bastelei sein, das ding soll stabil
funktionieren und das möglichst über einen zeitraum von mehreren stunden
Tropenhitze schrieb:> Beim Schrittmotor kann man sich die Messung der Ist-Position sparen,> braucht aber einen eigenen Timer um zügige Bewegungen zu erreichen. Auch> ohne Rampen kann man 1000 (Halb-)Schritte/s fahren. Wieder wird die> Soll-Position vorgegeben und der Schrittmotor folgt mit seiner> Ist-Position. An einem Ende der Fahrstrecke braucht man einen> Endschalter zur Positionserkennung/0-Punkt Vorgabe.
schrittmotor hört sich von den beiden von dir genannten möglichkeiten
für mich am besten an. ob ich für die bewegung rampen brauche kann ich
noch nicht 100% sagen, ich muss mir erstmal die bewegung ohne rampe
anschauen und testen ob mir das für meine zwecke zu ruckartig ist
Tropenhitze schrieb:> Wenn man diesen Anspruch hat, braucht man pro Motor einen µC. Nur> dadurch erreicht man überschaubare Komplexität.
ok aber was is der ausschlaggebende punkt, der einen mikrocontroller pro
motor erfordert... geht es dabei um die PWM geschichte, mit der ich
rampen in der bewegung realisieren kann? sorry wenn die frage unnötig is
aber ich bin halt nicht der experte auf dem gebiet ;)
Tropenhitze schrieb:> Ein kleines "Bussystem", bei dem nur der Hauptprozessor reden darf und> die Sub-Prozessoren nur ausführen oder antworten, ist mit USARTs kein> großes Problem. Im einfachsten Fall überträgt man die Befehle per> Klartext.>> So würde ich es angehen, um erfolgreich zu sein.
wie du das beschreibst macht mich das zuversichtlich, ich hoffe, dass
das für mich wirklich so einfach zu realisieren ist wie es sich anhört
;). vielen dank schonmal bis hierher
Karl heinz Buchegger schrieb:> Mich würde interessieren, was das wird.> 20 Motoren, die Luftballone rauf/runter fahren klingt nach einem> Kunstwerk.>> Ev. eine Variation von dem hier>> http://www.youtube.com/watch?v=HVhVClFMg6Y&feature...
von der grundfunktion gar nicht mal so verkehrt, es wird am ende aber
eher eine interaktive design installation als kunst. vorausgesetzt ich
kann das teil so bauen wie ich es vorhabe :)
was ich noch ganz vergessen hatte:
wie flüssig kann die bewegung eines schrittmotores mit der herkömmlichen
ansteuerung sein? ich kann nämlich absolut keine ruckartige bewegung
gebrauchen.
hab jetz im inet mehrfach von "microstepping" gelesen... muss ich das
auch implementieren oder reicht die "simple" ansteuerung für eine
flüssige bewegung? und hängt die flüssigkeit der bewegung davon ab,
wieviel schritte der motor pro umdrehung hat.. oder macht das keinen
unterschied?
>wie flüssig kann die bewegung eines schrittmotores mit der herkömmlichen>ansteuerung sein?
Das kannst Du Dir ausrechnen. Oben empfohlener Restpostenmotor macht 24
Schritte/Umdrehung (15° Schritte). Ein besserer Motor hat einen
Schrittwinkel von 1,8°. Abhänging vom Antrieb ergibt sich der
Weg/Schritt. Mikroschritte sehe aber nicht für notwendig an, es sei
denn, Du möchtest im 1/10 mm Bereich positionieren oder noch feiner.
Besorge Dir meinetwegen eine einfachen Schrittmotor und mache
Vorversuche. Erst dann kannst Du eigene Erfahrungen sammeln und
abschätzen, wie man die Sache vervielfachen kann.
Und ein bißchen im Auge solltest Du auch haben, welche Kraft für die
Bewegung gebraucht wird. Auch wenn sie recht klein sein sollte, sollte
man dies vorab klären.
ja ich werde jetzt auch möglichst schnell anfangen das alles zu testen,
deshalb wollte ich gerade mal eine kleine einkaufsliste zusammenstellen
und fragen ob da noch irgendwas fehlt oder ob das so passt fürs erste
testen mit schrittmotor:
- Schrittmotor (ist pollin.de da ok? ansonsten schau ich sowieso nochmal
im keller ob irgendwo noch ein altes cd- oder diskettenlaufwerk
rumfliegt)
- TPIC6B595 chip
(http://de.farnell.com/texas-instruments/tpic6b595n/8bit-shift-register-pdip20/dp/1287675).
hab hier im forum gelesen, dass das HC595 + ULN2803 in einem gehäuse
kombiniert ist, und diese kombination wurde mir ja oben empfohlen
- Dioden? Transistoren? könnt ihr mir vlt. helfen und sagen wo ich im
motorschaltkreis welche von diesen teilen einsetzen sollte? wichtig
wären vorallem die werte von den einzelnen teilen, damit ich mir
schonmal ein kleines repertoire an diesen teilen zulegen kann ...bis
jetzt hab ich eigtl. nur eine kleine sammlung von widerständen aber das
wird für den zweck wohl nicht reichen ;)
ok... ich denk das reicht fürs erste. falls jemand noch bedenken hat
oder glaubt, dass etwas fehlt bitte bescheid sagen :D
Der Pollinmotor ist ein bipolarer und mit dem Farnello IC kann man nur
unipolare Stepper ansteuern.
Du bist dabei, den 3. Schritt vor dem 1. zu machen. Nimm einen Motor,
der sich auf Grund Deiner überschlägigen Abschätzung eigenen könnte, und
steuere ihn mit vier Portpins entwerder über einen ULN2803 oder einen
L293D an. Dann wirst Du sehen, wie es funktioniert und ob Du mit einem
µC 20 Motore ansteuern möchtest oder nur einen :-)
Deine Mechanik kennst nur Du; folglich kannst Du hier keinen weiteren
Rat zu Details erwarten.
Tropenhitze schrieb:> Du bist dabei, den 3. Schritt vor dem 1. zu machen. Nimm einen Motor,> der sich auf Grund Deiner überschlägigen Abschätzung eigenen könnte, und> steuere ihn mit vier Portpins entwerder über einen ULN2803 oder einen> L293D an. Dann wirst Du sehen, wie es funktioniert und ob Du mit einem> µC 20 Motore ansteuern möchtest oder nur einen :-)
das ist doch genau das, was ich vorhabe ;). jetzt wird erstmal motor mit
meinem arduino getestet und wenn ich den richtigen motor gefunden hab
denk ich darüber nach wie ich das ganze hochskaliere, hab ja hier schon
genügend gute vorschläge bekommen wie ich das dann realisieren könnte.
Tropenhitze schrieb:> Deine Mechanik kennst nur Du; folglich kannst Du hier keinen weiteren> Rat zu Details erwarten.
über die Mechanik und meine ersten Testergebnisse werd ich auf jeden
Fall berichten