PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rotorposition bei BLDC Motoren im Stillstand bestimmen



slaughter
15.05.2008, 15:20
Hallo,

folgende Frage richtet sich eher an Motorspezialisten:

ich bin gerade dabei, die Rotorposition im Stillstand eines BLDC Motors
zu bestimmen. Dieser ist 3 phasig im Stern gewickelt und besitzt eingebettetebOberflächenmagneten auf dem Rotor.
Dabei greife ich auf die Induktivitäten der einzelnen Phasen zurück,
welche ihren absoluten Wert je nach Rotorstellung verändern. (Zeigt die
Flussachse der Rotors auch eine Wicklung, so wird die Induktivität
kleiner. siehe def. Zylinderspule: L=N^2/Rm. Rm ist hier der magnetische
Widerstand)

Diesen Effekt kann auch sehr gut rausmessen, allerdings habe ich
das Problem, dass ich eben nicht sagen kann, ob der Nord-, oder der
Südpol gerade auf den Pol schaut und erhalte somit eine Unbestimmtheit
der Position um (elektrisch) 180°.

Ich wäre über Hilfe sehr dankbar, auch über andere Anregungen, wie man
sensorlos im Stillstand auf die Position des Rotors schließen kann.

Grüße
Robert

SprinterSB
15.05.2008, 16:34
Such mal nach VirtuHall

Es wird der Motot selber als Sensor verwendet, GMR/Hall-Sensoren entfallen. Folgendes Dokument ist zwar nur ne Präsentation, aber Nord-Süd-Problematik wird angeschnitten.

http://www.elektroniknet.de/fileadmin/freigaben/termine/kfz2007/praesentationen/Strothmann.pdf

Dazu gibt's auch Hardware von http://www.elmos.de

slaughter
15.05.2008, 18:11
Schon mal vielen Dank für den Link. Hier ist die Problematik ja schön anschaulich dargestellt.
Leider ist aber nicht ersichtlich, wie man nun an das Problem rangehen soll.
Auch bei enderer Recherche habe ich bisher keine eindeutigen Lösungen zu dieser 180° Problematik gefunden.
Ein Verfahren, welches allerdichgs für mich unverständlich ist lautet:

"
Dieses Verfahren nutzt die Änderung des Sättigungsgrads der Maschine bei steigendem Statorstrom, um die absolute Rotorposition direkt zu bestimmen. Dafür werden die mit einem Pulswechselrichter erzeugten
sechs möglichen Spannungsvektoren jeweils für eine bestimmte kurze Zeit der Maschine aufgeschaltet. Bei jedem Spannungsimpuls wird der Endwert des hervorgerufenen Stromes in jeder Phase erfasst. Die Differenz zwischen den Stromwerten für den positiven bzw. den negativen Spannungsimpuls jeder Phase wird gebildet. Diese Differenz
ist maximal für den Fall, dass die Rotorflussachse auf die magnetische Achse der entsprechenden Phasenwicklung ausgerichtet ist. Ob es sich um ein positives oder ein negatives Maximum handelt hängt von der relativen Polarität der Achsen ab.
Haben die beiden Achsen gleiche bzw. inverse Polarität, ergibt sich ein positives bzw. negatives Maximum. Wenn die Achsen senkrecht zueinander sind, ist die Differenz gleich Null.
So weist die Differenz jeder Phase in Abhängigkeit von der Rotorposition einen um 120° versetzen näherungsweise sinusförmigen Verlauf auf.
Die drei Differenzen werden in einem komplexen Differenzvektor kombiniert, dessen Argument direkt die absolute Rotorlage liefert
"

Grüße

Joachim

avion23
15.05.2008, 19:03
Hallo slaughter,
kannst du nicht über die Zeit als zusätzlichen parameter gehen? Du weißt ja die Abfolge und kannst sozusagen in Software die Schritte nachverfolgen.

SprinterSB
15.05.2008, 19:30
Wesentlich ist das Vorhandensein einer Hysterese, d.h. man betreibt den Motor bis in den Bereich, an dem die B/H-Kurve eine merkliche Krümmung hat. Je nachdem, wie bestromt wird, läuft man auf der Hysterese hoch bzw. runter.

Interne Infos zu verwenden ist nicht gut, etwa bei starken Lastwechseln besteht dann die Gefahr daß der Motor kippt, also plötzlich in die falsche Richtung dreht -- recht unangenehm. Zudem muss man sich erst mal bei stehendem Motor Positionen besorgen, damits ohne zu rucken und zu haken los gehen kann.

