Forum: Mikrocontroller und Digitale Elektronik BLDC Startup Algorithmus eines China-ESCs


von mh (Gast)


Lesenswert?

Hallo,
ich beschäftige mich schon seit längerem mit der Ansteuerung von 
BLDC-Motoren.
Hab auch schon eigene Controller gebaut und es geschafft den Motor mit 
maximalem Drehmoment durch Strommessung und Auswertung der 
Stranginduktivitäten im Stillstand bzw. bei kleinen Drehzahlen und 
beliebigen Lasten anlaufen zu lassen.
Zum Vergleich hab ich mir einen China-BLDC-Regler des Typs ESC-30A 
gekauft.
Als Mikrocontroller hat dieser einen ATmega8 verbaut.
Dieser kann einen BLDC direkt (ohne vorheriges Ausrichten des Rotors 
oder dergleichen) vom Stillstand aus mit maximalen Drehmoment starten.
Das schafft dieser auch, falls ich mit dem Finger eine Last am Motor 
simuliere.
Hab mir mal die Platine des ESCs angeschaut.
Messwiderstände zur Strommessung sind nicht vorhanden, es wird auch kein 
ADC-Kanal hierfür hergenommen.
Hab auch folgende Verbindungen auf der Platine rekonstruieren können:
Die Verschaltung des BEMFZC-Netzwerks ist folgendermaßen:
Der künstliche Sternpunkt des BEMF-Netzwerks geht auf AIN0, eine Phase 
auf ADC4, eine andere auf ADC5 und die dritte auf AIN1 des uC.
Aus den Ansteuersignalen der MOSFETs seh ich auch nichts besonderes 
(keine Messimpulse oder sowas).
Angeschlossener Motor ist ein CF2822.
Hat jemand Infos oder weiß jemand, wie die China-ESCs (oder kommerzielle 
ESCs) den BLDC so perfekt starten können?

von Philipp K. (philipp_k59)


Lesenswert?

Wird nichts anderes wie bei anderen sein..

z.B.:
https://www.ulrichradig.de/home/index.php/avr/brushless-motor-controller

Source-Code und Schaltplan

von mh (Gast)


Lesenswert?

Den Aufbau & Source-Code kenn ich.
Hier wird der Startup aber mit fester Kommutierung am Anfang gemacht und 
dann ab Erreichen einer bestimmten Drehzahl auf BEMFZC umgeschaltet.
Problem bei diesem Anlaufverfahren ist, dass der Rotor beim ersten 
Impuls in die falsche Richtung springen kann und evtl. falsch herum 
anläuft.
Das ist bei den China-ESCs nicht zu erkennen. Die laufen immer in die 
richtige Richtung an und springen am Anfang nicht. Und das sogar bei 
beliebiger Motorlast.

von mh (Gast)


Lesenswert?

Ein kleines Update...
Die MOSFETs werden alle am Anfang immer mit der gleichen Sequenz 
angesteuert.
Nur die Länge der einzelnen Zustände variiert (scheinbar in Abhängigkeit 
der Rotorstellung).

von mh (Gast)


Lesenswert?

Hat jemand Infos zur SimonK-Firmware für ESCs? Was wird in dieser 
Firmware für ein Anlaufverfahren verwendet?

von John P. (brushlesspower)


Lesenswert?

mh schrieb:
> Hier wird der Startup aber mit fester Kommutierung am Anfang gemacht und
> dann ab Erreichen einer bestimmten Drehzahl auf BEMFZC umgeschaltet.
> Problem bei diesem Anlaufverfahren ist, dass der Rotor beim ersten
> Impuls in die falsche Richtung springen kann und evtl. falsch herum
> anläuft.

Meiner Meinung nach laufen alle China Regler mit Atmega8 auf der selben 
firmware (SimonK). Bzw mit leichten änderungen.

Der Anlauf ist auch meines Wissens immer gleich. Zwangskommutierung.
Der Motor wird mit steigender Pulsbreite und steigender drehfrequenz zum 
rotieren gebracht. Dabei wird immer die BEMF gemessen. Sobald die BEMF 
erkannt wird stellt der ESC auf geregelte kommutierung um.

