Forum: Mikrocontroller und Digitale Elektronik PWM-Signal mit Phasenverschiebung 180°


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Robert B. (robertb42)


Lesenswert?

Hi ich verwende eine PIC16F877A und erzeuge damit ein PWM-Signal welches 
ich an einen boost-converter schicke. Jetzt möchte ich den einfachen 
boost-converter gegen einen 2 Phasen interleaved austauschen, dafür 
brauche ich ja zwei PWM-Signale für jeden mosfet ein. Ich habe jetzt 
aber schon RC1 für die Ansteuerung des LCDs eingesetzt und habe somit 
nur noch RC2 übrig.

Wie bekomme ich das PWM-Signal um 180° phasenverschoben,damit ich mit 
einem PWM-Signal auskomme?

: Bearbeitet durch User
von Philipp D. (philipp9494)


Lesenswert?

Hallo!

Du kannst einfach einen Transistor als Schalter nehmen, welcher gegen 
Masse schaltet.

Philipp

von Robert B. (robertb42)


Lesenswert?

Sry habe mich verschrieben, war beim Formulieren meiner Frage bisschen 
in Gedanken wo anders...

Für den interleaved boost brauche ich kein invertiertest sondern ein um 
180° verschobenes Signal

von Oldie (Gast)


Lesenswert?

Dann nimm besser einen µC, bei dem das gleich eingebaut ist,
z.B. Tiny 25 aufwärts.

von Amateur (Gast)


Lesenswert?

Könntest Du mal erklären, wie ein um 180° verschobenes PWM-Signal 
aussehen soll?

Invers ist ja recht einfach.

Alles andere ist wohl eine Frage der Definition.

Wird wohl auf einen eigenen PWM-Kanal hinauslaufen, bei dem die Aus-Zeit 
der Ein-Zeit des anderen Kanales entspricht und Umgekehrt.
Das als um 180° verschoben zu bezeichnen fällt mir allerdings schwer.

von Easylife (Gast)


Lesenswert?

Amateur schrieb:
> Wird wohl auf einen eigenen PWM-Kanal hinauslaufen, bei dem die Aus-Zeit
> der Ein-Zeit des anderen Kanales entspricht und Umgekehrt.
> Das als um 180° verschoben zu bezeichnen fällt mir allerdings schwer.

Ist es auch nicht, da es einfach ein invertiertes Signal ist, das TO ja 
explizit nicht benötigt.

Mir ist nur nicht ganz klar, warum ein uC eine PWM erzeugt, die dann der 
Booster "übernimmt". Normalerweise erzeugt der Boost-Converter die PWM 
abhängig von Ausgangsspannung und Last.

Ich nehme an, es geht um einen LED Boost-Regler, der mit einer PWM 
geregelt werden kann?
Dann sollte auch der Regler mit einer Eingangs PWM zwei 
phasenverschobene Ausgänge regeln können.

Um welchen Boost-Converter handelt es sich denn?

von Werner M. (Gast)


Lesenswert?

Robert B. schrieb:
> Ich habe jetzt aber schon RC1 für die Ansteuerung des LCDs eingesetzt
> und habe somit nur noch RC2 übrig.

Das µC-Design ist mehr als ein Dutzend Jahre als - was erwartest du.

Man könnte sich natürlich fragen, warum du dran nichts ändern kannst und 
die ganz große Frage bleibt im Raum stehen: Was ist ein 180° 
phasenverschobenes PWM Signal. Üblicherweise ist 180° Phasenverschiebung 
nur bei einem DC von 50% sinnvoll und dann entspricht das der 
Invertierung.

von Robert B. (robertb42)


Lesenswert?

http://www.powerguru.org/wordpress/wp-content/uploads/2012/08/Inductor-current-waveforms-of-a-two-cell-interleaved-boost-converter-at-different-duty-cycles.jpg

Bei dem Bild sollte deutlich werden was ich unter 180Grad 
phasenverschiebung verstehe. Es ist nicht einfach ein invertiertes 
Signal da der Duty sich auch ändern kann.

von Easylife (Gast)


Lesenswert?

Nochmal die Frage:

>.. und erzeuge damit ein PWM-Signal welches ich an einen boost-converter schicke

Was macht denn der Boost-Converter mit der PWM. Er wird ja wohl kaum 
damit direkt den Powerswitch treiben - wie sollte denn dann die Spannung 
geregelt werden...?

Ich nehme nach wie vor an, die PWM legst du auf einen Steuereingang des 
Reglers, und steuerst damit Ausgangsspannung bzw -strom.

