Forum: Mikrocontroller und Digitale Elektronik Feldorientierte Regelung BLDC


von Peter T. (Gast)


Lesenswert?

Hallo,
ich möchte mit einem STM32 einen BLDC regeln. Genauer gesagt soll eine 
feldorientierte Regelung zum Einsatz kommen.
Jetzt die Frage, für die Clarke-Transformation benötige ich ja die 
Ströme zweier Phasen Ia und Ib. Da es sehr aufwändig ist, diese zu 
messen, möchte ich dies nicht tun. Stattdessen wird an jedem lowside 
MOSFET der Strom gemessen (mittels Shunt und Differenzverstärker). So 
liessen sich die Phasenströme ja auch berechnen, oder?
zudem habe ich ein Tiefpassfilter bei der Strommessung noch vorgesehen, 
damit mein ADC kein PWM sieht ;)
geht das so?

von Al3ko -. (al3ko)


Lesenswert?

Peter T. schrieb:
> Hallo,
> ich möchte mit einem STM32 einen BLDC regeln. Genauer gesagt soll eine
> feldorientierte Regelung zum Einsatz kommen.
> Jetzt die Frage, für die Clarke-Transformation benötige ich ja die
> Ströme zweier Phasen Ia und Ib. Da es sehr aufwändig ist, diese zu
> messen, möchte ich dies nicht tun. Stattdessen wird an jedem lowside
> MOSFET der Strom gemessen (mittels Shunt und Differenzverstärker). So
> liessen sich die Phasenströme ja auch berechnen, oder?
> zudem habe ich ein Tiefpassfilter bei der Strommessung noch vorgesehen,
> damit mein ADC kein PWM sieht ;)
> geht das so?

Blöde Frage:
Warum willst du für eine DC Maschine feldorientierte Regelung anwenden? 
Klingt in meinen Ohren komisch...

von Peter T. (Gast)


Lesenswert?

Es handelt sich um eine Drehfeldmaschine. So mit 3 Phasen und so... :O

von Tecnologic (Gast)


Lesenswert?

Moin Peter,

so wie du beschrieben hast misst du doch den Strom in der jeweiligen 
Phase. Eben wenn der LowSide geschaltet ist. Wird schon seit Jahr und 
Tag so gemacht. über leg dir einfach welche Ströme fließen wenn du alle 
LowSides einschaltest und durch die Spulen noch ein Strom Vektor fließt.

MfG

Tec

von Erich (Gast)


Lesenswert?

GOOGLE fragen:
"vector control" Clark Park  transformation current lowside

http://de.wikipedia.org/wiki/Vektorregelung

von Peter T. (Gast)


Lesenswert?

Hey,

danke für deinen Beitrag, Tec. Muss ich meinen ADC zwingend mit der PWM 
synchronisieren, oder kann ich einfach irgendwann messen? ich habe ja 
extra noch ein RC-Glied vorgesehen, damit die PWM rausgefiltert wird. 
Die Grenzfrequenz des RC habe ich 10x tiefer gelegt als die 
PWM-Frequenz. Könnte es so gehen?

Andere Frage: am Motor habe ich einen Drehgeber mit 1024 Impulsen pro 
Umdrehung. Mit diesem sollte es schon möglich sein, den Motor auf ca. so 
200 U/min zu regeln, oder?

von Tecnologic (Gast)


Lesenswert?

Moin,

der Drehgeber macht es super einfach den Motor zu regeln, auch 
Positionsregelung ist damit nicht das Problem. Ich persönlich würde den 
Tiefpass eleminieren wollen weil du dadurch eine Phasenverschiebung beim 
Strom hast die du Strom abhängig kompensieren musst. Die PWM Einheit 
deines µC/DSP sollte schon den ADC triggern, das können aber eigendlich 
alle die Ansatzweise für Motioncontrol gedacht sind.

MfG

Tec

von al3ko (Gast)


Lesenswert?

Peter T. schrieb:
> Es handelt sich um eine Drehfeldmaschine. So mit 3 Phasen und so... :O

Ups, da habe ich mich tatsächlich vom Namen verwirren lassen. Sorry. :D

