Forum: Mikrocontroller und Digitale Elektronik Schaltung so machbar?


von Reiner L. (snooker)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

da ich mit MOSFETs bisher null Erfahrung habe, würde ich mir meinen 
Entwurf gern absegnen lassen. Aktuell baue ich ein Modell der U.S.S. 
Voyager.
Dieses wird beleuchtet. Die vier Phaserbänke sind der Anlass für dieses 
Posting.Die Sequenz für das "Schiessen" soll wie folgt ablaufen.
-Auswahl von Bank 1 bis 4 per Zufall
-welche der LEDs "feuert" wird ebenfalls per Zufall bestimmt
-Lauflicht von der ersten LED der selektierten Bank bis zur 
"schiessenden" LED (max. 2 LEDs gleichzeitig an)
-kurzes "Flackern" der letzten LED per PWM

Zur Schaltung:
S1 - S5 sind Digital-Ports eines Arduino Mega
S6 ist ein PWM-Port des Arduino Mega
S7 - S9 sind Digitalports zur Auswahl der Laser-Bänke (Aktivierung mit 
Durchschalten des MOSFET nach GND)
L1 - L5 LEDs Bank 1
L6 - L10 LEDs Bank 2
L11 - L15 LEDs Bank 3

Die Schaltung zeigt nur eine vereinfachte Version der endgültigen 
Lösung.
Wie schon gesagt gibt es 4 Phaserbänke, die dann jeweils 20 LEDs haben 
sollen. Da selbst der Arduino Mega nicht so viele PWM Ports hat und 
aufgrund der Zufallsauswahl für jede der 80 LEDs PWM zur Verfügung 
stehen muss, dieser Entwurf. Sind Eurer Meinung nach Probleme zu 
erwarten? Bin für jeden Hinweis dankbar.

von Jörg R. (solar77)


Angehängte Dateien:

Lesenswert?

Weshalb steuerst Du die Gates einer 5er Gruppe nicht nur von einem PWM 
Port an und verzichtest auf die 3 zusätzlichen Transistoren?

Sind die Leds Standard mit max. 20mA? Dann bietet sich ggf. ein 
einzelner Chip zur Steuerung an.

: Bearbeitet durch User
von Reiner L. (snooker)


Lesenswert?

[Blödsinn]Dann würden doch alle LEDs mit gleicher Nummer gleichzeitig 
leuchten. Also alle 1. oder alle 2. oder alle 3. DIe jeweils 1. LED 
jeder Gruppe hängt an EINEM Port des Arduino. Wenn die alle Masse hätten 
werden auch alle durch den Port gesteuert. So wird nur die jeweils 
aktive Bank mit Masse versorgt und die nicht aktiven Bänke bleiben 
dunkel! Das jedenfalls ist der Plan.
[Blödsinn Ende]

Stimmt! so viele pWMs hab ich ja grad noch! ;-)
Wieder zu kompliziert gedacht.
Auch würden weniger Gates parallel geschaltet sein. Hier sehe ich 
ehrlich gesagt den größten Stolperstein. Oder ist sowas unproblematisch?

Sind 20mA SMD 0402 LEDs? Was meinst du mit einzelner Chip?

: Bearbeitet durch User
von Richard B. (r71)


Lesenswert?

IMHO brauchst du für einen PhaserBank 20-30 LEDs
um das "Aufladen" zu simulieren...

Außerdem würde ich das mit Schieberegister lösen.

: Bearbeitet durch User
von Reiner L. (snooker)


Lesenswert?

Die Phasersequenz der Voyager ist wie von mir beschrieben. Ein Lauflicht 
von einem Ende der Phaserbank bis zum Firing Point und dann ein Flackern 
für die Dauer des Feuerns. Dies weicht von z.B. der Enterprise ab, wo 
von beiden Enden auf den Firing Point zugelaufen wird.
Und wie ich beschrieben habe, sind je Bank 20 LEDs geplant.
Bei einer Lösung mit Schieberegister würde sich lediglich die Zahl der 
Bauelemente vergrößern. Welchen Vorteil sollte mir das/die 
Schieberegister bringen. Programmiert ist die Lösung viel flexibler nach 
meiner Meinung. Und der Arduino wird eh verbaut, da noch weitere 
Funktionen realisiert werden müssen.

: Bearbeitet durch User
von K. S. (the_yrr)


Lesenswert?

Soll immer nur eine Bank zur Zeit aktiv sein, oder auch mehrere 
gleichzeitig?

