Forum: Mikrocontroller und Digitale Elektronik Berechnung der Geschwindigkeit eines BLDCs ohne Hall-Sensoren


von Stefan K. (chocco)


Lesenswert?

Hallo miteinander,

ich arbeite zurzeit an meinem ersten Projekt in der Kombination 
microController und Motor und habe bis zu diesem Punkt eigentlich das 
Gefühl gehabt alles recht gut verstanden zu haben (mit Hilfe dieses 
Forums).
Jedoch stimmt meine Berechnung zur Bestimmung der Geschwindigkeit nicht 
mit dem über den Oszi ermittelten Wert überein und daher wollte ich hier 
mal nachfragen ob ich denn wirklich alles richtig verstanden habe und ob 
mir jemand sagen kann was nicht. Es handelt sich dabei um einen BLDC, 
mit 14 Polen, welchen ich über 3 Sinuse kommutiere. Die Geschwindigkeit 
bestimme ich dabei durch das übergeben jedes x-ten PWM Werts an die 
Channel.

Rechnung:
Zuerst berechne ich über die Frequenz der Timer Peripherie(hier 64MHz) 
geteilt durch den Prescaler die Frequenz des Timers. Daraus dann den 
Kehrwert für die Zeit pro Tick. Danach erhalte ich über das 
Multiplizieren mit der Periode die Zeit für eine PWM. Eine mechanische 
Umdrehung wären ja dann Zeit pro PWM* die counts für jedes x-te PWM*die 
Auflösung des Sinus*die Anzahl der elektrischen Umdrehungen(14/2=7).

Ich hoffe dabei ist jetzt nicht zu viel falsch und vielen Dank für eure 
Hilfe.

von Thomas E. (picalic)


Lesenswert?

Die PWM hat aber nichts mit der Drehzahl zu tun, sondern steuert die 
Leistung. Die Drehzahl steckt in der Frequenz der Sinuswellen.

von Stefan K. (chocco)


Lesenswert?

Ja und diese Frequenz verändere ich in dem ich nur jeden xten Schritt 
zähle Oder?
Also zumindest wird der Motor langsamer je höher mein x ist.

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


Lesenswert?

Stefan K. schrieb:
> Es handelt sich dabei um einen BLDC,
> mit 14 Polen, welchen ich über 3 Sinuse kommutiere.

Dann ergibt sich die Frequenz des Drehfeldes doch aus dem Abstand 
zwischen den Nulldurchgängen des Sinus.
Ich klappere im Frequenzumrichter Sinustabellen durch und kann deswegen 
den Wert für die Frequenz aus dem Pointer in die Tabelle errechnen. Bei 
mir wird nach jedem n-ten Mal der Pointer in die Tabelle inkrementiert 
und n ist dann mit der Tabellenlänge zusammen die Frequenz.
Genaueres findet sich im Artikel:
https://www.mikrocontroller.net/articles/3-Phasen_Frequenzumrichter_mit_AVR#Sinuserzeugung

: Bearbeitet durch User
von Amateur (Gast)


Lesenswert?

Bist Du Dir Sicher, was die 14 Pole betrifft?

von Stefan K. (chocco)


Lesenswert?

Matthias S. schrieb:
> Bei mir wird nach jedem n-ten Mal der Pointer in die Tabelle inkrementiert
> und n ist dann mit der Tabellenlänge zusammen die Frequenz.

Mh ok so rum könnte ich es auch mal probieren. Aber geht meine Methode 
mit den Nulldurchgängen im Sinus nicht auch?

Amateur schrieb:
> Bist Du Dir Sicher, was die 14 Pole betrifft?

Ja, das ist der Motor.
3-phasiger Motor
Bull-Running-Modell BR2804-1700 kV
Nennspannung 11,1 V dc (Akku bis zu 3 S)
Maximaler Gleichstrom: 5 A
Sieben Polpaare

von Joe F. (easylife)


Lesenswert?

Um wieviel weicht die errechnete Drehzahl denn von der tatsächlichen 
Drehzahl ab? Wenn es ein Faktor von 2 oder so ist, ist da u.U ein 
Denkfehler in der Anzahl der Poles drin.
Du kannst ja mal den Motor um genau 1 Sinus-Periode drehen lassen, und 
misst den dadurch zurückgelegten Drehwinkel. Er müsste dann ja 360°/14 
sein.