ranke
16.05.2008, 06:44
Ein Verfahren, welches allerdichgs für mich unverständlich ist lautet:

"
Dieses Verfahren nutzt die Änderung des Sättigungsgrads der Maschine bei steigendem Statorstrom, um die absolute Rotorposition direkt zu bestimmen. Dafür werden die mit einem Pulswechselrichter erzeugten
sechs möglichen Spannungsvektoren jeweils für eine bestimmte kurze Zeit der Maschine aufgeschaltet. Bei jedem Spannungsimpuls wird der Endwert des hervorgerufenen Stromes in jeder Phase erfasst. Die Differenz zwischen den Stromwerten für den positiven bzw. den negativen Spannungsimpuls jeder Phase wird gebildet. Diese Differenz
ist maximal für den Fall, dass die Rotorflussachse auf die magnetische Achse der entsprechenden Phasenwicklung ausgerichtet ist. Ob es sich um ein positives oder ein negatives Maximum handelt hängt von der relativen Polarität der Achsen ab.
Haben die beiden Achsen gleiche bzw. inverse Polarität, ergibt sich ein positives bzw. negatives Maximum. Wenn die Achsen senkrecht zueinander sind, ist die Differenz gleich Null.
So weist die Differenz jeder Phase in Abhängigkeit von der Rotorposition einen um 120° versetzen näherungsweise sinusförmigen Verlauf auf.
Die drei Differenzen werden in einem komplexen Differenzvektor kombiniert, dessen Argument direkt die absolute Rotorlage liefert
"


Ich versuche mal zu einzudeutschen (zumindest das, was ich glaube, davon verstanden zu haben):

Auf eine Statorspule werden nacheinander 2 identische Spannungsimpulse, aber in umgekehrter Stromrichtung gegeben. Am Ende des Spannungsimpulses wird der Strom gemessen und ausgewertet. Es handelt sich im Prinzip also um eine Induktivitätsmessung, an einer Spule 2 Mal in umgekehrter Stromrichtung. Wenn der Eisenkern um die Spule nicht durch einen Permanentmagnet des Rotors vormagnetisiert ist, dann wird man für beide Stromflußrichtungen einer Spule den selben Strom messen. Wenn eine Vormagnetisierung besteht, dann überlagert sich das Magnetfeld durch die Vormagnetisierung (Rotormagnet) mit dem Magnetfeld durch den Strom zu einem resultierenden Magnetfeld im Eisenkern.
Sind die beiden Magnetfelder gleichgerichtet, dann wird der Eisenkern früher in Sättigung gehen als ohne Vormagnetisierung, der gemessene Strom wird also größer (die scheinbare Induktivität der Spule geringer). Sind die Magnetfelder entgegengerichtet, dann wird die Sättigung des Eisens später eintreten, der gemessene Strom wird kleiner sein.
Damit läßt sich die Stärke und die Richtung des Rotorfelds in dem von der Spule umwickelten Statorzahn abschätzen.
Das ganze Verfahren wird für alle 3 Spulen durchgeführt und aus den insgesamt 6 Meßwerten die Statorposition ermittelt.



Etwas kritisch an dem Verfahren sind möglicherweise die relativ hohen Ströme durch die Rotorwicklung, man muß ja bis an die Sättigung des Eisens gehen. Da wird schon der Meßvorgang eine Rotordrehung auslösen.

SprinterSB
16.05.2008, 10:42
Im Falle von Testpulsen muss natürlich so bestromt werden, daß kein zusätzliches Drehmoment resultiert. Recht unangenehm bei Testpulsen kann ein Pfeifen sein, dass dadurch ausgelöst wird.

Alternativ kann das Sternpunkt-Potential beobachtet werden. Dazu wird das *-Potential vor und nach Zu-/Abschalten eines Stranges gemessen, und zwar vor dem Schalten und nach dem Stabilisieren (Einschwingphase). Dadurch entfallen Testpulse, man braucht aber einen flotten ADC, den man mit der 3-Phasen-PWM synchronisieren muss.

Im Stillstand wird mit einem (positionsunabhängigen) Null-Muster bestromt.

slaughter
16.05.2008, 18:13
Also geht man mal z.B. von einer Maschine mit einer Polpaarzahl von 1, mit Einzahnwicklung, also 120° versetzte Spulen und einem Rotormagneten, der 180° Nord- und 180° Süd-magnetisiert ist. (siehe Anhang)

