Nabend, probiere seit einiger Zeit eine Sinusspannung per PWM zu erzeugen. Bin soweit das ich für 90 grad eine LU-Tabelle habe und die Werte auf zwei verschiedene PWM-Ausgänge eines MCU legen kann. (PWM0->0-90, 90-180 Grad; PWM1->180-270, 270-0 grad) Das ganze soll mit einer H-Brücke aus einer konstanten Gleichspannung ein Sinus erzeugen. LC-Filter ist selbstverständlich... Funktioniert soweit schon ganz gut... Das Problem ist, das ich die Amplitude des Sinus regeln muss ! Erfasse die Ausgangsspannung über einen Differential-AD. (-3V - 0 - +3V) Bisherige Versuche sachen wie folgt aus : Pulsweite aus tab. holen und an PWM Ausgang ausgegeben. Dann folgt für eine feste Zeit (damit die Frequenz stimmt) eine Korrekturschleife, in der ich die momentane Spannung über den AD-Wandler einlese und mit einer LU-Tab. verglichen habe. Wert zu klein -> Pulsweite (Duty) vergrössert, Wert zu groß -> Duty verringert. Der Regelkreis funktionierte bei kleinen Frequenzen (<10Hz) recht gut. Mein Ziel sind aber 50 Hz. Habe schon davon Abstand genommen, die Sinuskurve 64 mal abzutasten und zu korrigieren (pro Vollwelle !)... Nun wäre ich schon zufrieden, wenn ich alle 20ms (eine Vollschwingung) einen Korrekturwert erhalten würde, den ich auf die ganze Sinus-Tabelle anwenden würde. Da bei den vorherigen Versuch doch die Kurvenform zu sehr gelitten hat (kein Sinus mehr). Die besten Ergebnise erbrachte bisher das mul/div der Tabelle, um entsprechende Dutys zu bekommen und die Kurvenform zu erhalten. Also ich suche nicht nach einem fertigen Code...eher nach einem Denkanstoss, beschäfftige mich schon knappe 2 Monate mit dem prob, wills aber lösen....und stecke im mom. völlig fest 8-( Bissel einfacher ausgedrückt, ich will eine stabile 50Hz Sinusschwingung haben. Alles in allem wirds eine OnlineUSV die unabhängig von der Last (ind., kap., ohm) eine echte Sinusschwingung erzeugt und hält ! Daher würde ich am liebsten den Sinus nach jedem LU-Tab.-Wert auf genau den Spannungwert einregeln, der nötig ist. Mit 64 Stufen bei 20ms bleiben also rund 300µs um jeden einzelnen Wert auszuregeln. Als MCU habe ich einen Freescale DSP56F801FA60 mit 30 Mips. Programmiert wird das ganze in C. Leistungshardware ist vorhanden, ebenso Iso-Meßverstärker (Fa.Knick) zum genauen und sicheren erfassen der Ausgangspannung. Vielleicht hat einer ne Idee...DANKE schonmal vorweg... Grüsse...Sebastian
Ich versteh noch nicht so ganz warum du die PWM Information in einer LU Tabelle festlegst. Das Tastverhältniss ergibt sich doch automatisch aus dem Komperatorvergleich von Ausgangsfehler(sin.soll-sin.ist) und einem Dreieckssignal das die PWM Grundfreq. festlegt. Zumindestens machen das Class D Verstärker so, oder versteh ich da was falsch? www.irf.com/product-info/audio/classdtutorial.pdf Vielleicht helfen die Links zu Class D Verstärker weiter. Bei 50Hz kann man ja die ganzen analogen Komponenten durch ADC + SW nachbilden.
So wie ich das verstehe willst du einen schnellen Regler bauen der mit einer langsamen Fuehrungsgroesse in sinusform beaufschlagt wird. Probier es mal mit diesem Ansatzpunkt. Olaf
Danke erst einmal das noch jemand was gepostet hat.... Also bisher habe ich das so gemacht : die Pwm-Modulationsfrequenz ist 20 kHz (muss noch gesenkt werden, da meine IGBTS zu lahm sind...) Dann wird mit der SW über FOR-Schleifen einer der 4 Bereiche (0-90-180-270-360/0 grad) bestimmt. Innerhalb der Schleife wird die "Norm"-Pulsweite für die entsprechende Position auf den ersten PWM-Ausgang des MCU gelegt. Danach war gedacht, das innerhalb dieser Position eine Korrekturschleife aufgerufen wird, die das Signal an der H-Brücke per AD-Wandler erfasst und mit einem Wert aus einer Weiteren Tab. (Soll-Wert, Spannung) vergleicht und die Pulsweite entsprechend nachregelt. Funktioniert nur nicht, da aufgrund des LC-Filters am Ausgang die Spannung so gut wie immer höher ist, und eine Reduzierung der Pulsweite keine verringerung der Spannung mehr erreicht (wo soll sie auch hin). Nun habe ich das geändert, ich lasse erstmal den Norm-Wert der Pulsweite ausgeben und erfasse erst nach einer Vollwelle die gleichgerichtete Ausgangsspannung und lasse dann per Korrekturschleife die gesamte Sinustabelle runter rechnen (mul 0,93) und ausgeben. So bleibt die Sinusform erhalten und die Ausgangsspannung (230V AC) bleibt konstant. Also nix mehr mit jeden der 64 Werte pro Vollwelle nachregeln... Da gab es böse Verzerrungen besonders im Kopfbereich der Kurve. Zumal ja übergeordnet ein Timer mit läuft der dafür sorgt, das alle 315µs der nächste Wert aus der Tabelle geholt wird, egal ob die Regelung schon den momentanen Wert erreicht hat oder nicht... Entweder ist der DSP zu lahm dafür oder die Erfassung der Ausgangsspannung ist nicht präzise genug (weshalb er zuviel regelt). Dachte ja auch an Class-D Verstärker....die können das ja wohl bis über 20kHz...aber ich bin mir nicht sicher ob die nicht nur die Pulsweite regeln in abhängigkeit der Eingangsspannung gegen Sägezahn. Ich will ja das die Spannung auch genau die Kurvenform behält. Also das die ausgegebene Spannung noch geregelt wird nach Sollwert, dazu müsste wohl auch die Spannung "abgezogen" werden können. Aber ich kann ja nur die Pulsweite auf 0 schrauben, wenn aber noch Spannung im LC-Filter liegt oder gar von einer reaktiven Last kommt, müsste die kurzgeschlossen werden oder per Impuls auf der anderen (H-)Brückenseite abgezogen werden.... Das ist das ganze Problem.....aber ich denke mit dem anpassen der Sinus-LU-Tabelle komme ich noch am besten hin....
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.