Generell ist allerdings eine Kommutierung eines so starken Motors im 
open-loop Betrieb (ohne Positionssensor und Regler) recht unsinnig... 
Das wird eine recht "wackelige" Angelegenheit.

: Bearbeitet durch User
von Stefan K. (chocco)


Lesenswert?

Joe F. schrieb:
> Wenn es ein Faktor von 2 oder so ist, ist da u.U ein
> Denkfehler in der Anzahl der Poles drin.

Der Faktor beträgt ca. 1,8. Aber ich glaube es liegt auch an meiner 
Nutzung der HAL Library und dem PulseFinishedCallBack. Zwischen den 
einzelnen PWM Signalen sind nämlich unterschiedlich lange Abstände.

: Bearbeitet durch User
von Joe F. (easylife)


Lesenswert?

Stefan K. schrieb:
> Zwischen den
> einzelnen PWM Signalen sind nämlich unterschiedlich lange Abstände.

Das kling so, als ob es eigentlich der Faktor 2 ist, deine PWM aber 
nicht "hinterherkommt".
Mit welcher Frequenz/Auflösung willst du die PWM Werte denn 
rausschieben?
In der Regel reicht eine PWM von ein paar KHz gut aus.
Mal angenommen du hast eine Auflösung von 6 Bit (64 steps) und willst 
die PWM(s) mit 5 KHz betreiben, bräuchtest du 320 KHz.

: Bearbeitet durch User
von Stefan K. (chocco)


Lesenswert?

Meine PWM hat eine Frequenz von 30 kHz. Dabei habe ich einen Prescaler 
von 5 und eine Auflösung von 427 Schritte.
Ich hab die PWM Frequenz extra so hoch gewählt damit man den Motor nicht 
hört.

: Bearbeitet durch User
von Joe F. (easylife)


Lesenswert?

D.h. du müsstest deine Ausgänge mit 12.8 MHz updaten...
Versuche doch mal die Auflösung auf die Hälfte, oder 256 Steps (128 
reichen i.d.R. eigentlich auch...) zu reduzieren.
Dann kommst du immer noch auf eine PWM mit 30 KHz, hast die PWM Ausgänge 
aber "nur" mit 6.4-7.7 MHz zu bedienen.

: Bearbeitet durch User
von Norbert S. (norberts)


Lesenswert?

Moin,

Der Motor hat 14 magnetische Pole aber vermutlich nur 12 elektrische.
Das ist das klassische LRK-Design.
Davon abgesehen geht es immer um Polpaare. Also 6 statt 7.
Wie sollte das mit 3 Phasen und 14 Polen auch gehen?

Du hast die Frequenz des Drehfeldes? Dann sollte das jetzt einfach sein.
Im Leerlauf dreht das Ding 20400RPM bei 12V.

Du wertest aber schon die BEMF aus oder befeuerst Du das Ding etwa 
einfach mit dem Sinus?

Gruß,
Norbert

von Thomas E. (picalic)


Lesenswert?

Genau genommen ist eine sinusförmige Ansteuerung für einen BLDC Motor 
gar nicht optimal. Es gibt nämlich tatsächlich einen Unterschied 
zwischen BLDC (= elektronisch kommutierter DC-Motor) und einer 
Synchronmaschine (= 3-Phasen Wechselstrommaschine). In der Praxis wird 
der Unterschied bei diesem Motor wahrscheinlich nicht sooo groß sein, 
aber auf der anderen Seite kann man sich natürlich fragen, wozu man den 
Aufwand für sinusförmige Ansteuerung treibt, wenn eine einfachere 
Signalform eigentlich besser zur Maschine passt.

von Peter S. (Gast)


Lesenswert?

Thomas E. schrieb:
> Es gibt nämlich tatsächlich einen Unterschied
> zwischen BLDC (= elektronisch kommutierter DC-Motor) und einer
> Synchronmaschine (= 3-Phasen Wechselstrommaschine).

Ein BLDC IST eine Synchronmaschine. Manchmal ist mit "BLDC" ein Motor 
mit trapezförmiger Gegen-EMK gemeint. Aber das ist erstens keine 
allgemeingültige Definition und zweites handelt es sich dann immer noch 
um eine Synchronmaschine.

von Thomas E. (picalic)


Lesenswert?

Natürlich ist ein BLDC dieser Bauart immer auch eine Synchronmaschine, 
das dürfte schon durch die Funktionsweise klar sein, aber eben ein 
"DC"-Motor. Wegen den evtl. unklaren Begriffen hatte ich die 
Erläuterung, was gemeint ist, in Klammern dahinter geschrieben. Ich weiß 
nicht, wer die Begriffe "offiziell" definiert und wo man sie finden 
kann, aber was ich bislang an fachlichen  Veröffentlichungen gefunden 
habe deutet eher darauf hin, daß mit "BLDC" üblicherweise der Motor mit 
trapezförmiger Gegen-EMK bezeicnet ist, im Gegensatz zu "PMSM" 
(Permanent Magnet Synchron Motor) ähnlicher Bauart, welcher für 
sinusförmige Wechselspannungen konstruiert ist.

Im Modellbaubereich (wo der hier genannte Motor verwendet wird) sind 
ESCs mit sinusförmigen Ausgangsspannungen eher die Ausnahme, daher sind 
die Motoren sicher auch eher als BLDCs, denn als PMSMs konstruiert.

von Stefan K. (chocco)


Lesenswert?

Joe F. schrieb:
> Versuche doch mal die Auflösung auf die Hälfte, oder 256 Steps (128
> reichen i.d.R. eigentlich auch...) zu reduzieren.

ok hab ich gemacht

Norbert S. schrieb:
> Der Motor hat 14 magnetische Pole aber vermutlich nur 12 elektrische.
> Das ist das klassische LRK-Design.

Ah ok danke das war dann wohl auch ein Denkfehler meinerseits.
Wie kann ich denn die elektrischen Pole bestimmen oder sind das 
Erfahrungswerte von dir?

Norbert S. schrieb:
> Du wertest aber schon die BEMF aus oder befeuerst Du das Ding etwa
> einfach mit dem Sinus?

Da ich den Motor bei sehr geringen Drehzahlen bedienen muss kann ich 
leider nicht die BEMF benutzen und befeuer den Motor nur mit Sinus, ist 
zwar die Holzhammermethode aber ohne Hall-Sensoren geht es leider nicht 
anders.

: Bearbeitet durch User
von Thomas E. (picalic)


Lesenswert?

Stefan K. schrieb:
> Da ich den Motor bei sehr geringen Drehzahlen bedienen muss kann ich
> leider nicht die BEMF benutzen und befeuer den Motor nur mit Sinus, ist
> zwar die Holzhammermethode aber ohne Hall-Sensoren geht es leider nicht
> anders.

Da wäre vermutlich ein Motor mit niedrigerem KV besser geeignet. Suche 
evtl. mal nach "Gimbal Motor" - die sind für sehr kleine Drehzahlen 
ausgelegt (<100 KV) und werden auch mit Sinus und Drehzahl 0 
angesteuert. Weiß aber jetzt nicht, ob/wo es da etwas passendes in 
Deiner Motorgröße gibt. Da die aber auch an kleinen Drohnen zur 
Kamera-Stabilisierung verwendet werden, müsste es da schon etwas geben.

von Stefan K. (chocco)


Lesenswert?

Thomas E. schrieb:
> Da wäre vermutlich ein Motor mit niedrigerem KV besser geeignet. Suche
> evtl. mal nach "Gimbal Motor"

Ja das ist mir bewusst. Den Motor den ich zurzeit verwende, habe ich 
auch nur weil er von ST in einem Set angeboten wird und ich damit 
erstmal die Grundlagen erlernen will.

von Thomas E. (picalic)


Lesenswert?

Stefan K. schrieb:
> Wie kann ich denn die elektrischen Pole bestimmen

Eine Möglichkeit wäre, den Motor mit einer gewissen Drehzahl zu drehen 
(z.B. per Akkuschrauber) und die Frequenz der erzeugten Spannung bzw. 
die Perioden pro Umdrehung mit dem Oszi zu messen.

von Stefan K. (chocco)


Lesenswert?

Thomas E. schrieb:
> Eine Möglichkeit wäre, den Motor mit einer gewissen Drehzahl zu drehen
> (z.B. per Akkuschrauber) und die Frequenz der erzeugten Spannung bzw.
> die Perioden pro Umdrehung mit dem Oszi zu messen.

Ah ok danke. Auch an alle anderen die mir geholfen haben. War echt eine 
Kombination aus zu hoher Frequenz und der falschen Polpaarzahl.

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.