Flackern auf PCA9685 PWM Controller mit 3W RGB LED und Picobuck

Ich hoffe, hier hat jemand Erfahrung mit dem PWM-Controller PCA 9685 (16-Kanal, I2c-Schnittstelle). Bisher funktioniert alles ziemlich gut, nachdem ich die Schaltung richtig angeschlossen habe. Ich verwende einen Picobuck-LED-Treiber, um diese Hochleistungs-RGB-LED anzusteuern .

Der PCA9685 ermöglichte eine PWM-Frequenz zwischen 40 Hz und etwa 1500 Hz. Der Standardwert ist 200 Hz. Nachdem ich diese Frequenz eingestellt habe, kann ich das Impuls-Ein- und Impuls-Aus-Intervall zwischen 0 und 4096 (das ist die Impulsauflösung) wählen. Wenn ich also die LED auf voller Helligkeit haben möchte, kann ich On=0 und Off=4095 setzen. Das funktioniert gut und ich bekomme eine schöne solide LED.

Wenn ich jedoch anfange, eine der LEDs zu dimmen, um 25% ihrer Helligkeit zu sagen, setze ich On = 0, Off = 1000. Dadurch wird die LED gedimmt, aber manchmal fängt sie an zu flackern. Ich habe viele verschiedene Kombinationen von Ein- / Auszeiten und PWM-Frequenzen ausprobiert. Selbst bei 1000 Hz flackert es, und es wird schlimmer, wenn ich anfange, alle 3 RGB-Komponenten zu verwenden.

Ich treibe den Picobuck mit einer separaten 12-V-Gleichstromquelle und er hat einen Kühlkörper. Benötige ich irgendwo im Stromkreis einen Widerstand oder einen Kondensator, um das Flackern zu stoppen? Ich versuche nur, die LED flimmerfrei von 0-100% dimmbar zu machen, damit ich die Farben Rot, Grün und Blau kombinieren kann.

Hier ist ein Bild des Aufbaus, es gibt keine zusätzlichen Komponenten - nur PCA9685-Platine, Picobuck und die RGB-LED. Die rot/schwarzen Drähte vom Picobuck gehen zu einer separaten 12-V-Gleichstromversorgung.

Geben Sie hier die Bildbeschreibung einWas mache ich falsch?