Ich ahbe es allerdings noch nie erlebt das ein motor falsch rum anläuft. 
weder bei China reglern noch bei meinen eigenen mit eigener Firmware.
Es stimmt, mit dem ersten Step (von 6) richtet sich der Motor aus (dies 
kann in die falsche richtung gehen) aber mit dem 2. Stepdreht er dann in 
die richtige richtung. Wenn dder Dutycyle der PWM und die drehfrequenz 
sanft anlaufen wird man dieses verhalten kaum merken.
Und auch CHina Regler "rucken" mit dem ersten Step.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Man könnte ja auch den ersten Impuls etwas länger halten, damit der 
Motor Zeit hat um sich auszurichten. Dann weiß man wie er steht wenn man 
mit der Kommutierung beginnt.

von John P. (brushlesspower)


Lesenswert?

Ben B. schrieb:
> Man könnte ja auch den ersten Impuls etwas länger halten, damit der
> Motor Zeit hat um sich auszurichten. Dann weiß man wie er steht wenn man
> mit der Kommutierung beginnt.

Das wird teilweise schon beim Einschalten gemacht.

Dort gibt es einen (oder mehr) "beep" Töne. Damit wird bereits der Motor 
ausgerichtet.
Es kann zwar sein das zwischen einschalten und anlauf sich die 
rotorposition ändert, aber dann kann es halt zu einen rucken kommen.

von Wilhelm M. (wimalopaan)


Lesenswert?

Bevor die ramp-up Phase startet (also die Zwangskommutierung) ist eine 
align-phase. Diese lässt man üblicherweise etwas länger "stehen", damit 
der Rotor auch ausschwingen und sich stabilisieren kann. Danach startet 
das ramp-up bis man die BEMF ein paar mal zuverlässig detektiert, und 
danach geht ist in die closed-loop. Das mach eigentlich alle so.

von mh (Gast)


Lesenswert?

Das mit dem vorher in die richtige Position bringen kenne ich auch.
Mir ist nur beim China-Regler nicht sowas aufgefallen.
Das hätte ich ja dann in den MOSFET-Signalen gesehen, bzw. als 
mechanischen Ruck.
Der Motor startet auch zuverlässig, falls ich den Motor stoppe und die 
Rotorposition dann mit der Hand veränder (der Beep-Ton ist nur beim 
Einschalten des Reglers zu hören).
Lässt sich mit Zwangskommutierung so ein gutes Startverhalten erreichen?
Spich bei egal welcher Last und auch bei unterschiedlichen Motoren?

von rogerz (Gast)


Lesenswert?

mh schrieb:
> Das mit dem vorher in die richtige Position bringen kenne ich
> auch.
> Mir ist nur beim China-Regler nicht sowas aufgefallen.
> Das hätte ich ja dann in den MOSFET-Signalen gesehen, bzw. als
> mechanischen Ruck.
> Der Motor startet auch zuverlässig, falls ich den Motor stoppe und die
> Rotorposition dann mit der Hand veränder (der Beep-Ton ist nur beim
> Einschalten des Reglers zu hören).
> Lässt sich mit Zwangskommutierung so ein gutes Startverhalten erreichen?
> Spich bei egal welcher Last und auch bei unterschiedlichen Motoren?

... dann zeig doch mal, was Du für MOSFET-Signale bzw. Phhasenströme 
beim Start gemessen hast. Evtl. kann man daraus auf ein Verfahren(*) zur 
sensorlosen Rotorlageerkennung schließen.

(*)
z.B. "INFORM" oder "IPD" (siehe DRV10987S von TI)

Ich habe aber Zweifel, daß Dein China-Regler ein solches Verfahren 
implmentiert hat ;-)

von Wilhelm M. (wimalopaan)


Lesenswert?

Die China-Steller benutzen doch eigentlich alle SimonK oder BL-Heli 
Firmware. Ich habe schon lange nicht mehr da hinein geschaut, aber m.W. 
hat die SimonK-Firmware nur dieses fixed-alignment und anschließend die 
open-loop ramp-up Phase (vorgegebenes Drehfeld) gemacht.

von Timo N. (tnn85)


Lesenswert?

Die SimonK (Simon Kirby) Firmware ist doch in GitHub öffentlich 
zugänglich. Musst dich halt in Assembler einarbeiten, wenn du den Code 
verstehen willst.

https://github.com/sim-/tgy/blob/master/tgy.asm

von John P. (brushlesspower)


Lesenswert?