Verrate uns doch mal, welchen Regler du einsetzen willst, bzw. für 
welchen Anwendungszweck.

Für LEDs gibt es z.B. von Intersil den ISL97682, der hat 2 100mA Kanäle, 
180° interleaved, und einen PWM Eingangs zum Dimmen beider Kanäle.

von Lothar S. (loeti)


Lesenswert?

PWM ist ein Rechtecksignal das gibt's nicht um 180° phasenverschoben, 
nur um die halbe Periodendauer. Aber wozu?

von Mike (Gast)


Lesenswert?

Lothar S. schrieb:
> PWM ist ein Rechtecksignal das gibt's nicht um 180° phasenverschoben,
> nur um die halbe Periodendauer.

Na ja, gewöhnlich wird die Periode in 360° unterteilt, was dann 
automatisch dazu führt, dass die halbe Periodendauer 180° entspricht. 
Die Angabe 180° ist nur die auf die Periodendauer des Signals normiertes 
Maß für die Verschiebung.
Und ob man die ganze Periode auf 360°, 1 oder 100% normiert, ist 
ziemlich egal, auch wenn die 360°-Normierung ihren Ursprung bei der 
Projektion von rotierenden Feldern (Spule im Generator) und damit bei 
sinusförmigen Signalen hat.

von Kurt H. (dc2jn)


Lesenswert?

Um zwei gegenphasige Ausgänge zu erzeugen kann man einen Ausgang 
invertieren:

CCP1CON = 00111110 ;
und 180° verschoben:
CCP2CON = 00111100 ;

Es reicht also ein PWM.

VY 73
Kurt

von Falk B. (falk)


Lesenswert?

Kurt H. schrieb:
> Um zwei gegenphasige Ausgänge zu erzeugen kann man einen Ausgang
> invertieren:

Falsch! Eine Invertierung ist NICHT das Gleiche wie 180° 
Phasenverschiebung!

Google interleaved switch mode power supply
1
PWM               _____**______**______**______
2
invertiert        *****__******__******__******
3
phasenverschoben  _**______**______**______**__

P.S. Wie kommt man darauf, eine 6 Jahre alte Diskussion wieder 
aufzuwärmen?

von Mike van Dyke (Gast)


Lesenswert?

Mh...

für dem Anwendungsfall sollte man sich Gedanken über eine "Lücke" 
zwischen den Signalen machen.
Deswegen haben µC die für Powersupply gedacht sind die "Dead Time 
Insertion"

Flanke an Flanke würde ich das jedenfalls nicht designen.

von Falk B. (falk)


Lesenswert?

Mike van Dyke schrieb:
> Mh...
>
> für dem Anwendungsfall sollte man sich Gedanken über eine "Lücke"
> zwischen den Signalen machen.
> Deswegen haben µC die für Powersupply gedacht sind die "Dead Time
> Insertion"

Das ist hier gar nicht relevant, der OP sprach von einem 2. Kanal 
(phasenverschobender Betrieb, neudeutsch interleaved). Es geht hier 
nicht um die Ansteuerung der Halbleiter in einer Halbbrücke.

von M. K. (Gast)


Lesenswert?

Falk B. schrieb:
> der OP sprach von einem 2. Kanal

Ja, vor 6J 😂

von David W. (david_w403)


Lesenswert?

Ich greife das ganze hier nochmal auf. Ich bin gerade an einem Projekt 
mit einem LLC Wandler und dazu brauche ich auch ein Signal das "um 180° 
Phasenverschoben" ist. Ich habe es mit einem 32u4 versucht und bin 
ehrlichgesagt nicht sehr eingespielt im Umgang mit Timern im 
Allgemeinen.
Mein Ansatz war:

- PWM, Phase and Frequency Correct mode
    Bsp.:
         OCRnA auf 20
         OCRnB auf 80
         Top auf 100
Leider kann ich keinen Modus finden in dem der Top Wert nicht auf OCRnA 
zurückgreift. Gibt es einen solchen Controller oder gehe ich hier ganz 
falsch an das Problem?

von Carsten-Peter C. (carsten-p)


Lesenswert?

David W. schrieb:
> - PWM, Phase and Frequency Correct mode

Hallo,
versuch es doch mal mit Fast PWM Mode 3. Mit COM0x0 und COM0x1 kannst Du 
einstellen, ob der Pegel mit L oder H anfangen soll – für OCRnA und 
OCRnB getrennt. Mit OCRnA steuerst Du den Winkel 0 bis 180 und mit OCRnB 
den Winkel 181 bis 360. Top ist dann 255 bzw. 65535. Vielleicht ist die 
doppelte Frequenz auch ein Ansatz.
Gruß Carsten