Reiner L. schrieb:
> Und wie ich beschrieben habe, sind je Bank 20 LEDs geplant

damit benötigst du nach deiner bisherigen Lösung 20 normale Ausgänge und 
4PWM. Hast du soviele frei?

Alternativ gäbe es 16 Kanal led Treiber mit I2C steuerung. Für alle 
Kanäle brauchst du davon 5. wenn immer nur eine Bank zur Zeit aktiv ist, 
reichen 2 (bzw. 1,5) und 4 mosfets.

Alternativ dazu nimm WS2811, die kann man auch mit 3 gleichen LEDs 
betreiben.

von Reiner L. (snooker)


Lesenswert?

K. S. schrieb:
> Soll immer nur eine Bank zur Zeit aktiv sein, oder auch mehrere
> gleichzeitig?
Ja, wird immer nur eine Bank per Random ausgewählt.

K. S. schrieb:
> damit benötigst du nach deiner bisherigen Lösung 20 normale Ausgänge und
> 4PWM. Hast du soviele frei?
Sollte mit nem Arduino Mega 2560 kein Problem darstellen.

K. S. schrieb:
> Alternativ gäbe es 16 Kanal led Treiber mit I2C steuerung. Für alle
> Kanäle brauchst du davon 5. wenn immer nur eine Bank zur Zeit aktiv ist,
> reichen 2 (bzw. 1,5) und 4 mosfets.
Die SMD MOSFETs sind schon beschafft, die Verdrahtung ist mehr als 
simpel und bequem auf ener kleinen Lochrastenplatine unterzubringen, 
weshalb ich ungern auf eine andere Lösung umschwenken würde.

K. S. schrieb:
> Alternativ dazu nimm WS2811, die kann man auch mit 3 gleichen LEDs
> betreiben.
Hier habe ich sogar eine komplette Lösung gefunden. Aber aufgrund der 
Form der Phaserbank (gebogen) ist eine Stripelösung rein mechanisch 
nicht so simpel wie sie elektrisch flexibel wäre. Auch wird es hier 
schwierig, das Licht elegant und gleichmässig nach aussen zu führen. Die 
LED-Chips wären ja dann verglichen zu 0402 LEDs um Einiges größer. meine 
SMD-LEDs werden bedrahtet und in ein klitzekleines Loch genau dorthin 
geklebt, wo das licht sein soll.

von Reiner L. (snooker)


Lesenswert?

Nochmal die konkrete Frage: Muss ich bei 20 parallel geschalteten Gates 
mit Problemen rechnen? Wenn ich nicht irre, müssen die ja dann bei PWM 
ständig umgeladen werden. Wären dann beim Arduino 490Hz. Das ist die 
Stelle, die mir die meisten Bedenken beschert. Es handelt sich um 
IRLML2502 LogicLevel n-FET.

: Bearbeitet durch User
von Richard B. (r71)


Lesenswert?

Reiner L. schrieb:
> Die Phasersequenz der Voyager ist wie von mir beschrieben.

Habe früher VFX gemacht, danke ;)
Die 20 - 30 LEDs waren als minimum angedacht.

https://www.youtube.com/watch?v=bzHxgX7n4lo&t=44s

Reiner L. schrieb:
> Bei einer Lösung mit Schieberegister würde sich
> lediglich die Zahl der Bauelemente vergrößern.

Wie das? Wozu brauchst du diese MOSFETs überhaupt?

PWM? Wozu? So wird das nicht gemacht.
Deine Quelle "Moduliert" nicht.

Mit PWM wird das nach "defective" aussehen.

: Bearbeitet durch User
von foobar (Gast)


Lesenswert?

> Muss ich bei 20 parallel geschalteten Gates mit Problemen rechnen?

Die 20 parallelen MOSFETs sind über wie ein Kropf - kannst du durch 
einen ersetzen, oder, wenn du die PWM über die anderen Pins machst, ganz 
weglassen.

von Reiner L. (snooker)


Lesenswert?

foobar schrieb:
>> Muss ich bei 20 parallel geschalteten Gates mit Problemen rechnen?
>
> kannst du durch einen ersetzen
meinst du ich sollte die LEDs einer Bank alle auf einen MOSFET auflaufen 
lassen?

>oder, wenn du die PWM über die anderen Pins machst, ganz
> weglassen.
Dann bräuchte ich aber 20 PWM-fähige Pins! Den Controller zeig mir mal.
Oder wie soll ich das verstehen?

von Reiner L. (snooker)


Lesenswert?