mh schrieb:
> Lässt sich mit Zwangskommutierung so ein gutes Startverhalten erreichen?
> Spich bei egal welcher Last und auch bei unterschiedlichen Motoren?

Ja. gerade bei Zwangskommutierung geht das.
Habe schon Moteoren 24/7 zum testen bei 1Hz (60RPM) drehen lassen.

Wenn die Last natürlich "zu groß" wird bleibt der motor stehen, klar. 
Das ist aber abhängig von deinem Dutycycle der PWM. Je höher der ist 
desto größer kann die Last sein.


Das einzige was Zwangkommutierung nicht kann: Effizient sein!
Du vebräts einen haufen energie, und zwar im Motor. Deswegen wird der 
bei sowas sehr heiß! Und je höher der Dutycycle desto heißer der Motor.
Deswegen sollte die zwangkommutierung nur kurz eingesetzt werden.

Und die Zwangskummutierung [RPM] ist immer deutlich langsamer als die 
RPM in closed loop. Weil die ja nie perfekt umschalten kannst.

mh schrieb:
> Das mit dem vorher in die richtige Position bringen kenne ich auch.
> Mir ist nur beim China-Regler nicht sowas aufgefallen.

Ich habe sowas schon sehen. Dann "klappert" bei mir der antrieb kurz. 
Ich vermute aber das die Beep Töne schonmal (vor)ausrichten. Danach wird 
eine ganz gerine PWM auf die motoren gegeben um ihn in Position zu 
halten (Dutycyle 1-2%). Dann weiß der Regler wo der rotor steht, und der 
rotor kann sich auch nicht mehr weg bewegen.

So würde ich das zumindest machen wenn ich beim Startup keine Zeit 
verlieren will.
Ob SimonK (China) das so macht? Hab keine Lust Assembler zu lesen ;)

: Bearbeitet durch User
von Wilhelm M. (wimalopaan)


Lesenswert?

Ja, die Zwangskommutierung funktioniert gut, ergibt eben nur u.U. einen 
"ruppigen" Lauf des Motors, wenn der Strom zu groß ist und der Rotor 
daher "einrastet".

Es gibt wohl noch ein Verfahren, für den Fall, dass die Drehzahl für 
eine zuverlässige BEMF-Auswertung zu gering ist: hier wird die jeweils 
freie Wicklung noch mit einem kurzen Impuls-Signal beaufschlagt und 
anschließend die Induktionsspannung ausgewertet. Anhand der Signalform 
kann man wohl schätzen, wie der Rotor steht. Allerdings habe dazu noch 
keine Infos gefunden.

Vielleicht hat jemand dazu Infos?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Moin Zusammen,

wenn du die freie Phase als Impuls mit bestromst ergibt sich eine 
Änderung im Strom die merkst du dir, wenn du das für jede Phase gemacht 
hast kannst du die 3 Werte in ein kartesisches Koordinatensystem (2 
Achsen) umrechnen.

Da ergibt sich dann ein Vektor dessen Richtung der Feldrichtung 
entspricht.

Ich hoffe das ist halbwegs verständlich? Ich weiß auch nicht ob man das 
ohneMessung des Phasenstromes hinbekommt.

Gruß

Alex

