Nur mal so nebenbei, wäre es nicht einfacher den Strom der LED einzustellen?Dieses mal möchte ich die Sendeleistung einer LED ausregeln.Dazu habe ich einen DAC, über den ich die LED-Spannung einstellen kann.
Hallo zusammen,
eigentlich stehe ich vor einem banalen Problem aber scheinbar habe ich ein Brett vor dem Kopf (oder ich habe doch prinzipiell etwas nicht richtig verstanden). Ich habe schon mehrere PID-Regler ausgelegt und geschrieben (Heizung,...).
Dieses mal möchte ich die Sendeleistung einer LED ausregeln. Dazu habe ich einen DAC, über den ich die LED-Spannung einstellen kann. Die Sendeleisten messe ich über eine Photodiode, der schräg vor der LED angebracht ist.
D.h. meine Stellgröße ist der 10-Bit DAC-Ausgang und meine Regelgröße ist der Strom meiner Photodiode (über einen ADC eingelesen). Der DAC-Ausgang wird jetzt über Software-Timer geregelt, wobei ich immer eine voreingestellte Spannung an meinem ADC erreichen möchte.
Im Prinzip ist dieses System ja vernachlässigbar schnell - die Änderung des DAC-Ausgangs kann ich unmittelbar an der Photodiode messen. Die einzige Verzögerung kommt durch meine Abtastung, die momentan mit 5 Sekunden läuft. Also habe ich Tu einfach mal gleichgesetzt mit meiner Abtastrate und Tg auf 0,001. Leider funktioniert das aber nur sehr leidlich. Es schwingt auch mit den Koefizienten nach Chien/Hrones/Reswick zu stark über und wird nie richtig stabil. Wenn ich die Abtastrate sogar noch höher drehe, fängt es richtig an zu schwingen.
Meine Frage ist also: Wie lege ich einen Regler aus, bei dem die Regelstecke der Führungsgröße direkt folgt und ich nur langsame Änderungen (Temperaturgänge, Bauteilalterung) ausregeln will?
Nur mal so nebenbei, wäre es nicht einfacher den Strom der LED einzustellen?Dieses mal möchte ich die Sendeleistung einer LED ausregeln.Dazu habe ich einen DAC, über den ich die LED-Spannung einstellen kann.
Sorry, Du schreibst ja nix über Controller, Controllertakt, ADC-Wandlerzeit und so. Ausserdem verstehe ich nicht was ".. im Prinzip .. vernachlässigbar schnell .." heissen soll. Vermutlich (!) meinst Du damit "unglaublich" schnell, in Bayern würden wir s..schnell dazu sagen... der Strom meiner Photodiode (über einen ADC eingelesen) .. Im Prinzip ist dieses System ja vernachlässigbar schnell ..
WENN Du als Controller nen üblichen Atmel-8Bitter nimmst, mit 20 MHz, dann sagt das Datenblatt z.B.Wenn Du mit diesen Atmels arbeitest und nur 8 Bit Auflösung brauchst, dann kannst Du laut Datenblatt bis 1000 kHz - gehen. Nun sind 1000 kHz in unserem Zeitalter von "vernachlässigbar schnell" wohl eher entfernt, zumal ja bei Dir noch die Ansprechzeit der Photodiode dazukommt und so. Ich meine einmal mit Manf, dass die Lösung ziemlich hochgestochen ist - weniger high tech/sophisticated wäre hier sicher mehr. Andersrum vermute ich, dass bei den vielen Tot- und Hochfahrzeiten in dieser optoelektronischen Trickkiste doch einige regelungstechnische Fallstricke liegen.Zitat von Datenblatt Atmel 2549Q, Abschnitt ADC
Ciao sagt der JoeamBerg
Das hatte ich anfänglich probiert. Das ist aber er leider noch zu ungenau. Speziell wenn die Temperatur steigt ist die Lichtausbeute trotz gleichbleibendem Strom wesentlich geringer.
- - - Aktualisiert - - -
Mit vernachlässigbar schnell meine ich, dass ich davon ausgehe, dass die ganzen elektronischen Schaltzeiten und Verzögerungen weit unter den temperatur-bedingten Schwankungen die ich eigentlich ausregeln will sind.
Mein controller ist ein bisschen was größeres (cortex a9). Die Regelung läuft in einem einem Linux thread.
Ich weiß dass meine DAC Spannung bei Zimmertemperatur bei 1,32V liegen muss, damit meine photodiode exakt 1V an meinem ADC anliegen. Diese 1V will ich über die komplette Laufzeit halten. Nach etwa 10 Minuten Laufzeit liegt die Photodioden-Spannung nur noch bei 0.98V.
Mhh, das wäre vielleicht auch ein Idee gewesen. Den Strom mess ich nach wie vor und könnte ihn auch in meine Regelung einfließen lassen. Leider habe ich zum jetzigen Zeitpunkt aber keine Möglichkeit mehr das Design zu ändern.
- - - Aktualisiert - - -
Meine Frage ist viel mehr, wie ich einen Regler auslege, der nahezu keine Anstiegszeit und Totzeit hat. Die einzige Totzeit wird durch meine langsame Abtastung erzeugt.
Ein 2-Punkt-Regler wäre sicher auch eine Lösung, aber mir erscheint das PID-Problem irgendwie banal. Eigentlich ist das doch der "Idealfall".
ich verstehe ehrlich gesagt deine Ausgangsfrage nicht mit "unendlich schnell" ("vernachlässigbar schnell" ist sicher nicht korrekt ausgedrückt):
der PID Algorithmus integriert doch keine infinitesimal kleinen Operanden mithilfe von Differenzialen (unendlich kleine dt), sondern addiert kleine diskrete Terme in einem zeitlichen definierten, messbaren Abstand (ähnlich wie Riemann-Summen im Gegensatz zur (infinitesimalen) Integralrechnung). Also brauchst du eine diskrete Abtasthäufigkeit von 10ms oder 1ms oder 10µs oder 100ns (oder was immer deine MCU hergibt), um die ebenfalls diskreten Änderungen zum vorherigen Zustand zu erfassen, genau so, wie man es auch sonst macht, z.B. um Motoren nach Sensor- oder Encoderwerten per PID zu regeln.
Die Berechnung der PID-Formel für die Stellgröße muss natürlich mit der Abtastgeschwindigkeit mitkommen (welche daher hinreichend lang sein muss), und die Dauer der Abtastintervalle muss exakt gemessen werden, denn sie geht ja in die PID-Formel mit ein.
ps,
das eben gesagte zum PID Regler gilt natürlich in gleicher Weise auch für jeden anderen Regler, der Zeit benötigt zum Messen, Berechnen, Stellen und Regeln, und natürlich muss dieses Zeitintervall in ähnlicher Weise wie beim PID Regler berücksichtigt werden, egal wie die "Formel" dafür lautet, denn "unendlich kurz oder schnell" gibt es im wirklichen Leben natürlich nicht.
Oder was meinst du, wo habe ich dich missverstanden?
Geändert von HaWe (05.09.2017 um 12:01 Uhr)
Mein System hat einfach keine messbare Totzeit bzw. Anstiegszeit. Wenn ich den DAC einstelle, kann ich die entsprechende Spannung an meiner Photodiode über den ADC direkt auslesen. Die Sprungantwort von meinem System entspricht also praktisch einem Rechteck-Signal. Die einzige Verzögerung die ich habe, ist die Totzeit die durch meine Abtastrate entsteht.
Das meine ich mit "unendlich schnell". Mag sein, dass der Ausdruck verwirrend ist oder ich ihn an dieser Stelle falsch verwende .
Es mag zwar sein, dass es "unheimlich " schnell geht, aber fürs Messen muss dennoch eine diskrete Zeit vergehen, damit du überhaupt eine Änderung feststellen kannst, wonach dann deine Regelung eingreift. Unendlich kurze Zeit bedeutet ja auch eine unendlich kleine Änderung der Messwerte, und unendlich klein heißt nichts anderes als Null - es sei denn, du begibst dich ins Reich der Infinitesimalrechnung mt ihren Differentialen, Ableitungen und Stammfunktionen. Ohne diskrete (digital darstellbare) Zeitintervalle kann also keine digitale Regelung funktionieren, und tatsächlich ist es ja auch nicht unmessbar oder gar unendlich klein, sondern sicher mehr als 1 cpu Takt lang - und genau das ist ja bereits ein messbares Intervall, welches von deinem digitalen Regler berücksichtigt werden muss
- - - Aktualisiert - - -
ps,
da es sicher richtig ist, dass dein System sehr schnell reagiert und auch keine "intrinsische" Neigung zu Reaktions-Trägheit und Überschwingen hat, wäre ein einfacher P-Regler möglicherweise das einfachste, genaueste und schnellste, was du wohl überhaupt erreichen kannst, und hier fließen zeitliche Differentiale wie bei Integral- oder Differenzialanteil des PID-Reglers ja auch nicht mit ein, auch wenn an sich diese Zeitintervalle natürlich ebenso existieren.
Drei Fragen zu Deiner Problemstellung:
- Wie genau soll's sein?
- Wie ist die Auflösung der DA/AD-Wandlungen?
- Wie groß sind die Fehler der DA/AD-Wandlungen (Quantisierung/Rauschen,...)?
Lesezeichen