www.mikrocontroller.net

Forum: Compiler & IDEs 128 Kanal Schrittmotorsteuerung mit Microcontroller


Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin Leute, bin ein absoluter neuling auf dem Gebiet der 
Microcontroller, also bitte verzeiht mit meine Uniwssenheit :-)

Für ein Projekt muss ich eine 128 Kanel PWM Schrittmotorsteuerung bauen. 
Dabei soll alle 15 mikrosekunden der Zustand aller 128 Kanäle neu 
gesetzt werden ( ein / aua ).

Meine erste Überlegung war folgende: Eine Art USB-Relais Karte ( 
eigentlich nur eine USB auf 8 Bit parallel Karte), und dann mit Demuxen 
und FlipFlops das Signal auf 128 Kanäle aufteilen und speichern. Das 
Problem liegt aber in dem Fall dort, dass das ganze vermutlich zu 
langsam wäre, zumal mehrere dieser Schnittstellen wiederrum an einen PC 
sollen ....

BESSERE LÖSUNG: Per LAN werden Microcontroller mit dem PC Verbunden, die 
jeweils 128 Kanäle Steuern. Man schickt dann über das Netzwerk nur einen 
Befehl, wie "stark" einer der Motoren angesteuert werden soll, und der 
Microcontroller kümmert sich darum, wann er dann letztendlich Impulse 
setzt. Das sieht dann wie folgt aus: Der Mikroconrtoller gibt über einen 
seriallen Port einfach eine Reihe NULLEN und EINSEN aus. Eine 
zusätzliche Schaltung legt die aktuelle anliegende 0/1 auf den Flip Flop 
der zu einem Motor x gehört. Dann zählt die Schaltung hoch, und legt den 
Wert am Seriell Port auf den Motor x +1, x+2 ...., bis alle 128 Motoren 
ein / aus geschaltet sind, Dann beginnt das Ganze von vorne und läuft 
immer wieder durch

Meine Frage: Könnte das so klappen? wo sind nach eurer Sicht die 
Probleme, und vor allem WAS FÜR BAUTEILE KANN ICH NEHMEN ? Die Frequenz 
würde bei ca. 8,5 MHZ liegen. Das ist verdammt viel finde ich. Könnte 
man das ganze auch über den USB Port eines Microcontrollers realisieren, 
der ist ja auch seriell, aber schneller !??

Vielen Dank im Voraus

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab deine Flip-Flop Lösung nicht verstanden, kannst du da mal einen 
Schaltplan zeichnen?

Und was meinst du mit einer "128 Kanel PWM Schrittmotorsteuerung"?

Zum Schluss noch die Frage wie du auf 8,5 MHZ kommst.

Autor: Florian Schwarz (floschman)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab mal eine einfach Schema Zeichnung angehängt:

- Der Miktocontroller gibt einen einfachen seriallen Bit Stream aus. ( 
USB oder RS232 )
- Der Impulszähler ( wird später vermutlich im Microcontroller selber 
sein) gibt den Impuls wann die Zählschaltung hochzählen und 
durchschalten soll
- Die Zählschaltung zählt immer wieder von 1 bis 128, und legt das 
Eingangssignal dass sie vom Mikrocontroller bekommt an den 
entsprechenden Motor (1-128).
- Die Flip Flops speichern für jeden Motor ob dieser an oder aus ist, 
bis der nächste Impuls kommt. ( Selbstverständlich wäre noch ein 
Schalt-Trsnsistor hinter dem Flip Flop .... )

:-)

Achso, die 8,5 MHZ:
Alle 15 Mikrosekunden alle 128 Motoren -> 8,5 Mio Schaltvorgänge pro 
Sekunde insgesamt ...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  ( ein / aua )
Diese beiden Signalzustände sind mir bekannt... :-D

> Eine Art USB-Relais Karte...
... wird garantiert nicht in 15us aktualisiert werden können  :-o
Sieh dir mal die Taktzeiten (Timeslots) von USB an. Da bist du im 
ms-Bereich...

128 Schrittmotoren mit 1 uC alle 15 us aktualisieren zu können ist eine 
sehr anspruchsvolle Aufgabe...

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht sollte ich auf 64 Bit reduzieren ? Wären dann "nur" 4 MHZ, 
aber das würde vielleicht helfen ?

Kennte ihr Firmen die sowas zuverlässig nach Auftrag bauen ?
Vielen Dank!

Autor: David ... (volatile)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CPLD/FPGA?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie steuerst du mit einem Flipflop einen Schrittmotor an?
Oder ist das doch nur ein "normaler" DC Motor der per PWM gesteuert 
werden soll?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Vielleicht sollte ich auf 64 Bit reduzieren ? Wären dann "nur" 4 MHZ,
> aber das würde vielleicht helfen ?
Dein Problem ist nicht irgendeine Taktfrequenz. Nein, das liegt 
woanders...
Zeichne mal auf, welche Anschlüsse ein Schrittmotor hat, und welche 
Signale du zum Ansteuern dieser Anschlüsse brauchst. Dann kommst du mit 
128 Schrittmotoren auf mindestens 256 Signale (Richtung+Takt) oder noch 
mehr, wenn du die Spulen direkt ansteuern willst.

Und wenn du das hast, sieh dir die angesprochenen Schnittstellen an, 
wie dort mit welcher Datenrate Informationen übertragen werden 
(können). Dann siehst du schnell, dass irgendein "intelligenter" 
Verwalter für den Datenstrom und die Pufferung nötig ist.

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei 128 Motoren kommen schon ganz ordentliche Ströme zusammen, die 
Deinen Mikrocontroller beträchtlich stören können.
Wie sieht denn Dein Spannungsversorgungs-Konzept aus?
Sind galvanische Trennungen vorgesehen?
(Einige Blockkondensatoren wild verteilt reichen hier mit Sicherheit 
nicht aus.)

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal für die vielen Antworten:

- @ Gast (Gast):Ja, sorry, es sind eigentlich nur normale Motoren die 
PWM gesteuert werden! Sorry, wie gesagt, allgemein etwas unbewandert auf 
dem Gebiet ...

