STM32 PWM Polarität ändern ohne Deadtime zu ändern

Gast #2859511
Lesenswert?

Hallo zusammen,

ich hab in einem neuen Layout einen kleinen Schnitzer bei der 
Ansteuerung eines Wechselrichters und muss die Polarität meiner 6 
PWM-Kanäle umkehren.

Bisher läuft meine Software mit folgendem Setup:

TIM1_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM1_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM1_OCInitStructure.TIM_Pulse = PWM_PERIOD >> 1; //dummy value
TIM1_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM1_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM1_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
TIM1_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;


Wenn ich jetzt die Polarity von High auf Low stelle dreht sich zwar das 
PWM Muster um, allerdings verändert sich damit auch gleichzeitig die 
Polarität der Deadttime, und das führt dann zu schönen aktiven 
Kurzschlüssen, zu einer Zeit in der Kurzschlüsse eigentlich verhindert 
werden sollten :)

Kann ich die Totzeit-Polarität irgendwo nochmal separat verändern?

viele Grüße,
Jedi
Gast #2859677
Lesenswert?

Hat in Summe zwei Tage gebraucht um das Problem zu lösen, aber zum Glück 
geschafft.
Man kann die Polarität bei Center Aligned PWMs negieren und trotzdem die 
Totzeit in der ursprünglichen Polarität beibehalten, wenn man seine 
Duty-Cycles zuerst invertiert, und dann die Phase um 180° verschiebt.

Hier der Unterschied für mein drei Phasen center-aligned System 
dargestellt:

Normaler Modus (active high PWM für Highside und Lowside, Deadtime mit 
Break-Feature und Deaktivierung aller Endstufen über PWM auf Lowlevel, 
siehe oben)
in der Konfig: TIM_CounterModeConfig(TIM1, 
TIM_CounterMode_CenterAligned1)
TIM1->CCR3 = (DutyCycle_Phase_A); // Phase C
TIM1->CCR2 = (DutyCycle_Phase_B); // Phase B
TIM1->CCR1 = (DutyCycle_Phase_C); // Phase A

Invertierterter Modus, d.h im Center schaltet jetzt nicht die Highside 
sondern die Lowside, aber mit gleichen Polariäten).
in der Konfig: TIM_CounterModeConfig(TIM1, 
TIM_CounterMode_CenterAligned2)
TIM1->CCR3 = (65535-DutyCycle_Phase_A); // Phase C
TIM1->CCR2 = (65535-DutyCycle_Phase_B); // Phase B
TIM1->CCR1 = (65535-DutyCycle_Phase_C); // Phase A

Vielleicht hilfts einem!
Gruß,
Jedi

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren