Forum: Mikrocontroller und Digitale Elektronik PWM Signale Kommutierung


von Mike (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Mir ist im Moment nicht ganz klar, wie das mit der PWM hier funktioniert 
und was ich da genau einstellen muss.
Wenn ich die PWM 100% ansehe, ist das so, dass die Signale jeweils um 
120Grad verschoben sind. (rot und grün markiert)

Eine Periode was die Steuerung eines BLDC angeht beinhaltet 6 
Kommutierungen. Die Kommutierungsperioden sind strichliert 
gekennzeichnet.

Was das angeht, hätte ich nun gesagt, dass ich bei der PWM A eine 
Periodendauer genau 6 Kommutierungsphasen entspricht.
Demnach wäre das Duty Cycle des PWM A etwa 33.33%. PWM B und C auch, nur 
sind diese um 120° verschoben.

Aber wenn ich die PWM im 2. Abschnitt ansehe -> PWM 75%
sind auf einmal viell kürzere Perioden verhanden, nämlich fast um das 
10-fache kleiner als eine Kommutierungsphase. (orange gekennzeichnet)

Ich hätte nun die Periode 1 Kommutierungsphase/2 gewählt (orange 
gekennzeichnet). Liege ich hier richtig?

Und wie kommt man genau auf 75% PWM? Und warum sind nun auf einmal die 
blau gekennzeichneten Signale nicht mehr um 120° zueinander verschoben?

Ich würde mich über eine Aufklärung sehr freuen.
Vielen Dank

von Mike (Gast)


Lesenswert?

Mike schrieb:
>
> Aber wenn ich die PWM im 2. Abschnitt ansehe -> PWM 75%
> sind auf einmal viel kürzere Perioden verhanden, nämlich fast um das
> 10-fache kleiner als eine Kommutierungsphase. (orange gekennzeichnet)
>

Ich meine hier viel kürzere Duty cycles

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


Lesenswert?

Evtl. verwirrt es dich, das wir hier die ersten Ansätze einer Modulation 
mit PWM sehen, die von der gewohnten Blockkommutierung abweicht und 
statt Rechteck eben Trapezmodulation anwendet.
Betrachtest du nur die von dir in grün markierte PWM, ist die identisch 
mit den Sektoren wie die 100% aus dem ersten Durchlauf.
Es wird nun mit den schmalen PWM Zyklen, die dem Block voreilen, ein 
Trapez aufmoduliert, bei dir in blau markiert.

Führt man das ganze konsequent weiter, endet man bei der 'echten' 
Sinusmodulation - siehe dazu z.B. die Grafiken in Application Note 
AVR447 von Microchip/Atmel.

von Mike (Gast)


Angehängte Dateien:

Lesenswert?

Matthias S. schrieb:
> Evtl. verwirrt es dich, das wir hier die ersten Ansätze einer
> Modulation
> mit PWM sehen, die von der gewohnten Blockkommutierung abweicht und
> statt Rechteck eben Trapezmodulation anwendet.
> Betrachtest du nur die von dir in grün markierte PWM, ist die identisch
> mit den Sektoren wie die 100% aus dem ersten Durchlauf.
> Es wird nun mit den schmalen PWM Zyklen, die dem Block voreilen, ein
> Trapez aufmoduliert, bei dir in blau markiert.
>
> Führt man das ganze konsequent weiter, endet man bei der 'echten'
> Sinusmodulation - siehe dazu z.B. die Grafiken in Application Note
> AVR447 von Microchip/Atmel.

Hallo

Dann kann ich aber die Trapezmodulation gar nicht alleine mit dem uC 
zustande bringen?! Wie soll ich das denn machen, ich kann ja nicht die 
ganze PWM jedes mal anpassen, was die Periode und das DutyCycle angeht.

Ich habe mir ausserdem das Schema zu dem Chip von TI angesehen, dieses 
hat PINS für PWM A, B und C und RESETA, B und C.
Irgendwie ergibt das für mich einfach keinen Sinn.
Die RESETA, B und C sind mit den PWM_AH und AL jeweils immer 
oder-verknüpft.
Da das RESET A-C low active ist, kommt dort immer ein high-Signal an. 
Dadurch wird RESETA immer LOW und immer hochohmig sein.
Die Signale wie sie in meinem ersten Post im Bild gezeigt sind werden 
mit der Or-Verknüpfung nie erreicht.
Was verstehe ich da nur nicht richtig?

von Mike (Gast)


Angehängte Dateien:

Lesenswert?

HIer ist noch das vergessene Bild.

von Mike (Gast)


Lesenswert?

Kann mir hier niemand behilflich sein?
Ich komme so einfach nicht weiter.

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


Angehängte Dateien:

Lesenswert?

Mike schrieb:
> Dann kann ich aber die Trapezmodulation gar nicht alleine mit dem uC
> zustande bringen?!
Doch. Gerade ein MC ist ja dafür prädestiniert, Wellenformen zu 
erzeugen, die mit einfachen Logikgattern nicht gemacht werden können. 
Ein möglicher Ansatz (der auch bei meinem Frequenzumrichter angewandt 
wird) ist das Abarbeiten einer Tabelle. Die Tabelle enthält Werte, die 
den 6 Sektoren entsprechen und diese werden auf die PWM Register 
geschrieben.

Mein Frequenzumrichter z.B. macht 3 sinusmodulierte PWM Signale, die um 
120° versetzt sind, um Drehstrom zu erzeugen.

Die Trapezmodulation ist etwas einfacher gestrickt. Hier brauchst du nur 
eine Tabelle mit 3 Einträgen pro Sektor, indem die PWM Werte drinstehen.
Für Sektor 1 in deinem Beispiel steht dann
255, 63, 0
wenn man mit 25% Trapezmodulation arbeitet, entsprechend den Phasen A, B 
und C.
Die Weiterschaltung der Sektoren erfolgt durch die Hallsensoren.

> Wie soll ich das denn machen, ich kann ja nicht die
> ganze PWM jedes mal anpassen, was die Periode und das DutyCycle angeht.

Vor der Ausgabe auf die PWM Register skalierst du die Werte, indem sie 
mit der gewünschten Amplitude multipliziert werden.
Schau dir das Prinzip bei meinem Umrichter mal an:
https://www.mikrocontroller.net/articles/3-Phasen_Frequenzumrichter_mit_AVR
Der Umrichter hat natürlich keine Hallsensoren, sondern wandert mit 
internem Takt über die Tabelle. Der Takt bestimmt also die 
Ausgangsfrequenz.

Übrignes hast du dich selber verwirrt, weil du dachtest, im Phasenbild 
sehen wir einen Verlauf. In Wahrheit sind es aber 2 verschiedene 
Schemata. Ich habe dir mal im zweiten Phasenschema noch die blau 
markierten Sektoren so markiert, das sie sich nahtlos aneinander reihen.

: Bearbeitet durch User
von Mike (Gast)


Lesenswert?

Ich lese gerade den Artikel von dir.
Kannst du mir vllt verraten, wie du auf die Tabellenwerte 255, 63 und 0 
kommst

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


Lesenswert?

Mike schrieb:
> 255, 63 und 0

100%, 25%, 0% im ersten Sektor. Der 2. Sektor wäre dann
100%, 0%, 25%, also 255, 0, 63.

von Mike (Gast)


Lesenswert?

Matthias S. schrieb:
> Mike schrieb:
>> 255, 63 und 0
>
> 100%, 25%, 0% im ersten Sektor. Der 2. Sektor wäre dann
> 100%, 0%, 25%, also 255, 0, 63.

Hallo Matthias

Vielen Dank für den Link von deinem Frequenzumrichter.
Ich habe das nun durchgelesen, muss aber sagen, dass ich leider nicht 
viel davon verstehe. Ich konnte auch nirgends wirklich entnehmen, warum 
ich das in meinem Fall genau Trapezmodulieren muss.
Wo kann ich denn etwas über die Trapezmodulation etwas nachlesen? Meinst 
du nicht die Rechteckmodulation. Denn bei Trapezmodulation finde ich 
stets immer etwas mit Dreieck und Trapez anstatt reines Rechteck.
Denn der im Datenblatt gezeigte Fall ist doch ein reines Rechteck.
Hier ist der Link:
http://www.ti.com/lit/ds/symlink/drv8332.pdf
Ich habe bereits einen fix fertigen Treiber und ich habe keine 
Hallsensoren im Einsatz. Das sollte der Chip alles alleine machen.

Wieso kann ich da nicht einfach 3 um 120grad verschobene PWMs anlegen 
und gut ist. Ich verstehe einfach nicht, warum ich da modulieren muss. 
Ich dachte mit diesem Chip ist der Programmieraufwand deutlich geringer 
und nun stellt sich heraus, dass ich doch noch spezielle PWMs erzeugen 
muss.

von Mike (Gast)


Lesenswert?

Mike schrieb:
> Matthias S. schrieb:
>> Mike schrieb:
>>> 255, 63 und 0
>>
>> 100%, 25%, 0% im ersten Sektor. Der 2. Sektor wäre dann
>> 100%, 0%, 25%, also 255, 0, 63.
>

Übrigens habe ich das vor mit einem STM32 zu machen. Daher stellt sich 
mir die Frage auch, warum du gerade einen Maximalwert von 255 hast und 
nicht zB 3000?

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


Lesenswert?

Mike schrieb:
> Daher stellt sich
> mir die Frage auch, warum du gerade einen Maximalwert von 255 hast

Weil ich ja einen AVR benutze. Der hat 3 Timer für die drei Phasen, aber 
zwei davon sind nur 8-Bitter.

Mike schrieb:
> Meinst
> du nicht die Rechteckmodulation.

Nein. Rechteckmodulation ist bekannter unter dem Namen Blockkommutierung 
und benutzt das Schema im linken Teil deiner Sektordarstellung.
Trapezmodulation wird dafür benutzt, um das Durchzugsmoment des Motors 
zu erhöhen, denn der Auf- und Abbau des Magnetfeldes wird zu einem 
kleinen Teil schon auf die Nachbarspulen gelegt und damit läuft der 
Motor schon mal etwas runder und nicht ruckartig von Sektor zu Sektor. 
(Blockmodulation ist ja  sozusagen ein Schrittmotor mit 6 Schritten).
Konsequent weitergedacht landet man dann bei der Sinusmodulation. Damit 
wird es möglich, einen Motor sehr ruhig und auch beliebig langsam laufen 
zu lassen. Die Geräuschentwicklung ist deutlich kleiner und so auch 
energieeffizient.

Mike schrieb:
> Übrigens habe ich das vor mit einem STM32 zu machen.

Es hindert dich niemand, mehr Auflösung zu benutzen, die praktischen 
Vorteile halten sich aber in Grenzen, denn die Auflösung spielt nur eine 
untergeordnete Rolle. Ich habe sinusmodulierte BLDC mit AVR, XMega und 
STM32 gebaut, aber praktisch ist es kein grosser Unterschied.
Der STM32 hat den Advanced Timer mit 4 CC Registern, die sich zur 
Erzeugung der PWM anbieten und der XMega das AWEX Modul, das sich 
ebensogut eignet. Nur der kleine AVR8 muss alles zu Fuss erledigen :-P

: Bearbeitet durch User
von Mike (Gast)


Lesenswert?

Matthias S. schrieb:
> Mike schrieb:
>> Daher stellt sich
>> mir die Frage auch, warum du gerade einen Maximalwert von 255 hast
>
> Weil ich ja einen AVR benutze. Der hat 3 Timer für die drei Phasen, aber
> zwei davon sind nur 8-Bitter.

Achso, danke.

>
> Mike schrieb:
>> Meinst
>> du nicht die Rechteckmodulation.
>
> Nein. Rechteckmodulation ist bekannter unter dem Namen Blockkommutierung
> und benutzt das Schema im linken Teil deiner Sektordarstellung.
> Trapezmodulation wird dafür benutzt, um das Durchzugsmoment des Motors
> zu erhöhen, denn der Auf- und Abbau des Magnetfeldes wird zu einem
> kleinen Teil schon auf die Nachbarspulen gelegt und damit läuft der
> Motor schon mal etwas runder und nicht ruckartig von Sektor zu Sektor.
> (Blockmodulation ist ja  sozusagen ein Schrittmotor mit 6 Schritten).
> Konsequent weitergedacht landet man dann bei der Sinusmodulation. Damit
> wird es möglich, einen Motor sehr ruhig und auch beliebig langsam laufen
> zu lassen. Die Geräuschentwicklung ist deutlich kleiner und so auch
> energieeffizient.

Ok, das habe ich verstanden. Ich habe nämlich vor ein wenig Erfahrung 
damit zu bekommen und zu lernen wie man das richtig macht. Das geht dann 
später in die Richtung wie du es mit dem Frequenzumrichter gemacht hast.
So wie ich dich verstehe, spricht also nichts dagegeben, wenn ich 
einfach einmal 3 120Grad versetzte PWMs an die Pins des Controllers 
anlege und sehe, was passiert. Danach würde ich dann den nächsten 
Schritt versuchen, das Ganze so zu optimieren, indem ich die modulierten 
Signale verwende.

>
> Mike schrieb:
>> Übrigens habe ich das vor mit einem STM32 zu machen.
>
> Es hindert dich niemand, mehr Auflösung zu benutzen, die praktischen
> Vorteile halten sich aber in Grenzen, denn die Auflösung spielt nur eine
> untergeordnete Rolle. Ich habe sinusmodulierte BLDC mit AVR, XMega und
> STM32 gebaut, aber praktisch ist es kein grosser Unterschied.
> Der STM32 hat den Advanced Timer mit 4 CC Registern, die sich zur
> Erzeugung der PWM anbieten und der XMega das AWEX Modul, das sich
> ebensogut eignet. Nur der kleine AVR8 muss alles zu Fuss erledigen :-P

Verstehe, danke.

Kannst du mir vllt. noch einen Gefallen tun und bestätigen, dass dies 
auf S20 im Datenblatt ein Unfug ist mit den RESET A,B,C Signalen.
Die Oder-Verknüpfung der komplementären PWM Signale PWMAH oder PWMAL 
gibt immer 1, weil immer eines der Signale zur gleichen Zeit high sind. 
Somit ist das ResetSignal stets low und hochohmig.
Das ist nur für mein Verständnis, ob ich etwas falsch verstehe oder ob 
die da etwas verbockt haben und mich in die Irre führen. Vllt. übersehe 
ich ja etwas.

Vielen Dank

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


Lesenswert?

Mike schrieb:
> Die Oder-Verknüpfung der komplementären PWM Signale PWMAH oder PWMAL

Nein. Du kannst nicht exakt zur gleichen Zeit Lowside und Highside 
umschalten, weil es dann einen Kurzschluss auf der Betriebsspannung 
geben würde. Die sehr vereinfachte Schaltung in deinem Beitrag
Beitrag "Re: PWM Signale Kommutierung"

vernachlässigt die Umschaltzeit der Leistungshalbleiter. Es ist nötig, 
zwischen z.B. dem Abschalten der Highside und dem Einschalten der 
Lowside eine Totzeit einzufügen - und auch beim umgekehrten Fall.
Das ist übrigens einer der Gründe, warum der MC in meinem FU Projekt 
alle 6 Signale im MC erzeugt und nicht etwa mit externer Hardware. Er 
verwendet einen Teil seiner Rechenzeit, um zwischen die komplementären 
Signale eine Totzeit einzufügen, die bei diesem FU einstellbar ist.

Zur weiteren Lektüre bzgl. Motoransteuerung ist z.B. AppNote AVR447 und 
auch AVR444 von Microchip/Atmel empfehlenswert.

: Bearbeitet durch User
von Mike (Gast)


Lesenswert?

Matthias S. schrieb:
> Mike schrieb:
>> Die Oder-Verknüpfung der komplementären PWM Signale PWMAH oder PWMAL

>
> vernachlässigt die Umschaltzeit der Leistungshalbleiter. Es ist nötig,
> zwischen z.B. dem Abschalten der Highside und dem Einschalten der
> Lowside eine Totzeit einzufügen - und auch beim umgekehrten Fall.
> Das ist übrigens einer der Gründe, warum der MC in meinem FU Projekt
> alle 6 Signale im MC erzeugt und nicht etwa mit externer Hardware. Er
> verwendet einen Teil seiner Rechenzeit, um zwischen die komplementären
> Signale eine Totzeit einzufügen, die bei diesem FU einstellbar ist.

Hallo Matthias
Danke für den Hinweis, aber daran hätte ich schon gedacht. Ausserdem 
steht es bei deinem Projekt ja auch noch explizit drin.
Ich kann ja bei den 2 PWMs eine dead-time hinzufügen.

>
> Zur weiteren Lektüre bzgl. Motoransteuerung ist z.B. AppNote AVR447 und
> auch AVR444 von Microchip/Atmel empfehlenswert.

werde ich machen, danke
ich versuche das jetzt mal zu implementieren und melde mich wieder.

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.