Strom bei BLDC Controller exponentiell ansteigen lassen, oder gleich Kennlinie?
-
Hallo Leute.
Ich habe einen Open Source BLDC Controller, bei dem ich gernde den Sourcecode so ändern möchte,
dass der Strom der dem Motor gegeben wird exponentiell zur Gaspedalstellung ansteigt, anstatt linear,
um zu verhindern, dass das Fahrzeug in dem der Controller drin ist schon bei um 3mm gedrücktem Gas fast
30 fährt.Nun wollte ich mal fragen, wie man sowas in C machen kann, und ob es vielleicht auch gehen würde, gleich eine
Gaspedalkennlinie wies z.B. beim (E) Auto ist einzufügen.Hat irgendwer hier Beispiele wie so ein exponentieller Antieg in C aussieht?
Ich denke mal es wird recht aufwändig sein, das per Kennlinie zu machen, da man dann ja auch
dem Controller (STM32F103CBT6) beibringen müsste, diese Kennlinie zu verarbeiten, und das wird nicht ohne sein?Ich hoffe es kann mir hier einer helfen, an dem Problem komme ich selber nicht weiter.
Gruß
-
@ME20001
Das klingt als bräuchtest du eine kleine Tabelle.Deine Gaspedalstellung ist beschränkt und dürfte zwischen 0 und 300mm liegen. Die Stromstärken dürften zwischen 0 und x mA liegen.
static const int16_t TargetCurrent[300] { ... }
TargetCurrent[0] liefert dir dann die Sollstromstärke bei 0mm Durchdrückung des Gaspedals, TargetCurrent[42] die Stromstärke bei 42mm Durchdrückung, usw
-
@ME20001 sagte in Strom bei BLDC Controller exponentiell ansteigen lassen, oder gleich Kennlinie?:
dass der Strom der dem Motor gegeben wird exponentiell zur Gaspedalstellung ansteigt
Eine Frage: Welchen Typ von Motor nutzt du?
Ich kenne da nur Schrittmotoren. Und da bestimmt die Anzahl der Ticks (Schritte) die Geschwindigkeit.
-
Das ist ein BLDC, das Fahrzeug ist ein E Scooter, je mehr Spannung der Motor bekommt, desto schneller
läuft er. im Grunde ein direkt kommutierter DC Motor. Der braucht 3 Phasen, aber er wird nicht Frequenzgeregelt, sondern
durch Spannung. Daher kann man ihn auch über den Strom Regeln, je mehr Strom desto höher wird die Spannung (Lastabhängig) im Motor, desto schneller läuft er.Das Problem ist nun, dass wenn das Gaspedalverhalten linear ist, der Scooter z.B. wenn es leicht bergab geht nicht viel
Strom braucht um z.B. schon 20 zu laufen. Das ist aber schlecht, weil es dann schwirig ist, geringe Geschwindigkeiten zu fahren. Daher wäre natürlich das beste ein Kennfeld wie beim Auto, das hat soweit ich weiß noch kein E Scooter der Welt, aber es dürfte wohl auch nicht ganz ohne sein, sonst hätten es schon andere gemacht.Die Frage ist jetzt also wie man das mit dem exponentiell ansteigen bei einem Motor dessen Geschwindigkeit spannungsgeregelt wird macht.
Im Generellen setze ich den Controllertyp auch in anderen Anwendungsfällen als beim E Scooter ein wenn ein BLDC Motor gesteuer werden muss.
BLDC´s haben aber alle gemeinsam, dass sie Spannungs, nicht wie Steppermotoren frequenzgeregelt werden.
Hier ist die Source für die Open Source Firmware die ich nutze, du kannst sie dir ja mal ansehen:
https://github.com/EBiCS/EBiCS_FirmwareDa wärs schön wenn es da eine Lösung gäbe, das mit dem exponentiell hinzukriegen, oder später vielleicht sogar Kennfeld.
Leider bin ich mit C noch nicht so weit, das zu können
Gruß
-
@ME20001 sagte in Strom bei BLDC Controller exponentiell ansteigen lassen, oder gleich Kennlinie?:
Die Frage ist jetzt also wie man das mit dem exponentiell ansteigen bei einem Motor dessen Geschwindigkeit spannungsgeregelt wird macht.
Das hatte ich beschrieben. Du schreibst in dem Array die Sollströme oder was auch immer hin. Der Index entspricht den Millimetern ser Durchdrucks. In dem Array kann also beispielsweise { 0, 1, 2, 4, 8,... } stehen.
Und sei vorsichtig mit exponentiellen Funktionen, sonst gibts gegrillten Motor zum Abendessen. Achte unbedingt darauf den Motor nicht zu überlasten.
Ich bin mir auch nicht sicher ob exponential hier gut ist. Man könnte mal linear, quadratische, kubisch ausprobieren.
Kann man alle über das Array steuern.
-
@ME20001 sagte in Strom bei BLDC Controller exponentiell ansteigen lassen, oder gleich Kennlinie?:
Leider bin ich mit C noch nicht so weit, das zu können
Weißt du was Arrays sind?
-
Nicht so richtig, aber ich les mich da mal rein.
Die Firmware lässt eine Strombegrenzung zu, die ist aktuell genutzt um den Motor am Grillen zu hindern,
hoffe mal, dass die Strombegrenzung später noch funktioniert.Wenn ich gut genug programmieren könnte, würde ich ja wie beim Auto gleich ein (3D) Kennfeld reinbasteln,
mit dem dann der Strom auch gleich begrenzt werden kann (Kennfeld geht nur z.B. bis 10A) und auchgleich die
Offsets für das Gas definiert werden.Aber bis ich das kan (Wenn ichs überhaupt je kann) wirds noch dauern...
Das wäre das mit den Arrays dann schon besser.
Die Frage ist halt auch WO man das in der OS am besten dann einfügt.
Ich bin in Sachen programmieren leider noch wirklich neu.
-
@ME20001 sagte in Strom bei BLDC Controller exponentiell ansteigen lassen, oder gleich Kennlinie?:
Ich bin in Sachen programmieren leider noch wirklich neu.
Dann lerne doch erst einmal richtig programmiern. Wenn du fit bist, kannst du auf die Embedded Welt wechseln und dich mit den Eigenschaften eines Controllers befassen (Stichwort Timer, DMA,...). Du schnappst dir also ein Testboard von STM oder anderen und programmierst hierfür. Wenn du dann fit bist, kannst du dich mit Regelkreisen und Motorsteuerung befassen.
-
@ME20001 sagte in Strom bei BLDC Controller exponentiell ansteigen lassen, oder gleich Kennlinie?:
Die Frage ist halt auch WO man das in der OS am besten dann einfügt.
Das ist Teil deines Programms und nicht des OS.
Es ist üblich das Geschwindigkeitsprofil hart kodiert ins Programm zu speichern. Möchte man aber dieses zur Laufzeit ändern, so kann das Profil auch aus einer Konfigurationsdatei geladen werden.
-
Sorry, OS meite nicht OS = Betriebssystem, der Controller hat kein Betriebssystem, das ist alles Bare Metal, OS heißt in
dem Fall Open Source Software.Ich seh mir das ganze mal weitergehend an, vielleicht komm ich dann weiter.
Es gibt nirgendwo was zu lesen, wo erklärt wird, wie in C Kennfelder verarbeitet werden?
Das wäre schon mal hilfreich.Gibt es denn nicht die Möglichkeit gleich mit Embedded Dingern (E Scooter Controller) anzufangen, statt
erst mit Windows oa. zu lernen? Immerhin habe ich nie vor irgendwas in Richtung Windows Programm zu schreiben, sondern wenn dann nur Firmware für ARM´s, spezifisch den STM31F und deren Derivatgedöns.Ich kenne Leute die heute sehr gut programmieren können, die sagen "Sieh dir Code an, den ein anderer (Professioneller)
geschrieben hat, dann lerne, ihn zu ändern" Das Probpem ist nur, dass in der heutigen Zeit halt keiner mehr Quellcode von irgendwas hergibt, weil die alle Angst haben, dass einer sonstwas Geheimnisse darin finden könnte.Wenn ich da so denke wie der E Scooter mit dem original Controller gelaufen ist, das war ja furchtbar.
Es geht auch nicht darum, das Ding schneller zu machen (Das gibt der Motor eh nicht wirklich her) sondern das allgemeine Verhalten zu ändern, am besten (Ja das klingt verrückt würde aber zumindest theoretisch gehen) in Richtung E Auto. Wenn man bedenkt wie sich so eines fährt, und dann bedenkt wie sich so ein E Scooter vom Verhalten her fährt...
Dabei sind beide technisch das selbe, BLDC Motor mit Controller, heißt im Umkehrschluss = E Scooter kann genauso suber und präzise aufs Gas reagieren, wie ein E Auto das tut, wenn man nur eine gescheite Firmware dafür schreibt.
Wenn das nicht so ein Sauaufwand wäre, hätte es aber wohl schon einer getan, und dann kommt natürlich noch das Hauptproblem, dass der STM32F103CBT6 nicht gerade das schenllste Stück Silizium ist, und ein E Auto Inverter erheblich mehr Rechenwumms zur Verfügung hat, demnach auch viel komplexere matehmatische Modelle nutzen kann, um das Drehfeld zu erzeugen, der STM32F103 ist ja schon mit Kalmann bei hohen Drehzahlen überfordert...
Trotzdem nervt es dass diese kleinen Fahrzeuge immer laufen müssen wie ein Sack Nüsse, obwohl es VIEL besser gehen würde. Ich frag mich echt warum man nicht einfach mal einen bauen kann der ab Werk RICHTIG läuft. Ich meine ein STM32F4 kostet ein Paar Cent mehr, das würde den Braten nicht fett machen, aber gut, es denkt nicht jeder wie ich, und die anderen sind zufrieden, und kaufens, damit kann mit den Fahrzeugen so wie sie sind Geld verdient werden, damit: Mission Accomplished, für die Hersteller und Verkäufer. Im Fall von meinem Fahrzeug wars aber Werk noch nicht mal ein STM32F1, sondern einer aus der F0 Serie, die sind noch langsamer als die einser...
-
Gibt es denn nicht die Möglichkeit gleich mit Embedded Dingern (E Scooter Controller) anzufangen, statt
erst mit Windows oa. zu lernen? Immerhin habe ich nie vor irgendwas in Richtung Windows Programm zu schreiben, sondern wenn dann nur Firmware für ARM´s, spezifisch den STM31F und deren Derivatgedöns.In der Informatik gibt es eine goldene Regel: Divide and Conquer. Zerlege ein Problem in lauter kleinere Teilprobleme, welche einfacher zu lösen sind und löse diese.
In deinem Fall wären dies:
- Programmieren lernen
- Embedded Controller anhand eines Testboard verstehen
- Embedded Controller mit Hardware verstehen
- Praxisaufgabe: Wie steuere ich einen Motor mit Geschwindigkeitsprofilen? Bennötige ich eine Kalibrierung?
Das lernen einer Programmiersprache ist und bleibt eine Grundlage. Du musst ja keine riesigen Programme entwickeln, sondern dich nur mit den Grundlagen befassen. Ich denke für den Anfang wäre es wichtig zu wissen wie die Eingaben erfolgen, wie du diese sauber verarbeitest (Stichwörter Datenstrukturen, Funktionen) und wie die Ausgaben erfolgen. Das ist eine eigene Welt.
Und dann wechselst du auf den Embedded Controller. Wiederrum eine eigene Welt, mit Interrupts, Timern, Pins,... Während beim erlernen der Programmiersprache Doku wie https://en.cppreference.com/w/ dein Freund ist, ist bei Embedded Controller das CPU Datenblatt dein Freund. Und gerade wenn du Bare Metal programmierst.
Wenn du nun direkt mit deinem Problem anfängst, ist die Gefahr groß dich zu überfordern. Und das raubt die Motivation.
Es gibt nirgendwo was zu lesen, wo erklärt wird, wie in C Kennfelder verarbeitet werden?
Das wäre schon mal hilfreich.Was meinst du mit Kennfelder?
Trotzdem nervt es dass diese kleinen Fahrzeuge immer laufen müssen wie ein Sack Nüsse, obwohl es VIEL besser gehen würde. Ich frag mich echt warum man nicht einfach mal einen bauen kann der ab Werk RICHTIG läuft. Ich meine ein STM32F4 kostet ein Paar Cent mehr, das würde den Braten nicht fett machen, aber gut, es denkt nicht jeder wie ich, und die anderen sind zufrieden, und kaufens, damit kann mit den Fahrzeugen so wie sie sind Geld verdient werden, damit: Mission Accomplished, für die Hersteller und Verkäufer. Im Fall von meinem Fahrzeug wars aber Werk noch nicht mal ein STM32F1, sondern einer aus der F0 Serie, die sind noch langsamer als die einser...
Wie läuft es denn besser? Bedenke die Anforderungen an dein System:
- Das System muss mit wenig Strom auskommen, damit die Akkus eine möglichst hohe Laufzeit haben.
- Das System muss bei Wind und Wetter laufen. Also auch bei -20° bis +50°, direkter Sonneneinstrahlung und hoher Luftfeuchtigkeit. Das hat Einflüsse auf Timer, Kommunikation und andere Bauteile.
- Das System darf nicht übermäßig Abwärme produzieren.
- Das System muss fehlerresistent sein und darf nicht zu einem Unfall führen. Sollte ein Teil ausfallen, so muss ein sicherer Zustand erreicht werden.
- Sofern das System über IOT Fähigkeiten verfügt, sollte es soweit wie möglich resistent gegenüber Angriffen sein.
- Die Bauteille sollten möglichst wenig kosten. Beispielsweise macht eine Ersparnis von 1 Cent pro Controller bei einer Stückzahl von einer Million eine Ersparnis von 10000€.
- Das System sollte in Echtzeit reagieren.
- Der erste Prototyp muss morgen auf der Messe vorgeführt werden.