See [anytrim]
Note that some combinations can be configured, but not normally configured because meaningless:
- Lambda target trim can be adjusted based on Lambda-Target (difference from target) (meaningless)
- however the RPM based dwell has not been implemented (in anytrim or elsewhere)
- RPM based dwell is normally not needed. But some old, low-tech distributers require long dwell at idle and low RPM, but don't work well at high RPM with long dwell (misfire at high RPM with long dwell, almost like a HW rev limiter). So appr +20% dwell at low RPM might be reasonable (likely not overheating the ignition transformer at low RPM, should be safe).
- (config_ext.anytrim3_type & 0xF0) == 0x10) means "lambda trim"
- if(anytrim3_in == 0x31) // ... that is lambda - lambda_target
- then special extend dwell at low RPM (based on certain values, or linearly +20..0% from 0 to 4000 RPM ?)
Gory details... to check config and/or VemsTune ini based on this, just in case
- trimconfig == 0x31 means lambda - lambda target diff input
- trimconfig == 0x32 means scale with tps saturate at 60%
- trimconfig == 0x33 means scale with tps saturate at 90%
- trimconfig == 0x34 means scale with map saturate at 60 kpa
- trimconfig == 0x35 means scale with map saturate at 90 kpa
So Please note if( trimconfig >= 0x31 && trimconfig < 0x36) ... have special scaling above 0x31, and the lambda - lambda target calculation has some special cases for sparkcut, fuelcut and similar special modes.
- Also,
The anytrim_type config bits are (roughly) the following:
<PRE>
- define ANYTRIM_PW 0 // 0
- define ANYTRIM_LAMBDA 16 // 1
- define ANYTRIM_SPARK 32 // 2
- define ANYTRIM_CRANK 48 // 3
- define ANYTRIM_BOOST_MUL 64 // 4
- define ANYTRIM_BOOST_ADD 80 // 5
- define ANYTRIM_BOOST_REF_ADD 96 // 6
- define ANYTRIM_LAUNCH 128 // 8
- define ANYTRIM_SOFTCUT 144 // 9 .. only used by partial fuelcut function
- define ANYTRIM_REVLIMIT 160 // 10 .. all rev limiters hard and soft except partial fuelcut limit
// Anytrim Types NOT ALL FUNCTIONS LISTED!!!
uint8_t anytrim1_type; // anytrim 1 bit 7:4 mode:bit7:4 0=fueltrim, 1=lambdatrim, 3=crank_pw adjust, 8=launch, F=disable;
uint8_t anytrim2_type; // anytrim 2 mode:bit7:4 0=fueltrim, 1=lambdatrim, 3=crank_pw adjust, 4=boost target trim mult, 5=boost target trim add, 6=boost ref add, F=disable;
uint8_t anytrim3_type; // anytrim 3 mode:bit7:4 1=lambdatrim, 2=spark adjust, 3=crank_pw adjust, 9=softcut, F=disable;
uint8_t anytrim4_type; // anytrim 4 mode:bit7:4 0=fueltrim, 1=lambdatrim, 3=crank_pw adjust, 4=boost target trim mult, 5=boost target trim add, 6=boost ref add, F=disable;
uint8_t anytrim5_type; // anytrim 5 mode:bit7:4 0=fueltrim, 1=lambdatrim, 3=crank_pw adjust, 4=boost target trim mult, 5=boost target trim add, 6=boost ref add, F=disable;
uint8_t anytrim4_array[17]; // anytrim4 values
uint8_t anytrim5_array[17]; // anytrim5 values
</PRE>
Either Anytrim 1, Anytrim 2 or Anytrim 3 (or Anytrim4 or Anytrim 5 ) but:
Lambda target, Launch RPM and Cranking pulsewidth can be trimmed by only one Anytrim control at the same time
- (if you enable it multiple times, the first function will take action ... or undefined behavior).
- TODO: review and retest the effect of noncompliant setting (likely ignored)