von Peter D. (peda)


Lesenswert?

David W. schrieb:
> Leider kann ich keinen Modus finden in dem der Top Wert nicht auf OCRnA
> zurückgreift.

Table 14-4.Waveform Generation Mode Bit Description
TOP = ICRn in Mode 8, 10, 12 oder 14

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

David W. schrieb:
> Ich bin gerade an einem Projekt
> mit einem LLC Wandler und dazu brauche ich auch ein Signal das "um 180°
> Phasenverschoben" ist. Ich habe es mit einem 32u4 versucht und bin
> ehrlichgesagt nicht sehr eingespielt im Umgang mit Timern im
> Allgemeinen.

Eine PWM mit zwei um 180° phasenverschobenen Signalen kann man bei AVR 
meist mit ein und demselben Timer lösen, indem für den zweiten Ausgang 
das Signal invertiert und das PWM-Tastverhältnis mit der Differenz des 
Tastverhältnisses des ersten Ausgangs zum TOP-Wert gefüttert wird.

Hier ein Beispiel mit einer 10-bit-PWM für einen 
Tunable-White-LED-Fader: 
http://www.led-treiber.de/html/software-fader.html#Phase

Bei einem LLC-Wandler kann die Berechnung per Luminanz-Tabelle natürlich 
entfallen.

von David W. (david_w403)


Lesenswert?

Peter D. schrieb:
> David W. schrieb:
>> Leider kann ich keinen Modus finden in dem der Top Wert nicht auf OCRnA
>> zurückgreift.
>
> Table 14-4.Waveform Generation Mode Bit Description
> TOP = ICRn in Mode 8, 10, 12 oder 14

Das habe ich gestern Nacht noch versucht. Ich kann nicht sagen warum ich 
das zu beginn überlesen/übersehen habe. Passt perfekt für meine 
Anwendung. Ein kleines Problem ergibt such noch für das abgreifen der 
Signale. Ich kann bei meinen zwei Boards nicht auf die OCRnX Ausgänge 
zugreifen. Ein Controller ist ein ItsyBitsy und der andere ist ein Pro 
micro Klon. Mit meinem Mega328P-U hat es gut funktioniert nur die 
Frequenz ist hier begrenzt. Mein Problem ist vorerst gelöst. Vielen 
Dank!

: Bearbeitet durch User
von Guido K. (Firma: Code Mercenaries GmbH) (thebug)


Lesenswert?

STM32 haben entsprechende Timer, die so was können, bei denen ist auch 
eine Totzeit programmierbar, damit sich die Signale nicht durch 
Laufzeiten überlappen und keine Treiber gegeneinander arbeiten.

von David W. (david_w403)


Lesenswert?

Eberhard H. schrieb:
> Eine PWM mit zwei um 180° phasenverschobenen Signalen kann man bei AVR
> meist mit ein und demselben Timer lösen, indem für den zweiten Ausgang
> das Signal invertiert und das PWM-Tastverhältnis mit der Differenz des
> Tastverhältnisses des ersten Ausgangs zum TOP-Wert gefüttert wird.
>
> Hier ein Beispiel mit einer 10-bit-PWM für einen
> Tunable-White-LED-Fader:
> http://www.led-treiber.de/html/software-fader.html#Phase
>
> Bei einem LLC-Wandler kann die Berechnung per Luminanz-Tabelle natürlich
> entfallen.

Danke! Wenn ich das richtig verstehe gehen die Signale dann über OCRnX 
und OCRnX' raus? Mein Problem war bei den Sonderfunktionen meist das ich 
mit meinen Controllern keinen zugriff auf die nötigen Ausgänge habe. Das 
lese ich mir auf jeden fall an. Ich habe es Mit einem ATTiny versucht 
und bin leider an der Totzeiteinstellung von 4 bit, welche für meine 
Anwendung zu ungenau ist gescheitert. Super Tipp, Danke.

: Bearbeitet durch User
von David W. (david_w403)


Lesenswert?

Guido K. schrieb:
> STM32 haben entsprechende Timer, die so was können, bei denen ist auch
> eine Totzeit programmierbar, damit sich die Signale nicht durch
> Laufzeiten überlappen und keine Treiber gegeneinander arbeiten.

Schaue ich mir an, vielen Dank!

von Rudi D. (rulixa)


Angehängte Dateien:

Lesenswert?

