Forum: Mikrocontroller und Digitale Elektronik Arduino mit vielen Motoren


von jonas (Gast)


Lesenswert?

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 :)

von Hans M. (hansilein)


Lesenswert?

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?

von jonas (Gast)


Lesenswert?

Sie müssen einen mit Helim gefüllten Ballon (ca. 60 - 80cm Durchmesser) 
nach unten ziehen können

von jonas (Gast)


Lesenswert?

Helium meinte ich natürlich

von Hans M. (hansilein)


Lesenswert?

So einen Schrittmotor vielleicht:
http://www.pollin.de/shop/dt/Njk5OTg2OTk-/Motoren/Schrittmotoren/Schrittmotor_BERGER_LAHR_RDM57.html

Du bräuchtest dann so einen chip pro kanal:
http://www.reichelt.de/?;ACTION=3;LA=444;GROUP=A214;GROUPID=2911;ARTICLE=9661;START=0;SORT=artnr;OFFSET=16;
Da sind die dioden schon integriert.

Um diese chips anzusteuern kann man entwerder einen extra 
schrittmotortreiber nehmen oder pins toggeln.
In beiden Fällen hast Du am Arduino zuwenige Pins und musst mit 
schieberegistern arbeiten.

von Icke (Gast)


Lesenswert?

Das sollte (fast) jeder Schrittmotor schaffen.

von Einer (Gast)


Lesenswert?

Günstig und einfach.

74HC595 mit ULN2803 reicht für je zwei unipolare Schrittmotoren,
und ist einfach zu erweitern und günstiger als L293 mit bipolar.

von Hans M. (hansilein)


Lesenswert?


von jonas (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Tropenhitze (Gast)


Lesenswert?

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.

von jonas (Gast)


Lesenswert?

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 :)

von jonas (Gast)


Lesenswert?

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.

von einer (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Einer (Gast)


Lesenswert?

20 Timergesteuerte Zähler in Software mit Phasenincrement so wie bei 
DDS.

von Tropenhitze (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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=related

von jonas (Gast)


Lesenswert?

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 :)

von jonas (Gast)


Lesenswert?

Einer schrieb:
> 20 Timergesteuerte Zähler in Software mit Phasenincrement so wie bei
> DDS.

könntest du das nochmal genauer erläutern? ... Bahnhof :D

von Jonas J. (jonas_j)


Lesenswert?

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?

von Phil (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Ev. eine Variation von dem hier
>
> http://www.youtube.com/watch?v=HVhVClFMg6Y&feature...

Wow! Krass.

Hat einer ne Idee wie man sowas am einfachsten realisiert? DMX?

von Tropenhitze (Gast)


Lesenswert?

>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.

von Jonas J. (jonas_j)


Lesenswert?

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

von Tropenhitze (Gast)


Lesenswert?

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.

von Jonas J. (jonas_j)


Lesenswert?

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

von Jonas J. (jonas_j)


Lesenswert?

inzwischen habe ich mit der Erstellung der Platinenlayouts begonnen, 
hier geht's zu dem Thema weiter:

Beitrag "Bewertung erster Entwurf für Motorplatine"

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.