- @Lothar Miller und Jörg S.: Damit hätte euer Einwand dann auch 
erledigt, sorry sorry, sorry !!! Sind normale Motoren mit 2 Pins. 
Jeweils ca. 4 - 8 Watt wobei niemals alle auf einmal laufen. Maximal 
vielleicht ca. 15% der Motoren laufen auf einmal ... Ich denke wir 
werden ein vernünftiges 300 - 400 Watt Netzteil verwenden, und dann per 
Software die Anzahl der gleichzeitig aktivierten Motoren begrenzen ...

Gibt es eine Möglichkeit meinen Ersten Beitrag zu editieren, damit nicht 
jeder die Falsche Problemstellung mitbekommt ?

Autor: Piep (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ein Kunstprojekt? Eine Installation, wo sich alle möglichen Teile 
drehen/bewegen?

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sowas in der Art, ich darf leider nicht genau sagen worum es geht. Ist 
für die Uni, und wenn ich es ausplauder und jemand anderes ließt es, 
bekommt ich ganz gehörig eine drüber ... Ist nicht böse euch gegenüber 
gemeint, zumal es nichts Weltbewegendes ist :-)


Aber mal angenommen ich versuche nun diese 128 Kanäle alle 15 
mikrosekunden zu aktualisieren, dann ergäbe sich eine Rate von ca 8,5 
Mbit oder ?! Das müsste doch mit USB 2.0 ( Full Speed sind ja schon 12 
MBit ) machbar sein. Vielleicht auch einfach mit einem Extra PC ? Da wir 
ja mehrere dieser 128 Kanal Karten benötigen wäre es vielleicht 
flexibler das ganze direkt an einen PC zu machen. Damit erspart man sich 
die Programmierung der Mikrocontroller ... ???


Vielen Dank nochmal für euere Geduld und das schnelle Feedback!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch doch erst mal 1 (in Worten: einen) Motor zum laufen zu kriegen. 
Dann 2. Und dann reden wir mal über 10. Und wenn du die dann im Griff 
hast, gehts es an 128.


> Moin Leute, bin ein absoluter neuling auf dem Gebiet der
> Microcontroller, also bitte verzeiht mit meine Uniwssenheit

Immer das Gleiche.
Keine Grundlagen aber zum Mond fliegen wollen.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit SPI kannst Du locker mit 10 MBit/s Daten in eine Flip-Flop-Kette 
schieben und dann noch pro Flip-Flop ein Latch-Enable um die neuen Daten 
über Output-Lachtes ausgeben.

Kann mit IC's Diskret aufgebaut werden, eleganter und vernüftiger ist, 
das ganze in ein CPLD zu packen...

Autor: geb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Florian, ich würde mich der Sache annehmen,aber deine Infos sind 
noch viel zu dürftig. Bin erreichbar unter Raich Punkt Geraetebau at aon 
Punkt at.
Grüße

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Immer das Gleiche.
> Keine Grundlagen aber zum Mond fliegen wollen.
Jo, genau wie damals, und da hats auch funktioniert :-)

Ne, mal im ernst, wie ist dein Post genau gemeint ? Was soll ich genau 
in Worten erklären ?

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geht auch eine DMX-Steuerung?
(siehe z.B. http://www.soundlight.de/)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Schwarz schrieb:
>> Immer das Gleiche.
>> Keine Grundlagen aber zum Mond fliegen wollen.
> Jo, genau wie damals, und da hats auch funktioniert :-)

Irrtum.
Die Leute hatten Grundlagen. Die haben sie sich in den 20 Jahren davor 
erarbeitet. Sie haben klein angefangen und sich dann hochgearbeitet.

Autor: geb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Florian!

Es scheint so zu sein, daß du 128 DC Motoren unabhängig voneinander 
steuern willst.Gut. Sollen die jetzt auf Position fahren, oder ist nur 
die Drehzahl interessant? Deine 15us Takt kommen mir etwas seltsam vor, 
in dieser Zeit dreht sich die Achse eines Motors vermutich im milli-Grad 
Bereich.

Grüße

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
- @Peter (Gast): Das klingt ja schonmal gut. Wie ich die Logikschaltung 
im Endeffekt realisiere ist mir persönlich egal, wenn das mit CPLDs 
besser geht, dann wirds so gemacht. Danke für den Anstoß, werde mich 
diesbezüglich mal einlesen

- @geb (Gast): Danke für das Angebot, werde dir vermutlich im Laufe der 
nächsten Tage mal mailen ...

- @ Jörg S.: Prinzipiell sind mir alle Mittel recht, die zum Ziel führen 
:-) Danke für Vorschlag, ich lese mir jetzt erstmal durch, was genau man 
mit diesen DMX Karten machen kann

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Immer das Gleiche.
>> Keine Grundlagen aber zum Mond fliegen wollen.
>Jo, genau wie damals, und da hats auch funktioniert :-)

Aber erst als dutzende Raketen abgestuerzt und explodiert sind.
Und die haben nicht gerade mit der Saturn 5 angefangen sondern mit der 
V2.

Autor: David ... (volatile)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Schwarz schrieb:
> - @Peter (Gast): Das klingt ja schonmal gut. Wie ich die Logikschaltung
> im Endeffekt realisiere ist mir persönlich egal, wenn das mit CPLDs
> besser geht, dann wirds so gemacht. Danke für den Anstoß, werde mich
> diesbezüglich mal einlesen

CPLD schrieb ich schon frueher. Wenn das lesen nichtmal ganz klappt... 
:D

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute, ich komme euch kaum mehr hinterher mit dem Posten, ich werde 
nun erstmal eine Post verfassen, indem ich nochmal die Anforderungen 
zusammenfasse, um wieder mehr Überblick rein zu bringen ... Sorry, das 
Chaos ist wohl das Produkt meiner ungenauen und falschen Fragestellung 
:-) Gebt mir ein paar Minuten ...

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit 8.5MBit kannst Du nur Ein/Ausschalten, nix mit PWM.

Wenn PWM, dann kommt's auf die Auflösung drauf an, bei einer Auflösung 
von nur 16 Schritten wären das:

66.7kHz Updaterate x 128 Kanäle x 16 Schritte ~ 17 MByte/s, die wollen 
erstmal erzeugt und übertragen werden.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Schwarz schrieb:

> nun erstmal eine Post verfassen, indem ich nochmal die Anforderungen
> zusammenfasse, um wieder mehr Überblick rein zu bringen ...

Das ist eine gute Idee.

Beschreibe aber fürs erste nur deine Anforderungen auf hoher Ebene. 
Also: welche Motoren willst du steuern (Typ). Was müssen die tun können. 
Wie schnell muss ein einzelner Motor reagieren können. Wie genau müssen 
Drehzahlen etc. eingehalten werden, etc ...

Verzichte fürs erste darauf irgendwelche Ideen einzubringen, wie man das 
alles realisiern könnte. Zuerst muss klar sein, was eigentlich die 
Aufgabenstellung ist und welche Rahmenparamter gelten.

Autor: Florian Schwarz (floschman)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anforderung:

Wir haben 128 Motoren die wir per PWM ( PWM bedeutet doch Pulsweiten 
Modulation, also die Zeit die man ein / ausschaltet oder ?!? ) 
gleichzeitig, aber absolut unabhängig steuern möchten. Interessant ist 
nur die Leistung an jedem Motor. Es muss keine Position eingelesen 
werden. Welche Motoren wir genau verwenden wissen wir noch nicht genau. 
Jeder Motor hat ca. 4-8 Watt Leistung bei ca. 12-28 Volt Gleichspannung. 
Alle Motoren müssen ca. alle 15 Mikrosekunden aktualisiert ( Ein / 
Ausgeschaltet ) werden. ( Die genauen Drehzahlen die im Endeffekt 
anliegen müssen kenne ich selber nicht, ein Kollege hat mir nur die 15 
Mikrosekunden Aktualiserungsrate vorgegeben )

Eine Grundlegende Idee habe ich in der Zeichnung im Anhang. Die 
Erläuterung dazu ist folgende:

--- Mikrocontroller / PC:
Ob nun ein Mikrocontroller oder einfach ein PC verwendet werden soll 
weiß ich noch nicht. Wenn man mal ausrechnet kommt man auf eine reine 
Bitrate von ca. 8,5 MBit um alle Motoren im 15 Mikrosekunden Takt 
ein/aus zu schalten. Die einfache RS232 Schnittstelle ist dafür 
vermutlich zu langsam. Daher tendiere ich zu USB. DAS SYSTEM MUSS ABER 
AUSBAUFÄHG SEIN, AM ENDE WERDEN VIELLEICHT 4 DIESER 128 KANAL KARTEN 
GLEICHZEITIG BETRIEBEN.
Man könnte nun einen Mikrocontroller mit einem USB Ausgang auf jeder 128 
Kanal Karte verwenden, und diesen per Netzwerk mit dem PC Kommunizieren 
lassen. Lieber wäre mir aber, wenn man sich den Mikrocontroller sparen 
könnte, und das ganze per USB direkt an einen PC machen könnte. Der 
Vorteil läge dort, dass man sich die Kosten für mehrere Mikrocontroller 
spart ( PCs haben wir genug :-) und die Programmierung einfacher ( bzw 
konfortabler) wäre. Die Software die am Ende die Motoren betreibt, soll 
per Netzwerk nur einfach Befehle senden, in den steht: "Betreibe Motor X 
mit Leistung Y". Der Microcontroller / PC soll sich dann darum kümmern, 
wann welcher Motor genau eingeschaltet wird.

--- Adressierung der Motoren:
Natürlich muss man wissen welcher Motor nun gerade gesteuert werden 
soll. Hierzu würde ich gerne eine Logikschaltung aufbauen, die bei jedem 
Takt das BIT welches am Eingang anliegt nimmt, auf den Motor X 
durchschaltet. Dann zählt die Schaltung hoch, und schaltet das nächste 
Bit an den nächsten Motor weiter. Bis zur nächsten "Runde" muss diese 
Bit natürlich gespeichert werden, sowas sollte mit einem Flip Flop 
gehen. Hinter dem Flip Flop wäre dann noch ein Transistor, der dann 
endgültig den Motor schaltet. Die eigentliche Logikschaltung kann man 
offensichtlich mit CPLDs
realisieren.


--- Fragen:
Wo seht ihr die Probleme ? Ich vermute dass die eigentliche serielle 
Ausgabe des Bitstroms per USB garnicht sooo wild ist, aber die 
Logikschaltung zur Adressierung muss mitkommen, und das ganze muss 
irgendwie synchronisiert werden. Meint ihr es wäre möglich das direkt 
per USB an einen PC zu packen, oder vermutet ihr, es wäre doch besser 
einen Mikrocontroller zwischen zu schalten ?


MWS schrieb:
> Mit 8.5MBit kannst Du nur Ein/Ausschalten, nix mit PWM.
Genau das ist dass, was ich vorhabe. Sorry ist das nicht PWM ? Die 
Software regelt wie lange ein Motor an ist, und wie lange er aus ist. 
Daraus ergibt sich approximiert die Leistung


> Verzichte fürs erste darauf irgendwelche Ideen einzubringen, wie man das
> alles realisiern könnte. Zuerst muss klar sein, was eigentlich die
> Aufgabenstellung ist und welche Rahmenparamter gelten.
Zu spät :-) sorry, war schon kräftig am schreiben ... Hab ich erst 
nachher gesehen

