Geschwindigkeitsbeschränkung

Die maximale Geschwindigkeit des Wheelie zu beschränken ist nicht so einfach wie bei anderen Fahrzeugen. Zu jedem Zeitpunkt muß die Balance gewahrt bleiben. Darum gibt es 2 Ansatzpunkte die möglich sind:

  • Der Nullpunkt der Plattform, also die Horizontale wird verschoben und somit bewegt sich der Lenker immer weiter Richtung Fahrer und "drückt" den Fahrer auf der Plattform aus der Balance nach hinten. Das korrigiert das Wheelie mit Verringerung der Geschwindigkeit.
  • Der Regelung werden verfälschte Werte der Plattformlage übergeben. Diese täuschen eine zu stark nach vorne geneigte Plattform vor. Die Regelung reagiert darauf mit der Beschleunigung des Wheelie, was wiederum den Fahrer nach hinten aus der Balance bringt. Dieser zieht den Lenker mit nach hinten, das Wheelie bremst ab.

Beide Versionen haben ihre Eigenheiten, im Wheelie ist die erste Version realisiert worden. Im unteren Codeausschnitt ist der Kern der Geschwindigkeitsbegrenzung dargestellt.

 

   'Subtract   1/250th   of   the   value
   Buf = Total_adxl_gyro / Total_looptime
   Total_adxl_gyro = Total_adxl_gyro - Buf
   Buf = Ad_adxl - Adxl_zero  'Deviation from horizontal position
   #if I2c_enable = 1
      'The Software Speedlimit (km/h * 2 * 5 * 10)
      If No_speed_limit_flag = 0 Then
         If Speed_sum > 600 Then
            Incr Temp_adxl_zero
         Else
            If Temp_adxl_zero > 0 Then
               Temp_adxl_zero = Temp_adxl_zero - 3
               If Temp_adxl_zero < 0 Then Temp_adxl_zero = 0
            End If
         End If
         If Temp_adxl_zero > 70 Then Temp_adxl_zero = 70
         Buf = Buf + Temp_adxl_zero
      End If
   #endif
   Total_adxl_gyro = Total_adxl_gyro + Buf  'A new 1/250th value is added

 

Die Variable Adxl_zero hält die Horizontale der Plattform. Diese wird beim Betätigen des Fußschalters vor dem Start ermittelt. Speed_sum ist die Summe der Geschwindigkeit beider Räder über 5 Werte integriert. Der ermittelte Wert wird gleich noch mit 10 multipliziert um Rundungsfehler bei unseren Ganzzahlvariablen klein zu halten. So errechnet sich Speed_sum 6km/h * 2 * 5 * 10 = 600. Ist Speed_sum größer als 600 wird der Korrekturwert Temp_adxl_zero um 1 erhöht, die Plattform neigt sich ein wenig nach hinten. Das passiert bei jedem Scheifendurchlauf, bis der Fahrer vernünftig wird und die Geschwindigkeit drosselt oder der Lenker ihn nach hinten zwingt. Fällt jetzt die Geschwindigkeit unter 6km/h dann wird Temp_adxl_zero wieder verringert. Der Korrekturwert wird auf 70 beschränkt.