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?
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.