Autor: Schwupps (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MWS schrieb:
>> Mit 8.5MBit kannst Du nur Ein/Ausschalten, nix mit PWM.
>Genau das ist dass, was ich vorhabe. Sorry ist das nicht PWM ? Die
>Software regelt wie lange ein Motor an ist, und wie lange er aus ist.
>Daraus ergibt sich approximiert die Leistung

Vielleicht solltest du dir erst ansehen, was PWM bedeutet.

Ich lehne mich mal weit aus dem Fenster und versuche mal darzustellen 
wie ich deine Aufgabenstellung verstehe:
Du willst nicht alle 15 us die Leistung der Motoren ändern, sondern nur 
eine PWM mit einer Periodendauer von 15 us erreichen. Das verringert den 
Aufwand erheblich.

Autor: avion23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kürzeste Verzögerungszeit von USB ist 2ms. Dazu kommen noch 
Softwarebuffer, Wartebuffer und die Übertragungszeit. Damit sind 15µs 
nicht zu schaffen.

Auch mit einer reinen rs232 Schnittstelle sind 15µs seeehr knapp. 
Schließlich entspricht 1MBit bei 15µs nur 15 Flankenwechseln, also 
ungefähr 1byte. Deine Anforderung / Aufgabenstellung ist also so nicht 
zu erfüllen. Wahrscheinlich hast du deinen Kollegen falsch verstanden 
und dieser hat sich auf die PWM Frequenz bezogen. Das wären immer noch 
sehr hohe 66kHz.

Ich tippe auf f_PWM ~20kHz. Dann entweder Software/ Hardware PWM (+ AND 
Gatter zum auswählen der aktiven Motoren) oder FPGA. Wenn du die weniger 
als 128Motoren/Modul wählst ist alles viel einfacher.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich vermute dass die eigentliche serielle
> Ausgabe des Bitstroms per USB garnicht sooo wild ist
Nur kann USB eben keinen kontinuierlichen Datenstrom übertragen...

Sinvoller wäre eine Dezentralisierung und eine Teilung der Aufgaben:
Ein uC steuert z.B. 8 Motoren an. Das kann er mit seinen eingebauten 
PWM-Kanälen. Etliche dieser 8er-Gruppen sind über SIO oder SPI mit einem 
Master verbunden, der jetzt nur noch die aktuellen Geschwindigkeiten an 
diese Motor-Controller sendet. Dieser Master-Controller bekommt 
Informationen vom PC via USB. Und hier ist die Datenrate so gering, dass 
auch ein kurzer Aussetzer (10ms sind bei Windows immer drin) nichts 
weltbewegendes mehr ausmacht. Denn die eigentliche zeitkritische 
PWM-Erzeugung läuft in Hardware, keiner der Motoren ruckelt und zuckelt.

BTW:
Ich würde für die Motor-PWM-Hardware ein FPGA nehmen...
Aber wenn du das noch nicht gemacht hast, solltest du bei uCs bleiben.

Autor: markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Florian,

du hast selbst geschrieben, das es dir an Grundlagen fehlt.
Das macht natürlich die Kommunikation hier im Forum sehr viel schwerer.

Wenn du nicht veraten kannst, was du genau machen möchtest, wird es sehr 
schwer dir zu helfen.

Einfach mal so Bit-Ströme aus der USB-Leitung rauswerfen geht leider 
nicht.

Ohne korrekte Angaben zu Anforderung wird dir kaum einer helfen können.

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich lehne mich mal weit aus dem Fenster und versuche mal darzustellen
> wie ich deine Aufgabenstellung verstehe:
> Du willst nicht alle 15 us die Leistung der Motoren ändern, sondern nur
> eine PWM mit einer Periodendauer von 15 us erreichen. Das verringert den
> Aufwand erheblich.
Ganz genau das ist das Ziel :-) Es soll alle 15us Ein / Aus geschaltet 
werden, wodruch dann wiederrum die Pulsweitenmodulation erreicht werden 
soll.

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Genau das ist dass, was ich vorhabe. Sorry ist das nicht PWM ? Die
>> Software regelt wie lange ein Motor an ist, und wie lange er aus ist.
>> Daraus ergibt sich approximiert die Leistung

Die 66.7kHz Updaterate enstprechen also der PWM Frequenz ?
Welche Auflösung soll die PWM denn haben ?

8 Bit, also 256 Stufen ?
Also 8333 mal pro Sek eine neue Drehzahl ? Immer noch viel und nicht 
notwendig zur Ansteuerung von Motoren, allein wegen der Trägheit.

Red' doch mal mit dem Kollegen, bevor Du falschen Voraussetzungen 
hinterherjagst. Hat denn der Kollege Ahnung, was er machen soll ?

Für eine Schaltung laut Deiner Zeichnung könnte man 74595 nehmen, das 
sind Schieberegister mit Latch, die könnten genau das machen, was Du 
willst. Brauchen trotzdem einen schnellen µC.

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Sinvoller wäre eine Dezentralisierung und eine Teilung der Aufgaben:
> Ein uC steuert z.B. 8 Motoren an. Das kann er mit seinen eingebauten
> PWM-Kanälen. Etliche dieser 8er-Gruppen sind über SIO oder SPI mit einem
> Master verbunden, der jetzt nur noch die aktuellen Geschwindigkeiten an
> diese Motor-Controller sendet. Dieser Master-Controller bekommt
> Informationen vom PC via USB.

Das mit der Dezentralisierung ist ein guter Einwand. Ich vermute wenn 
ich direkt zwischen 128 Kanälen schalten wollen würde, dann würde die 
Logikschaltung zu langsam und zu träger werden

Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab irgendwo im Thread was von FPGA gelesen. Kann mich diesem nur 
anschliessen; für solche Anwendungen mit vielen, vielen Kanälen ist ein 
FPGA bestens geeignet und kann mit einem einzelnen Baustein (plus 
Zugemüse) realisiert werden.
Natürlich kann sich die Einarbeit in die Länge ziehen, aber 
wahrschienlich lohnt es sich, wenn Du öfters mal sowas bauen willst.

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe mir jetzt mal diesen Artikel durchgelesen:
http://www.mikrocontroller.net/articles/Pulsweitenmodulation

Hatte es vorher mit Wikipedia probiert, völlig fürn A... :-)

Also, die PWM Grundfrequenz liegt bei 66,7 Khz. Nochmal zur Kontrolle: 
Alle 15 Mikrosekunden wird jeder Motor ein/aus geschaltet, und hält 
diesen Zustand für 15 Mikrosekunden. Die PWM Frequenz beträgt also 1 / 
0.000015 Sek = 66,7 KHZ. Hoffe dort treten nun keine Widersprüche mehr 
auf.

Gesamtbandbreite: Nur mal angenommen, ich würde es schaffen einen 
Bitstrom zu erzeugen, wobei jedes Bit direkt an den passenden Motor 
geht, dann würde die Bandbreite für 128 Motoren genau 128 * 66700 
Bit/Sek = 8,5 MBit/Sek betragen. Seid ihr damit soweit konform ?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei 1Bit PWM, Ja.
Aber ist es das was du willst?

