www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ansatz für lenkeinschlagsabhängiger Geschwindigkeitsregelu


Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Niemand (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Brauchst du jetzt einfach nur den Dreisatz oder versucht du hier zwei 
Informationen Geschwindigkeit und Lenkeinschlag in eine PWM zu packen?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
pwmout = pwmsoll * lenkeinschlag / 128; //????

Oliver

Autor: sniper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UINT8 pwmValue; //0...100
UINT8 currentSteeringAngle; //0..128 0:geradeaus, 128: maximale Kurve
static const UINT8 steeringAngleMax = 128;


[...]

//bei einem PWM Wert von 100
if ( pwmValue == 100 )
{
  //die 128 des Lenkeinschalgs der 100 des PWM Signals...
  //die 0 des Lenkeinschlags soll der 0 des  PWM Signals...
  pwmValue = pwmValue * (currentSteeringAngle/steeringAngleMax);
}

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ß

Autor: maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>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.

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.