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?
Wird nichts anderes wie bei anderen sein.. z.B.: https://www.ulrichradig.de/home/index.php/avr/brushless-motor-controller Source-Code und Schaltplan
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).
Hat jemand Infos zur SimonK-Firmware für ESCs? Was wird in dieser Firmware für ein Anlaufverfahren verwendet?
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 ;)
:
Bearbeitet durch User
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
:
Bearbeitet durch User
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.
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.
:
Bearbeitet durch User
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
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?!
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.