Also die 66700 Hz runter und die Auflösung hoch.

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1-Bit PWM bedeutet, wenn ich das richtig interpretiere, dass ich nur den 
Zustand Ein/Aus kenne, und keine Zwischstufen. Wenn dem so ist, dann ja! 
1-Bit bei 66,7 KHZ Wäre die Antwort. Und das für 128 parallele Kanäle...

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ooops, gemerkt daß die Rechnung 66666 / 256 keine 8333 ergibt, sorry.

Also 260 Hz PWM Frequenz bei 8 Bit.

Je geringer diese Frequenz wird und je geringer die Auflösung der PWM, 
desto einfacher wäre das Ziel zu erreichen. Einfacher würde bedeuten ein 
Atmel schafft's auch noch.

Es wäre wichtig zu wissen, wie der eigentliche Neudatendurchsatz sein 
muss. Das scheint mir nicht zwingend 15µS zu sein.

Ein µC kann kontinuierlich die in seinem Speicher gehaltenen Werte für 
die PWM ausgeben, das macht der von alleine, die Motoren laufen dann mit 
der im Speicher befindlichen Einstellung.

Wie oft pro Sekunde dagegen sollen die Motoren neue Drehzahlwerte 
bekommen ? Möglicherweise würde das die zu übertragende Datenmenge stark 
reduzieren.

>> Alle 15 Mikrosekunden wird jeder Motor ein/aus geschaltet, und hält
>> diesen Zustand für 15 Mikrosekunden.

Jede PWM hat eine gewisse Auflösung, denn pro Motor muss ein gewisser 
Wert zwischen 0 .. ? übertragen werden. Nimm 4 Bit Auflösung an, damit 
können 16 Leistungsstufen geregelt werden:
0 = aus
1 = 15µS ein, 210µS aus
8 = 120µS ein, 105µS aus
15 = ein

Wieviele Stufen, resp. Bit Auflösung soll nun Deine PWM haben ?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Motor kennt dann also auch nur "Vollgas" und "Stopp".
Immernoch das was du willst?

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau das ist es, auch nach Rückfrage mit dem Kollegen Physiker :-)

Also 1-BIT PWM mit 66,7 KHZ Grundfreqeunz auf 128 unabhängigen Kanälen! 
Schwere Geburt, sorry :-)

Autor: David ... (volatile)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Schwarz schrieb:
> Genau das ist es, auch nach Rückfrage mit dem Kollegen Physiker :-)
>
> Also 1-BIT PWM mit 66,7 KHZ Grundfreqeunz auf 128 unabhängigen Kanälen!
> Schwere Geburt, sorry :-)

Warum dann PWM? o0

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vergiss doch bitte einmal diese 15µs

Das ist NICHT die Zeit, die jetzt momentan interessiert.
Die Frage ist in welchen Zeiteinheiten wird dem Motor eine neue DREHZAHL 
zugeordnet und wieviele Abstufungen muss diese Drehzahl haben.

Die 15µs sind gaaaanz tief unten anzusiedeln. Die ergeben sich. Aber das 
ist ja nicht die Stellgröße, die der Künstler einstellen wird. Der 
stellt ein: nach 1.5 Sekunden von 30% Leistung auf 70% Leistung gehen.

Das sind jetzt erst mal die Rahmenparameter.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also dann kürzt sich das 1-Bit und das PWM weg und übrig bleiben 128 
simple Ausgänge.

Kannst du noch beantworten warum es diese 66,7kHz braucht?
Wurde ja schon viele Male geschrieben dass der Motor viel zu träge ist.

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wir können es auch einfach Ein / Aus mit 66,7 KHZ nennen :-) Ist aber 
doch auch ne Form von PWM. Oder muss man bei PWM zwingend in bestimmten 
"Paketgrößen" ein und ausschalten ? Im Endeffekt kommt es doch nur auf 
den Flächeninhalt der Leistungskurve an oder ?

@ MWS (Gast):
Das Problem ist folgendes: Würde man nicht jeden Motor alle 15 
mikrosekungen aktualisieren, sondern nur die paar bestimmten, deren Wert 
sich geändert hat, dann müsste man wiederrum mit übertragen, WELCHER 
motor nur umgeschaltet werden soll. Bei 128 Motoren müsste man also 
wieder 5 Bit senden, um den korrekten Motor aus zu wählen. Genau deshalb 
würde ich das ganze lieber "Braindead" machen, und einfach 
kontinuierlich den Bitstrom senden, der für jeden Motor sagt ob dieser 
die nächsten 15 msec an oder aus ist. Die Adressierung mit einer der 
Zählschaltung. Ist zwar wie schon gesagt irgendwie "Braindead", aber 
mehr vermutlich Simpler.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:

> Das sind jetzt erst mal die Rahmenparameter.

Bin unterbrochen worden.

Und daruas ergibt sich dann der Rest.
Das kann natürlich sein, dass dann eine PWM Frequenz von 66kHz rauskommt 
(und damit die 15µs), kann aber auch sein, das dem nicht so ist.

Du arbeitest im Moment nach dem Muster:
Wenn ich einen 90PS Motor bauen will und meine Stösselstangen 2mm haben 
werden, wie dimensioniere ich die Nockenwelle.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Schwarz schrieb:

> Das Problem ist folgendes: Würde man nicht jeden Motor alle 15
> mikrosekungen aktualisieren, sondern nur die paar bestimmten, deren Wert
> sich geändert hat, dann müsste man wiederrum mit übertragen, WELCHER
> motor nur umgeschaltet werden soll.

Ja und.
Da ja wohl nicht jedem Motor alle 15µs eine neue Drehzahl zugeordnet 
werden soll, ist das in Summe viel weniger.

