Forum: Mikrocontroller und Digitale Elektronik Software PWM Multiplexen


von Joachim S. (mithotyn)


Angehängte Dateien:

Lesenswert?

Hi zusammen!

Anbei ein Stück Code, welches ich gerade entwickelt habe. Ziel soll es 
sein, ings. 320 LED (bzw. kleine Lämpchen) einzeln zu dimmen.

Die Schaltung ist recht simple, am SPI befinden sich einfach 74HC595. An 
deren Ausgang jeweils ein FET BS 170 zur Ansteuerung der Last 
(LED/Lampe).

Anscheinend stoße ich mit der Schaltung an die Grenzen des Machbaren.
Laut meinem Oszi werden die Ausgänge mit nur noch 330 Hz moduliert. Da 
der µC aber auch noch so Sachen wie UART, LCD, Ethernet, IR, 
Strom-/Spannungsmessung machen soll, wird dieser Wert nochmal deutlich 
in den Keller gehen.

Seht ihr noch irgendwo Möglichkeiten den Code zu optimieren?

Ein anderes Problem könnten die Signalleitungen werden. Die 320 LED sind 
auf 10 Europakarten verteilt, die mit Abstandsbolzen 
aufeinandergestapelt sind. Von Karte zu Karte verläuft ein ca. 5cm 
Flachbandkabel mit Pfostensteckern.

Da das SPI derzeit mit rund 3,5 MHz betrieben wird, befürchte ich, dass 
auf der 10ten Karte kein sauberer Takt mehr ankommt.

Ist das kritisch? Sind die Störeinflüsse tatsächlich so gravierend?
Könnte ich auf jeder Karte mit einem TTL Gatter das Signal wieder auf 
TTL-Pegel heben und die Flanken begradigen, bevor ich es an die nächste 
Karte weitergebe? Würde das helfen?

Wie gesagt funktioniert die PWM unter Laborbedingungen (nur obiger Code, 
Schaltung auf Steckbrett) ganz gut, aber ich will ungern damit Platinen 
ätzen um danach festzustellen, dass im Realeinsatz dann doch nix mehr 
klappt.

Danke und Gruß
Joachim

von Ralf (Gast)


Lesenswert?

Mal sehen:

SPI mit 3.5MHz an 40 Schieberegister. Ausgehend von einer 100Hz PWM mit 
8-Bit Auflösung komme ich auf:

100Hz x 256 Stufen = 25.6kHz
25.6kHz x 8 Bit schubsen x 40 Schieberegister = 8.192Mhz alleine für die 
SPI-Ansteuerung - ohne Overhead.

Sieht jemand einen Fehler in der Rechnung?

Wenn du die PWM-Frequenz und -Auflösung reduzierst, kommst du natürlich 
auf weniger, aber viel mehr wirst du nicht machen können, vor allem wenn 
solche Sachen wie Ethernet etc. dabei sind...

Entweder du verteilst die Aufgaben auf mehrere Controller oder du nimmst 
beispielsweise seriell ansteuerbare LED-Dimmer, das sollte ebenfalls 
entlasten.

Ralf

von Joachim S. (mithotyn)


Lesenswert?

Hi Ralf!

Danke für die Antwort! Hab die letzten 2 Stunden damit verbracht 
Alternativen für mein Vorhaben zu finden und hab etliches durchdacht, 
komme aber zu keinem eindeutigen Ergebnis. Vielleicht kann einer von 
euch mit Erfahrung (ich bin Neuling auf dem Gebiet) das mal betrachten:

## Variante 0 - Wie oben ##
Fällt flach, wegen zu schwacher Hardware

## Variante 1 - PCA9635 ##
Vorteile:
- Chip kümmert sich selbst um PWM. Muss nur mit ein paar Bytes 
angesteuert werden. Haupt-µC wird entlastet
- Alle Chips können dank Adressbits an den selben I2C-Bus angeschlossen 
werden
- Der Bus wird mit niedrigeren Frequenzen und wenig Datendurchsatz 
betrieben und ist deswegen störunanfälliger
Nachteile:
- Nur als SMD verfügbar, Lötaufwand
- Schwer zu bekommen
- teuer
Preis für 32 Schaltausgänge:
4,88 Euro (DigiKey, Abnahme 25 Stück)

## Variante 2 - Ein µC für PWM, Schieberegister ##
Vorteile:
- Nur gut verfügbare DIP-Bauteile. (Schieberegister, µC)
- Sehr günstig
Nachteile:
- Bus als Kaskadierung der Schieberegister, erhöhter Verdrahtungsaufwand
- Bus muss mit sehr hoher Frequenz und Datendurchsatz betrieben werden, 
um die PWM zu machen
- PWM und Ansteuerung des µC muss programmiert werden
Preis für 32 Schaltausgänge:
Rund 1 Euro (60 Cent Schieberegister und Anteilsmäßig der µC)

## Variante 3 - Mehrere µC für PWM, Schieberegister ##
Vorteile:
- Nur gut verfügbare DIP-Bauteile. (Schieberegister, µC)
- Pro Schaltkarte eigene PWM mit mehr Leistung
- Zwischen Haupt-µC und Schaltkarten echter I2C-Bus
- Relativ günstig
Nachteile:
- PWM und Ansteuerung des µC muss programmiert werden
Preis für 32 Schaltausgänge:
Rund 3 Euro (60 Cent Schieberegister und ein kleiner µC)