von Peter T. (Gast)


Lesenswert?

Hi Tec,

danke. Den ADC kann ich natürlich mit der PWM synchronisieren. Jetzt 
stellt sich nur noch eine Frage. Ich muss ja die aktuelle Rotorposition 
kennen. Jetzt habe ich aber einen inkrementalgeber - wenn ich den Motor 
starten will, dann steht ja der Rotor irgendwie. Wie finde ich heraus, 
wo 0° liegt?

Dann die PWM - diese muss "center aligned" sein, oder ist das gar nicht 
so wichtig? Mein Controller kann beider (edge und center aligned).
Für die FOC benötige ich ja zwei Phasenströme; nun gibt es ja aber 
Momente, wo nur ein lowside FET eingeschaltet ist, was macht man da?

irgendwie fehlt mir noch ein wenig der Link, wie man das praktisch 
implementiert, aber ich hab das Gefühl kurz davor zu sein ;D

von gonzo (Gast)


Lesenswert?

Hi Peter,

bei der Strommessung würde ich die Filter nicht so niederfrequent 
auslegen da Du dir sonst die Stromsignale wegfilterst. Du möchtest ja 
den realen Zeitwert der Phasenströme messen.
Die PWM sollte man center-aligned einstellen. Der ADC muss dann so 
eingestellt werden dass er genau am Umkehrpunkt des Timers getriggert 
wird (entweder oben oder unten). Der Trigger muss immer dann erfolgen 
wenn alle Low-Side Schalter eingeschaltet sind, d.h. es wird der 
Freilaufstrom des Motors gemessen. => Gemessen wird damit automatisch in 
der Mitte der Strompulse also möglichst weit weg von den Schaltflanken 
=> Die Störungen sind dort am geringsten => das Tiefpassfilter kann 
schnell ausgelegt werden.
Wenn Du für die Positionserkennung nur einen Inkrementalgeber hast must 
Du vor Motoranlauf eine Positionierungsphase durchführen, d.h. Du gibts 
ein statisches Pulsmuster aus und wartest bis der Motor "eingerastet" 
ist. Dann weißt Du wo der Rotor steht und kannst deine Position von dort 
an mit dem Inkrementalgeber bestimmen.

Das folgende Skript ist vielleicht ganz interessant für Dich:
http://wwwlea.uni-paderborn.de/fileadmin/Elektrotechnik/AG-LEA/lehre/geregelte-drehstrom/vorlesung/Geregelte_Drehstromantriebe.pdf

bzw.

http://wwwlea.uni-paderborn.de/lehre.html

Viele Grüße

von Tecnologic (Gast)


Lesenswert?

Moin Zusammen

Peter Gonzo hat es auf den punkt gebracht was ich meinte mit dem Strom 
messen. Du musst im NullVektor 000 also alle LOW Fet on messen. Der 
Strom ist für eine PWM Periode ja grob gesagt Konstant.

Was die PWM Grundsätzlich angeht hier gibts n Artikel zum 
Frequenzumrichter mit Raumzeigermodulation, dort meine ich war die SVPWM 
mit minimalen Schaltverlusten erklärt. Dafür brauchst du 3 Centeraligned 
und am besten syncronisierte PWMs. Dann siehst du auch was ich mit dem 
Nullvektor 000 meine.

MfG

Tec

von Peter T. (Gast)


Lesenswert?

Hallo zusammen,

so ich habe mich nochmals ne Weile hingesetzt und diese ganzen 
Transformationen studiert. Jetzt ist mir immerhin klar, was ich wie 
rechnen muss und auf meinem Mikrocontroller habe ich es bereits 
implementiert. Kann es sein, dass die sache gar nicht so kompliziert 
ist, wie man auf den ersten Blick meinen würde?

