Hallo Ich habe ein Regelproblem und hoffe, von euch ein paar Tips zu bekommen. Ich will eine Pulswelle über die Änderung der Lichtabsorbtion detektieren. Das ganze ist mit einem Reflexkoppler realisiert. Die Intensität der Sende-LED kann über einen DAC gesteuert werden. Als uC verwende ich einen ADuC7026. Ich verwende +3,3V, Bezugsspanung für den Analogverstärker ist 1,65V. Das Empfangssignal besteht aus der eigentlichen Pulswelle sowie einem sehr großen Offset. Mein erster Lösungsansatz sah so aus: Offset mit einem Hochpass bei ca. 0,1Hz herausfiltern. Verstärkung des Signal um 100 sowie Tiefpass bei 30Hz. Das Ausgangssignal wird mit einem ADC gemessen. Das ganze funktioniert halbwegs. Leider benötige ich für den Hochpass verhältnismäßig große Kondensatoren. Daher war meine Idee, den Offset mit dem uC zu filtern. Dafür will ich das Signal mit einem weiteren ADC vor der Verstärkung messen und je nach vorhandenem Offset die Intensität der Sende-LED steuern. Ich muss das Signal nah an 1,65V halten, damit der nachgeschaltete Verstärker mit V=100 nicht an Anschlag geht. Hier ist der passende Code. Er wird über einen Timer jede ms Ausgeführt. // Regele Offset im Signal über SendeLeistung ADCCP = 0x02; //Verwende ADC2 zur Bezugspunktmessung ADCCON = 0x6A3; // Starte AD Wandlung while (!ADCSTA) {} // Warte bis AD Wandlung fertig ist. NullVolt = ADCDAT >> 16; const int PRegler=50; ADCCP = 0x01; //Verwende ADC1 zur Offsetmessung ADCCON = 0x6A3; // Starte AD Wandlung while (!ADCSTA) {} // Warte bis AD Wandlung fertig ist. int Offset = (ADCDAT >> 16) - NullVolt; // 0-Linie ca 1,65V ca. 2700 if (Offset>PRegler || Offset<-PRegler) { LED += Offset; } else { if (Offset>15) LED++; else if (Offset<-15) { LED--; } } Der Regler soll bei großen Abweichungen schnell und bei kleinen Abweichungen langsamer reagieren. Bis "50" wird grob geregelt. Zwischen 15-50 ein wenig und unter 15 gar nicht. Grob funktioniert das ganze Die Spannung liegt bei ca 1,65V wie gewollt. Leider ist die Abweichung noch zu groß. Meine Idee war, den Zielbereich zu verkleinern, also statt (Offset>15) (Offset>7) oder noch weniger. Spätestens dann wird mein Regler instabil und fängt an um 1,65V zu schwingen. Daher wollte ich meinen Regler in einen PI-Regler umbauen. [...] OffsetIntegrated += Offset [...] LED += Offset + OffsetIntegrated/2; Damit treffe ich die Spannung immer noch nicht richtig. Hat jemand von euch eine Idee, wie es funktionieren könnte? Vielen Dank, Tilo
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.