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
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
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.
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?
Kann mir hier niemand behilflich sein? Ich komme so einfach nicht weiter.
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
Ich lese gerade den Artikel von dir. Kannst du mir vllt verraten, wie du auf die Tabellenwerte 255, 63 und 0 kommst
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.
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.
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?
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.