12-Kanal LED-Fader mit 16-Bit-Hardware-PWM

OP #1566092
Lesenswert?

Letztes Jahr hab ich mir einen Swimmingpool mit vier 
Unter-Wasser-Scheinwerfern gebaut. Jede der Leuchten ist mit je 6 roten, 
grünen und blauen 1-Watt-LEDs bestückt.
Nun war ich schon länger auf der Suche nach einem Fader, mit dem ich die 
vier Leuchten ansteueren kann. Das, was es so fertig auf dem Markt zu 
kaufen gibt, bot nicht, was ich mir vorstelle.

Also hab ich mich dran gemacht, selber einen Fader zu entwickeln, 
welcher vier mal drei LED-Stränge mit 16 Bit PWM ansteuern kann, also 
insgesamt 12 Kanäle.

Ausstattung und Funktion:
- Zustandsanzeige mit 2-zeiligem Punktmatrix-LCD-Display
- zwei Tasten auf/ab zum Auswählen des Fading-/Farbprogramms
- zwei Tasten langsamer/schneller
- eine Taste zum ein-/ausschalten der LED-Scheinwerfer
- fünf verschiedene Farbverläufe
  RGB (es wird zyklisch von R nach G und B durchgefadet)
  RGB subtraktiv (es leuchten alle Farben, währans R, G, oder B zyklisch 
aus-/eingeblendet wird -> gibt Pastell-Farbverläufe)
  das ganze dann jeweils noch sequenziell und zeitversetzt über die vier 
Scheinwerfer verteilt
  RGB nacheinander einzelne Farbe an-/abschwellend
  Konstante Farbwiedergabe von 10 vorgegebenen Farben.

Fading- und Farbverläufe werden in Structs definiert, also beleibig um 
neue Sets erweiterbar (solange das Flash vom Controller reicht g).

Hardware und Entwicklungsplattform:

Compiler: AVR-GCC 4.3.2 mit gnu99-flag, AVR-LIBC 1.6.2
Entwicklungsplattform: Kontrollerlab unter Kanotix (Linux-Debian 5.0)
Wichtig: Konstante F_CPU muss vom Compiler mit der Prozessorfrequenz 
angegeben werden. Sonst kennen sich die Delayroutinen in <util/delay.h> 
nicht aus.
AVR: Atmega8, 8 MHz int. RC-Osz., Fuse-Bytes: Low:0xD4 High:0xE9
Display: Lehner Dabitros YL#202-17/A7 (2 x 20 Z), baugleich mit DEM20231
(gibt's z. B. bei www.elpro.org)
PWM-Controller: MBI5030 von Macroblock

Mit diesem Projekt wird die Steuereinheit vorgestellt, welche zunächst 
nur für jeden Kanal eine Status-LED ansteuert. Die 12 LEDs sind auf der 
Platine in vier Gruppen zu jeweils R/G/B angeordnet.
ALs nächstes werde ich noch den Leistungsteil entwickeln 
(Linear-Konstantstrom-Quellen mit 350 mA, taktbar), aufbauen und 
vorstellen, mit dem man dann 12 ganze Stränge von jeweils 6 hinter 
einander geschalteten 1-Watt-LEDs treiben kann. Aber das hat dann nix 
mehr mit AVR und Software zu tun :).

ALs Programmbasis habe ich Routinen von roboternetz.de für die 
Tasterabfrage verwendet, die pwmtable_16[] vom Artikel "LED-Fading" hier 
auf'm Board, sowie eine auf 4-bit-io für den KS0066 umgeschriebene 
LCD-lib von P. Fleury. Die Bit-Banging-Routinen für die SPI-Ansteuerung 
des PWM-Controllers sind selber gebastelt, ebenso wie der Rest. Die 
C-Profis hier auf'm Board mögen hier sicher manche Programmierarbeit als 
stark verbesserungswürdig einstufen. Aber ich hab gegeben, was ich kann 
:)