Anbei ein Programm für 90° verschobene Frequenzen um 10 Hz herum.
Ist leicht anzupassen, da ausreichend kommentiert für tiny 13.
Ausgänge natürlich mit TP filtern.

von temp (Gast)


Lesenswert?

Eberhard H. schrieb:
> Hier ein Beispiel mit einer 10-bit-PWM für einen
> Tunable-White-LED-Fader:
> http://www.led-treiber.de/html/software-fader.html#Phase
Am besten du schaust dir deine Bilder selbst noch mal an. Das entspricht 
nicht einem konstanten Phasenversatz. Hier ist ein konstanter Abstand 
der beiden steigenden Flanken von genau der halben Periodendauer 
gewünscht bei einer PWM-Einstellbarkeit von 0-100%.

Rudi D. schrieb:
> Anbei ein Programm für 90° verschobene Frequenzen um 10 Hz herum.
> Ist leicht anzupassen, da ausreichend kommentiert für tiny 13.
> Ausgänge natürlich mit TP filtern.

Du hast die Frage nicht verstanden.

Eine ähnliche Anforderung hat man, wenn man eine Inverter in Phaseshift 
programmieren soll. Dann ist sogar das Tastverhältnis jedes der 2 Kanäle 
immer 50%, nur die Phasenlage ist variabel. Dafür sprechen wir hier aber 
nicht von 10Hz sondern von vielleicht 100kHz.
Während man so eine Phaseshift-Inverter Geschichte mit jedem STM32 noch 
relativ einfach hinkriegt ist das oben genannte Szenario mit einem 
einzigen Standardtimer der STM32 Chips nicht realisierbar. Wenn bei der 
Aussteuerbarkeit der PWM 0-50% reichen, geht auch ein Timer mit etwas 
Zusatzelektronik an den Ausgängen. Anderenfalls läuft es auf 2 Timer 
hinaus die entsprechend synchronisiert werden müssen. Oder man bedient 
sich gleich eines besseren Timers wie sie z.B. in den STM32F334 verbaut 
sind.

von Rudi D. (rulixa)


Angehängte Dateien:

Lesenswert?

temp schrieb:
> Eberhard H. schrieb:
>> Hier ein Beispiel mit einer 10-bit-PWM für einen
>> Tunable-White-LED-Fader:
>> http://www.led-treiber.de/html/software-fader.html#Phase
> Am besten du schaust dir deine Bilder selbst noch mal an. Das entspricht
> nicht einem konstanten Phasenversatz. Hier ist ein konstanter Abstand
> der beiden steigenden Flanken von genau der halben Periodendauer
> gewünscht bei einer PWM-Einstellbarkeit von 0-100%.
>
> Rudi D. schrieb:
>> Anbei ein Programm für 90° verschobene Frequenzen um 10 Hz herum.
>> Ist leicht anzupassen, da ausreichend kommentiert für tiny 13.
>> Ausgänge natürlich mit TP filtern.
>
> Du hast die Frage nicht verstanden.

Kann schon sein, deshalb ein Bildchen: so gewünscht?

Es wäre wohl besser, wenn Sie die gewünschten Signale einfach einmal 
aufzeichnen würden, für kleine und größere Einschaltdauer und die 
Handzeichnung posten.

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

temp schrieb:
> Eberhard H. schrieb:
>> Hier ein Beispiel mit einer 10-bit-PWM für einen
>> Tunable-White-LED-Fader:
>> http://www.led-treiber.de/html/software-fader.html#Phase
> Am besten du schaust dir deine Bilder selbst noch mal an. Das entspricht
> nicht einem konstanten Phasenversatz. Hier ist ein konstanter Abstand
> der beiden steigenden Flanken von genau der halben Periodendauer
> gewünscht bei einer PWM-Einstellbarkeit von 0-100%.

Wie auf meiner verlinkten Website beschrieben, sind die Mitten (!) der 
beiden PWM-Ausgänge des LED-Faders bei der vorgeschlagenen 
AVR-Betriebsart prinzipbedingt exakt 180° phasenverschoben.

Wenn man statt der Berechnung der beiden unterschiedlichen 
PWM-Tastverhältnisse über eine Luminanz-Tabelle (wie für den LED-Fader 
gewünscht) beim 2. (negierten) Kanal direkt das Komplement zum 100%-Wert 
lädt, sind nicht nur die Mitten, sondern auch die Flanken exakt 180° 
phasenverschoben.

In allen Fällen kann das Tastverhältnis von exakt 0% bis exakt 100% 
eingestellt werden.

