Hallo zusammen, ich bau mir gerade einen Induktionserhitzer. Kurz zur Funktio: Eine IGBT Vollbrücke speist die Leistung über einen Trafo in den LC-Schwingkreis ein. Ich hab eine Resonanzfrequenz von ca. 72 kHz. Die IGBT´s werden über einen GDT und einem geeignetem Treiber versorgt. Steuern tut das Ganze ein STM32F103 über einen PWM Ausgang vom Timer1. Mein Programm arbeitet von 25 - 120 kHz, Start ist immer bei 120 kHz. Über ein Poti wird der Strom eingestellt, welcher dann über einen einfachen P-Regler im Programm entsprechend die Frequenz einstellt. Das Teil ist eigentlich soweit schon fast fertig und funktioniert auch schon ganz gut, ein paar kleine Bugs muss ich aber noch beseitigen. Z. b. dieser hier: Angenommen ich stelle auf 16 A Eingangsstrom ein. Wenn ich z. B. Stahl erwärme bis er glüht, kann es sein, dass die Stromaufnahme sinkt. Kein Problem, der Regler regelt die Frequez ja nach, bis der eingestellte Strom wieder fließt. Funktioniert auch. Es kann aber sein, dass das Gerät bei Resonanzfrequenz nicht mehr auf die Eingestellten 16 A Eingangsstrom kommt (weil sich die Induktivität des Werkstücks ändert oder der Widerstand...warum auch immer), sondern nur noch auf 13 A. Dann regelt der Regler aber immer weiter runter, bis auf 25 kHz. D. h. der Regler checkt nicht, dass es eine Resonanzfrequenz gibt, und dass im Moment einfach nicht mehr gehen als die 13 A. Besser wäre eigentlich eine Strombegrenzung, und keine Regelung auf einen festen Wert?! Hat jemand eine Idee? Hier mal der Regelungsteil: while (sensor1 <= strommax1) //Treiberstromüberwachung { if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0)==GPIO_PIN_SET) //Wenn Aus-Schalter gedrückt --> { goto ende; // --> goto ende } //+++++++++++++++++++Fusspedalerkennung+++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++ if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4)==GPIO_PIN_SET) //Wenn Fusspedal eingesteckt { potentiometer = poti2; } else { potentiometer = poti; } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++ //Frequenzregelung++++++++++++++++++++++++++++++++++++++++++++++++ //Poti: 25A max! = 4096 //sensor2 bei 25A max! = ? Strom = (sensor2-s2offset); e = (potentiometer*0.1325) - Strom; // Faktor muss angepasst werden! //war 0.1325 Kp = 0.3; //Wert für Regleranpassung y = Kp * e; /* //Richgung für Regelung (je nachdem, auf welcher Seite des Resonanzpeaks sich der Arbeitspunkt gerade befindet) if(e > 0 && laststrom > Strom){ frequenz = frequenz - y; //Frequenz regeln } else { frequenz = frequenz + y; //Frequenz regeln } laststrom = Strom; */ frequenz = frequenz + y; //Frequenz regeln //Frequenzgrenzen zw. 25 kHz und 120 kHz if(frequenz < 599){ frequenz = 599; } if(frequenz > 2880){ frequenz = 2880; } shift = frequenz/2; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++Freqenz-Timer setzen++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ TIM1->ARR = frequenz; //counter period (frequenz) aktualisieren TIM1->CCR1 = shift; // Pulsbreite aktualisieren TIM1->CCR2 = shift;// Pulsbreite aktualisieren Den auskommentierten Teil bei der Regelung hab ich schon mal ausprobiert, funktioniert aber nicht, vermutlich weil die gemessenen Stromwerte vom ADC immer ein bisschen zappeln. Danke schon mal!
Ich würde die Phasenverschiebung zwischen Spannugn und Strom messen. Ist die induktiv bist du im Regelbereich, ist sie null hast du schon die maximale leistung die du übertragen kannst und wird sie kapazitiv bist du übers Maximum hinaus.
Hermann S. schrieb: > Danke schon mal! Danke schon mal wenn du dich an die Regeln zum Posten von Code hältst. Formatierung (mehr Informationen...) [c]C-Code [ /c]
A-Freak schrieb: > Ich würde die Phasenverschiebung zwischen Spannugn und Strom messen. > > Ist die induktiv bist du im Regelbereich, ist sie null hast du schon die > maximale leistung die du übertragen kannst und wird sie kapazitiv bist > du übers Maximum hinaus. Interessanter Ansatz! Dann müsste ich irgendwie die Spannung galvanisch getrennt messen. Würde das mit einem Optokoppler gehn? Linearität wär ja nicht so wichtig, brauch ja keinen exakten Spannungswert, sondern die Phase...oder?! Wie kann ich dann dem STM32 beibringen, die beiden Phasen zu messen?
Hermann S. schrieb: > auch immer), sondern nur noch auf 13 A. Dann regelt der Regler aber > immer weiter runter, bis auf 25 kHz. > D. h. der Regler checkt nicht, dass es eine Resonanzfrequenz gibt, und > dass im Moment einfach nicht mehr gehen Verwende maximum power point Regelung: also nach jeder Änderung des PWM duty cycle ermitteln welcher Strom (bei welcher Spannung) fliesst, daraus die Leistung ermitteln (wenn der Strom grösser war als der gewünschte, Kurve spiegeln an der Maximalleistungsgrenzlinie, also aus 11W bei 10W Maximum mit 9W weiterrechnen) und die Richtung (grösser/kleiner) der PWMduty cycle Änderung ändern, wenn die Leistung geringer wurde.
MaWin schrieb: > Hermann S. schrieb: >> auch immer), sondern nur noch auf 13 A. Dann regelt der Regler aber >> immer weiter runter, bis auf 25 kHz. >> D. h. der Regler checkt nicht, dass es eine Resonanzfrequenz gibt, und >> dass im Moment einfach nicht mehr gehen > > Verwende maximum power point Regelung: also nach jeder Änderung des PWM > duty cycle ermitteln welcher Strom (bei welcher Spannung) fliesst, > daraus die Leistung ermitteln (wenn der Strom grösser war als der > gewünschte, Kurve spiegeln an der Maximalleistungsgrenzlinie, also aus > 11W bei 10W Maximum mit 9W weiterrechnen) und die Richtung > (grösser/kleiner) der PWMduty cycle Änderung ändern, wenn die Leistung > geringer wurde. Servus! Erstmal Danke für die Antworten! Wenn ich annehme, dass die Spannung eine Konstante ist, brauch ich doch nur den Strom messen, oder?! Ist das nicht schon sowas in der Art:
1 | //Richgung für Regelung (je nachdem, auf welcher Seite des Resonanzpeaks sich der Arbeitspunkt gerade befindet)
|
2 | if(e > 0 && laststrom > Strom){ |
3 | frequenz = frequenz - y; //Frequenz regeln |
4 | } else { |
5 | frequenz = frequenz + y; //Frequenz regeln |
6 | }
|
7 | |
8 | laststrom = Strom; |
9 | */
|
Wie schon oben geschrieben...funktioniert nicht, weil meine ADC Werte im Betrieb ein wenig zappeln und man merkt, dass er es nicht schafft sich einzuregeln (Frequenz zappelt dann bei 120 kHz rum). Jetzt hab ich aber schon ne Mittelwertbildung über 1000 Werte.
Hermann S. schrieb:
1 | > if(e > 0 && laststrom > Strom){ |
2 | > frequenz = frequenz - y; //Frequenz regeln |
3 | > } else { |
4 | > frequenz = frequenz + y; //Frequenz regeln |
5 | > } |
Das ist nicht groß verwunderlich, wenn die Frequenz zappelt. Du musst da mit einer zulässigen Abweichung (5%?) arbeiten und nicht aufs Komma genau.
1 | shift = frequenz/2; |
Da bringst du was durcheinander! Ändere die Frequenz um in Resonanz zu kommen. Ändere das Tastverhältnis, um den gewünschten Strom einstellen zu können. Die Resonanzfrequenz ändert sich übrigens wg. der Curie-Temperatur.
Nick M. schrieb: > Hermann S. schrieb: >
1 | >> if(e > 0 && laststrom > Strom){ |
2 | >> frequenz = frequenz - y; //Frequenz regeln |
3 | >> } else { |
4 | >> frequenz = frequenz + y; //Frequenz regeln |
5 | >> } |
6 | >
|
> > Das ist nicht groß verwunderlich, wenn die Frequenz zappelt. Du musst da > mit einer zulässigen Abweichung (5%?) arbeiten und nicht aufs Komma > genau. > >
1 | > shift = frequenz/2; |
2 | >
|
> > Da bringst du was durcheinander! > Ändere die Frequenz um in Resonanz zu kommen. > Ändere das Tastverhältnis, um den gewünschten Strom einstellen zu > können. > > Die Resonanzfrequenz ändert sich übrigens wg. der Curie-Temperatur. Guten Morgen! Ahh das könnte funktionieren! Muss ich später gleich mal ausprobieren! Logisch... ;-) Die bez. „shift“ ist vll. hier irreführend, stammt noch aus älteren Zeiten des Programms, als ich die 2 Brückenzweige noch separat über 2 Treiber und 2 GDTs ansteuern konnte. Damals lief der Timer1 im Capture Compare Output mode...mit dem shift hab ich dann die Phasenverschiebung der Brückenzweige gesteuert (CCR1 = 0 und CCR2 mit „shift“ verändert). Jetzt werden alle 4 IGBTs über einen GDT angesteuert, der Timer1 läuft im PWM mode. Um die Brückenzweige symmetrisch anzusteuern, müssen die CCR Register immer die Hälfte der Frequenz sein, andernfalls ist das eine PWM Signal länger als das andere. Ich steuer also die Leistung jetzt rein über die Frequenz. Ah ja, das deckt sich auch mit meinen Beobachtungen, dass bei ~770 Grad irgendwas passiert.
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.