Ich hab mich nach langem Suchen und Recherchieren auch hier auf'm Board 
für einen Hardware-PWM-Controller entschieden. Die üblichen ATmegas 
bieten 16-Bit-PWM nur auf einem Kanal - soweit ich das verstanden habe. 
und 12-Kanal-Soft-PWM in 16-Bit Auflösung mit einem 8-Bit-AVR hab ich 
nirgends gefunden, auch keine Anregungen dazu. Das wird ein 8-Bit-µC 
auch ned mit brauchbarem PWM-Zyklus < 10 ms schaffen.
Der MBI5030 schafft 16 Kanäle in 16-Bit-SPWM. Das heißt Scrambling PWM 
und bedeutet, dass mit einer überlagerten 10+6-Bit-PWM sehr hohe 
PWM-Zyklus-Frequenzen in effektiver 16-Bit-Auflösung erreicht werden. 
Ich hab mal nachgemessen: bei einem Takt von 0,5 MHz am GCLK-Eingang des 
MBI (für die PWM-Ansteuerung vorzugebender Takt) werden die LEDs bei 
16-Bit-SPWM mit 500 Hz angesteuert und das auf 16 Kanälen. Der GCLK darf 
aber laut Datenblatt bis 8 MHz betragen, das ergäbe 8 kHZ an den LEDs 
(!!). Ich denke, da hört die Diskussion über 16-Bit-Software-PWM und 
LED-Flackern wirklich auf. Der MBI5030 kostet bei neumüller.com in 
Musterstückzahlen 1,00€/Stück + 12,80€ einmalig für Mindermengenzuschlag 
und Versand, das ganze + MwSt.. Dafür z. B. 12 tiny2313 herzunehmen und 
einzeln zu proggen lohnt echt ned.

Sourcen für die Firmware sind im zip angehängt.
Viel Spaß damit, Fragen und Anregungen gerne. Aber bitte nicht: "Wozu is 
denn sowas gut ... wer braucht denn das überhaupt .." und ähnlichen 
Quatsch.

Wenn jemand die EAGLE Schaltplan- und Board-Files will -> PM an mich

Grüße Jürgen
Angehängte Dateien:
#1594367
Lesenswert?

Peter Fischer schrieb:
> Bekomme leider auch keine Antwort auf meine Mails.. der Schaltplan würde
> mir echt helfen.

Juergen hat meine PM auch nicht bekommen, aber aufgrund meines Posts 
hier direkt mit mir Kontakt aufgenommen. Super Sache :)

Vielleicht hat das Board ja ein Problem mit dem "__" im Benutzernamen
OP #1613791
Lesenswert?

Hi Leute

Ich weiß nicht warum, aber es kommt nie eine PM bei mir an.

Daher vervollständige ich jetzt mal die Adressen-Sammlung um meine 
eigene: j.oe@gmx.de. Sonst wird der Thread wirklich noch zum 
Adressen-Grab. Und das ist ja nicht Sinn der Sache.

Also, wenn jemand die EAGLE-Files braucht oder Fragen zum Projekt hat, 
dann mailt mir.

Grüße und schönes WoEnde
Jürgen
Gast #1644085
Lesenswert?

Den MBI5030 setze ich derzeit versuchsweise ein, um vom Software-PWM 
wegzukommen. Mit einem ATMEGA8@16MHz konnte ich zwar eine PWM-Frequenz 
von 250Hz gut erreichen. Allerdings wird es dabei insbesondere bei 
niedrigen Helligkeitswerten von der Taktrate her schon ziemlich eng. 
Außerdem will ich eine PWM-Frequenz oberhalb von 600Hz erzielen, um mit 
RGBW-LEDs eine ruhige Beleuchtung zu erreichen.
Um der Diskussion gleich vorzubeugen: nein, eine PWM-Frequenz von 100Hz 
reicht mir nicht, da ich das "Flackern" quasi aus dem Augenwinkel 
wahrnehmen kann, insbesondere bei Kopfbewegungen.

Der MBI5030 bietet dazu einige interessante Features an, aber der 
maximale Ausgangsstrom von 60mA reicht für Highpower-LEDs natürlich 
nicht.

Wie müsste ein entsprechender Booster für eine gepulste 
Konstantstromquelle  auf MOSFET-Basis aussehen, damit Highpower-LEDs 
damit angesteuert werden können?

Einige fiktive Anforderungen als Anhalt:
- Eingangsstrom für den Booster 5-60mA (MBI5030)
- Festlegung eines konstanten Ausgangsstroms (z.B. 700mA)
- Versorgungsspannung bis 48V (für Reihenschaltung von mehreren 
Highpower-LEDs)
- minimaler Energieverbrauch bei ausgeschalteten LEDs
OP #1957650
Lesenswert?

