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?
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.
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).
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.
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.
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.
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.
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?
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 ;-)
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.
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
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 ;)
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?
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
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/997804Alexander 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.
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.
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
> 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.
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.
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.
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.
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.
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
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.
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.