Ein paar Bilder vom Versuchsaufbau wären hilfreich. Sie könnten versuchen, Ihre Drähte zu kürzen und ein paar Spannungen und Wellenformen für uns zu messen.
@Daniel Ich habe ein Foto von dem Setup hinzugefügt, das ich habe. Nach allem, was ich über den PCA9685 gelesen habe, sollte er so eingerichtet werden. Der Picobuck treibt die LEDs nur basierend auf einem PWM-Wert an. Es funktioniert fast, die Helligkeit funktioniert, die Farbe funktioniert, nur manchmal gibt es ein Flimmern.
Es ist schwer, viel zu sagen, aber vielleicht möchten Sie Ihren Boden vom Raspberry Pi-Breakout zum PWM-Breakout zum PicoBuck verlagern. Wenn Ihre Hochleistungsversorgung nicht isoliert ist, müssen Sie auch berücksichtigen, wie sich dies auf die Dinge auswirken kann.
Das sind einige LANGE LEITUNGEN ... je länger der Draht und je mehr "Schleifen" darin sind, desto höher ist die Induktivität des Drahtes (Widerstand gegenüber wechselnden Strömen). Zusätzlich zu den 2 Widerständen und 2 Transistoren pro LED in der Schaltung aus meiner Antwort möchten Sie möglicherweise diese Drähte kürzen (am wichtigsten sind die Drähte von PWM zu PicoBuck) und möglicherweise jedem LED-Ausgang des Picobuck einen Kondensator hinzufügen.
Übrigens, das sind nur Standard-Überbrückungskabel von Stecker zu Buchse. Ich wollte beweisen, dass die Schaltung funktioniert, bevor ich kleinere Drähte zum Verpacken der Lampe dauerhaft einlöte. @RobhercKV5ROB
Ich habe gerade genau dieses Problem, dieselbe PWM-Platine, verwende jedoch MOSFETs zum Ansteuern von 3-W-LEDs. Haben Sie herausgefunden, was das Problem war oder eine Lösung gefunden?
@pcdev Entschuldigung, ich konnte nie herausfinden, was das Problem ist. Ich habe eine permanente Schaltung ohne diese Überbrückungskabel gebaut (also nur kurze gelötete Drähte). Durch Herumspielen mit den PWM-Einstellungen konnte ich das Flimmern reduzieren, aber es ist bei SEHR geringer Helligkeit nicht vollständig verschwunden. Wenn Sie möchten, kann ich Ihnen meinen Quellcode schicken, wenn ich zu Hause bin.
@Mangist hmm, danke dafür. Ich habe gerade diesen Beitrag gefunden , der darauf hinzudeuten scheint, dass es sich tatsächlich um einen Fehler im PCA9685 selbst handelt, bei dem bestimmte LEDn_ON- und LEDn_OFF-Werte zu verpassten Zyklen führen. Welche PCA9685-Bibliothek hast du verwendet? Ich benutze dieses , vielleicht gibt es etwas, das dort optimiert werden kann.
Ich habe weitere Informationen gefunden und mein Problem gelöst, indem ich den Phasenausgleich deaktiviert habe. Dies mag andere Implikationen haben, aber im Moment passt es zu meinen Zwecken. Siehe meine neue Antwort unten.

Antworten (3)

Ich hatte das gleiche Problem wie das OP und fand diesen Beitrag in den NXP-Foren, der mein Problem (und ich denke, das Problem des OP?) gut beschreibt. Auf jeden Fall ist diese ESE-Seite eine der ersten Seiten, die bei der Suche nach erscheint PCA9685 flickering LEDs, also dachte ich, ich füge hier meine Lösung hinzu. Aus dem NXP-Forum:

Betrachtet man das Datenblatt ( http://www.nxp.com/docs/en/data-sheet/PCA9685.pdf ) fig. 11 auf Seite 20 sieht dies nach Design aus, das Problem besteht darin, dass das Gerät immer dann, wenn LEDn_ON > LEDn_OFF und das LEDn_OFF-Register aktualisiert werden, eine ganze Ausgangsphase überspringt und den Ausgang unabhängig von den Registern ausschaltet -- sehen Sie sich den leeren Zyklus zwischen "register (s) in diesem Zyklus aktualisiert“ und „Ausgang(e) in diesem Zyklus aktualisiert“. Es gibt keinen leeren Zyklus, wenn LEDn_ON < LEDn_OFF ist, wie in Abb. 2 zu sehen. 10 auf der vorherigen Seite.

Es ist also kein elektrisches Problem oder ein Problem mit dem Picobuck (ich verwende einfache alte MOSFETs), sondern ein Problem mit dem PCA9685-Chip selbst: Halten Sie den Ausgang für (den Rest?) wird geändert, wenn bestimmte Registerbedingungen erfüllt sind und wenn die steigende Flanke nicht mit dem internen Timer des Chips synchronisiert ist.

Der abschließende Kommentar dieses Posters lautete:

Gibt es eine Möglichkeit, diese Art von Verhalten zu vermeiden und dennoch vom Lastausgleich der Ausgabe zu profitieren?

Spoiler-Alarm: Zum Zeitpunkt des Schreibens gibt es noch keine Antwort - Aber das veranlasste mich, nachzuforschen und zu versuchen, diese "Lastausgleichs" -Sache auszuschalten. Ich verwende diese Bibliothek , um sie zu steuern, und nachdem ich die Quelle durchsucht hatte, versuchte ich, die Deklaration des im Beispiel gefundenen PCA9685-Objekts von dieser zu ändern:

PCA9685 pwmController;

dazu:

PCA9685 pwmController(Wire, PCA9685_PhaseBalancer_None);

Und... Butterweich!

Was ist Load Balancing und warum sollte es mich interessieren?

Nun, es scheint eine Möglichkeit zu sein, die ansteigende Flanke des PWM-Signals über jeden Kanal zu verschieben, vermutlich um die sofortigen Stromänderungen aller 16 Kanäle zu erleichtern, die gleichzeitig ansteigen und möglicherweise sofort abfallen, wenn die Helligkeit / Einschaltdauer jedes Kanals gleich ist . Die anderen Optionen in der Bibliothek sind *_Linear , das die Wellenformen um eine feste Verzögerung für jeden Kanal gegenüber dem vorherigen versetzt, *_Weaved , das die Verzögerungen über die Kanäle hinweg verschachtelt, „die ersten paar Ausgänge besser ausgleicht“ (was auch immer das bedeutet) und * _Count , das nicht von der Bibliothek implementiert wird und genauso funktioniert wie *_None .

Eine eventuelle Staffelung der Phase führt zu einem Flimmern, sobald Pegel geändert werden, was sich auch auf bestimmte Duty-Cycle-Bereiche bezogen auf die PWM-Frequenz auswirken kann.

Ich nehme an, dass die Auswirkungen instabile Leistungsaufnahme und stärkere EMI sind. Ich nehme an, dies bedeutet, dass die Stromversorgung mit einer ausreichend großen Obergrenze gepuffert werden sollte, aber ich bin mir nicht sicher, was (wenn überhaupt) bezüglich der potenziellen EMI zu tun ist - ist dies ein Problem? Gibt es ein weiteres Problem, das beim Deaktivieren des Phasenausgleichs zu berücksichtigen ist? Wenn jemand, der technisch versierter ist, dazu etwas sagen kann, wäre ich sehr dankbar.

Ich verwende diese Bibliothek für Node.js und es gibt keine Phasenausgleichsoption? github.com/101100/pca9685/blob/master/src/pca9685.ts
Hmmmm, interessant, das hatte ich noch nicht gesehen. Verwenden Sie für alle Kanäle denselben onStep-Wert (vorzugsweise 0)? Welche Methode rufen Sie auf, um die Pflicht zu ändern? Eine andere Sache, die mir aufgefallen ist, war, dass einige Kanäle mehr flackern als andere, vermutlich weil sie während des Zyklus-Resets länger ausgeschaltet sind, während andere überhaupt nicht viel zu flackern scheinen. Merkst du das?

Von der Seite, die Sie für Ihren PicoBuck verlinkt haben:

This PicoBuck supports PWM control so long as the signal is above a minimum of ~1.5V and each LED is driven to ~350mA.

Was hier passieren könnte, ist, dass es eine Kapazität (entweder eine absichtliche Obergrenze oder eine parasitäre Kapazität ... höchstwahrscheinlich eine Obergrenze) zwischen Ihrem Rechteckwellen-PWM-Ausgang und dem entsprechenden Eingang Ihres PicoBuck gibt.

  • Wenn Sie das Tastverhältnis verringern, um die wirklich niedrigen Ausgänge zu erhalten, kann es mehrere Impulse dauern, um die Kappe ausreichend auf >= 1,5 V aufzuladen.
  • Dies kann effektiv einen weiteren Oszillator (ähnlich einem Sägezahn-Oszillator) bilden, bei dem sich die Kappe für mehrere Impulszyklen auflädt, bevor sie die Schwellenspannung des PicoBuck erreicht und den PicoBuck „auslöst“, um die LED zu blinken, bis zu einer Frequenz, die niedrig genug ist, um ein sichtbares Blinken als zu verursachen Der Arbeitszyklus erreicht ausreichend niedrige Werte.

Mögliche Korrekturen:

  • Wenn sich an Ihrem PWM-Ausgang ein leicht entfernbarer Kondensator befindet, entfernen Sie ihn (oder ersetzen Sie ihn zumindest durch einen mit deutlich geringerem Wert).
  • Versuchen Sie, einen NPN und einen Schmitt-Trigger/P-FET (oder einen Operationsverstärker mit Hochspannungsvervielfacher) zwischen dem PWM-Ausgang und dem Eingang des PicoBuck hinzuzufügen, um die Signalwellenform so nah wie möglich an saubere +5 V/ 0V Rechtecksignal, niederohmiges Signal.
    Hier ist ein Beispiel mit Komponenten im Wert von etwa 2 $ pro LED:Beispiel Rechteckwellenverstärker

  • Prüfen Sie auf Unregelmäßigkeiten der Versorgungsspannung in den Versorgungspins Ihres PWM-Controllers oder des PicoBuck. Ich vermute, dass Ihr Hinweis auf "es wird schlimmer, wenn Sie alle 3 RGB-Komponenten verwenden" höchstwahrscheinlich darauf zurückzuführen ist, dass dies aufgrund des Näherungs- / visuellen Vergleichs stärker auffällt, als dass die "tatsächliche" Ausgabe beeinträchtigt wird. Da Sie es jedoch erwähnt haben, wäre die Überprüfung auf Probleme mit der Versorgungsspannung der erste Ort, um nach etwas zu suchen, das dies verursachen könnte.

Es gibt keine anderen Komponenten in der Schaltung (siehe das Foto, das ich hinzugefügt habe). Ich bin mir nicht sicher, was ein Schmitt-Trigger / P-FET ist, aber ich kann etwas lesen und sehen, ob das hilft. Ich habe leider kein Oszilloskop, um die Rechteckwelle zu testen. Die 12-V-Versorgung zum Picobuck ist für ein Multimeter stabil, aber das ist alles, was ich weiß. Ich habe einen Software-Hintergrund und fühle endlich, wie es für die Leute sein muss, die dort Fragen stellen! Tut mir leid, das ist ziemlich neu für mich, ich bin ein Anfänger in der Elektronik.
@Mangist a [Scmitt Trigger] ( en.wikipedia.org/wiki/Schmitt_trigger ) ist ein digitales Gerät, das „auslöst“, wenn sein analoger Eingang über einen voreingestellten Schwellenwert steigt oder fällt; Dadurch wird eine sich langsam ändernde Eingangsspannung in ein abruptes Ein / Aus-Rechteckwellenmuster umgewandelt. Ein [P-FET, P-MOSFET oder P-Channel FET/MOSFET] ( en.wikipedia.org/wiki/MOSFET ) ist ein Transistortyp, der häufig als „Halbleiterschalter“ in Schaltkreisen verwendet wird; wenn seine "Gate"-Pin-Spannung in Bezug auf den Source-Pin niedrig gezogen wird. Ich werde meiner Antwort einen kurzen Schaltplan hinzufügen, um ein wenig zu helfen.
@Mangist irgendwelche Neuigkeiten für uns, oder steckst du fest und wartest auf den Versand von Teilen?
Der springende Punkt bei der Verwendung des Picobuck war, die Notwendigkeit zusätzlicher Schaltungen zu beseitigen. Es soll nur die LEDs basierend auf dem PWM-Eingang ansteuern. Möglicherweise muss ich versuchen, diese Schaltung oben aufzubauen und zu sehen, ob sie das Flackern stoppt. Ich werde versuchen, die Versorgungsspannung mit meinem Multimeter zu überprüfen, aber ich habe kein Oszilloskop. Ich werde auf eine 9-V-Batterie umsteigen, die stabiler ist.

Beim Lesen des Datenblatts für AL8805 (der Chip in PicoBuck) gibt es zwei Steuerungsmodi: entweder PWM oder eine konstante Steuerspannung. Es ist möglich, dass das Flackern auftritt, weil der Chip verwirrt ist, welchen Sie versuchen zu tun.

Ein paar Dinge zur Fehlerbehebung, die Sie ausprobieren sollten:

  1. Probieren Sie den Ansatz der konstanten Steuerung aus: Anstatt den PWM-Treiber zu verwenden, schlagen Sie 1 V mit einem Spannungsteiler hoch und verwenden Sie ihn als PicoBuck-Eingang.
  2. Wie schick ist dein Multimeter? Wenn es Hold-Einstellungen für Min/Max-Spannung hat, klebe es zwischen GND und IN1 des PicoBuck und prüfe, ob die minimale Spannung niedrig genug und die maximale hoch genug ist (siehe empfohlene Betriebsbedingungen im Datenblatt). Und wenn es True RMS hat, messen Sie die durchschnittliche Spannung, um zu sehen, ob es im richtigen Bereich liegt.

Experimentell: Wenn die Konstantspannungsregelung funktioniert und Sie PWM nicht zum Laufen bringen können, stecken Sie einen großen Kondensator zwischen den PicoBuck-Eingang und Masse und vielleicht einen kleinen Widerstand zur Strombegrenzung. Die Idee ist, das PWM-Signal in eine entsprechende Steuerspannung zu glätten. Haftungsausschluss: Ungetestet, könnte den PWM-Controller braten. Wenn man sich das Datenblatt ansieht, sieht es unwahrscheinlich aus, aber gehen Sie mit Vorsicht vor.

Das Datenblatt als Referenz: http://cdn.sparkfun.com/datasheets/Components/LED/AL8805.pdf

Ich bin mir nicht sicher, wie ich mit einem Spannungsteiler 1 V hochpeitschen soll. Ich verwende nur die PWM-Methode, die auf dem PCA9685 basiert, der eine PWM bei 3,3 V ausgibt. Das sollte mehr als die 1,5-V-Schwelle sein, damit der Picobuck ihn als PWM-Eingang akzeptiert. Mein Multimeter hat diese Min/Max-Funktionen nicht, aber ich habe Zugang zu einem Oszilloskop, außer dass der Typ, der weiß, wie man es benutzt, nicht da ist. Ich werde versuchen, was Sie vorschlagen, und einen großen Kondensator zwischen Picobuck und GND legen. Irgendwelche Vorschläge zu uF? Würde der Kondensator das PWM-Signal nicht glätten und den Punkt der Verwendung von PWM zunichte machen?
Ein Spannungsteiler ist eine einfache Sache: zwei Widerstände in Reihe zwischen Masse und 3,3 V schalten. Die Spannung zwischen den Widerständen ist dann R1/(R1+R2). Ich schlage vor, es zu versuchen, die Ursache des Problems einzugrenzen. Wenn es immer noch flackert, liegt das Problem im PB oder in der LED.
Noch besser ist ein Oszilloskop. Lassen Sie uns für den Kondensator etwas rechnen. Angenommen, Sie haben eine Frequenz von 1000 Hz, und wir sind bereit, eine Welligkeit von 5 % zuzulassen. Das bedeutet, dass die RC-Zeitkonstante T = RC so sein sollte, dass exp(-0,001 / T) > 0,95 ist. Da log(0,95) ungefähr -0,05 ist, erhalten wir 0,001 / T < 0,05 und das Auflösen nach T ergibt T > 0,02. Probieren Sie also zum Beispiel einen 1-kOhm-Widerstand und eine 22uF-Kappe in Reihe. Oder 100 Ohm und 220 uF. Was auch immer Sie in diesem Stadion zur Hand haben.
Wollen Sie damit sagen, einen Kondensator und einen Widerstand in Reihe schalten und diese dann zwischen dem Picobuck-Eingangsstift und Masse anbringen? Wie PWM ---- Cap ---- Widerstand ---- Gnd?