mikrocontroller.net

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


Autor: Stefan K. (chocco)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas E. (picalic)
Datum:

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

Autor: Stefan K. (chocco)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht 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_...

: Bearbeitet durch User
Autor: Amateur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bist Du Dir Sicher, was die 14 Pole betrifft?

Autor: Stefan K. (chocco)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe F. (easylife)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Stefan K. (chocco)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Joe F. (easylife)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Stefan K. (chocco)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Joe F. (easylife)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Norbert S. (norberts)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas E. (picalic)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas E. (picalic)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan K. (chocco)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Thomas E. (picalic)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan K. (chocco)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas E. (picalic)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Stefan K. (chocco)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.