Nochmal: vergiss die 15µs. Das ist unpraktikabel das vom PC aus zu 
machen. Dazu benutzt du jeweils eine Schaltung vor Ort, der du vorgibst: 
Motor mit 67% Leistung. Und diese Schaltung vor Ort erzeugt dann die PWM 
Impulse. Alles andere kriegst du nicht geregelt! Weder von der 
Datenmenge her, noch von der Gleichförmigkeit der Datenübertragung!

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Kannst du noch beantworten warum es diese 66,7kHz braucht?
> Wurde ja schon viele Male geschrieben dass der Motor viel zu träge ist.
Die haben wohl was damit zu tun, dass damit zu tun, dass sich die 
Magnetfelder der Motoren gegenseitig beeinflussen / bzw. das sogar 
explizit sollen. Daher reicht eine geringere Frequenz nicht

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Nochmal: vergiss die 15µs. Das ist unpraktikabel das vom PC aus zu
> machen. Dazu benutzt du jeweils eine Schaltung vor Ort, der du vorgibst:
> Motor mit 67% Leistung. Und diese Schaltung vor Ort erzeugt dann die PWM
> Impulse. Alles andere kriegst du nicht geregelt! Weder von der
> Datenmenge her, noch von der Gleichförmigkeit der Datenübertragung!

Das ist mal ein Wort ... ich kläre nochmal ab, wieviel PWM Abstufungen 
genau gebraucht werden.

EDIT: Also ein, es sollte möglich sein, jeden Motor in 256 Stufen zu 
schalten. Die Grundfrequenz muss leider 66,7 KHZ betragen. Von den 256 
Stufen sollte man 127 bei negativer Polarität haben, eine ist aus, 128 
bei Positiver Polarität. Die Aktualisierung erfolgt ziemlich genau 25 
Mal in der Sekunde...

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1Bit PWM gibt's nur als Patent für Audioanwendung, ansonsten ist das zur 
Ansteuerung von 128 Motoren völliger Käse.

Florian, ich glaube Du hast das Prinzip der PWM nicht verstanden
>> Hatte es vorher mit Wikipedia probiert, völlig fürn A... :-)

Der Wiki Artikel gibt die PWM recht gut wieder:
http://de.wikipedia.org/wiki/Pulsweitenmodulation

Überleg' doch mal, wann ein Motor läuft, bzw. wann er anläuft. Anlaufen 
wird er bei einer bestimmten Mindestpulsdauer, vorher steht er nur.

Würdest Du den Motor nur 15µS in einer Sekunde einschalten, würde der 
noch keinen Mucks machen.

Diese Mindestpulsdauer möchte der Motor, solange er läuft, in gewissen 
regelmässigen Abständen erhalten, sonst ruckelt er.

Das ist also die PWM Frequenz.

Das Tastverhältnis dagegen bestimmt die zugeführte Leistung und damit 
die Drehzahl.

Aufgrund der regelmäßigen Wiederholung der PWM muss das Tastverhältnis 
irgendwie in einen Wert gefasst werden.

Selbst wenn Du das auf der PC Seite machen würdest, muss das geschehen, 
also 4Bit  8Bit  16Bit pro Motor.

Das Problem dabei ist, je größer die Aufösung und je höher die PWM, 
desto mehr Daten.

Diese Daten alleine per PC zuführen, also USB direkt zu 128 Ausgängen 
geht überhaupt nicht, da brauchst Du ein echtzeitfähiges Betriebssystem.

Ob es sinn voll ist nur die geänderten Daten zu übertragen, hängt stark 
davon ab, wie schnell sich die Daten ändern.

Das ist eine simple Kosten/Nutzen Rechnung, kann aber einfach den 
Unterschied ausmachen.

Wenn Du mehr Details zur genauen Anwendung liefern würdest, wäre auch 
ein Ratschlag einfacher.

Edit:
>> Die Aktualisierung erfolgt ziemlich genau 25 Mal in der Sekunde...

25 x 128 Byte pro Sekunde, 3200 Byte/s ? Das schafft die serielle 
Schnittstelle ja auch noch :D

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florian Schwarz schrieb:

> EDIT: Also ein, es sollte möglich sein, jeden Motor in 256 Stufen zu
> schalten.

Also eine 8-Bit PWM

> Die Grundfrequenz muss leider 66,7 KHZ betragen.

Ist ja ok.
Solange nicht der PC die PWM erzeugt, ist das ja in Ordnung.

Jetzt muss man nur noch Bausteine finden, die
* sich leicht addressieren lassen
* eine 8-Bit PWM bei mindestens dieser Frequenz erzeugen können.
* billig sind

> Von den 256
> Stufen sollte man 127 bei negativer Polarität haben, eine ist aus, 128
> bei Positiver Polarität.

Das ist eine reine Frage der Beschaltung der PWM-Ausgänge.

> Die Aktualisierung erfolgt ziemlich genau 25
> Mal in der Sekunde...

und damit in einem Zeitbereich, der mit einer seriellen Schnittstelle 
ohne gröbere Probleme abdeckbar ist.


(Ich denke das Thema: PWM vom PC aus erzeugen, ist damit endgültig 
abgehakt. Uff. Schwere Geburt)

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr gut! vielen Dank erstmal an alle! Ich bin heute erstmal unterwegs, 
melde mich aber auf jeden Fall wieder wenn es konkreter wird. Das es 
nicht mit einem PC geht, ist schonmal gut zu wissen :-)

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat jemannd vielleicht jemand ein paar initiale Vorschläge, für 
Microcontroller die schnell genug sind, und möglichst viele parallele 
Pins haben, die man gleichzeitig schalten kann ? Ich finde meistens nur 
welche mit seriellen Schnittstellen.

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
viele parallele pins sind der falsche ansatz.
du wirst keinen mikrcontroller finden, der 256 (richtung!) IOs 
spendiert.

ich würde dir auch zu karl-heinz' konzept raten und die 128 kanäle auf 
mehrere µC aufteilen.
die (meiner meinung nach übertriebenen) 67kHz kannst du leicht mit 
seriellen schieberegistern erzeugen. daher können die controller ruhig 
"klein und dumm" sein.
zwischen den kleinen und dem großen controller muss dann ein klug 
definiertes protokoll her.

nachtrag: ich würde dir zu AVRs für die controller raten. zum einen sind 
sie günstig, zum anderen weit verbreitet und dokumentiert.
als schnittstelle zum pc kannst du RS232 oder usb nehmen. wenn usb, dann 
aber bitte einen parallel-wandler á la ft245

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Florian,

Schieberegister spart Pins aber parallele Ausgabe ist schneller.