Woran ich jetzt gerade herum doktere, ist die Frage zur PWM. Und zwar 
habe ich die inverse Clarketransformation gemäss Wikipedia 
implementiert, sodass ich ia ib und ic erhalte. Im Artikel zur 
Raumzeigermodulation wird leider nicht erklärte, wie man daraus nun den 
Duty bestimmt; zwar sind mir die Prinzipiellen Kurvenverläufe klar, 
nicht aber wie ich von diesen drei Grössen auf die PWM komme. Ich 
vermute allerdings, dass man die Zeiten für Anfangs- und Endvektor durch 
Projektion auf die 6 "Achsen" dieses "SVM Star" erhält, richtig?
oder kann ich ia ib und ic direkt meinem PWM Modul als Duty übergeben?

Gruss

von gonzo (Gast)


Lesenswert?

Moin,
die SVM Zeiger geben Dir die verschiedenen Pulsmuster an die deine PWM 
Stufe erzeugen kann. Legst Du nur ein Pulsmuster für die Dauer deines 
gesamten PWM Zyklus an, so gibst Du also genau einen Zeiger aus. D.h. 
die Länge der SVM Zeiger gibt 100% Duty Cycle an.
Liegt dein Ausgangszeiger zwischen zwei SVM Zeigern, so setzt Du diesen 
mit einer Vektoraddition aus den beiden angrenzenden SVM Zeigern 
zusammen. Die Gleichungen lassen sich über trigonometrische Funktionen 
ableiten.
Ein Zeiger setzt sich also immer aus der Addition zweier SVM Zeiger 
zusammen. Dazu kommen dann noch ein oder zwei Nullzeiger (0,0,0) oder 
(1,1,1) über die die Spannungshöhe eingestellt werden kann.
Die maximale Zeigerlänge der Ausgangsspannung ist cos(30°) was sich aus 
der Kreisbegrenzung ergibt.
Die inverse Clarke brauchst Du nicht zu berechnen. Du kannst die 
Einzelzeiger auch direkt aus den alpha/beta-Komponenten berechnen.

Gruß,
Ralf

von Peter T. (Gast)


Lesenswert?

Hi Ralf,

ja das habe ich schon verstanden. Nur wie ich direkt aus alpha und beta 
auf die duty cycles komme, finde ich partout nicht heraus. Zwar ist mir 
schon klar, dass man unter berücksichtigung trigonometrischer 
Beziehungen das irgendwie berechnen kann; aber dann muss ich für jeden 
Raumzeiger wieder das ganze Gedöns mit sin und cos rechnen? das kann 
doch nicht sein?

Ich frage mich gerade ob mein STM32F4 genug Dampf hat, dass er das 
packt, sind ja 2 Motoren. Und nebenher soll er ja auch noch was anderes 
machen... bisher rechne ich alles in float, da ich eine FPU habe. Für 
die trigonometrischen Funktionen habe ich eine Tabelle.

von Rolf Magnus (Gast)


Lesenswert?

al3ko schrieb:
> Peter T. schrieb:
>> Es handelt sich um eine Drehfeldmaschine. So mit 3 Phasen und so... :O
>
> Ups, da habe ich mich tatsächlich vom Namen verwirren lassen. Sorry. :D

Ist ja eigentlich auch ziemlicher Unsinn, daß man einen synchronen 
Drehstrommotor als "bürstenlosen Gleichstrommotor" bezeichnet.

von Tecnologic (Gast)


Lesenswert?

Moin Zusammen,

http://www.mikrocontroller.net/articles/Frequenzumrichter_mit_Raumzeigermodulation 
dort unter Raumzeigermodulation ist es ganz gut erkärt wie man eine 
SVPWM errechnet.

Wenn du den Code hier mal reinstellen würdest würde das sicher viele 
Interessieren. Würde gern mal n M4 mit Float mit dem M3 mit 32Bit 
Berechnung vergleichen.

MfG

Tec

von gonzo (Gast)


Lesenswert?

Wenn Du aus den alpha/beta Komponenten die Einschaltdauern berechenest 
brauchst Du kein sin und cos. Schau dir mal das an:
Vector Control of Three-Phase AC Machines: System Development in the 
Practice
 von Nguyen Phung Quang,Jörg-Andreas Dittrich


