Hi, ich sitz hier gerade und bin am Verzweifeln. Ich möchte einen Motor in der Geschwindigkeit regeln. Und zwar nicht nur wie üblicherweise über ein PWM Signal zwischen 0-255, sondern der Wert des PWM Signals soll nochmal mit dem aktuellen Wert der Lenkung verrechnet werden. Also z.B. bei einem PWM Wert von 100 muss irgendwie der Lenkeinschlag von 0-128 hinbeigerechnet werden. Und zwar soll dabei die 128 des Lenkeinschalgs der 100 des PWM Signals entsprechen, die 0 des Lenkeinschlags soll der 0 des PWM Signals entsprechen. Im Prinzip ist das ganze ja ein lineares Gleichuingssystem, jedoch komm ich da auf keinen C-algorithmus um das ganze umzusetzen. Hat da vielleicht jemand ne Idee?
Brauchst du jetzt einfach nur den Dreisatz oder versucht du hier zwei Informationen Geschwindigkeit und Lenkeinschlag in eine PWM zu packen?
pwmout = pwmsoll * lenkeinschlag / 128; //???? Oliver
1 | UINT8 pwmValue; //0...100 |
2 | UINT8 currentSteeringAngle; //0..128 0:geradeaus, 128: maximale Kurve |
3 | static const UINT8 steeringAngleMax = 128; |
4 | |
5 | |
6 | [...]
|
7 | |
8 | //bei einem PWM Wert von 100
|
9 | if ( pwmValue == 100 ) |
10 | {
|
11 | //die 128 des Lenkeinschalgs der 100 des PWM Signals...
|
12 | //die 0 des Lenkeinschlags soll der 0 des PWM Signals...
|
13 | pwmValue = pwmValue * (currentSteeringAngle/steeringAngleMax); |
14 | }
|
Die PWM wird, so wie du geschrieben hast, nur bei PWM==100 mit dem Lenkwinkel verrechnet... Falls der Lenkwinkel von -128 (max. links) bis +128 (max. rechts)geht, müßtest du auf INT8 umstellen und zur Gewichtung der PWM noch kurz den Absolutwert von currentSteeringAngle bilden. Gruß
>>möchte einen Motor in der Geschwindigkeit regeln.<< wo ist dein regler? >>Und zwar soll dabei die 128 des Lenkeinschalgs der 100 des PWM Signals entsprechen<< was hat eine pwm ein motor und ein lenkeinschlag miteinander zu tun? m.
Danke für die Ansätze! Ich glaub ich hab mich oben falsch ausgedrückt. Also bei einem PWM Wert von 100 soll bei einem Lenkeinschlag von 0 der PWM Wert auf 255 steigen. Bei einem Lenkeinschlag von 128 soll der PWM Wert 100 bleiben. Das Ganze soll aber für alle PWM Werte zwischen 0-255 funktionieren. Und da bin ich auf der Suche nach einer Formel die das ganze abdeckt. >>pwmValue = pwmValue * (currentSteeringAngle/steeringAngleMax); funktioniert beim max. Lenkeinschlag, leider nicht mehr wenn der Wert kleiner wird. @maddin >>wo ist dein regler? Der Regler ist die PWM. >>was hat eine pwm ein motor und ein lenkeinschlag miteinander zu tun? Der Motor wird über die PWM in der Geschwindigkeit geregelt und soll abbremsen wenn gelenkt wird.
Tim wrote: > Danke für die Ansätze! > > Ich glaub ich hab mich oben falsch ausgedrückt. Ich denke, dein Problem ist momentan, dass dir selber noch nicht klar ist, wie das ganze konkret funktionieren soll. Wenn du das erst mal klar und verständlich (so dass es deine kleine Schwester ebenfalls versteht) formulieren kannst, ist der Rest nicht mehr so schwer. > > Also bei einem PWM Wert von 100 soll bei einem Lenkeinschlag von 0 der > PWM Wert auf 255 steigen. Bei einem Lenkeinschlag von 128 soll der PWM > Wert 100 bleiben. D.h. bei einem Lenkeinschlag von 0 soll immer Vollgas gegeben werden? Siehst du was ich meine: Das kann ich mir beim besten Willen nicht vorstellen, dass dein Auto immer Vollgas fährt nur weil zur Zeit keiner lenkt. 100 ist ungefähr Halbgas. Wenn ich als Pilot Halbgas vorgebe, dann meine ich auch Halbgas. > > Das Ganze soll aber für alle PWM Werte zwischen 0-255 funktionieren. Und > da bin ich auf der Suche nach einer Formel die das ganze abdeckt. > >>>pwmValue = pwmValue * (currentSteeringAngle/steeringAngleMax); > > funktioniert beim max. Lenkeinschlag, leider nicht mehr wenn der Wert > kleiner wird. Wenn welcher Wert kleiner wird? > Der Motor wird über die PWM in der Geschwindigkeit geregelt und soll > abbremsen wenn gelenkt wird. generell denke ich, dass du dir davon zuviel versprichst. Wenn du zu schnell in eine Kurve fährst und die Geschwindigkeit erst in der Kurve zurückgenommen wird, dann ist das längst zu spät. Eher sogar kontraproduktiv. Deine Reifen haben nur eine begrenzte Haftung. Die geht schon durch die Querbeschleunigung in der Kurve drauf. Wenn die Reifen dann auch noch Bremskräfte übertragen müssen, kommst du sogar eher ins Rutschen (Schleudern) als wenn du einfach nur durch die Kurve rollst.
Karl heinz Buchegger wrote: >> >> Also bei einem PWM Wert von 100 soll bei einem Lenkeinschlag von 0 der >> PWM Wert auf 255 steigen. Bei einem Lenkeinschlag von 128 soll der PWM >> Wert 100 bleiben. > > D.h. bei einem Lenkeinschlag von 0 soll immer Vollgas gegeben > werden? > Siehst du was ich meine: Das kann ich mir beim besten Willen > nicht vorstellen, dass dein Auto immer Vollgas fährt nur > weil zur Zeit keiner lenkt. 100 ist ungefähr Halbgas. Wenn > ich als Pilot Halbgas vorgebe, dann meine ich auch Halbgas. Zäumen wir das Pferd mal von hinten auf. Soll diese Beimischung der Lenkkomponente immer erfolgen oder nur bei Vollgas? Oder vielleicht so: Bei weniger als Halbgas hat die Lenkung keinen Einfluss auf das Gas. Erst ab Halbgas beginnt eine Beimischung, die immer stärker wird, je mehr du dich Vollgas näherst. Bei Vollgas ist es dann möglich, dass durch einen Lenkeinschlag die Gasstellung bis auf Halbgas zurückgenommmen wird. Je größer der Lenkeinschlag, desto mehr wird zurückgenommen. Der entscheidende Punkt: Die Gasstellung die der Pilot vorgegeben hat, wird nie eigenmächtig überschritten. Der Mischer kann maximal das Gas wegnehmen aber auf keinen Fall dazugeben.
>>Der Motor wird über die PWM in der Geschwindigkeit geregelt und soll abbremsen wenn gelenkt wird.<< das ist ja schonmal ein anfang, dennoch musst du mehr beschreiben. @Karl heinz Buchegger >>Siehst du was ich meine: Das kann ich mir beim besten Willen nicht vorstellen, dass dein Auto immer Vollgas fährt nur weil zur Zeit keiner lenkt. 100 ist ungefähr Halbgas. Wenn ich als Pilot Halbgas vorgebe, dann meine ich auch Halbgas.<< wo kommt denn jetzt auf mal das auto her!? also ich verstehe beim besten willen nicht wie hier antworten kommen können, oder ist meine fantasie so groß. ich habe beim ersten posting schon so viele fragen, das ich nie antworten könnte. PWM -> ist nie ein regler, du möchtest sicher was stellen. beschreibe den aufbau, dein ziel, die vorgaben usw.. sonst wird das doch nichts... m.
maddin wrote: >>>Der Motor wird über die PWM in der Geschwindigkeit geregelt und soll > abbremsen wenn gelenkt wird.<< > > das ist ja schonmal ein anfang, dennoch musst du mehr beschreiben. > > @Karl heinz Buchegger >>>Siehst du was ich meine: Das kann ich mir beim besten Willen > nicht vorstellen, dass dein Auto immer Vollgas fährt nur > weil zur Zeit keiner lenkt. 100 ist ungefähr Halbgas. Wenn > ich als Pilot Halbgas vorgebe, dann meine ich auch Halbgas.<< > > wo kommt denn jetzt auf mal das auto her!? Ooops. Du hast recht. Ich könnte schwören, das ich irgendwo weiter oben mal Auto gelesen habe. Steht da aber gar nicht. @Tim vergiss das mit der Kurvenhaftung. Ich bin von einem Auto (Modellauto) ausgegeangen. Das hast du ja bis jetzt gar nicht bestätigt.
@Karl heinz Buchegger Schon richtig, dann versuch ich mal es verständlich zu umschreiben. Also ich bekomme einen Wert von Poti zwischen 0-255 der meinen Motor in der Geschwindigkeit und zwischen Vorwärts und Rückwärts regeln soll. Das bedeutet, bei 127-128 ist die Mittelstellung, bzw. Stillstand des Motors. Da das Poti fast nie genau diese Mittelstellung hinbekommt, rechne ich für die Mittelstellung noch mal +/- 3. Nun müssen die 0-124 Werte für Rückwärts und 131-255 jeweils auf 0-255 umgerechnet werden, um den Motor so in der Geschwindigkeit zu regeln. Das ganze sieht dann so aus: if(PWM <= 124) //Rückwärts { PORTB &= ~(1 << PB1); PORTB |= (1 << PB0); rueck = (PWM * 2); OCR0A = rueck; } if(PWM >= 131) //Vorwärts { PORTB |= (1 << PB1); PORTB &= ~(1 << PB0); vor = ((PWM * (-2)) + 511); OCR0A = vor; } Jetzt möchte ich die Geschwindigkeit des Motors in Anhägigkeit vom Lenkwinkel regeln. Ob das Sinn macht, sei jetzt erst einmal da hingestellt. Und zwar hab ich bei der Lenkung, ähnlich wie beim PWM einen Wert von 0-255. Dabei ist 127-128 gerade aus, 0 ganz links und 255 ganz rechts. Jetzt möchte ich, je nach dem wie weit eingelenkt wird, den Motor abbremsen. Also z.B. beim Rechts lenken: PWM => 0 - 255 (nehmen wir einfach mal den Wert 30 als aktuellen) Bei einem Wert der Lenkung von 128 soll der PWM 30 erhalten bleiben. Desto weiter aber der Lenkwinkel gegen die 255 läuft(also weiter eingelenkt wird, soll auch der Wert der PWM gegen 255 gehen. Und für Links genau das selbe, nur das der Lenkwert dort gegen 0 geht, der PWM Wert aber weiterhin gegen die 255. Nur leider kann ich das nicht in nen C-Algorithmus umsetzen.
Tim wrote: > Jetzt möchte ich die Geschwindigkeit des Motors in Anhägigkeit vom > Lenkwinkel regeln. Ob das Sinn macht, sei jetzt erst einmal da > hingestellt. Reden wir von einem Auto? Es ist leichter wenn man sich konkret etwas unter der Anwendung vorstellen kann :-) > > Und zwar hab ich bei der Lenkung, ähnlich wie beim PWM einen Wert von > 0-255. Dabei ist 127-128 gerade aus, 0 ganz links und 255 ganz rechts. > Jetzt möchte ich, je nach dem wie weit eingelenkt wird, den Motor > abbremsen. Da würde ich gleich mal Folgendes machen. Den Lenkwert minus 127 und davon dann den Absolutwert. Damit hast du erst mal Links/rechts vom Tisch und einen Wert, der proportional zum Lenkeinschlag ist. 0 ... kein Lenkeinschlag 127 ... voller Lenkeinschlag Lenkeinschlag = Lenkung - 127; if( Lenkeinschlag < 0 ) Lenkeinschlag = -Lenkeinschlag; > > Also z.B. beim Rechts lenken: > > PWM => 0 - 255 (nehmen wir einfach mal den Wert 30 als aktuellen) > > Bei einem Wert der Lenkung von 128 soll der PWM 30 erhalten bleiben. *** D.h bei einem Lenkeinschlag von 0 bleibt dein Gaswert dort wo er ist. > Desto weiter aber der Lenkwinkel gegen die 255 läuft(also weiter > eingelenkt wird, soll auch der Wert der PWM gegen 255 gehen. OK. Je mehr du einlenkst desto größer wird der Lenkeinschlagswert (der maximal 127 werden kann, unabhängig ob rechts oder links). Wenn du den Lenkeinschlagswert gewichtet zum Gaswert addierst sind wir soch schon fast dort. > > Und für Links genau das selbe, nur das der Lenkwert dort gegen 0 geht, > der PWM Wert aber weiterhin gegen die 255. Das ist durch die Einführung des Lenkeinschlagswert unerheblich. Der Lenkeinschlag ist unabhängig von links/rechts. > > Nur leider kann ich das nicht in nen C-Algorithmus umsetzen. Vielleicht hilft dir das ja als Anregung weiter.
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.