So wäre das Eisen vom Pol A "nord-gesättigt".
Bestromt man nun diesen Pol in einer festgelegten Zeit so, dass er einen Nordpol bildet, so wird entlang der Magnetisierungskennlinie schnell der gesättigte Zustand erreicht und der Strom steigt schneller an.
Würde man den Pol so bestromen, dass er einen Südpol ausbildet, muss das Eisen erst ummagnetisiert werden und man kommt (wenn überhaupt) erst später in den gesättigten Zustand und der Strom steigt demnach auf einen geringeren Wert an.

Somit müsste "nur" noch der Strom nach der festegelegten Zeit gemessen werden und man kann somit sagen, unter welchem Pol die positive (nord), bzw. negative (süd) Achse des Rotors liegt.

Habe ich das soweit richtig verstanden ?

Vielen Dank übrigens für die hilfreichen Antworten.

Grüße

ErNa
26.05.2008, 14:47
Meine Erfahrung: man kann sich das Leben einfach machen und sucht nach solchen Motoren, die Hallsensoren eingebaut haben. Dann muss man lediglich entsprechend dem Hallsignal mehr oder weniger Strom auf die Phasen geben und das Ding läuft problemlos. Oder aber, man strebt nach den höheren Weihen, dann wird es hart. Es geht, aber es ist nicht einfach und der Aufwand ist beträchtlich. Wobei man sagen muss: Nummer sicher heißt Hallsensor!

slaughter
26.05.2008, 14:59
Hallo,

ich habe jetzt eine Möglichkeit gefunden um die Rotorposition im Stillstand und vielleicht auch bei niedrigen Drehzahlen zu bestimmen:

Dazu werden mit der, zum Kommutierung verwendeten B6 Brücke die 6 möglichen Spannungspulse auf den Motor geschalten. Diese sind demenstsprechend so lang zu wählen, dass sich der Magnetisierungszustand der Pole ändert. (bei meinem Motor sind dazu Peakströme von bis zu 60A nötig, welche sich aufgrund der Zeitkonstante nach etwas 100us einstellen).
Den Strom kann man recht einfach ohne Verstärkung mit einem schnellen ADC über den Spannungsabfall eines Shunts messen.
Ein Spannungsvektor ruft hierbei je nach Rotorstellung einen Strom hervor, der deutlich größer wird als bei den anderen B6-Zuständen. Dies ist dann charakteristisch für die Position der Rotors.
Im Anhang wären die Ergebnisse für diese Prozedur für eine Stellung zu sehen.

slaughter
26.05.2008, 15:05
Ich kann leider nichts mehr raufladen, aber die Werte, die mein 10 Bit ADC bei einer Rotorstellung ausgibt, wären z.b.

uv=31
vu=31
uw=31
wu=30
wv=39
vw=60

Die Variabel-Namen representieren hier die Einspeiserichtung, also z.b. vu heist positiver Strom durch die Wicklung v und negativer durch u.

BLDCer
02.06.2008, 16:59
Hallo zusammen,
ich bin heute auf Euern forum Eintrag gestoßen und finde das Thema
BLDC sensorless im niedrigen Drehzahlbereich bis hin zum Stillstand sehr interessant und würde mich deshalb gerne mit Euch ein bisschen austauschen.
Meine erste Frage: Gibt es noch andere Verfahren, die die Rotorlage bestimmen können bis hin zum Stillstand (sensorless)? Bin auf der Suche nach mehreren Möglichkeiten. Ich bin unteranderem noch auf das INFORM -Verfahren nach Prof.Schrödl gestossen.

Vielen Dank und Viele Grüße

BLDCer

slaughter
02.06.2008, 18:16
Hi BLDCer,

um die Rotorposition im Stillstand eindeutig zu bestimmen, gibt es nur die Möglichkeit über die Einspeisung hoher Ströme das Eisen in die Sättigung zu treiben, somit also die differentielle Induktivität zu verändern und den Verlauf der Stromstärke zu messen.

Eine andere Möglichkeit wäre ein hochfrequentes Rechtecksignal auf die Wicklung zu schalten. Durch den Komplexen Spannungsteiler zwischen R und L kann man nun je nach Rotorposition eine Spannung messen.
Das problem hierbei ist aber eine Unsicherheit um (elektrisch) 180°, da man nicht erkennt, ob der Nord oder Südpol oben steht.

Andere Methoden kenne ich bisher nicht...wäre aber auch sehr daran interessiert.

Das Inform Verfahren greift übrigenens auch auf den Effekt der Sättigung des Eisens zurück.

Grüße

BLDCer
03.06.2008, 19:17
Hi,

Danke für die schnelle Antwort!
Jetzt stehe ich vor folgendem Problem, die Theorie habe ich weitest gehend verstanden, doch wie setze ich beispieleweise die Gegen-Emk Nulldurchgangs Erkennung in einem Programm um? Wie beginne ich am sinnvollsten.

Viel Grüße

BLDCer

slaughter
04.06.2008, 22:03
Hi,

also es gibt mehrere Möglichkeiten, die Gegen-Emk zur Rotorpositionsbestimmung zu benutzen:

Die Emk ist im Betrieb trapez- oder eher sinusförmig und 120° verschoben. Die Nulldurchgänge der Spannung sind immer 30° (elektrisch) vor den Kommutierungszeitpunkten.

Die Herausforderung ist es also, diese zu detektieren. Dies kann man entweder durch schnelle ADCs machen oder über eine analoge Komparatorschaltung. Hier bin ich gerade am tüfteln.

Man braucht also eine Schaltung, die 3 Spannungen miteinander vergleicht und entsprechende Flanken auslöst, die dann einfach mit einem MCU verarbeitet werden können.
Eine Schaltung, mit der ich es versucht habe, steht im Anhang, allerdings funktioniert sie leider nicht wie gewünscht.

Wäre über Tipps sehr dankbar !

Grüße

harry3
04.06.2008, 22:39
Hab mir mal vor einiger Zeit einen Schaltplan für einen BL Regler runtergeladen, siehe Anhang.
Dort siehst du wie das gemacht wird mit dem Messen der Position:
Es wird ein virtueller Sternpunkt gebildet und gemessen. Weiters werden die 3 Spannungen A, B und C gemessen. Die Differenz zwischen jeweils einer Phase und dem Sternpunkt ergibt dir die jeweilige Sternspannung. Damit kann man dan recht gut die Position bestimmen!

Ich hab mir dazu auch eine Linkliste angelegt, vllt. hilft sie dir ja weiter:
http://modelluboot.de/~BLMC/
http://home.versanet.de/~b-konze/blmc_bko/blmc.htm
http://www.aerodesign.de/peter/2001/LRK350/index.html
http://www.aerodesign.de/peter/2001/LRK350/Wickel_arten.html
http://www.aerodesign.de/peter/2001/LRK350/Warum_dreht_er_so.html
http://aquaticus.info/bldc_controller
http://www.mikrokopter.de/ucwiki/BrushlessCtrl
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=32644&highlight=brushless

slaughter
04.06.2008, 22:54
Die Schaltung mit den drei Komparatoren von

http://home.versanet.de/~b-konze/blmc_bko/schaltplan.htm

habe ich auch schon mal aufgebaut. Die funktioniert auch bestens, allerdings verstehe ich leider nicht, welches Signal jeweils auf den "-" Eingang gelegt wird.

harry3
04.06.2008, 23:00
So schnell hingeschaut würde ich sagen, dass am Minus Eingang der virtuelle Sternpunkt liegt. Je nach dem ob nun das Phasensignal größer oder kleiner als das Sternpunktpotential ist, liefert dir der OPV einen HIGH oder LOW Wert. Du bekommst damit die 3, um jeweils 120° versetzten Signale, aus denen du den Drehsinn und die Geschwindigkeit bestimmen kannst.

slaughter
04.06.2008, 23:08
Irgendwie sind da noch die Spannungen mehrerer Phasen verknüpft.
Die Schaltung funktioniert bestens, aber leider kann ich sie nicht wirklich erklären.

Hier sieht man mal wie sie arbeitet:

harry3
04.06.2008, 23:15
Irgendwie sind da noch die Spannungen mehrerer Phasen verknüpft.
Die Schaltung funktioniert bestens, aber leider kann ich sie nicht wirklich erklären.

Hier sieht man mal wie sie arbeitet:

Hab heute echt nimmer den Nerv dazu das Schaltplangewirr zu entziffern, aber vielleicht schau ich morgen nochmal näher drüber.

Aber ich bin mir fast sicher dass es der virtuelle Sternpunkt ist, denn dieser ist ja eben genau eine Verknüpfung aller 3 Phasen, quasi der Mittelwert von den 3en! Stell dir das so vor: Du tust hinter jeder Phase einen großen Widerstand hin(damit keine großen Ströme fließen, Ströme brauchst du für Spannungsmessungen ja fast nicht), und verknüpfst diese 3 Widerstände dann. Du hast nun genau den Mittelwert aller 3 Phasen an diesem Punkt anliegen. Und nun vergleichst du die Spannungswerte der einzelnen Phasen mit deiner Referenzspannung, dem Sternpunkt. Wenn du nun die OPV Ausgänge aufzeichnest, erhältst du das von dir gepostete Diagramm!

Hoffe ich konnte es halbwegs verständlich erklären!?

slaughter
04.06.2008, 23:30
Ok, vielen Dank soweit !!

Falls du dir echt nochmal Gedanken drüber machen magst, könntest du vielleicht mal auf folgendes eingehen:

- welchen Einfluss hat die größe der Widerstände beim viltuellen Sternpunkt.
- warum wird die Strangpannung nicht negativ gegenüber dem virtuellen Sternpunkt
- was wäre, wenn man den virtuellen Sternpunkt auf GND setzt.


Ich habe die Komparatorschaltung mal mit LT Spice

(http://ltspice.linear.com/software/swcadiii.exe)

simuliert. Den Schaltplan stelle ich online:

Grüße

slaughter
04.06.2008, 23:35
hier die Simulation:

bitte in bldc2.asc umbenennen.

harry3
04.06.2008, 23:36
- welchen Einfluss hat die größe der Widerstände beim viltuellen Sternpunkt: Die 3 müssen gleichgroß sein, ansonsten ist es grundsätzlich egal(bei OPV Schaltungen sind recht große Widerstände die Regel weil die eh fast keinen Strom ziehen). Bei dem von mir geposteten Schaltplan wirken die Widerstände zusätzlich mit Hilfe der Kondensatoren noch als Frequenzfilter, um Störfrequenzen aus dem Signal rauszulöschen.

- warum wird die Strangpannung nicht negativ gegenüber dem virtuellen Sternpunkt: Wird sie doch eh!?

- was wäre, wenn man den virtuellen Sternpunkt auf GND setzt: Dann würde dir der Komparator immer melden, dass die Strangspannung größer ist, du könntest keine Aussage mehr über die Motordrehzahl usw. treffen!



EDIT: Lad die Schaltung in einem zip hoch, denn derzeit gehts nicht!

sophos
30.07.2008, 16:01
Hallo!

Sorry der Thread ist schon etwas alt, aber ich würde mich über ein paar Antworten freuen:

Seh ich das richtig: Du legst einen Anschluss des BLDC's auf VCC einen anderen auf Masse. Den dritte lässt du frei. Das ganze wird für eine definierte Zeit geschalten. Wie lange? Danach wartest du kurz? (Wie lange?) Und misst die Spannung am freien Anschluss? Anhand dieser Spannung kannst du die Position bestimmen, richtig?
Wie schaffst du es, dass sich der Motor nicht dreht?

Danke
sophos

slaughter
30.07.2008, 17:24
Hallo,

also ich messe nich direkt die Spannung, sondern den Strom, der sich in den 2 gewählten Phasen aufbaut. Dies geschieht natürlich üner eine Spannungsmessung.

Anhand der Induktivität und dem Statorwiderstand ergibt sich die Zeitkonstanze tau=L*R. Der Strom baut sich nach der Exponentialfunktion auf. Man muss nun testen, wie lange die Phase zu bestromen sei, damit sich der Magnetisierungszustand des Eisens ändert.

Von einem bis zum nächsten Bestromungszustand muss so lange gewartet werden, bis der Strom durch die Freilaufdioden der B6-Brücke wieder abgeklungen ist.

Sind deine Fragen damit beantwortet ?

Grüße

sophos
30.07.2008, 17:34
Ich hab das ganze eben mal getestet. Die Impulse sind 2ms lang. Jedoch springt der Rotor während der Messung hin und her. Gehe ich unter 2ms dann kann ich kaum was messen.
Gibts da Trick um das zu verhindern?
MfG sophos

slaughter
30.07.2008, 17:45
Also wenn du die Phasen U, V und W nennst, dann präge zuerst den Impuls:

Highside U, Lowside V und dann Highside V und Lowside U ein.

Dann sollte sich das Moment ziemlich gut aufheben.

2ms erscheinen mir etwas lang.
Welchen Motor verwendest du denn ? Also welche Induktivität, Widerstand und welchen Shunt ?
Die normalen Shunts haben ja nur einige Milliohm. Auch wenn der Strom recht hoch wird, kann man da nicht viel messen. Der Spannungsabfall muss dann verstärkt werden. Außerdem kann es sein, je nachdem wo sich der Shunt in der Schaltung befindet, dass kaum Strom durch diesen fließt, sondern nur Blindströme über den Zwischenkreiskondensator. Versuch doch mal, direkt den Shunt in eine Phase zu legen.