Gibts auch bei google books zur einsicht. Zumindest die wichtigen 
Stellen sind verfügbar (S. 25)
http://books.google.de/books?id=jRlK-Uok-iMC&printsec=frontcover&dq=vector+control+of+ac+machines&hl=de&sa=X&ei=eSavUI2oBMjitQaokoDoBQ&ved=0CDYQ6AEwAQ#v=onepage&q=vector%20control%20of%20ac%20machines&f=false

Zwei Motoren parallel funktionieren mit dem Controller. Die Auslastung 
hängt natürlich von deinen Frequenzen ab. Habe ich schon gemacht, 
allerdings mit fixed Point Mathe (@72MHz => Du hast noch Luft).

Gruß,
Ralf

von Tecnologic (Gast)


Angehängte Dateien:

Lesenswert?

Noch mal vllt in anderen Worten das es klarer wird.

Beitrag "SVPWM Ansteuerung eines BLDC" weit unten

Du hast Va und Vb daraus berechnetst du Winkel und Amplitude der 
Spannung.

Anhand des Winkels bestimmst du den Sektor in dem der Zeiger liegt.

Beispiel: Winkel 30° und Amplitude 50% ergibt. Sektor 1 (siehe Bild)

30° liegt in der Mitte des Sektors. -> 50% Vektor2 110 und 50% Vektor1 
100
Oder mathematisch sin(30°) Vektor 1 100 und sin(60° - 30°) Vektor2 110 
(60° sind die Sektoren auseinander).

Zusammen gefast bedeutet das um die Amplitude auf 50% zu bringen musst 
du 50% Nullvektor schalten. Am besten 25% 111 und 25% 000 bzw. um mehr 
Messzeit zuhaben kannst auch mehr 000 geben aber das ist Optimierung.

Weiter im Text. außerdem weißt du wie oben beschrieben 50% von deiner 
Leistungstragenden Zeit ist Vektor1 100 und die anderen 50% sind Vektor2 
110.

also 25% 111 + 25% 110 + 25% 100 + 25% 000 ergibt. eine Ton für
Va von 75% für Vb von 50% und für Vc 25%. Das haust du in die Compare 
Register der syncronisierten centerd PWM und den Rest macht die HW für 
dich. So hast du minimale Schaltverluste zumindest für n SVPWM. Andere 
Modulationen lass ich mal außen vor.

Ich hoffe du kannst das Bsp nach vollziehen.

MfG

Tec

von Peter T. (Gast)


Lesenswert?

Hallo Tec,

ja meinen Code kann ich hier gerne rein stellen. Sobald er fertig ist. 
Es ist wirklich keine Hexerei, von den in Matrizenform gegebenen 
Berechnungen der Clarke- und Parktrafo überzugehen auf "normale" 
Berechnungen die man mit dem M4 durchführen kann. Und mit der FPU ist 
das ganze wirklich sehr performant. Werde nachher mit dem Oszi ein paar 
Messungen vornehmen und die hier posten, damit du einen Vergleich hast. 
Den Code gebe ich dann auch her, möchte erst aber die SVPWM noch fertig 
implementieren und testen.

Einziges Problem was ich noch habe ist, dass ich mit meiner jetzigen 
Hardware die Ströme im Motor nicht messen kann. Ich habe eine fertige 
Vollbrücke genommen, die ich vor Jahren mal gebaut habe (war für 5kW, 
etwas überdimensioniert für meinen 12V Motor aber egal). Dort habe ich 
allerdings keine Shunts drin zur Strommessung, muss mir da noch was 
überlegen ;-)

@Ralf,
kannst du mir sagen, wie du den ADC getriggert hast? Mein M4 (Stm32F407) 
hat mehrere ADCs, aber ein ADC lässt sich nur von einem Timer triggern. 
Und ich muss ja aber auf 2 verschiedene Trigger triggern, für jeden 
Motor einen.