rudi schrieb:
> Lieber Gott im Himmel, nun stell doch die zwei Files hier rein.
> So ein Affentanz
> Rudi

Nana, Rudi, mal kein Stress.

Ich häng die Files ja schon ran. Kann ja jeder haben.
Man darf's eigentlich nicht, drum hab ich's bisher gelassen.

Einen Leistungsteil dazu hab ich auch schon entworfen. Funktioniert von 
der Schaltung her mit den getakteten Konstantstromquellen bereits in 
einer anderen Anwendung. Mit dem 4-fach-Fader hab ich's noch nicht 
fertiggebaut und getestet. Grundsätzlich sind mit dem Emitterwiderstand 
im Leistungspfad beliebige Konstantströme einstellbar. 1,5 Ohm machen so 
ca. 320 mA.

Platine ist geätzt, Bauteile liegen daneben, weiter bin ich noch ned 
gekommen.

Grüße Jürgen
Gast #1958952
Lesenswert?

Jürgen Oelkoch schrieb:
> Hä? schrieb:
>> Jürgen Oelkoch schrieb:
>>> Man darf's eigentlich nicht, drum hab ich's bisher gelassen.
>>
>> Das hab ich hier schon öfters gelesen, aber wo steht das? In den
>> Nutzungsbedingungen kann ich nichts finden. Und warum sollte man das
>> nicht dürfen?
>
> Wenn man zu einem Beitrag 'n File hochlädt, dann kommt das als Hinweis
> in einem Popup-Window.

Hab das gerade mal mit einer Dummy-Datei (Endung passend, Inhalt nicht) 
getestet, bei mir kommt keine Meldung was vermutl. an Noscript liegen 
dürfte.

Aber egal, die Frage warum man das nicht darf bleibt... Wirklich nur um 
Platzverschwendung zu vermeiden?!?
Persönliche Seite #1959651
Lesenswert?

Falk Brunner schrieb:
> Sags doch einfach kurz. Siehe Bildformate.

Ich wollte mich aber auf den Inhalt der Nachrichtenbox beziehen wo es 
heißt:
1
'Bitte beachten, sonst wird der Beitrag gelöscht:
2
1. JPG-Dateien NUR für Fotos und Scans verwenden, Schaltpläne und Zeichnungen nur als PNG oder GIF.
3
2. sinnvolle Bildgröße wählen.
Die der TE wohl etwas zu streng ausgelegt hat ;)
OP #1960556
Lesenswert?

Naja stimmt, zippen hätt' ich se auch noch können - hab nicht 
d'rangedacht.
Aber nun habt ihr die Files verfügbar - und - jetzt baut mal los und 
habt Spass damit :)

Übrigens:
Das mit den getakteten Konstantstromquellen hab ich in einer selbst 
konstruierten Zimmerleuchte mit 24 1-W-LEDs in 4 Strängen á 6 LEDs 
laufen.
Schaltet sauber als Rechteck durch, ohne verlustreiche Flanken - auch 
mit nicht ultraschnellen bipolaren Kleinleistungstransistoren à la BD675 
o. ä. .

Dazu wird ein ATtiny2313 mit 14-Bit-PWM an OC1A betrieben. 14-bit 
deswegen, weil man so mit PWM-clock = CPU-clock, 8MHz intern und 
Fast-PWM auf ne flimmerfreie PWM-Frequenz kommt. Bei 16-bit werden's nur 
122 Hz - und das ist zu wenig. Selbst im 15-Bit-Modus mit 244 Hz sieht 
man noch leichtes flimmern, wenn man den Blickwinkel schnell 
vorbeigleiten lässt - hätt' ich ned gedacht. D'rum 14-bit mit 488 Hz, da 
is Ruhe.

Ansonsten wertet der AVR einen Digitaleingang mit Taster gegen GND aus, 
womit sich der AVR (fast) wie ein gewohnter Tastdimmer benimmt.
Also: kurz drücken = ein/aus, lang = auf/abdimmen - Ausnahme: Lang 
drücken bei ausgeschalteter Leuchte schaltet sofort auf volle Helligkeit 
ein. Hat mich nämlich bei den Tastdimmern genervt, wenn man da dunkel 
abgedimmt ausgeschaltet hat und nach dem einschalten erst aufs 
Hochdimmen warten muss, wenn man's hell will.

Grüße Jürgen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren