Forum: Mikrocontroller und Digitale Elektronik Buck mit STM32F030


von Christian (Gast)


Lesenswert?

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.

von Gerd E. (robberknight)


Lesenswert?

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.

von Christian (Gast)


Lesenswert?

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.

von Michael K. (Gast)


Lesenswert?

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.

von Gerd E. (robberknight)


Lesenswert?

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.

von Michael K. (Gast)


Lesenswert?

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.

von Christian (Gast)


Lesenswert?

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.

von Gerd E. (robberknight)


Lesenswert?

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.

von Michael K. (Gast)


Lesenswert?

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.

von Christian (Gast)


Lesenswert?

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?

von Christian (Gast)


Angehängte Dateien:

Lesenswert?

...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.

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
Noch kein Account? Hier anmelden.