Ah ja, noch was fällt mir ein -- wenn ich den lowside Strom messe, kann 
der nicht auch negativ sein? Es gibt ja immer einen Zeitpunkt, wo der 
Nullvektor geschaltet wird. Dann kann ich messen, das ist jetzt klar. 
Aber zu diesem Zeitpunkt wird ja in eine oder zwei Phasen Strom 
hineinfliessen (Spannungsabfall über dem Lowside Shunt ist dann negativ) 
und gleichzeitig wird aus zwei oder einer Phase Strom herausfliessen 
(Spannungsabfall über dem lowside Shunt ist dann Positiv). Oder täusche 
ich mich?
Diese Messerei ist mir also noch gänzlich unklar. Aber ich denke ich 
werde mir dein erwähntes Buch kaufen, ist recht interessant :-)

von Peter T. (Gast)


Lesenswert?

Hallo,

also falls es jemanden interessiert, ich habe mit dem Cortex M4F ein 
paar Tests gemacht. Mit einer Lookuptable für Sinus und Cosinus kann ich 
die Clarke und Park Transformation und wieder zurück innerhalb von 1.3 
us erledigen, alles mit Floatingpoint Berechnungen. Sollte schnell genug 
sein, oder? ;-)

von Ert (Gast)


Lesenswert?

Interessanter Thread. Ich bin grade dabei eine Platine für PMSM 
aufzubauen, und die Steuerung steht mir auch noch ins Haus.

Peter T. schrieb:
> Jetzt die Frage, für die Clarke-Transformation benötige ich ja die
> Ströme zweier Phasen Ia und Ib. Da es sehr aufwändig ist, diese zu
> messen, möchte ich dies nicht tun
Warum es gibt genug bidirektionale Strommessverstärker. Kosten nicht die 
Welt. AD8210 oder LT1999 uvw

gonzo schrieb:
> Wenn Du aus den alpha/beta Komponenten die Einschaltdauern berechenest
> brauchst Du kein sin und cos. Schau dir mal das an:
> Vector Control of Three-Phase AC Machines: System Development in the
> Practice
>  von Nguyen Phung Quang,Jörg-Andreas Dittrich
gibt es auch auf Deutsch: Praxis der feldorientierten 
Drehstromantriebsregelung hab ich grad neben mir liegen :-)

STM hat auch eine sehr gute application note (UM1052). An sich hat jeder 
IC Hersteller eine.

Wenn mein Layout steht poste ich es mal. (60V,70A)

Gruß Ert

von gonzo (Gast)


Lesenswert?

Die Messung der Ströme mittels Shunts macht man über OpAmps. Der 
Arbeitspunkt der OpAmps wird ausgangsseitig so eingestellt, dass bei 0 
Strom die Ausgangsspannung in der Mitte des Aussteuerbereichs liegt. 
Dann kannst Du positive und negative Ströme messen. Den Offset musst Du 
dann vor der Verarbeitung abziehen.
Die Triggerung des ADC habe ich vom Motortimer aus gemacht (TIM8 oder 
TIM1). D.h. ich habe pro Motor jew. einen Timer. Immer wenn alle 
Lowsides eingeschaltet sind sendet der jew. Motortimer ein TRGO Signal 
an den ADC. Ich habe dann immer zwei ADCs parallel laufen, d.h. 
Master/Slave. D.h. z.B. ADC1 ist Master und ADC2 ist der Slave. Damit 
kann ich dann zwei Ströme gleichzeitig messen. Heißt glaube ich combined 
regular simultaneous mode oder so. Der injected mode ist ggf. auch 
interessant wenn Du noch was anderes abtasten willst.
Ggf. kannst Du auch die Ströme seqenziell messen. Das musst Du dann bei 
den Einschaltdauern berücksichtigen. Die ADCs sind ja relativ schnell. 
Ob das geht hängt von Deiner erforderlichen Reglerperformance ab.
Gruß,
Ralf

von Peter T. (Gast)


Lesenswert?

Hallo Ert,

danke für den Tipp mit der Deutschen Variante. Diese werde ich mir 
kaufen, das Thema interessiert mich.



Ralf,

kannst du mir mal schematisch zeigen, wie du das mit dem Arbeitspunkt 
des OpAmp machst? ich bin analog nicht so fit :-)
ausserdem möchte ich für die Strommessung was möglichst günstiges und 
einfaches, ich möchte darüber nicht eine Doktorarbeit schreiben ;-) Hast 
einen Tip für mich?