Für deinen Fall wäre eine Kombination sinnvoll.

2 Schieberegister in Reihe steuern 16 Motoren an, 8 solcher
Ausgabestränge sitzen an einem Port.
Damit hast du deine 128 Motoren.
Du must also nur nacheinander 16 Byte an einem Port ausgeben,
jeweils einen Clock machen (für alle zusammen) und hinterher
den Übernahmeimpuls (auch zusammen).
In den 16 Byte entspricht jedes Bit einem Motor.
Du benötigast nur 1 kpl. Port für die Daten und 2 Pins
an einem anderen Port für Clock und Übernahme.

avr

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
avr schrieb:
> 2 Schieberegister in Reihe steuern 16 Motoren an, 8 solcher
> Ausgabestränge sitzen an einem Port.
nein, denn...
> Damit hast du deine 128 Motoren.
je motor braucht er 2 pins. er will ja links- und rechtslauf.

> Du must also nur nacheinander 16 Byte an einem Port ausgeben,
dann rechne dir mal aus, wie schnell das sein muss.
er will 8bit auflösung...

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, oben stand mal was von ein/aus ;(

avr

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
avr schrieb:
> sorry, oben stand mal was von ein/aus ;(
ach, das änderte sich minütlich =)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit einem µC sollen also 128 PWM-Kanäle erzeugt werden. Eigentlich sind 
es sogar doppelt so viele, denn eine H-Brücke (nötig für 
Richtungswechsel) hat nunmal zwei Eingänge.
Kurz gesagt: Das ist Blödsinn. Vergiss diese Idee ganz schnell, das wird 
nie laufen. Auch wenn du wirklich einen Controller findest und 
programmierst, dass er dir 256 saubere und schnelle PWM-Signale liefert 
(am besten über 25 kHz, sonst hört man es pfeifen und die Motoren laufen 
unsauber), wirst du die Signale nie sauber zu den Motoren bekommen.

Deswegen würde ich mir an deiner Stelle "intelligente" Motoren basteln.
D.h. jeder Motor bekommt eine eigene kleine Platine, auf der sich ein 
Leistungsteil und ein kleiner, billiger Controller befindet.
Dieser Controller kann hauptsächlich zwei Dinge: Den Motor steuern und 
auf einem Bus auf Kommandos lauschen. Für den Steuerungs-Part kannst du 
mehrere Funktionen vorsehen, z.B. "5 Sekunden lingsrum mit 50% PWM", 
oder ähnliches.
Außerdem gibt es einen Master-Controller, der über den PC mit Daten 
gefüttert wird, oder Programme von einer Speicherkarte lädt.
Über die Bus-Anbindung schickt er dann Kommandos an die einzelnen 
Motoren. Da die Motoren "intelligent" sind, ist dabei das Timing auch 
recht einfach einzuhalten. D.h. du musst den Motor nich nach gewünschter 
Zeit wieder stoppen und dabei aufpassen, dass dir kein Interrupt das 
Timing versaut. Du sendest einfach die Laufzeit und andere Daten an die 
Motoren.

Etwas weiter gedacht, könntest du auch eine Blockweise Übertragung 
vorsehen. Jeder Motor-Slave hat einen Zeitgeber, der beim Start 
Synchronisiert wird. Evtl. auch zwischendrin mal.
Du sendest jedem Slave dann die Daten für z.B. die nächsten 30 Sekunden.
Dadurch hast du eine Menge Zeit gut. In dieser Zeit kannst du 
Programm-Teile nachladen, mit dem PC kommunizieren, oder einfach bei 
einem langsamen Bus alle 128 Teilnehmer füllen.

Sollte es später noch nötig sein, bestimmte Wege zu fahren, können das 
die einzelnen Motoren übernehmen. Ansonsten müsstest du bei deinem 
Ansatz noch 128 Encoder, Endschalter oder was auch immer auswerten...

Als Bus eignet sich z.B. RS485 oder DMX. Auf jeden Fall solltest du mit 
Optokopplern, Watchdog usw. arbeiten, damit der Bus nicht bei Fehlern in 
einzelnen Modulen steht. Dein Programm sollte auch eine Möglichkeit 
haben, abstürzte Teilnehmer wieder in den Ablauf mit aufzunehmen 
(Watchdog).

Wenn sich die Installation über eine große Fläche erstreckt, hättest du 
so auch keine Probleme den Strom zu den Motoren zu bekommen, ohne eine 
riesige Antenne zu bauen. So ein PWM-gesteuerter Motor stört nämlich 
saumäßig.

Autor: David ... (volatile)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast schrieb:

> (am besten über 25 kHz, sonst hört man es pfeifen und die Motoren laufen
> unsauber)

Zeig mir einen Menschen, der >18khz hoert.

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast schrieb:
> nie laufen. Auch wenn du wirklich einen Controller findest und
> programmierst, dass er dir 256 saubere und schnelle PWM-Signale liefert
> (am besten über 25 kHz, sonst hört man es pfeifen und die Motoren laufen
nö. das geht auch über ein filter, das die hörbaren oberwellen wegnimmt.
gewünscht sind außerdem 67kHz

> unsauber), wirst du die Signale nie sauber zu den Motoren bekommen.
aha? y?

> D.h. jeder Motor bekommt eine eigene kleine Platine, auf der sich ein
totaler overkill.
nicht gewünscht, nicht gebraucht und für einen anfänger völlig 
ungeeignet.

> auf einem Bus auf Kommandos lauschen. Für den Steuerungs-Part kannst du
überleg dir mal, wie schnell der bus sein muss, damit die geforderte 
aktualisierungsrate zustandekommt.
-> das geht so nicht.

> Dadurch hast du eine Menge Zeit gut. In dieser Zeit kannst du
bei 128 motoren? jede menge zeit? -> nein

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael M. schrieb:

>> auf einem Bus auf Kommandos lauschen. Für den Steuerungs-Part kannst du
> überleg dir mal, wie schnell der bus sein muss, damit die geforderte
> aktualisierungsrate zustandekommt.
> -> das geht so nicht.

Wir sind mitlerweile bei 25 Aktualisierungen pro Sekunde und Motor. 
Wobei ich mir ehrlich gesagt keine Anwendung vorstellen kann (ausser in 
einer Regelschleife natürlich), bei der man einem Motor 25 mal pro 
Sekunde eine neue Leistung zuordnet.
Rechnerisch sind das 2*8*128 = 2048 Bytes pro Sekunde. Sollte eigentlich 
kein allzugrosses Problem sein, diese Datenmenge zu bewältigen. Geht man 
dann am Bus auch noch auf 'Übertragung nur bei Änderung', fällt da 
sicherlich auch noch jede Menge weg.

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
7 bit adressierung, 8 bit wert, 128 mal und das alle 1/25s macht 
48kBit/s
oder liege ich da falsch? ist auf alle fälle machbar.
hab bei meinem oben zitierten post mit 256*bit* gerechnet - da kam 
natürlich eine ganz andere größenordnung raus. mein fehler an dieser 
stelle.

Autor: Steffen H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, aber bei DMX hat man z.B. eine Wiederholrate von ca. 30Hz (bei 
512Byte Daten) und kann dabei Leitungslängen bis zu 1000m erreichen. DMX 
wird mit 250Kbs permanent gesendet. Das schafft der Uart eines AVR. Die 
Adressierung bei DMX funktioniert über abzählen der Daten-Bytes. Jeweils 
zum Start einer neuen Übertragungssequenz syncronisieren sich alle 
Teilnehmer. Allerdings können wohl nur 32 Teilnehmer an einem Bus 
hängen. Ansonsten benötigt man sogenante Repeater(Treiber für den Bus). 
Also der Bus sollte nicht das Problem darstellen.

Schönen Abend noch

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael M. schrieb:
> 7 bit adressierung, 8 bit wert, 128 mal und das alle 1/25s macht
> 48kBit/s

Mist, du hast recht. Ich hab die 25 bei der Rechnerei vergessen :-)

