Forum: Mikrocontroller und Digitale Elektronik STM32: Wieviele Timer für 4-Phasen PWM?


von Mike (Gast)


Lesenswert?

Ich habe 4 Verbraucher mit ca. 12V Betriebsspannung, die aus einer 
gemeinsamen Quelle (Solarmodul) mit 60-70V versorgt werden sollen. Die 
Verbraucher sollen einzeln steuerbar sein. Ich möchte also 4 
Abwärtswandler aufbauen, jeweils bestehend aus Schaltmosfet, 
Schottky-Diode, Speicherdrossel und Glättungskondensator. Das 
Wandlungsverhältnis soll steuerbar sein, um das Solarmodul am Punkt 
maximaler Leistung betreiben zu können. Die Mosfets sollen über die 
PWM-Einheit eines Mikrocontrollers gesteuert werden, angedacht ist ein 
ARM Cortex aus der STM32-Serie. Um eine möglichst gleichmässige 
Stromaufnahme sicherzustellen, sollen die Mosfets jeweils um 90° 
phasenverschoben angesteuert werden, z.B. so:

Kanal 1:  0° ein, 80° aus
Kanal 2: 90° ein, 170° aus
Kanal 3: 180° ein, 260° aus
Kanal 4: 270° ein, 350° aus

Die Phasen sollen sich nicht überlappen, d.h. es darf zu jedem Zeitpunkt 
nur maximal 1 Mosfet eingeschaltet sein. Dadurch kann der 
Eingangskondensator klein gehalten werden.

Ich bin mir allerdings nicht sicher, wieviel Timer ich benötige. Im 
STM32 gibt es zwar Timer mit jeweils 4 Capture-Compare-Registern, in den 
Beispielen sind jedoch nie Phase und Einschaltdauer getrennt 
einstellbar. Kann man jeweils ein CC-Register zum Einschalten, ein 
anderes zum Ausschalten des Pulses programmieren. In diesem Fall würde 
ich 8 Register, verteilt auf 2 Timer benötigen. Ist meine Überlegung 
richtig?

von pegel (Gast)


Lesenswert?

Ich denke nicht, dass das mit einem Timer geht.
Würde sagen zwei. Wobei jeweils ein Kanal mit PWM1 und einer mit PWM2 
konfiguriert wird.

Geht bestimmt in Software genau so gut.
Ein 10 - 50kHz Timer Interrupt müsste eine ausreichende Auflösung der 
Schaltsignale ermöglichen, oder?

von Mike (Gast)


Lesenswert?

pegel schrieb:
> Geht bestimmt in Software genau so gut.
> Ein 10 - 50kHz Timer Interrupt müsste eine ausreichende Auflösung der
> Schaltsignale ermöglichen, oder?

Mit Software-PWM käme der Controller doch ziemlich an seine Grenzen:

Idealerweise sollte die PWM-Frequenz ca. 100kHz betragen, um die Spulen 
und Kondensatoren nicht zu groß werden zu lassen. Die Dauer eines Pulses 
läge bei einem Tastverhältnis von 20% dann bei 2µs. Die Pulsbreite 
sollte mit einer Genauigkeit von ca. 1% einstellbar sein, was 20ns 
entspricht. Bei einer Taktfrequenz von 50MHz wäre das per Hardware-PWM 
gut machbar. Der Jitter der Interrupt-Responsezeit ist aber i.A. 
deutlich höher. Ausserdem sind 800.000 Interrupts pro Sekunde (8 pro 
PWM-Periode) schon eine recht hohe Rate.

von UweBonnes (Gast)


Lesenswert?

Achtung: Ein STM Timerkanal kann nur an einer variablen Position im 
Zaehlfenster schalten. Z.b "Kanal 2: 90° ein, 170° aus" laesst sich 
nicht realisieren.

von pegel (Gast)


Lesenswert?

Na dann geht es vermutlich nur mit mindesten 2 Timern im Master/Slave 
Modus.

Master: CH1-PWM1 Mode, CH2-PWM2 Mode, CH3-PWM2 Mode=halbe Periode
Slave:  Gated Trigger von Master CH3, CH1-PWM1 Mode, CH2-PWM2 Mode

von pegel (Gast)


Lesenswert?

Nein, geht doch nicht.

Master CH2 PWM2 Mode wird auch erst am Ende der Periode und nicht zur 
Hälfte ausgeschaltet, inzwischen kommen die Slave Kanäle schon dazu.

Ich sehe also 3 benötigte Timer.

Vielleicht hat jemand eine bessere Idee.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Das geht mit 2 Timern, wenn man jeweils invertierte und nicht 
invertierte PWM  benutzt. Sowas ähnliches habe ich gerade mit AVR bei 
meinem Herdcontroller gemacht, um 'Load Balancing' zu machen.
Dabei schaltet Kanal 1 bei Timerreset ein und nach der CC Zeit aus, 
während Kanal 2 bei der CC Zeit einschaltet und bei Timerreset aus.
Hier muss man nun Ping-Pong spielen, Timer 1 startet beim Überlauf Timer 
2 und stoppt sich selber, Timer 2 macht das umgekehrte.

: Bearbeitet durch User
von Christopher J. (christopher_j23)


Lesenswert?

Für mich klingt das alles ein bisschen konstruiert, unlogisch bzw. nach 
"von hinten durch die Brust ins Auge". Was für Verbraucher sollen denn 
an dem Solarmodul hängen? Die sind ja offensichtlich nicht alle gleich, 
weil sonst könnte man ja auf eine einzige Spannung mit einem einzigen 
Buck-Converter wandeln (meinetwegen auch mit mehreren Phasen). Wenn sie 
aber nicht gleich sind, dann musst du nicht nur die einzelnen Spannungen 
regeln, sondern auch noch welcher Verbraucher wie viel vom Kuchen 
abbekommt. Das von dir dargestellte Beispiel in dem alle vier 
Verbraucher gleich viel ziehen wird dann eher ein Ausnahmefall sein. 
Allgemein würde ich einen Batteriegepufferten Zwischenkreis nutzen, z.B. 
48V und dafür einen Regler hernehmen. Deine Verbraucher befeuerst du 
dann aus dem Zwischenkreis mit jeweils einem eigenen Regler. Wenn diese 
vier bzw. fünf Abwärtswandler mit der selben Frequenz arbeiten reicht 
dafür sogar (unter Umständen) ein einziger Timer.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

weil es keine zeitlichen Überlappungen gibt benötigt man dafür genau 
einen Timer. Das kann man dann so machen wie es mir Falk einmal für 
Servopulse gezeigt hat. In der Compare ISR werden die Ausgänge 
nacheinander geschalten. Der nächste Zeitpunkt wird in der ISR für den 
nächsten Compare Match berechnet/festlegt. Damit kann man bis zu 10 
Servos mit einem Timer bedienen, solange alles in Standard 20ms 
Periodendauer passen soll.

In dem Thread ist es ...
Beitrag "Re: ISR Code schneller machen?"

Ist zwar AVR Code, denke jedoch das kann man auf STM32 leicht anpassen.

: Bearbeitet durch User
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.