Das mit dem ADC Trigger schaue ich mir auch nochmal an, leider verstehe 
ich das so aus dem Stegreif nicht. Im Prinzip muss ich aber 3 Sachen 
messen:

- Die drei Phasenströme
- Die DC-Bus Spannung
- Den DC-Bus Strom

wobei die letzten beiden eher optional und als "nice to have" zu 
verstehen sind.

von gonzo (Gast)


Lesenswert?

Moin,
bzgl. der Strommessung kannst Du bei ST kupfern :-)

Such auf der ST Seite einfach mal nach

STEVAL-IHM021V2

Zu diesem Board gibt es dort auch einen Schaltplan.

Im Prinzip ist die Schaltung eine normale OP Grundschaltung. (nicht 
invertierender Verstärker mit Spannungsteiler zur Offset Einstellung)

Gruß,
Ralf

von Ert (Gast)


Lesenswert?

der AD8210 ist doch Top! einfach mit einem Spannungsteiler 2,5V dran und 
fertig ist es. Einfacher gehts kaum... Der LT1999 hat das sogar schon 
und kostet ca 5Euro das Stk.

Shunts gibts doch auch recht günstig. Ansich brauchst du nur zwei 
Phasenströme, da einer immer identisch sein sollte.

MfG Ert

von Peter T. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

danke für die Tipps bezüglich der Strommessung. Ich werde mir mal diese 
ICs anschauen.

Zur Raumzeigermodulation noch was - siehe angehängtes Excelsheet. Ich 
habe mir für jeden Sektor überlegt, wie ein Vektor aus den Komponenten 
alpha und beta auf die Achsen dieses "SVPWM Star" projiziert wird. 
Daraus ergeben sich für jeden Sektor dann 2 Gleichungen, mit denen man 
t1 und t2 berechnen kann, also die Komponenten für den Anfangs- und den 
Endvektor. Dann habe ich noch gerechnet t3 = 1 - (t1 + t2), dies ist die 
Zeit für den Nullvektor.

Da mein Drehgeber eine Auflösung von 1024 Schritten hat, habe ich dann 
das ganze so ausgelegt, dass ich mit Inkrementen arbeiten kann und mir 
eine Tabelle mit 1024 Werten gebaut, wo ich dann Sinus und Cosinus raus 
lesen kann. So, und was ihr im angehängten Sheet nun seht ist folgendes:

Ich habe mir mal einen virtuellen Zeiger aus alpha und beta Komponenten 
gebastelt, der um den Ursprung rotiert. Also alpha = cos phi und beta = 
sin phi. Aus alpha und beta habe ich dann t1, t2 und t3 in Abhängigkeit 
des Sektors berechnet. Dann habe ich die duty cycles berechnet. Je nach 
Sektor muss man verschiedene Kombinationen von t1, t2 und t3 addieren. 
Immer eine Phase hat einen konstanten duty cycle von 1, die anderen 
beiden Phasen sind verschieden von 1. So entstehen die berühmten 
"Popokurven" (das Wort habe ich hier irgendwo gelesen :-) Hat diese 
Kurvenform keinen offiziellen Namen?)

Die Differenz zwischen den Popokurven ist sinusförmig. Mit der 
Referenzspannung Vref, die zwischen 0 und 0.866 betragen kann 
(sqrt(3)/2) kann man die Amplitude der SVPWM verändern.

Was meint ihr, kann das so stimmen? sieht nicht so übel aus oder?

Was mir noch aufgefallen ist - man kann das entweder so rechnen, wie ich 
es in dem angehängten Sheet mache, oder man kann t3, also die Zeit für 
den Nullvektor, noch halbieren, dann ergeben sich symmetrische 
Popokurven, die Differenz ist aber noch immer ein Sinus. Was ist also 
der Unterschied?


Gruss

von gonzo (Gast)


Lesenswert?

