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