: Bearbeitet durch User
von mh (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
hab mal die MOSFET-Signale (Low-Side) mit einem Oszi aufgenommen.
Man sieht, dass die Ansteuersequenz zum Starten immer die gleiche ist, 
die Länge aber variiert...

Wilhelm M. schrieb:
> Es gibt wohl noch ein Verfahren, für den Fall, dass die Drehzahl für
> eine zuverlässige BEMF-Auswertung zu gering ist: hier wird die jeweils
> freie Wicklung noch mit einem kurzen Impuls-Signal beaufschlagt und
> anschließend die Induktionsspannung ausgewertet. Anhand der Signalform
> kann man wohl schätzen, wie der Rotor steht. Allerdings habe dazu noch
> keine Infos gefunden.
>
> Vielleicht hat jemand dazu Infos?

Ich hab das Verfahren in meinem Regler implementiert.
Funktioniert tadellos bei egal welcher Last oder Motor.
Es gibt dazu eine ganze Reihe Veröffentlichungen:
siehe z.B.: https://ieeexplore.ieee.org/abstract/document/997804

Alexander B. schrieb:
> wenn du die freie Phase als Impuls mit bestromst ergibt sich eine
> Änderung im Strom die merkst du dir, wenn du das für jede Phase gemacht
> hast kannst du die 3 Werte in ein kartesisches Koordinatensystem (2
> Achsen) umrechnen.
>
> Da ergibt sich dann ein Vektor dessen Richtung der Feldrichtung
> entspricht.
>
> Ich hoffe das ist halbwegs verständlich? Ich weiß auch nicht ob man das
> ohneMessung des Phasenstromes hinbekommt.

Das dürfte auf den gleichen Effekt beruhen wie das Verfahren mit der 
Induktivitätsmessung.
Das geht aber nur wenn man den Strom misst, was im China-Regler nicht 
gemacht wird.

von Wilhelm M. (wimalopaan)


Lesenswert?

mh schrieb:
> Hallo zusammen,
> hab mal die MOSFET-Signale (Low-Side) mit einem Oszi aufgenommen.
> Man sieht, dass die Ansteuersequenz zum Starten immer die gleiche ist,
> die Länge aber variiert...

Ja, das ist vor das Alignment und dann die Rampe, also die 
Standard-Anwerfsequenz.

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

mh schrieb:
> Ich hab das Verfahren in meinem Regler implementiert.
> Funktioniert tadellos bei egal welcher Last oder Motor.
> Es gibt dazu eine ganze Reihe Veröffentlichungen:
> siehe z.B.: https://ieeexplore.ieee.org/abstract/document/997804

Danke für das Paper. Ist das Pulsen Laut? Weil der Strom in den Phasen 
sieht ja schon sehr krumm aus.

mh schrieb:
> hab mal die MOSFET-Signale (Low-Side) mit einem Oszi aufgenommen.
> Man sieht, dass die Ansteuersequenz zum Starten immer die gleiche ist,
> die Länge aber variiert...

Der Punkt für "aktuelle" China Regler ist das die alle die BEMF Signale 
mit dem ADC messen nicht wie zu Anfang mit Komperatoren. Dadurch können 
die die BEMF Signale integrieren um so bereits früh eine Drehung zu 
erkennen, siehe auch VESC. Der Benjamin Vedder hat das dort genau so 
implementiert und mit der zusätzlichen ADC Auflösung des STM32 läuft das 
auch noch mal besser. Und er arbeitet mit Pulsen um die Achsiigkeit der 
Induktivitäten zu messen. Das ist nur Signal Aufbereitung der BEMF 
Signale.

Gruß

Alex

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

> hab mal die MOSFET-Signale (Low-Side) mit einem Oszi aufgenommen
Das ist genau das was ich erwartet hatte, ohne es zu wissen... der erste 
Impuls wird recht lange gehalten um den Rotor auszurichten und dann 
folgt die Anfahrrampe.

von John P. (brushlesspower)


Lesenswert?

mh schrieb:
> hab mal die MOSFET-Signale (Low-Side) mit einem Oszi aufgenommen.
> Man sieht, dass die Ansteuersequenz zum Starten immer die gleiche ist,
> die Länge aber variiert...

Kanal 3 (Blau) der erste lange PWM Puls ist zur Ausrichtung. dan 
beginnen die kurzen PWM pulse abwechselnd auf den 3 Phasen.

Alexander B. schrieb:
> Der Punkt für "aktuelle" China Regler ist das die alle die BEMF Signale
> mit dem ADC messen nicht wie zu Anfang mit Komperatoren. Dadurch können
> die die BEMF Signale integrieren um so bereits früh eine Drehung zu
> erkennen, siehe auch VESC.

Der VESC Regler ist immernoch ein nebenprodukt.
Früher waren es Atmega8 mit Simonk Firmware.
Vor kurzem sind dann alle mit Silabs EFM8 Chips und Blheli_s gebaut 
worden.
Aktuell gehen fast alle Hersteller auf STM32 mit Blheli_32 oder eben 
eigener Firmware, denn Blheli_32 ist ja closed source.


Für meine Regler habe ich lange nach einer passenden Firmware gesucht.
Eigene Firmware -> super zum testen, kein Configurationstool, zu wenig 
Zeit
SimonK -> Zu alte technik
BlHeli_S -> gute alternative für Hobbyprojekte
BlHeli_32-> Meine Wahl. Ausgereift, guter support, super GUI und mit 
Telemetrie. Leider nicht für jedermann zu bekommen.

Aber hinter allen arbeitet eine Firmware mit internen Komperatoren, BEMF 
"messung" und 6-Step ansteuerung.

: Bearbeitet durch User
von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Ich schreibe für meine Regler die Software auch selbst und als GUI nehme 
ich Tools wie FreeMaster um mir Grafen von den internen Werte 
anzuzeigen. FreeMaster braucht dafür nur das ELF File vom Code und du 
musst ne Serielle Verbindung zum Target haben. Dann kannst du auf alle 
Variablen zugreifen.

Oder du nimmst etwas speziellere Hardware wie die TMS320 von TI deren 
CodeComposer Studio kann das auch. Für mich reicht das um meine Regler 
einzustellen.

Das kann man keinem anderen in die Hand geben aber für mich gehts beim 
Hobby auch nicht darum.

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

ROFL... jetzt braucht man schon einen STM32, um einen Motor zu drehen. 
Mal sehen was als nächstes kommt. Vielleicht einen Intel x64 mit 16 
HT-Kernen?!

von John P. (brushlesspower)


Lesenswert?

Ben B. schrieb:
> ROFL... jetzt braucht man schon einen STM32, um einen Motor zu drehen.
> Mal sehen was als nächstes kommt.

Braucht man nicht, bietet aber einige Vorteile.

von Timo N. (tnn85)


Lesenswert?

John P. schrieb:
> eigener Firmware, denn Blheli_32 ist ja closed source.

Wird das ding dann kommerziell verkauft oder warum closed source? Macht 
doch sonst keinen Sinn. Sieht aber trotzdem alles irgendwie nach Baster 
aus.

Komme gerade nicht auf die Seite www.blheli32.com um mir die Infos zu 
holen. Scheint down zu sein.

von John P. (brushlesspower)


Lesenswert?

Timo N. schrieb:
> Wird das ding dann kommerziell verkauft oder warum closed source? Macht
> doch sonst keinen Sinn.

Blheli_32 wird an (Hardware) Hersteller von Brusless Controller 
verkauft. Ist nur reine Firmware.

Blheli_32 sind die selben Programmierer wie von BlHeli_S und 
Blheli/SimonK.
Closed Source...angeblich weil eh keiner mitentwickelt. Aber wohl eher 
des Geldes wegen.
Gefühlt ist jeder neue Controller mit dieser Firmware unterwegs.

Timo N. schrieb:
> omme gerade nicht auf die Seite www.blheli32.com um mir die Infos zu
> holen. Scheint down zu sein.

Ist keine offizielle Seite. Mehr eine Fan-Seite.
Geht bei mir grade auch nicht

von mh (Gast)


Lesenswert?

Erstmal Danke für die ganzen interessanten Infos!

Alexander B. schrieb:
> Danke für das Paper. Ist das Pulsen Laut? Weil der Strom in den Phasen
> sieht ja schon sehr krumm aus.

Meine Impulse haben eine Länge von 20us. Man hört nur ein leises "Tock" 
bei der Rotorpositionsbestimmung, falls man den Motor danach nicht 
startet.
Lässt man den Motor unmittelbar nach der Impulsmessung hochfahren, nimmt 
man das nicht wahr.

von Carl D. (jcw2)


Lesenswert?

Ben B. schrieb:
> ROFL... jetzt braucht man schon einen STM32, um einen Motor zu drehen.
> Mal sehen was als nächstes kommt. Vielleicht einen Intel x64 mit 16
> HT-Kernen?!

Selbst ein x51 Single Core wäre genug, hätte er Timer, ADC und DMA eines 
STM32. Damit erzeugt man die 6 PWM für 3-Phasen-Sinus, je High/Löw-Side 
mit Deadtime ohne nach der Initialisierung noch einen Befehl ausführen 
zu müssen. Nicht wie auf dem Mega8 mit 2Timern und kontinuierlichen 
INT's zusammengeschustert. Und wenn der Leistungsteil ein Problem 
erkennt, signalisiert er dies dem μC per Break und die HW fährt die 
PWM-Ausgänge in eine Neutral-Position. Wieder reine HW, sub-μs-schnell, 
auch wärend COU-Sleep.

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.