Über die Platzierung der Nullvektoren kannst Du die Schaltverluste 
deiner Ansteuerung beeinflussen, d.h. Du kannst es schaffen, dass über 
einen ausgegebenen Sinus eine Halbrücke immer nur über 240° mittels PWM 
moduliert wird. Die anderen 120° werden die Schalter statisch 
angesteuert.
Zum anderen kann man über die Nullvektoren auch das Strommessfenster 
entsprechend beeinflussen.

Ansonsten sehen Deine Kurven auf den ersten Blick sinnvoll aus (ohne in 
die Gleichungen geschaut zu haben :-))

Gruß,
Ralf

von Peter T. (Gast)


Lesenswert?

Perfekt, danke Ralf.

So wie ich es im Moment realisiert habe, ist ein Schalter immer über 
120° statisch angesteuert, während die anderen beiden Schalter 
"wackeln".
Die Frage ist jetzt noch, wie ich auf mein VREF komme. Was ich im Moment 
ja mache ist, einfach die gegebenen Vektoren alpha und beta auf die 6 
Achsen zu projizieren. Muss ich da noch irgendwie den Betrag nehmen?

von gonzo (Gast)


Lesenswert?

Hoffe ich habe deine Frage richtig verstanden...

Wenn Du die Projektionen gemacht hast, hast Du im Prinzip auch schon die 
Schaltzeiten. Die Länge eines Sternvektors entspricht 100% Duty Cycle. 
Deine Projektion entspricht nun einem bestimmten Anteil von diesen 100%. 
Die Umrechnung ist also einfach per Dreisatz möglich. Die 100% 
entsprechen auf deinem Controller dem Spitzenwert des PWM Timers wenn er 
im centeraligned Mode läuft.

Gruß

von Thomas S. (mustermann_max)


Lesenswert?

Hallo Zusammen,

zurzeit versuche ich das gleiche Projekt zu realisieren wie Peter!!
Diesbezüglich sind ein paar Fragen aufgekommen...
Bei der synchronisation der ADC'S mit den PWM-Modulen habe ich vorerst 
eine Frequenz von 1KHz eingestellt. Bei der ADC-Einheit besteht jedoch 
noch die Notwendigkeit die Sample Time zu setzen,die geringste 
einstellung beträgt 3 Cycles. Soweit ich weiß wird dadurch 3-mal 
abgetastet um den Mittelwert zu bilden.... somit ist die Messung der 
Phasenströme ungenau oder sehe ich das falsch? Falls nicht wie könnte 
man das Problem lösen?

@Peter: Besteht die Möglichkeit deinen bisherigen Stand hochzuladen, 
bzw. das Zeitverhalten deiner Regelung näher zu beschreiben?

Gruß
Thomas

von Alex Z. (Firma: THm Friedberg student) (alex_student)


Lesenswert?

hallo,
ich ein problem mit mit der FOC.

ich schaffe die "Positionierung mit encoder" nicht..
weiss zwar was zu tun ist, aber es in simulink hinzukriegen fällt mir 
schwer.
weiss einer, wie man drauf kommt?

Arbeite mit einem stm32f4, boostxl DRV8301, und einen bldc 8 poligen 
Motor.
das ganze in simulink

von Stm M. (stmfresser)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche auch mit einem STM32 einen BLDC Motor von einem Scooter 
regeln und zwar habe ich einen Kalman Filter gebaut der zumindest in der 
Simulation den Rotor Winkel gut schätzt.

Zu meinem Motor, es hat:
 - 15 Polpaare,
 - 3 Hall Sensoren, 90 Inkremente pro Umdrehung, mit den der Kalman 
Filter gefüttert wird,
 - Ib, Ic, I_gesamt messbar.

Nun meine Frage:

Entspricht der von mir geschätzte Winkel dem Winkel auf dem Bild 
SVPWM.png ?
Mich verwirrt die Darstellung der einzelnen Sektoren. Der Motor hat ja 
15 Polpaare, pro Rotor Umdrehung werden 15 mal die Hallzustände 462315 
wiederholt.

von Stm M. (stmfresser)


Lesenswert?

Ich glaube ich müsste den elektrischen Winkel des Rotors schätzen, der 
in meinem Fall 15 mal pro mechanische Umdrehung der Motorwelle dreht.

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.