Richard B. schrieb:
> PWM? Wozu? So wird das nicht gemacht.
> Deine Quelle "Moduliert" nicht.
>
> Mit PWM wird das nach "defective" aussehen.
S1 - S5 schalten auf 5V, wenn aktiv. Der MOSFET schaltet dann mit 
PWM-Frequenz den Pfad ein und aus! Das ist nichts anderes, was PWM auch 
machen würde. Oder wo verstehe ich hier etwas falsch? PWM ist nichts 
anderes als das Ein- und Ausschalten mit einer bestimmten Frequenz und 
Pulsweite.

Richard B. schrieb:
> So wird das nicht gemacht.
Wie wird es denn gemacht? Ich frage ja nicht, weil ich die ideale Lösung 
habe, sondern weil ich Vorschläge möchte, wie das zu realisieren ist!

: Bearbeitet durch User
von foobar (Gast)


Lesenswert?

>> oder, wenn du die PWM über die anderen Pins machst, ganz weglassen.
>
> Dann bräuchte ich aber 20 PWM-fähige Pins!

Den Bank-Select zu modulieren würde reichen ...

von MaWin (Gast)


Lesenswert?

Reiner L. schrieb:
> Da selbst der Arduino Mega nicht so viele PWM Ports hat

Deine Schaltung ist viel zu viel Aufwand.

Reiner L. schrieb:
> max. 2 LEDs gleichzeitig an

Das schaffen Arduino-Ausgänge ganz ohne extra Transistoren.

Reiner L. schrieb:
> 80 LEDs

Man braucht 9 I/O Leitungen an einem uC, um 80 LEDs ansteuern zu können.

https://datasheet.datasheetarchive.com/originals/distributors/Datasheets-18/DSA-359400.pdf

Es stehen 20mA zur Verfügung, bei 2 LEDs leuchtet jede die halbe Zeit, 
also mit effektiv 10mA.

Der Rest ist Software. Man braucht keine PWM Hardware. Man muss nur 
programmieren können.

von Peter D. (peda)


Lesenswert?

Sowas baut man nicht mehr diskret mit einem Transistorgrab.
Es gibt fertige ICs mit Stromausgängen für mehrere LEDs, z.B.:
- MAX7219
- MM5450
- HT16K33

von snooker (Gast)


Angehängte Dateien:

Lesenswert?

foobar schrieb:
> Den Bank-Select zu modulieren würde reichen ...

Ich versteh nur Bahnhof, genau das macht doch der(die) 
Bankselect-Pin(s).

Peter D. schrieb:
> Sowas baut man nicht mehr diskret mit einem Transistorgrab.
> Es gibt fertige ICs mit Stromausgängen für mehrere LEDs, z.B.:
> - MAX7219
> - MM5450
> - HT16K33

Und das ergäbe einen Programmieraufwand jenseits von Gut und Böse. Für 
meine Lösung brauche ich 2 Random-Aufrufe, eine Zählschleife für das 
Lauflicht und eine für das "Flackern", fertig ist der Lack. Keine 
Bitmuster oder dergleichen, die ich berechnen und dann an die ICs senden 
müsste.

Mir ist schon klar, dass es auch elegantere Lösungen gibt. Ich möchte 
das Ganze aber simpel und vor Allem aus Programmiersicht flexibel haben. 
Das wirklich Einzige, was mich selbst an meiner Lösung stört ist der 
immense Verdrahtungsaufwand. Ich muss ja mit 20 Datenleitungen an 4 
verschiedene Stellen im Modell. :-(
Und wenn ich foobars Vorschlag umsetze (siehe Anhang), dann bleiben 4 
Mosfets über, die die 80 LEDs mit PWM steuern können. womit das mit dem 
Transistorgrab auch erledigt wäre. Dann wird es nur noch ein 
Lackdraht-Grab :-) Und daran führt aufgrund der Anzahl der LEDs eh kein 
Weg vorbei.

von Peter D. (peda)


Lesenswert?

snooker schrieb:
> Und das ergäbe einen Programmieraufwand jenseits von Gut und Böse.

Nur wenn man sich standhaft weigern will, Programmieren zu lernen, also 
das Zerlegen einer Aufgabe in einzelne Teilaufgaben.

Hier sind es 2 Tasks, die man unabhängig voneinander implementieren und 
testen kann.
Man legt sich ein Array aus virtuellen LEDs im RAM an, d.h. ein Bit je 
LED.
Eine Task schaltet nun diese virtuellen LEDs in der gewünschten Weise 
ein und aus.
Und die andere Task gibt dieses RAM-Array an die Ansteuer-ICs aus, d.h. 
schaltet simultan die physischen LEDs an und aus.
Fertig ist das Programm.