Natürlich gehen für andere Applikationen auch höhere PWM-Frequenzen, je 
nachdem, was der verwendete AVR, dessen CPU-Takt und dem gewähltem Timer 
so hergibt.

Übrigens hat David W. mit seiner Fragestellung vom 30.8.2021 weder die 
Flanken noch die vollen 0-100% gefordert. Aber - wie gezeigt - lässt 
sich auch das realisieren.

von temp (Gast)


Lesenswert?

Eberhard H. schrieb:
> Übrigens hat David W. mit seiner Fragestellung vom 30.8.2021 weder die
> Flanken noch die vollen 0-100% gefordert. Aber - wie gezeigt - lässt
> sich auch das realisieren.

Doch hat er, indem er von einem 2 Phasen interleaved Converter spricht. 
Aber egal. Mit deinen anderen Ausführungen gebe ich dir prinzipiell 
recht. Allerdings solltest du erwähnen, dass das zwingend eine center 
aligned PWM voraussetzt.

von temp (Gast)


Angehängte Dateien:

Lesenswert?

Rudi D. schrieb:
> Es wäre wohl besser, wenn Sie die gewünschten Signale einfach einmal
> aufzeichnen würden, für kleine und größere Einschaltdauer und die
> Handzeichnung posten.

Im Anhang ein paar Oszibilder. Wichtig ist, dass der zeitliche Abstand 
der steigenden Flanken immer gleich ist und die High-Zeit der beiden 
Ausgänge auch gleich ist.

Hier ein Codeschnipsel für einen STM32F103Cx (Bluepill) an A8 und A9. 
Die Initialisierung der Gpios ist hier nicht drin!
1
#define PWM_ARR 20000
2
3
void InitPWM()
4
{
5
  RCC->APB2ENR|=RCC_APB2ENR_TIM1EN;  
6
  TIM1->PSC=0;
7
  TIM1->ARR=PWM_ARR;
8
  TIM1->CCER=TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC1P;
9
  TIM1->CCMR1|=    TIM_CCMR1_OC1M_0 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2
10
                 | TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_0;
11
12
  TIM1->BDTR |= TIM_BDTR_MOE;
13
  TIM1->CR1|=TIM_CR1_CEN | TIM_CR1_CMS_0;
14
}
15
16
void SetDutty(int Proz)
17
{
18
  int dt=(PWM_ARR*Proz)/100;
19
  TIM1->CCR1=dt;
20
  TIM1->CCR2=PWM_ARR-dt;
21
}
22
23
volatile int duty=0;
24
volatile int duty_soll=25;
25
int main(void)
26
{
27
  // Disable JTAG Pins
28
  AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_1;
29
30
  ClockConfig();
31
  InitPWM();
32
  while (1)
33
    {
34
    if (duty != duty_soll)
35
      {
36
      SetDutty(duty_soll);
37
      duty=duty_soll;
38
      }
39
    }   
40
}

von Rudi D. (rulixa)


Lesenswert?

temp schrieb:
> Rudi D. schrieb:
>> Es wäre wohl besser, wenn Sie die gewünschten Signale einfach einmal
>> aufzeichnen würden, für kleine und größere Einschaltdauer und die
>> Handzeichnung posten.
>
> Im Anhang ein paar Oszibilder. Wichtig ist, dass der zeitliche Abstand
> der steigenden Flanken immer gleich ist und die High-Zeit der beiden
> Ausgänge auch gleich ist.
>
Damit ist ja die Frage von Robert sogar mit Code gelöst.
Bilder entsprechen ja exakt meiner Handskizze auf einem schicken Osci.

: Bearbeitet durch User
von David W. (david_w403)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
vielen dank für die vielen Informationen, welche ich erstmal verarbeiten 
musste und muss. Einen kleinen Graphen habe ich erstellt und das 
"Problem" ist vorerst gelöst. Ich möchte mich jedoch weiter in die 
Thematik einarbeiten.
Hier mal die Daten der Ansteuerung:
Schaltfrequenz 10-100kHz
Duty 0.049 - 0.49
Frequenz und Duty sind das Resultat der "festen" (bis auf 
Feineinatellung) Einschaltzeit und der veränderlichen Totzeit.

Die Totzeit wird über ein Bedienfeld sprunghaft für Last und Leerlauf 
eingestellt. Feinjustierung erfolgt schrittweise über das Bedienfeld.

von michael_ (Gast)


Lesenswert?

Ich würde da den Oldi LM3525A o.ä. nehmen.
Geht bis 500kHz und macht auch Totzeit.

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.