Ich denke immer noch, dass die 25 'echten' Updates in der Sekunde (also 
nicht auf den gleichen Wert updaten) nicht vorkommen werden, bzw. sich 
ganz leicht umgehen lassen. Selbst wenn man eine Rampe fahren will, muss 
ja nicht der PC die Zwischenwerte berechnen und ausgeben, dass können 
die µC vor Ort genausogut aus Anfangs und Endwert ausrechnen:  Datenrate 
geht schon wieder runter. Mit etwas der grauen Zellen lässt sich die 
Datenrate sicher enorm drücken.

Autor: Florian Schwarz (floschman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin Zusammen! Und nochmal danke für eure Zeit und mühe!

@All: Ich hatte es bis jetzt nur kurz erwähnt weil es mir selber erst 
später mitgeteilt wurde: Die Polung muss änderbar sein. Dafür hätte ich 
folgendes IC gefunden: SN754410NE - Mit jeweils vier H-Bridges müsste 
man doch an einem IC 2 Motoren betreiben und polen können. Die 
Spannungen und der Strom passt auch. Man spart sich dadurch ne Menge 
Transistoren und Dioden... .


@Michael M.: Hätte mich besser ausdrücken sollen. Ich hatte nicht vor 
direkt alle 128 Pins parallel aus dem Microcontroller zu ziehen. Ich 
denke das vernünftige mittelmaß macht hier mehr sinn. Also 8 - 16 Pins 
parallel, und diese mit Schiebregistern durchschalten. Den ft245 habe 
ich mir angeschaut. Nach sowas habe ich gesucht. Man könnte also eine 
Microcontroller nehmen, den ft245 an den USB anschluss machen, und hätte 
dann 8 parallele Pins, die ich wiederrum mit Schieberegistern zum 
richtigen Motor leiten kann.

@avr (Gast): Wie schon gesagt, gesundes Mittelmaß. Ich denke wenn ich 
über einen Pin parallel ausgebe wird die Schaltung mit den 
Schieberegistern zu "tief" und somit träge.

Autor: Jürgen Sachs (jsachs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Florian S: Der IC hat 4 HALB Brücken. Für eine Steuerung des Motors 
brauchst du 4 Halb Brücken, also 1 IC.

Ich würde das ganze Aufteilen, wie schon oben erwähnt.

1 Master uC der Daten vom PC Empfängt (per RS232 oder USB oder wie auch 
immer), intern die letzten Daten puffert und per SPI permanent an die 
Motor Slaves schickt, alle Slaves hängen am gleichen SPI Bus. Pro Motor 
2 Bytes (1 Byte: 1 Bit Richtung, 7 Bit Adresse, 2 Byte: 256 Stufen 
Geschwindigkeit)
"n"(32) Motor Slaves, die per SPI (Slave only) die Daten vom Master SPI 
hören. Passt die Adresse wird das in interne Speicher übernommen.
Aus dem Internen Speicher generieren die Slaves die PWM.
Da wir mit dem IC 2 Ausgänge brauchen, könnte man mit einem ATTiny 2313 
oder so, schon mal 4 Motoren Steuern. Da sollten die mit dem Internen 
4MHz Oszi locker hin bekommen.
32 solcher Platinen und du bist am Ziel.

25 Update  128 Motoren  2 Bytes = 6400Bytes pro Sekunde. Sollte für 
Hardware SPI eine Kleinigkeit sein.


Vorteil:
- Einfach umzusetzen
- Alle Slaves haben das gleiche Programm (Welche Adressen gesteuert 
werden kommt aus dem EEPROM im Slave)
- Du kannst eine Platine machen und diese umsetzen und danach alle 
anderen Stück für Stück hinzufügen (einfache Entwicklung)
- 4 Motoren = ca 4 Ampere. Mehr würde ich nicht auf eine Platine packen. 
Wegen Größe, Leiterbahen, Entstörung usw.
- Sollte noch gut auf eine Europe Platine und somit in einen 
Kartenträger passen
- Mann kann alle Enable auf einen Pin des Slave uC zusammenfassen. 
Sollte die Schaltung in den Standby gehen, kann man so etwas Strom 
sparen.

Denke an die Kühlkörper für den IC der Motor Steuerung.

Nettes Projekt :-)

Autor: Jürgen Sachs (jsachs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Korrektur:
1 IC Enthält 4 Halbrücken, man kann also 2 Motoren mit einem IC Steuern

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.