Hallo,
der Titel sagt schon einiges über mein Vorhaben, aber ich möchte zuerst
mein Vorhaben erleutern.
Hab hier schon ein paar mal bezüglich des selben Projekts gepostet.
Ich möchte mir gerne einen LED-Globus bauen, siehe Links
http://www.youtube.com/watch?v=oLygWkHo9nwhttp://www.youtube.com/watch?v=qRlr784qKEo&NR=1&feature=fvwp
Bin zwar noch am mechanischen Aufbaue. Möchte jedoch schonmal mit dem
planen der Ansteuerung beginnen.
Mein Problem ist folgendes. Ich muss die LED in Abhängigkeit der
Position ein bzw. ausschalten. Dies erfolgt mit einem Mikrocontroller.
Meine erste Idee war es, einen Näherungssensor anzubringen, der mir jede
Umdrehung einen Impuls sendet. Durch diesen hätte ich die
Umfangsgeschwindigkeit und somit die Position in Abhängigkeit der Zeit.
Kontra
Vielleicht viel Rechenarbeit des Controllers. (Mangelnde Erfahrung)
Es wird ein schneller Sensor benötigt. (80µs Flanke)
Sensor verursacht Fliegkräfte.
Meine 2te Idee währe es, eine Schaltung zu bauen, die mir ein analoges
Signal in Abhängigkeit der Position ausgibt. Dieses könnte ich direkt
mit dem Controller erfassen und in Abhängigkeit der höhe des Signals die
LEDs schalten.
Pro
Weniger Rechenarbeit
Kontra
Keine Erfahrung zur Umsetzung des "Positons-Spannung-Wandlers"
Ich würde nun von euch gerne Wissen ob ihr ggf. anderen Ideen habt und
was ihr von der Programmierung als einfacher erachtet. In dem
Softwarebereich habe ich leider sehr wenig Erfahrung.
Fang erstmal mit ner Propeller Clock die mit Batterie/Akku laeuft und
versuch die zu synchronisieren..
Danach kannste dich an den Globe wagen..
Wenn du schon Probleme mit der Rotationssynchronisierung hast kannste
den Rest erst recht vergessen..
Nimm dir ne LED.. deinen mikroC.. ne Batterie.. papp das ganze auf nen
DC Motor und regel dass so, dass die LED immer an der gleichen Stelle
aufblitzt.
Damit wirst Du schon alle Haende voll zu tun haben.
Viel zu kompliziert.
Gabellichtschranke. An den Rotor kommt ein Unterbrecher.
Der µC misst die Zeit für eine Umdrehung und mit der Annahme, dass sich
die Rotationsgeschwindigkeit von einer Umdrehung zur nächsten nicht
wesentlich verändern wird, teilt er diese Zeit in soviele Zeiteinheiten
auf, wie du Spaltenpositionen für eine Umdrehung haben möchtest. Und
schon hast du den Takt, in dem die LED aufblitzen oder nicht aufblitzen.
Das ganze ist rein zeitgesteuert, mit einer fixen Nullpunktsposition.
Hallo Redegle,
> Sensor verursacht Fliegkräfte.
abgesehen davon, dass es keine Fliegkräfte gibt, würde ich an der Achse
einen Drehgeber montieren, dann weißt Du jederzeit wo Du gerade bist.
Michael
@ Karl heinz Buchegger,
genau das war meine erste Idee nur mit einem Näherungssensor.
@ Michael Steinbauer
Da gibt es ein paar Probleme.
1. Der Preis
2. Die Befestigung, denn der Drehgeber müsste sich auf dem beweglichem
Teil befinden.
3. Es sollte möglichst leise sein.
4. Die meisten Drehgeber gehen bis 500U/min maximal hab ich etwas um
3000U/min gesehen.
@ Joan P.
von Problemen redet keiner. Ich hab noch gar nichts aufgebaut und
ertestet. Ich fragte lediglich, mit welcher Planung ich am ehesten
zurecktkomme.
Redegle schrieb:
> @ Joan P.> von Problemen redet keiner. Ich hab noch gar nichts aufgebaut und> ertestet. Ich fragte lediglich, mit welcher Planung ich am ehesten> zurecktkomme.
Deine Planung klingt halt ziemlich konfus und blauaeugig..
Aus den anderen Posts wo du nach Energieuebertragung fuer die Geschichte
gefragt hast, kam auch nicht gerade rueber dass du schon ein paar
Projekte durchgezogen hast. Allein deine Fragen da oben, bezueglich
Messungen von Rotationen mit nem Controller, zeigen dass sehr deutlich..
Drehen wir den Spiess doch mal um:
Was hast Du bisher schon alles mit Mikrokontrollern gemacht?
..um hier nicht komplett 'destruktiv' rueberzukommen..
Ideal waere es, wenn du den Antriebsmotor drehzahlgeregelt laufen lassen
keonntest und dann halt ne simple Lichtschranke die eine fixe Lochblende
abfaehrt und so jede Umdrehung ein Synchronistationssignal fuer den
Mikrokontroller erzeugt. Du wirst schlecht fuer jede Spalte(?) die du
anzeigen moechtest einen Impuls zur Auswertung erzeugen koennen..
Ueberschlagsmaessig wuerde ich pers. auf 50 Hz hinaus wollen.. dh, 50
Umdrehungen pro Sekunde .. wenn du am Aequator mit rechteckigen Pixeln
rechnest (deine LEDs), dann wird dein kugelfoermiger Screen bei einer
'vertikalen' Aufloesung von X eine 2 mal so hohe horizontale Aufloesung
benoetigen..
Wieviele LEDs wolltest du denn rotieren lassen?
Daraus bestimmt sich dann die Frequenz mit der Du die LEDs schalten
musst.
Wenn du diese Frequenz und die Drehfrequenz nicht genau aufeinander
abstimmst dreht sich der Screen.. Schwebung nennt sich dass dann..
Je nach Frequenzunterschied dreht sich der Screen dann schnell oder
langsam nach rechts oder links..
Sauber beherrschen kann man das nur mit Drehzahlregelung und
Synchronisation.
Vielleicht war meine Beschreibung wirklich etwas schwammig. Deswegen
werde ich versuchen meinen Gedankengang etwas verständlicher zu
presentieren. Hierbei werde ich mir auch etwas mehr Zeit nehmen.
Ich habe Mikrocontroller noch nichts programmiert. Jedoch habe ich mir
schonmal die Grundlagen angeschaut. Also einfachste Sachen wie einen Pin
als Ausgangs zu definieren etc.
Jedoch denke ich ca. zu wissen, was softwaretechnisch realisierbar sein
sollte.
Mein Vorhaben lässt sich auf 5 Punkten reduzieren, die ich nacheinander
oder simultan durchführen möchte. Je nachdem, was Praktikabler ist.
-Motor extern auf eine konstante Geschwindigkeit regeln.
-Mechanische Halterung
-Hardware: LEDs, Sensor, Mikrocontroller
-Software
-Energieübertragung von extern auf intern
Extern entspricht hierbau allem, was nicht rotiert. Intern entspricht
allem in dem rotierendem Ring.
1. Motor extern auf eine konstante Geschwindigkeit regeln.
Ist bereits geschehen.
2. Mechanische Halterung
Ist gerade in der Entwicklung.
3. Energieübertragung von extern auf intern
Ist im Moment irrelvant, da zum Testen eine Batterie eingesetzt werden
soll.
Als nächstes werde ich meine erstes Vorhaben presentieren.
4. Hardware: LEDs, Sensor, Mikrocontroller
Ich wollte einen Sensor verwenden, der jede Umdrehung ein Signal an
meinen Mikrocontroller sendet. Dies sollte zur Geschwindigkeitserfassung
genügen.
Die Ausgänge werden mit einem Transistor verstärkt und schalten dann die
LEDs.
Als Mikrocontroller wollte ich einen Atmega2560 verwenden.
Die Anzahl der LEDs ist noch unbekannt. Ich rechne mal mit ca. 60 Stück.
Da das Projekt bereits von anderen erfolgreich durchgeführt wurde dachte
ich, dass ich auf der Hardwareseite nicht mehr benötige. Der Rest währe
somit nur noch auf der Softwareseite zu erledigen.
Bitte berichtige mich, wenn ich Falsch liege.
5. Software
Ich gehe davon aus, dass die Geschwindigkeit des Motors kleinen
Schwankungen unterliegt. Diese sollen durch den Mikrocontroller
ausgeglichen werden.
Ich würde nun eine Tabelle erstellen, bezogen auf 360° des Globes. Diese
sähe wie folgt aus.
1. LED 1/360 an; 100/360 aus; 200/360 an; 59/360aus
2. LED 10/360 an; 90/360 aus; 200/360 an; 60/360aus
.
.
.
Anschließend würde ich die Anzahl der Takte erfassen, die während einer
Umdrehung vergangen sind und diese Zahl mit den einzelnen Werten
Multiplizieren.
Also bei z.B. 1000Takten hätte ich nun folgende Werte.
1. LED 1000/360Takte an; 100000/360Takte aus; 200000/360Takte an;
59000/360Takte aus
2. LED 10000/360Takte an; 90000/360Takte aus; 200000/360Takte an;
60000/360Takte aus
.
.
.
Anhand dieser Tabelle könnte ich dann die Ausgänge ein -und ausschalten.
Meine eigendliche Frage ist nun, ob da Projekt auf diese Art
realisierbar ist, oder ob es bessere Verianten gibt.
@ Redegle (Gast)
>Ich habe Mikrocontroller noch nichts programmiert.
Musst du dann aber.
>-Motor extern auf eine konstante Geschwindigkeit regeln.
Brauchst du nicht. Einfach konstante Spannung dran, fertig. Der läuft
konstant genug.
>-Energieübertragung von extern auf intern
Fang mit einer Batterie oder Schleifkontakten an. Wenn alles mal läuft
kannst du über einen Rotationstrafo oder aufgebohrte Motorwellen
nachdenken. Kugellager sind ein Geheimtipp.
>Ich wollte einen Sensor verwenden, der jede Umdrehung ein Signal an>meinen Mikrocontroller sendet. Dies sollte zur Geschwindigkeitserfassung>genügen.
Ein einfacher Hallsensor oder eine Lichtschranke reichen.
>Die Ausgänge werden mit einem Transistor verstärkt und schalten dann die>LEDs.
Brauchst du nicht, normale oder superhelle LEDs mit 20mA direkt an den
Controller, fertig.
>Als Mikrocontroller wollte ich einen Atmega2560 verwenden.
Gibts keinen grösseren? Für dein erstes Exemplar reicht ein Tiny2313!
>Die Anzahl der LEDs ist noch unbekannt. Ich rechne mal mit ca. 60 Stück.
Fang KLEIN an und nimm 8 (ACHT) direkt an einen Port.
>ich, dass ich auf der Hardwareseite nicht mehr benötige. Der Rest währe>somit nur noch auf der Softwareseite zu erledigen.>Bitte berichtige mich, wenn ich Falsch liege.
Du liegst falsch. Siehe oben.
>Ich gehe davon aus, dass die Geschwindigkeit des Motors kleinen>Schwankungen unterliegt.
Ja.
> Diese sollen durch den Mikrocontroller ausgeglichen werden.
Relativ einfach.
>Ich würde nun eine Tabelle erstellen, bezogen auf 360° des Globes. Diese>sähe wie folgt aus.
Brauchst du nicht. Du misst per Input Capture Funktion die Zeit einer
Umdrehung. Diese teilst du durch 256, das ist SEHR einfach (achtmal
rechts schieben). Schon hast du dein Timing.
>Anschließend würde ich die Anzahl der Takte erfassen, die während einer>Umdrehung vergangen sind und diese Zahl mit den einzelnen Werten>Multiplizieren.
Viel zu kompliziert.
>Meine eigendliche Frage ist nun, ob da Projekt auf diese Art>realisierbar ist, oder ob es bessere Verianten gibt.
Fang klein an, wenn es gut läuft bau es grösser.
MFG
Falk
@ Joan P.
Die Geschwindigkeit ist zwar konstant aber unbekannt.
Sie könnte konstant 2000U/min sein oder konstant 3000U/min das möchte
ich zuerst ermitteln. Die Drehzahl wird sich auch mehrmals während dem
Testen ändern.
Dem Datenblatt des Atmega habe ich entnommen, dass er keine 20mA pro
Ausgang bereitstellen kann. Könnte jedoch auch sein das ich mich irre.
http://www.atmel.com/dyn/resources/prod_documents/doc2549.PDF
S.370
Current Vcc and GND Pins maximal 200mA
Bei 60Leds währe das etwas mehr.
Deswegen wollte ich jeden Ausgang mit max. 2mA belasten.
@Falk Brunner
>>Ich habe Mikrocontroller noch nichts programmiert.>Musst du dann aber.
Wollte ich schon seit knapp 2 Jahren mit beginnen.
>>-Motor extern auf eine konstante Geschwindigkeit regeln.>Brauchst du nicht. Einfach konstante Spannung dran, fertig. Der läuft>konstant genug.
Ich verwende einen Brushlessmotor also war eine Ansteuerelektronik
unumgänglich.
>>-Energieübertragung von extern auf intern>Fang mit einer Batterie oder Schleifkontakten an. Wenn alles mal läuft>kannst du über einen Rotationstrafo oder aufgebohrte Motorwellen>nachdenken. Kugellager sind ein Geheimtipp.
Eine vorzeitige Lösung war beabsichtigt (Batterie).
Kugellager müssten Heute noch kommen, waren schon bestellt.^^
Aber Danke für den Tipp.
Mir fällt gerade ein das ich den Ring oben und unten mit 2 unabhänigen
Metallstangen verbinde.
Ggf. Könnte ich diese mit 2 verschiedenen Potentialen verbinden und
somit meine Stromversorgung realisieren. Wobei ich hierdurch ungewollte
Schleifgeräusche erzeuge.
>>Als Mikrocontroller wollte ich einen Atmega2560 verwenden.>Gibts keinen grösseren? Für dein erstes Exemplar reicht ein Tiny2313!
Den Atmega2560 habe ich zu Hause und könnte ihn auch testweise mit
kleinen Programmen programmieren. Muss noch ein bisschen
Programmiererfahrung sammeln.
Er hätte auch die gewünschte Anzahl an Ausgängen.
>>Ich wollte einen Sensor verwenden, der jede Umdrehung ein Signal an>>meinen Mikrocontroller sendet. Dies sollte zur Geschwindigkeitserfassung>>genügen.>Ein einfacher Hallsensor oder eine Lichtschranke reichen.
Ist eine Lichtschranke kein optischer Sensor?
Aber werde mir mal Gedanken mache ob ich eine Lichtschranke oder einen
Hallsensor verwenden kann. Vielleicht schalten diese schneller als ein
konventioneller Näherungssensor.
>Brauchst du nicht. Du misst per Input Capture Funktion die Zeit einer>Umdrehung. Diese teilst du durch 256, das ist SEHR einfach (achtmal>rechts schieben). Schon hast du dein Timing.
Das Stichwort Input Capture Funktion höhrt sich sehr vielversprechend
an.
Vielen Dank an euch.
Zum Encoder-Problem: Google mal nach "HEDS Encoder". Solche Encoder
sitzen manchmal hinten auf Servomotoren drauf, die schon ordentliche
Drehzahlen erreichen.
Falls du also zu jeder Zeit eine Positionsmessung haben willst, ohne auf
Zeitmessungen zurückgreifen zu müssen - nimm das Ding.
Selbst wenn du den Rotor langsam mit der Hand drehst, schaltet der
Encoder Drehzahl-Unabhängig weiter und die Ausgabe sollte korrekt
erfolgen.
Falls dir da die Auswertung zu kompliziert oder der Encoder zu teuer
ist: Es gibt Gabellichtschranken, die zusammen mit einer geschlitzten
Scheibe geliefert werden. Vom Prinzip her vergleichbar mit dem obigen
Encoder, allerdings günstiger und einfacher auszuwerten (1 Schlitz -> 1
Signal).
Schau dir auf jeden Fall mal fertige Projekte an. Bei so vielen LEDs
würde ich an deiner Stelle Schieberegister mit integrierten Treibern
verwenden.
Das würde auch gut zu deiner Idee mit dem Array passen: Das Bild liegt
in einem zweidimensionalen Array, die Encoder-Position gibt die Spalte
an. Die Zeile kannst du dann komplett ins Schieberegister ausgeben.
Gedanken würde ich mir vor allem um den mechanischen Aufbau machen. 3000
upm sind schon eine Menge Holz. Wenn da die Unwucht zu groß wird, viel
Spaß. Eine kleine Lichtschranke ist da weniger da Problem, eher sind es
die Platinen mit den LEDs ganz am äußeren Durchmesser.
Auf jeden Fall solltest du klein Anfangen. Mein erster Aufbau war ein
Arm aus alten Legosteinen, mit so einem Loch-Stein mit 8x 5mm LEDs drin.
Als Gegengewicht einfach einen alten Motor hinten dran, fertig.
Den Positionssensor habe ich mir aus einem Streifen Isolierband und
einem CNY 70 gebastelt.
Während der ganzen LED-Steuerei hat der Atmega sogar noch das
Umgebungslicht vom Sensor ausgefiltert und neue Bilder über RS232
empfangen.
Redegle schrieb:
> Dem Datenblatt des Atmega habe ich entnommen, dass er keine 20mA pro> Ausgang bereitstellen kann. Könnte jedoch auch sein das ich mich irre.>> http://www.atmel.com/dyn/resources/prod_documents/doc2549.PDF> S.370> Current Vcc and GND Pins maximal 200mA> Bei 60Leds währe das etwas mehr.> Deswegen wollte ich jeden Ausgang mit max. 2mA belasten.
Das ist zeimlich irrelevant, weil du sowieso keine 60 Led an den Mega
drannkriegst. Er hat schlicht und ergreifend nicht genug Pins.
Du wirst doch nicht ...
http://www.atmel.com/dyn/resources/prod_documents/doc2549.PDF
Doch du wirst.
Das ist doch Nonsense. Nimm ein Schieberegister.
Redegle schrieb:
> Dem Datenblatt des Atmega habe ich entnommen, dass er keine 20mA pro> Ausgang bereitstellen kann. Könnte jedoch auch sein das ich mich irre.
Nicht treiben sondern gegen Masse ziehen.
Du schaltest die LED mit ihrer Anode gegen Vcc und mit ihrer Kathode an
einen Port des AVR (Vorwiderstand nicht vergessen).
Wenn der AVR den Pin hochzieht (Data Direction OUT) fliesst kein Strom
in den AVR ueber die LED, da an dem Port Vcc anliegt, LED ist AUS.
Wenn du nun den Pin runterziehst liegt der praktisch auf GND und ueber
die LED fliesst Strom in den AVR rein nach Masse.. damit hat der AVR
relativ geringe Probleme und die LED leuchtet.
> http://www.atmel.com/dyn/resources/prod_documents/doc2549.PDF> S.370> Current Vcc and GND Pins maximal 200mA> Bei 60Leds währe das etwas mehr.> Deswegen wollte ich jeden Ausgang mit max. 2mA belasten.
Guck nochmal genau hin.. gleich ueber dieser Zeile steht:
"DC current per I/O Pin 40mA"
..als absolutes Maximum. Und dann bitte noch auf Seite 371 unter Note 3
lesen..
"Although each I/O port can sink more than the test conditions (20mA at
VCC = 5V, 10mA at VCC = 3V) under steady state conditions
(non-transient), the following must be observed:
...
ATmega640/1280/2560:
1.)The sum of all IOL, for ports J0-J7, A0-A7, G2 should not exceed 200
mA.
2.)The sum of all IOL, for ports C0-C7, G0-G1, D0-D7, L0-L7 should not
exceed 200 mA.
3.)The sum of all IOL, for ports G3-G4, B0-B7, H0-B7 should not exceed
200 mA.
4.)The sum of all IOL, for ports E0-E7, G5 should not exceed 100 mA.
5.)The sum of all IOL, for ports F0-F7, K0-K7 should not exceed 100 mA.
If IOL exceeds the test condition, VOL may exceed the related
specification. Pins are not guaranteed to sink current greater
than the listed test condition"
Wenn du die Ports nicht X stunden alle mit LEDs dran laufen laesst
brauchste dich nur an das Maximumrating halten.
Schalt mal ne Superbright LED mit nem 50/50 Tastverhaeltniss.. schon
kannste 40mA fliessen lassen und bist trotzdem noch im obigen
steady-state Bereich.
Insgesamt ist das ne Waermesache.. die Chips im MLF package (siehe Seite
430) haben ne besonders gute Masseanbindung die dann kuehlt.. bei denen
kannste die Maximumratings nehmen ;)
Trotz all dem gesagten stimme ich Karl Heinz zu..
Guck dir zum Treiben so vieler LEDs dafuer geeignete Schaltkreise an..
die koennen noch bisschen mehr Strom vertragen.. besonders wenn sie wie
oben beschrieben als Stromsenke funktionieren.
Fuer Tests mit 8 LEDs oder so wirst Du allerdings keine Probleme haben
wenn du oben gesagtes anwendest.
Joan P. schrieb:
> Trotz all dem gesagten stimme ich Karl Heinz zu..> Guck dir zum Treiben so vieler LEDs dafuer geeignete Schaltkreise an..> die koennen noch bisschen mehr Strom vertragen..
und zum Layouten sind sie auch besser :-)
60 LED in einer Reihe und 60 Leitungen die zu einem µC laufen muss man
erst einmal unterbringen. Vom Chaos, die dann auch noch an die Pins
anzuschliessen rede ich erst mal gar nicht.
>Mir fällt gerade ein das ich den Ring oben und unten mit 2 unabhänigen>Metallstangen verbinde.>Ggf. Könnte ich diese mit 2 verschiedenen Potentialen verbinden und>somit meine Stromversorgung realisieren. Wobei ich hierdurch ungewollte>Schleifgeräusche erzeuge.
ich glaube was er meinte, war den strom über zwei Kugellager auf den
drehenden Körper zu übertragen.
so hast du nicht mehr Schleifgeräusche als vorher.
Musst dir nur ein schmiermittel suchen, dass strom gut leitet.
@ Karl heinz Buchegger
Muss ich, wenn ich Schieberegister verwende nicht viel schneller
Schalten?
Und erhöhrt das nicht auch den Programmieraufwand?
Deswegen währe mit ein Atmega mit entsprechend vielen Beinen eigendlich
lieber. Das einzige Problem währe dann das einlöten des ICs.
@ Joan P.
>"DC current per I/O Pin 40mA"
Du hast recht theoretisch könnte ich einem Pin 40mA abverlangen.
Es steht dort aber auch,
>the following must be observed:>1.)The sum of all IOL, for ports J0-J7, A0-A7, G2 should not exceed 200>mA.
Das sind 17Ports. Unter worstcase, wenn ich alle LEDs leuchten lassen
möchte fließen dort 340mA.
Werd aber mal überlegen, ob ein LED-Treiber nicht doch Sinn macht, wobei
60 kleine Transistoren, welche rotatorisch gleich verteilt angebracht
sind auch Vorteile haben.
@ Karl heinz Buchegger
Ich wollte mir eine Adapterplatine bauen ähnlich dieser.
http://www.mikrocontroller.net/attachment/30471/ATMega2560.png
Also für jeden Port einen Anschluss.
Von dort würde ich dann mit Flachband zu den einzelnen Transistoren
gehen.
Ich glaube, du unterschätzt hier total die mechanischen Anforderungen an
so ein Projekt. Bau doch mal einen kleinen Versuchsaufbau mit 7 oder 8
LEDs. Meine allerersten Versuche drehten sich übrigens auf nem
Akkuschrauber...
Muss ja nicht schön aussehen, so ein Versuchsaufbau. Aber man kann doch
einige Erfahrungen sammeln.
Sebastian
Werde mal ein paar Bilder machen siehe Anhang.
Der Aufbau ist zwar noch nicht perfekt. Hab unten eine leichte Unwucht
aber es funktioniert schon recht gut. Werd das dem nächst noch
ausbessern.
Der Motor hat übrigens eine Leerlaufgeschwindigkeit von ca. 17000U/min.
Reale Geschwindigkeit mit Globus wurde noch nicht ermittelt.
Beachtlich ist auch, wie stark sich der Ring verbiegt. Aber so hohe
Geschwindigkeiten sind nicht notwendig. Jedoch bekommt man von dem
entstehendem Windstoß einen beachtlichen Respekt.
Die starke Abweichung der unteren Stange im letzten Bild ist nur dort zu
sehen. Aber dies ist bei maximaler Geschwindigkeit und wie gesagt es
wird noch verbessert.
Der Durchmesser beträgt 250mm.
Man sieht also, dass der mechanische Aufbau realisierbar ist.