Hallo Leute,
Ich habe mir einen Buck Regler mit 32F030 und IRS10752 aufgebaut.
Eingangsspannung 24-80V, Ausgangsspannung 24V, 500mA.
Wer von euch hat sowas schon realisiert und kann mir ein paar Ratschläge
geben?
Soweit bin ich schon:
Typischer Betriebsfall: Vin ~30-40V. Schaltfrequenz ~75kHz, L680µH,
kontinuierlicher Betrieb ab ~200mA. Ausgangselko 100µF (zum Testen des
Reglers, der wird später größer). Der PID Regler läuft im Overflow
Interrupt der PWM, Analogwerte werden mit 500kHz eingelesen, per DMA
weggeschrieben und gemittelt. Ich habe den Regler einfach mal äußerst
frei nach Ziegler Nichols ausgelegt, und etwas nachjustiert. Bei einem
Sprung von 50 auf 800mA habe ich einen Peak von etwa 200mV und brauche
etwa 1ms zum ausregeln. Da ist sicher noch wesentlich mehr drinnen aber
mir gings mal um die Frage ob das überhaupt funktionieren kann.
Folgende Überlegungen hab ich mir gemacht:
1.) Wenn bei kleiner Eingangsspannung der Duty Cycle zu groß wird und
der IRS seinen bootstrap Kondensator nicht mehr voll kriegt fixiere ich
den Dutycycle bei der min. off time (was auch immer das dann ist) und
regle stattdessen die PWM Frequenz.
2.) Bei kleiner Ausgangsleistung mache ich es genau so nur fixiere ich
die min. on time
3.) Regelung bei unterschiedlichen Eingangsspannungen. Da die
Regelstrecke mit unterschiedlichen vin-vout komplett anders aussieht (0V
- 76V) funktionieren meine Regelparameter auch bei anderen Spannungen
nicht mehr wirklich gut. Ich habe mir überlegt 3 Sätze Parameter (25V,
40V, 80V) so auszulegen dass ich in etwa das gleiche Regelverhalten habe
und sie dann mit der Eingangsspannung anzupassen (keine Ahnung welche
Parameter ich da bekomme und ob die sich halbwegs linear ändern).
Hat jemand von euch schon mal sowas realisiert? Wie habt ihr es gemacht,
welche Probleme hattet ihr? Welche Ausregelzeiten habt ihr erreicht?
Schöne Grüße aus Wien,
Christian.
Klingt nett.
Erkennst Du einen Kurzschluss am Ausgang? Wie?
Misst Du den Eingangsstrom? Wenn ja, könntest Du eine Current Mode
Regelung machen, damit bekommt man das meist schneller geregelt.
Wie erzeugst Du die Betriebsspannung für den STM32? Linearregler könnte
bei 80V ziemlich auf die Effizienz gehen.
Das ganze wird über eine Stromquelle gestartet und dann über 2
Linearregler von den 24V versorgt. 15V für den IRS und 3.3 für den ST.
Vielleicht mach ich noch was keines mit den anderen cc's aber für die
paar ma zahlt sich's glaub ich nicht aus.
Momentan erkenne ich noch gar nichts, meine Gedanken zu Kurzschluss und
Überlast waren sich den Duty Cycle und die Spannungen anzuschauen.
Daraus kann man sich prinzipiell alles ausrechnen. Bei einem richtigen
Kurzen ist's einfach da brauch ich mir nur den Anstieg der
Ausgangsspannung anzuschauen, für Überlast wird ich einen Max. Duty
Cycle festlegen.
Du brauchst auf jeden Fall eine schnelle Hardwareabschaltung für
Überstrom.
Jedwede Softwareregelung ist viel zu langsam für einen sicheren Schutz.
Du solltest für die PWM einen Timer mit Break Eingang verwenden, der ist
genau für sowas gedacht.
Im einfachsten Fall erzeugst Du das break signal über einen Shunt +
Transistor wenn Du mit 0,6V am Shunt leben kannst.
Christian schrieb:> Momentan erkenne ich noch gar nichts, meine Gedanken zu Kurzschluss und> Überlast waren sich den Duty Cycle und die Spannungen anzuschauen.> Daraus kann man sich prinzipiell alles ausrechnen.
Damit hab ich auch mal aus Spaß etwas rumexperimentiert, ich habe es
aber nie brauchbar hinbekommen. Es gab immer einen Fall in dem es zu
rauchen anfing.
Seit dem nehme ich immer irgendeine Art von Stromsensor. Wenn Du von den
STM32F0 einen mit Analogkomparator nimmst, dann kann der Komparator
direkt die PWM abschalten, also ohne Interrupt oder andere Software. Das
war glaube ich daß, was Michael meinte.
Zeig mal Deinen Schaltplan.
Gerd E. schrieb:> dann kann der Komparator> direkt die PWM abschalten, also ohne Interrupt oder andere Software. Das> war glaube ich daß, was Michael meinte.
Das geht auch, wenn die Hardware es unterstützt, aber Tim1 hat auch
einen Break eingang.
Ein einfaches Logig Signal das unmittelbar die PWM Ausgänge auf einen
vorher als sicher definierten Pegel legt.
Das geschieht unabhängig von der CPU und auch Takt Asynchron.
Kann man als permanente Abschaltung auslegen mit reaktivierung durch die
CPU oder nur als Pulse skipping.
Meine Erfahrung bezieht sich da konkret auf den STM8S003, der STM32F030
müsste in dem Bereich aber genauso funktionieren.
Erstmal danke für die Anregungen.
Schaltplan werde ich keinen posten, das ist ein simpler Buck. Da sollte
ein Blick ins Datenblatt des IRS reichen (in Serie zur bootstrap Diode
hab ich noch 10 Ohm drinnen). Das ganze hängt am Timer3 am
STM32F0308-DISCO. Der Ruck ist auf einer Rasterplatine aufgebaut um
zumindest ein halbwegs vernünftiges Layout hinzubekommen.
Zur Kurzschluss / Überlastgeschichte:
Ich pflichte euch auf alle Fälle bei dass eine Strommessung mit
Triggerung des Breaks auf alle Fälle die sauberste Lösung ist. Vor allem
wenn man die Last nicht kennt.
Dagegen sprecht der Preis wenn man irgendeine Form von Stromsensor oder
Opamp verwendet oder der Spannungsabfall bei einem großen Shunt mit dem
man einen Transistor ansteuert.
Ich hab mich heute mal intensiver mit dem Thema Kurzschluss / Überlast
beschäftigt und ein paar Tests gemacht:
Die Methode mit dem Tastverhältnis funktioniert nur um die maximale
Leistung zu begrenzen da es im kontinuierlichen Betrieb eigentlich nur
ansteigt um die Verluste auszugleichen. 40V -> 24V = 60% Bei 800mA
sind's dann 62%. Ich hab auch Tests mit Kurzschluss gemacht,
funktionierte zwar aber nicht schnell genug dass ich happy bin.
Zumindest hab ich meinen Mosfet nicht kaputt gekriegt.
Was aber wirklich gut funktioniert ist eine Erkennung des du/dt. Ich
schau mir die Ausgangsspannung ja sowieso an und sobald sie zu steil
abfällt schalte ich die PWM aus. Das könnte man sich noch so einstellen
dass man auch kapazitive Lasten schalten kann (bis zu einer gewissen
Grenze) Man könnte auch den Dutycycle auf (Vout / Vin) + 1-5% begrenzen
und schauen was mit der Spannung passiert. Fällt sie weiter geht auch
der duty cycle zurück, steigt sie wieder an war's nur ein Kondensator.
...hier sollten eigentlich ein paar Bilder von den Messungen sein aber
leider hab ich beim Shunt einlöten vergessen das Netzteil auszuschalten
und jetzt ist mein Disco board hinüber. Ich werd die aber hier posten
sobald die nächste Farnell Bestellung kommt.
Zu guter Letzt noch was zur Last: Die ist (wenn sich's Rechenzeitmäßig
ausgeht sonst wird's ein zweiter STM) der STM selbst. Er steuert eine
H-Brücke an und erzeugt Sinustöne für einen Schallgeber. Somit habe ich
zumindest äußere Einflüsse im Griff und tu mir leichter beim
Dimensionieren. Das ist auch der Grund warum ich nicht den Timer1
verwende denn ich habe das Design auch mit einer diskret aufgebauten H
Brücke und da brauch ich alle 4 Ausgänge.
Falls jemandem eine kleine und (24V, 0.5A) vor allem günstige
integrierte H Brücke mit Treibern einfällt meldet euch bitte. Das
einzige was ich da bis jetzt habe ist der MP6513 aber das ist eher was
für einen Akkuschrauber und er hat eine abs. Max. Spannung von 23V...
@Michael
zum STM8: Was genau hast du damit gemacht? auch einen Buck? Welche
Schaltfrequenz? War die PWM Frequenz im Verhältnis zur Auflösung gut
genug? Ich verwende den STM8 in anderen Designs. Hab anfänglich auch
überlegt es mal zu probieren hab ihn aber auf Grund der gewünschten
Schaltfrequenz ausgeschlossen.
Schöne Grüße,
Christian.
Christian schrieb:> Dagegen sprecht der Preis wenn man irgendeine Form von Stromsensor oder> Opamp verwendet
Wenn es eine Highside-Messung sein muss pflichte ich Dir bei, das ist
etwas aufwendiger bei Deinen 80V.
Aber wenn Du das Low-Side machst bei Deinen 500mA kannst Du den Shunt
z.B. aus 3 parallelgeschalteten 1 Ohm Widerständen zusammensetzen,
kostet dann fast nix.
Wenn es nur um die Überstromerkennung geht, kannst Du vom Shunt aus
direkt auf nen Komparator gehen und brauchst keinen Opamp. Entweder
einen im µC eingebauten oder so was simples wie ein LM393, kostet keine
10 Cent.
Natürlich geht es immer auch besser, schneller, schöner, genauer. Aber
für die Kurzschlusserkennung reicht so eine simple Lösung meist voll
aus.
> Zumindest hab ich meinen Mosfet nicht kaputt gekriegt.
Ok, wenn Du natürlich den Mosfet deutlich überdimensioniert hast, dann
hält der einiges aus.
Wenn der µC selbst mit aus dem Buck versorgt wird und dann kommt es zum
Kurzschluss, dann sackt die Versorgungsspannung zusammen und dann könnte
es vorkommen, daß der sich gerade im "an"-Zustand des FETs aufhängt.
Wenn das nicht schnell genug von selbst abschaltet ist bei auch ein
dickerer FET bald durch.
Die Brownout-Detection kann den µC dann zwar in den Reset bringen und
damit die I/Os auf High-Z schalten, aber wie schnell das in dem Fall
reagiert ist nicht spezifiziert. Da kommt es dann drauf an wierum Du
Deinen FET-Treiber rangehängt hast und was da für Pullups/Pulldowns an
dessen Eingang hängen.
Christian schrieb:> zum STM8: Was genau hast du damit gemacht? auch einen Buck? Welche> Schaltfrequenz? War die PWM Frequenz im Verhältnis zur Auflösung gut> genug? Ich verwende den STM8 in anderen Designs. Hab anfänglich auch> überlegt es mal zu probieren hab ihn aber auf Grund der gewünschten> Schaltfrequenz ausgeschlossen.
Buck, Boost und interleaved Boost hab ich schon damit gemacht.
Die Auflösung ist bei 16Mhz Takt nicht so berauschend wenn man >30Khz
anstrebt. 8-9 bit ist da das höchste der Gefühle, weniger wenn die
Schaltfrequenz höher sein soll. Für LED Ansteuerung ist das okay solange
die Regelschleife so schnell ist das man die Unterschiede zwischen zwei
Werten nicht als Flackern wahrnimmt.
Für eine stabile Spannungsregelung einer dynamischen Last muß das alles
deutlich schneller und besser aufgelöst sein.
In den meisten Fällen ist eine Kombination aus PWM DA Sollwertvorgabe
und einem billigen UC384x (oder einem beliebigen anderen Wandler) die
einfachste Möglichkeit zum Ziel zu kommen.
Alleine der MosFet Treiber kostet oft mehr als ein billiger Schaltregler
IC.
Christian schrieb:> Dagegen spricht der Preis wenn man irgendeine Form von Stromsensor oder> Opamp verwendet oder der Spannungsabfall bei einem großen Shunt mit dem> man einen Transistor ansteuert.
Naja, die billigste Löung ist nunmal meist nicht die effizienteste.
Man kann dem Transistor aber auch eine Vorspannung geben und den Shunt
dazu addieren. Das drückt den Spannungsabfall über den Shunt.
Die Strommessung ist ja auch nur die Notbremse.
Darüber kann ich mir den max. Duty bis Sättigung ermitteln und / oder
welche Pause ich beim Boost brauche um die gespeicherte Energie wieder
loszuwerden.
Das fliesst dann in die Regelung ein um nicht zu oft im Überstrom zu
landen.
Noch ein Wort zur Regelung:
Der Analog Watchdog des ADC ist da recht nützlich.
Den einfach auf voller Geschwindigkeit durchlaufen lassen und der checkt
selber ob auf den AD Kanälen min/max Werte gerissen werden.
So kann man sich in der Zwischenzeit anderen Aufgaben widmen und braucht
keine CPU Power um Wertevergleiche zu machen.
Spätestens hier kann man die ST Lib in die Ecke hängen weil manche
Einstellungen mit der Lib nicht zu machen sind.
Gerd E. schrieb:
> Wenn es nur um die Überstromerkennung geht, kannst Du vom Shunt aus> direkt auf nen Komparator gehen und brauchst keinen Opamp. Entweder> einen im µC eingebauten oder so was simples wie ein LM393, kostet keine> 10 Cent.
...Danke für den Tipp. Eher weniger wegen dem Tipp selbst aber ich
wusste nicht dass die mittlerweile so billig sind :)
Ich denke ich werde in diesem Projekt aber ohne auskommen.
Gerd E. schrieb:
> Ok, wenn Du natürlich den Mosfet deutlich überdimensioniert hast, dann> hält der einiges aus.
...bei 800mA Dauerstrom (ist zwar nicht das was es in der Endanwendung
sein wird aber wofür ich die Drossel und den Mosfet da habe) finde ich
einen IRL4310 nicht für allzu sehr überdimensioniert. Außerdem lag das
Strommaximum beim Ausschalten um die 4A, das ist weit innerhalb des
grünen Bereichs. Der Spaß ist auch in max. 20µs vorbei. Für die ersten
Tests habe ich die du/dt Erkennung einfach in den Timer Interrupt
gepackt, setze den output compare mode auf force inactive level, und
warte in einer Endlosschleife auf den Tod.
@Michael:
...Deine Gedanken zum STM8 teile ich. Ist für das was ich hier vor habe
nicht wirklich geeignet. Schade dass die Timer der günstigen 32Bitter
auch nur mit 48MHz laufen. Da vermiss ich manchmal die Power Stage
Controller von Atmel.
Michael K. schrieb:
> Der Analog Watchdog des ADC ist da recht nützlich.
...du bist ein echter Spielverderber, ich wollte gerade das gleiche
posten :) Ich hab gestern an anderen Projekten gearbeitet und irgendwie
kam mir in den Sinn dass ich im Datenblatt mal was vom analog watchdog
gelesen hab. Nachgeschaut was der so kann und eigentlich ist das genau
das was ich brauche. Und wie du sagst, bei so einer Taktfrequenz hat man
nie zu viel Rechenleistung. Keine Sorge, Ich verwende die libs nicht.
Sobald man anfangen will zu optimieren kann man die nicht mehr brauchen.
Hierzu was anderes: Ich bin mir noch nicht ganz sicher ob es sich
ausgeht dass ich auch meinen Sinusgenerator am gleichen µC laufen lasse.
Eine Idee war die Timer ISR für den Regler in Assembler nochmal zu
schreiben. Hat sowas schon mal jemand umgeschrieben und wenn ja wieviel
schneller ist die Assembler Routine gelaufen?
...die Kurzschlussabschaltung mit dem analog watchdog funktioniert
besser als ich mir gedacht hätte.
Anbei wie versprochen ein paar Messungen. Gemessen wurde der Strom ins
Drain des Transistors mit einem 100mOhm Shunt sowie die Spannung am
Ausgang überm PWM Ausgang.