Neue Erkenntnisse zum Alpha-N Setup.
Die Idee mit der 2. Map funktioniert super.
Ich habe Quasi einen "Lean Mode" eingeführt, der sich aktiviert, wenn TPS für länger als 0,6 Sekunden unter 10% fällt und nach überschreiten der 10% Grenze noch 1,5 Sekunden lang aktiv ist und ein erheblich magereres Kennfeld beinhaltet.
Jetzt zündet der Motor wieder, nachdem bei hohen Drehzahlen der Gashahn geschlossen wurde und dann wieder voll aufgerissen wird.
Die Routine habe ich erstmal an einen externen Controller ausgelagert, da der Speeduino Code doch extrem umfangreich ist und das so erstmal deutlich einfacher war.
Code
#include <Wire.h>
#define MAP_SWITCH 4 // Mapswitch zur Speeduino, Low = 2nd Fuel Table
#define LED_PIN 13 // Kontrolllicht "Lean Mode"
int PIN_TPS = A7;
int set = 10; // TPS Wert unter dem der "Lean Mode" aktiviert wird
int TPS_VAL =0 ;
int TPS = 0;
unsigned long CurrentMillis = 0;
unsigned long NormalMillis = 0;
unsigned long LeanMillis = 0;
unsigned long Normal_timer = 0;
unsigned long Lean_timer = 0;
const int32_t Normal = 1500 ; // Dauer für die Restaktivität des Lean mode trotz Schwellwertüberschreitung
const int32_t Lean = 600 ; // Verweildauer bis der Lean mode nach Schwellwertüberschreitung greift
void setup() {
Serial.begin(9600);
pinMode (MAP_SWITCH, OUTPUT);
pinMode (LED_PIN, OUTPUT);
digitalWrite (MAP_SWITCH, LOW);
digitalWrite (LED_PIN, HIGH);
}
void loop() {
TPS_VAL = analogRead (PIN_TPS);
TPS = map(TPS_VAL, 50, 910, 0, 100 );
CurrentMillis = millis ();
if (TPS <= set){
Normal_timer = millis ();
if (CurrentMillis - Lean_timer >= Lean){
digitalWrite (MAP_SWITCH, LOW);
digitalWrite (LED_PIN, HIGH);
}
}
if (TPS > set) {
Lean_timer = millis ();
if (CurrentMillis - Normal_timer >= Normal){
digitalWrite (MAP_SWITCH, HIGH);
digitalWrite (LED_PIN, LOW);
}
}
Serial.print("Analog.val=");
Serial.print(TPS_VAL);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Serial.print("TPS.val=");
Serial.print(TPS);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}
Alles anzeigen