Nur der Anfänger betrachtet Aufgaben als unteilbaren Monolithen und 
verzettelt sich damit ganz schnell (unflexibel, unwartbar).

von snooker (Gast)


Lesenswert?

Man kann Sachen aber auch unnötig verkomplizieren. So geschehen bei 
meinem ersten Schaltungentwurf.
Ob Anfänger oder nicht: Der Aufwand sollte schon in einem vernünftigen 
Verhältnis zum Ergebnis stehen. Und dies gilt sowohl für den 
Programmieraufwand als auch für den Schaltungsaufwand! Meine Lösung wäre 
ja mittlerweile soweit abgespeckt, dass sich die IC-Lösungen schon fast 
verbieten!
Letzer Vorteil, den ich in den ICs sehe, wäre der Wegfall der 
LED-Widerstände. Ansonsten kann so eine Lösung kein bischen mehr als 
mein Ansatz, nur bei weit höherem Aufwand.

Was spricht denn gegen eine einfache Programmierung? Nur weil die nicht 
so hipp ist? Wozu ein simples Lauflicht mit Arrays und sonstigem 
Schnickschnack aufblähen, wenn es eine Zählschleife auch tut. Weder muss 
ich zeitkritisch programmieren, noch speichersparend oder hardwarenah.

Und hardwareseitig ist die Sache mittlerweile auch in einen vertretbaren 
Rahmen gerückt.

Das Ganze soll nur den gewünschten Zweck erfüllen und keinen 
Technologie- oder Designpreis gewinnen.

von Teo D. (teoderix)


Lesenswert?

Ein 555er, Zähler, ROM und nen Treiber nach Wahl, mehr brauchts doch 
nich! Und wenns rein "zufällig" sein darf, gern auch ein "gebrauchtes" 
ROM. Irgendwo findet man schon ein paar passende Adressen. ;)

von Reiner L. (snooker)


Lesenswert?

Nehmt doch bitte die Lösung mit dem Arduino als gegeben hin. Dieser ist 
sowieso vorhanden, da noch einige andere Sachen zu steuern sind wie z.B.
Positions- und Navigationslichter, der Warpeffekt für die Warpgondeln, 
Animation für die Bussardkollektoren, Steuerung der allgemeinen 
Beleuchtung und für den Fall, dass ich noch genügend Ports übrig habe 
optional eine Soundeffekt-Steuerung.
Ich weiß dass es mindestens Dutzende mögliche Ansätze gibt, ich habe 
mich aber für die programmierbare Lösung entschieden. So muß ich nur ein 
paar Konstanten korrigieren um andere Timings zu bekommen anstatt z.B. 
die Dimensionierung eines Timers in Hardware zu ändern.
Das Modell wird ja irgendwann zugeklebt, und dann werden Änderungen die 
komplett in Hardware realisiert sind recht schwierig.

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Reiner L. schrieb:
> dann werden Änderungen die komplett in Hardware realisiert sind recht
> schwierig.

Dann frage ich mich besonders, warum du eine so extrem festverdrahtete 
Lösung favorisierst in der Änderungen (z.B. wo geht PWM) nur durch 
umlöten erreichbar sind

snooker schrieb:
> Und das ergäbe einen Programmieraufwand jenseits von Gut und Böse

Offenbar kannst du einfach nicht programmieren und versuchst dem Problem 
mit Hardwareoverkill aus dem Weg zu gehen, schon simpelste 
UND-Verknüpfungen und PWM  lieber in Hardware zu realisieren statt in 
Programmlogik.

von Reiner L. (snooker)


Lesenswert?

MaWin schrieb:
> Dann frage ich mich besonders, warum du eine so extrem festverdrahtete
> Lösung favorisierst in der Änderungen (z.B. wo geht PWM) nur durch
> umlöten erreichbar sind
Die Stellen wo PWM benötigt wird sind klar definiert. Da muss gar nichts 
gelötet werden im Nachhinein.