Variante 0 und 2 fallen somit eigentlich aus.

Bleibt die Wahl zwischen 1 und 3. 1 wäre irgendwie am professionellsten, 
weil die Chips dafür gedacht sind. 3 wäre ein guter Kompromiss, bedeutet 
aber mehr Entwicklungsarbeit.

Hat jemand noch andere Ideen?


Gruß Joachim

von JoergL (Gast)


Lesenswert?

Diesen Chip finde ich für den Zweck auch ganz nett:
<http://www.austriamicrosystems.com/eng/Products/Lighting-Management/LED-Driver-ICs/AS1119>;
Aber wahrscheinlich auch nur schwer erhältlich.

HTH,
Jörg

von Thomas B. (escamoteur)


Lesenswert?

Wieso schwer erhältlich?

Kannst Du direkt beim Hersteller leider mit $30 Versand bekommen, direkt 
mit Shop, oer mal nett bei der deutschen  Niederlassung anfragen.

Gruß
Tom

von Karl H. (kbuchegg)


Lesenswert?

Ich hab mir bei TI 5 Stück 5947 gesampelt.

Jeder IC kann 24 LED mit einer 12 Bit PWM eigenständig ansteuern.

Vorteil:
 Als Sample günstig zu bekommen
 IC erledigt alles
 IC wird im Prinzip wie ein Schieberegister angesprochen und ist
 auch als solcher kaskadierbar

Nachteil:
 sauschlecht zu löten :-(


Ansonsten kann ich dir noch eine Praxiserfahrung anbieten.
Mega8 mit 11.0zerquetsche (wegen UART) schafft auf einer 595 Kette es 
noch so lala, 64 LED mit einer 6 Bit PWM anzusteuern, so dass noch etwas 
Rechenzeit fürs drumherum übrig bleibt.

von Joachim S. (mithotyn)


Lesenswert?

Hi!

Danke für die Antworten!

Ich werd jetzt doch komplett auf SMD umsteigen und wohl den PCA9635 
nehmen, sowie als Treiber jede Menge IRF7103. Dann kann ich den Platz 
der Platinen optimal ausnutzen und hoffe (Layout mach ich morgen), dass 
ich 64 Kanäle auf eine Eurokarte bekomme.

Jede Eurokarte bekommt dann nen DIP-Switch zum Einstellen der Adresse 
und nen gemeinsamen Anschluss für den I2C-Bus.

Dann brauch ich für die notwendigen 320 Kanäle nur 5 Karten, könnte aber 
dank der Adressierung der Chips per DIP-Schalter bis zu 32 Karten am 
selben Bus adressieren, ohne großartig Hardware/Software anpassen zu 
müssen.

Gruß Joachim

von Karl H. (kbuchegg)


Lesenswert?

Nur der Vollständigkeit halber:

Anordnung der LED in einer (logischen) Matrix ist keine Lösung?

von Joachim S. (mithotyn)


Lesenswert?

Hallo Karl Heinz,

da es sich tatsächlich gar nicht um LED handelt, sondern eigentlich um 
12V-Lämpchen einer Modellanlage, geht das leider nicht.

Auch sollen über die Ausgänge nicht nur die Lampen, sondern (ohne 
Dimmung natürlich) auch Relais und andere 12V Verbraucher geschaltet 
werden können.

Ein Multiplexen fällt damit aus. Auch, weil die Lampen die 12V für ihre 
volle Helligkeit brauchen. Im Multiplexbetrieb wären sie dann zu dunkel.

Gruß Joachim

von Ralf (Gast)


Lesenswert?

> Auch sollen über die Ausgänge nicht nur die Lampen, sondern auch _Relais_
> und andere 12V Verbraucher geschaltet werden können.
Dann schau dir beim Schalten der Relais aber die Versorgung der 
Schaltung mit dem Oszi an. Ich hab bei einer Schaltung mit einem 
5V-Relais eine 230V-Last geschalten (UV-Belichter) und mir ist jedesmal 
der Controller in den Reset gegangen. Hab's ums Verrecken nicht entstört 
gebracht, nur das Absetzen des Relais hat geholfen. Ich vermute du wirst 
keinen Leuchtstoff-Röhren-Trafo damit schalten, aber trotzdem als 
Hinweis.

Ralf

von Falk B. (falk)


Lesenswert?

@  Joachim Schmidt (mithotyn)

>## Variante 1 - PCA9635 ##

Gute Idee.

>- Nur als SMD verfügbar, Lötaufwand

Kein wirkliches Problem, solange es kein BGA ist ;-)
Siehe SMD Löten

>## Variante 3 - Mehrere µC für PWM, Schieberegister ##

>- PWM und Ansteuerung des µC muss programmiert werden

Auch kein Problem, siehe Soft-PWM. Da macht dein uC nebenbei noch La 
Paloma ;-)
Und mit ein paar Latches ala 74HC373 oder so kann man wahrscheinlich 100 
Ausgänge mit einem uC erschlagen, ggf mehr.

MfG
Falk

von Falk B. (falk)


Lesenswert?

@  Ralf (Gast)

>5V-Relais eine 230V-Last geschalten (UV-Belichter) und mir ist jedesmal
>der Controller in den Reset gegangen. Hab's ums Verrecken nicht entstört
>gebracht, nur das Absetzen des Relais hat geholfen.

Snubber benutzt? Ordentliche Abblockkondensatoren an VCC/GND und 
Reset? Layout?

MFG
Falk

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.