MaWin schrieb:
> Offenbar kannst du einfach nicht programmieren und versuchst dem Problem
> mit Hardwareoverkill aus dem Weg zu gehen, schon simpelste
> UND-Verknüpfungen und PWM  lieber in Hardware zu realisieren statt in
> Programmlogik.
Die LEDs sind gegeben, die Vorschaltwiderstände mangels 
Konstantstromquelle auch. Die Verdrahtung der LED ist auch bei JEDER 
Lösung notwendig. Die Notwendigkeit des Arduino sollte mittlerweile 
verständlich dargelegt sein. Hinzu kommen dann 4 kleine Mosfets und 8 
Widerstände! Wo bitte siehst du denn da Hardwareoverkill? Die paar 
Kupferlackdrähte mehr?
Was meine Programmierkenntnisse angeht: Ich werde mit Sicherheit hierzu 
niemanden fragen müssen, genausowenig wie ich mich von Leuten 
diesbezüglich schief anmachen lassen muss oder mir Sachen unterstellen 
lassen muss.
Wir befinden uns im Forum "Mikrocontroller und Digitale Elektronik". Da 
ist doch mein Ansatz eigentlich genau das, was man hier thematisch 
erwarten sollte.
Zum letzten Mal: Ich habe diese Lösung gewählt! Wer mir dazu behilflich 
sein will, gern. Wem die Lösung gegen den Strich geht, der soll sie halt 
ignorieren. Danke!

: Bearbeitet durch User
von Roland F. (rhf)


Lesenswert?

Hallo,
snooker schrieb:
> Peter D. schrieb:
>> Sowas baut man nicht mehr diskret mit einem Transistorgrab.
>> Es gibt fertige ICs mit Stromausgängen für mehrere LEDs, z.B.:
>> - MAX7219
>> - MM5450
>> - HT16K33
>
> Und das ergäbe einen Programmieraufwand jenseits von Gut und Böse.

Von wegen!
Ich habe hier eine Bastelei in Arbeit, bei der 128 LEDs (64 einzelne 
LEDs und acht Sieben-Segment-Anzeigen) von 2 kaskadierten MAX7219 
angesteuert werden. Das sind gerade mal 100 Zeilen einfachster C-Code. 
Und das bei völliger Flexibilität.

rhf

von Reiner L. (snooker)


Lesenswert?

Also die 4 Phaserbänke steuere ich locker mit pi mal Daumen 50 Zeilen 
Code (vielleicht ein paar mehr oder weniger). Wie gesagt, einmal die 
Phaserbank auswürfeln, einmal den Endpunkt des Lauflichts auswürfeln, 
Lauflicht abspielen und zum Schluss die letzte LED einige mal flashen 
lassen. Lediglich das Timing für Lauflicht und Flash sollten schon 
flexibel sein. Aber das sind wie gesagt nur Konstanten, die ich 
variieren muss. Flexibilität ist ansonsten hier nicht wirklich 
gefordert, da der Ablauf, wie das aussehen soll, ja vorgegeben ist.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Reiner L. schrieb:
> Aber das sind wie gesagt nur Konstanten, die ich
> variieren muss.

Eine Konstante heißt so weil ihr Wert konstant ist.

Eine Variable heißt so weil ihr Wert variabel ist.

von Reiner L. (snooker)


Lesenswert?

Jetzt kommen die "ganz Schlauen"!

Die Tatsache, dass sich ein Wert während des Programmablaufs nicht 
ändert (um genau zu sein: sich nicht ändern kann), macht diesen 
konstant. Das heisst aber nicht daß er unveränderbar ist!
Wenn ich eine Blinkfrequenz von 1Hz will, leg ich dies mit einem Wert 
fest.
Wenn mir aber diese Frequenz dann doch nicht zusagt, ändere ich ihn auf 
z.B. 2Hz. Damit ist das aber bei Programmausführung immer noch der 
konstante Wert der Blinkfrequenz. Die Änderung passiert ausserhalb der 
Laufzeit beim Erstellen des Quelltextes!

: Bearbeitet durch User
von Roland F. (rhf)


Lesenswert?

Hallo,
Reiner L. schrieb:
> Die Änderung passiert ausserhalb der Laufzeit beim Erstellen des
> Quelltextes!

Genau, und das nennt man Konstante.

rhf

von Reiner L. (snooker)


Lesenswert?

Roland F. schrieb:
> Genau, und das nennt man Konstante.

Meine Rede! Verstehe die unnötige Belehrung von magnetus nicht wirklich!
Natürlich ist der Wert für eine Konstante variabel, nur eben nicht mehr 
zur Laufzeit. Wäre er WIRKLICH konstant, wäre die Konstante in die 
Programmiersprache implementiert und eine Wertzuweisung würde sich 
erübrigen.

: Bearbeitet durch User
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.