VEMS ECU (GenBoard/VerThree) Firmware has improved ALS since 1.0.23 - ALS, LaunchControl, Soft revlimiter, etc
With this modification, the current ALS code reworked a little to meet racer's needs. Several options implemented, whose you see only on expensive professional systems before. Take a look to the setup window:
Let me explain the config variables:
Global settings
- Low RPM: ALS (retard, enrichment, spark-cutting) is disabled below this rpm to avoid engine stalling. You normally don't reach this on a working system, only while experimenting. Suggested value: near your idle RPM without enabled ALS. Easy to misunderstand this. ECU will NOT try to maintain this "low-RPM" . ECU simply disables ALS below this RPM, which - depending on ALS setup might or might NOT result in maintaining this RPM. Eg you might not supply enough air to reach it and than RPM will be below this low-RPM. Not reached in normal operation (RPM normally above this; only to prevent engine-stall in certain conditions). In 1.1.x branch, since 1.1.5, replaced by individually configurable blended RPM ranges, separate for igncut and retard. Below rpm1, the function is disabled. Above rpm2, it has full effect (depending on tps, of course). Between rpm1 and rpm2 it's blended. Igncut RPM-s are normally lower than retard RPM-s:
- als_igncut_rpm1
- als_igncut_rpm2
- als_retard_rpm1
- als_retard_rpm2
- Deactivation time: ALS disabled after the specified interval. Suggested value: 5-15 seconds. set always!
- Deactivation EGT: ALS disabled if exhaust gas temperature is over the specified limit. Suggested value: 800 degrees Celsius. (under the melting point of your exhaust system material...) set always!
- Reactivation Minimum TPS: After deactivation (time elapsed), you only need to open throttle wider than this value to re-activate the ALS. Suggested value: 70-80%. Always set this higher than all 'Decrease end TPS'-es!
- Fuel enrichment: The fuel surplus while the ALS is active. Suggested value: 15-25%.
- Throttle kicker solenoid: (see ThrottleKickerKicker) Define an output channel if you have one (always-open-throttle-racecar-owners simply disable and forget this option :-) ). The firmware automatically release the TKS if the conditions disabled the ALS, even the ALS switch is on.
ALS Ignition retard example (with als_retard = 50 degrees):
ALS ignition cut is similar, but the 2 RPM thresholds, the 2 TPS thresholds and the max cut can be adjusted independently.
OLD drawing (same, but different axis): igniton retarding and spark cutting is done as seen of the figure:
Note: the horizontal axis is labelled TPS, don't think that is RPM!
Ignition Retarding
- Maximum retard: The maximum ignition retarding value needed when you release the pedal. Suggested value: The highest ignition advance value plus 5-10. Zero disables retarding.
- Decrease start TPS: The maximum throttle opening you want to use the maximum retard. Suggested value: The TPS value you read with active throttle kicker plus 10-20%.
- Decrease end TPS: The minimum throttle opening you don't want to use ignition retarding. Suggested value: Set the minimum throttle where the engine can produce the desired boost. It must be 40-60%, or you need to re-think your engine implementation. If you set this too low: the turbo lag will be bigger. If you set this too high: the engine will be too weak.
Spark Cutting
- Maximum cut level: Percentage of sparks to be 'cut' (dismiss the event). The maximum ignition cut value needed when you release the pedal. Suggested value: 20-30%. Zero disables spark cutting.
- Decrease start TPS: The maximum throttle opening you want to use the maximum cut level. Suggested value: Simply set the TPS value you read with active throttle kicker. Add more 5%, when needed.
- Decrease end TPS: The minimum throttle opening you don't want to use ignition retarding. Suggested value: 10-20% bigger than start TPS.
You can enable ALS functions in my_make:\nÿ1ÿ
Override default maximum 20 degree ATDC limit:\nÿ2ÿ
The patch contains implementation of three new soft revlimiters. Soft revlimiters cut spark instead of cutting fuel if the desired maximum rpm are about to beaten. These are used for idle control, launch control and redline control. Idle control is TPS sensitive, and disabled, if ALS enabled and working. Launch control can be enabled with a button on the steering wheel, and it can be combined with the ALS. Redline control is for normal overrun protection without unsafe lean run, which is essential for the turbo engines. All (soft)revlimiters in one window:
And there is a little explaining about these.
Idle control
Used on racecars, where no other methods (IAC stepper, PWM solenoid) can be applied, especially where always open throttle is needed. The main function is to limit the rpm on a reasonable low range, when the pedal is depressed, and ALS is not active. See the figure.
Sorry for not commenting this earlier, I thought that "spark cut" was a typo. NOTE that this should be fuel cut in most cases as it cools the engine and exhaust. The function is called ALS_COOLDOWN by Autronic. -Jörgen
The lower "target rpm" and normal fuel amount will make the spark cut run cooler then ALS and it can be useful for keeping the tempreature of the manifold and turbo up when idling before the start. We should be able to choose fuel cut or spark cut for the "ALS_IDLE" I suggest that we call this function ALS_IDLE.
Note that spark cut is likely to cool the exhaust efficiently when the exhaust is not white-hot. But when the exhaust is extremely hot it's likely that the fuel will burn the second it enters the exhaust and this might be dangerous. -Jörgen
- Enable: Enable or disable sparkcut based idle control.
- Minimum RPM: The operational range starting rpm. Suggested value: 800-1000.
- Maximum TPS: The maximum TPS where the idle control allowed to operate. Suggested value: The idle TPS value (0% in normal case), or add more 2-3%.
- Control range: The operational range. Suggested value: 200-300.
You can enable spark-cut based idle control in my_make:\nÿ3ÿ
See LaunchControl (all below is for geeks only).
Used on start line, to achieve best performance with the less effort. Driver must press gas pedal to 100%, and press a button on the wheel. Launch control routine need to limit the rpm into a desired range, while the button pressed, and allow ALS to work (ALS normally disabled on so high TPS). See the figure how it is achieved:
- Minimum RPM: The operational range starting rpm. Suggested value: The highest torque rpm, or whatever.
- Control range: The operational range. This one can be set via the control range of the redline control. Suggested value: 200-500.
Launch control normally enabled in my_make:\nÿ4ÿ
- TODO: How to configure button input
Q: How to archieve constant boost using launch control? We need lower boost than boost control gives at 100% TPS. Say 1.2 bar on launch control but full boost near 2bar. Currently launch control manage retard relatively to advance table. as boost start to rising -> spark retards -> boost rises... It is labile situation: Process at beginning gives relatively slow boost bulid-up because of less retard than little later. Then during ~2-4 seconds (it is too long when other driver is ready on start) boost rises up too maximal and it causes overspinning from startline. Driver have no control over. Is there some way to manage it? GintsK
Redline control
Simple sparkcut-based revlimiter, used below the hard RPM limiter, as you see on this figure:
- Minimum RPM: The operational range starting rpm. Suggested value: Hard rpm limit minus the control range.
- Control range: The operational range. Suggested value: 200-500.
You can enable launch control in my_make:\nÿ5ÿ
If you are understand and accepted the warnings generated in compile time, when using SOFTRPM based new functions, you can disable them with the following line in my_make:\nÿ6ÿ
Fero's ALS related suggestions
- under testing in stable1_1: +64 -64 degs of ignition window
- dropped: absolute (from TDC) retard degrees was implemented, but changed back to relative (relative to igntable values). Note that bigger retard at higher boost is a GOOD thing. ALS is about regulating power (it will not lower your boost if that's what you're concerned). When you need full power, press TPS and ALS will be off. However, this can be investigated with some real experimentation, with log-analysis and discussion. This alone does not mean that it's the good thing, but motec also uses relative retard.
- REJECTED: with ALS input active, ALS mode is active until the time limit is reached, even if TPS is 0% ! done this way from the start.
- DONE: Solenoid open all the time if als_igncut_rpm1(=als_deact_rpm for 1.0.x)="odd RPM" (such as 2100 or 2300 RPM), when ALS switch is on. Solenoid is only switched off if any safety variables exceeded.
- with als_deact_rpm="even RPM" such as 2000 or 2200 RPM, solenoid is switched off with full throttle. This even/odd RPM is a temporary solution to test how it works and provide quick solution for both dragrace and rally lovers.
- POSTPONED: Solenoid PWM current limiting for high current solenoids.
- DONE: smooth RPM ranges, so ignition cut and the retard blended away smoothly at low RPM
How to disable ALS
The below config snippet (variables directly available since 1.0.32) disables ALS: (and kpa_conf configures reasonable unit for KPA-pressure related variables, 2 kPa for kpafac and 1 kPa for other variables including the k[] bins). kpa_conf=22 applies for the high-boost megatune profile (config units is 2kPa everywhere), for an engine that needs further retard and VE-increase above 256 kPa MAP (with this, engine mappable upto 510 kPa, above which further retard or VE-increase is not possible, but injector pulsewidth will continue to grow proportionally with even higher MAP of course).\n
als_cut_maxtps=00 als_cut_mintps=FF als_deact_egt=00 als_deact_rpm=FF als_deact_time=01 als_enrich=00 als_max_cut=00 als_react_tps=00 als_retard=00 als_retard_maxtps=00 als_retard_mintps=FF als_tks_channel=FF als_rev_limit=40 ign_balance=00 kpa_conf=21
Here is the quick path to start upgrade from a pre-ALS firmware to an ALS firmware. This minimizes the chance to get bitten by serious unintentionaly retard accidentally activated.
- save the above config snippet as config.txt
- save the (Man)mct dump to etc/mct.txt
- save the (Man)mcd dump to etc/mcd.txt (these will not have als_.. variables since you've started from a pre-ALS firmware)
- run make mtt (make_config.bat or whatever. It effectively runs perl bin/make_conf.pl global.h etc/config.txt etc/config.mtt command
- Any value in etc/mcd.txt will take priority over etc/config.txt
- TODO: verify if wintools notices etc/mcd.txt and uses the values to override the etc/config.txt
- save the error/output and examine any variables with warning or error
- upload etc/config.mtt to the ECM
Uploading the tables is similar (although it can be done from MegaTune - Remember to use a recent MegaTune for the ALS firmware):
- perl bin/make_tables.pl global.h etc/config.txt etc/config.mtt command
- upload the etc/tables.mtt
If you have questions, remember to use your MembersPage and provide all necessary info as on IssueReports. Eg. (especially when testing an experimental firmware), when you suspect there is no retard in ALS mode, look at the "spark-angle" gauge or capture logs. This will certainly help identify the issue.
- Low RPM limit
- Changed to be a minimum rpm to maintain using sparkcut
- Deactivation time
- Still needed
- Deactivation egt
- Still needed
- Reactivation min tps
- This is ripped, Reuse the variable "als_retard_maxtps" instead
- ALS mode new idle tps% placed here instead
- This is ripped, Reuse the variable "als_retard_maxtps" instead
- Fuel enrichment (%)
- Still needed, will be decreased with the "Retard decrease start / end tps" settings. Now (in 1.1.x) als_enrich fades away with retard (fading away). That is, at max TPS (where no retard) => normal VE table used, no ALS enrichment.
- Maximum retard
- Still needed
- Retard decrease start tps
- Still needed
- Retard decrease end tps
- Still needed
- Spark cut max %
- SC decrease start tps
- SC decrease end tps
- igncut and retard fading at low RPM:
- als_igncut_rpm1
- als_igncut_rpm2
- als_retard_rpm1
- als_retard_rpm2
Launch Control suggestion
Deactivate launch using TPS (without clutch or simular switch),
- We would still need an input for launch ON/OFF.
Example: We set high and low TPS value for the launch to be activated. Low=50% (???), High=90%.
- Outside these values the launch would be deactivated.
- if you hold 80% trottle, the launch would be active.
- On takeoff press TPS=100% and you dont have to struggle with Launch staying on and adjusting your Launch switch.
- If he accidentally presses TPS>90% before the clutch is engaged, the engine blows up
- maybe if there is also a min dTPS/dt requirement.... So he need to apply a sudden +dTPS, and be above the high TPS threshold to deactivate launch mode it could work
- Alternatively, instead of one upper "threshold", 2 TPS values would suffice (adjustable, likely 75-99%). Between them, RPM-limit would be raised from launch-RPM to sparkcut-RPM ? That way if he presses TPS a bit more, than slight RPM increase is better than sudden deactivation of launch-mode. Could also be useful to "trim" launch-RPM slightly according to track requirements.
Lower threshold disables launch means that releasing throttle => RPM goes up Truly horrifying and unexpected. That cannot be good !
- an upper threshold is evidently very good. But why is the lower threshold useful ?
Offcourse we would need an overrev protection, if the driver gives more throttle and deactive the launch with no engine load. But this would probably be cought by the rev-limiter since launch is off at that state? - Reidar
under that turbo-boost engine revvup, it's likely to blow up the engine... But without the lower threshold (leave launch mode above one adjustable threshold - above 100% disables this feature) it should be less likely to get burnt by the horrifying "releasing throttle => engine-revvup" behavior
- We dont actually need a lower treshold => good, because it sounds like a horrible behavior !
- but could be useful for some street cars that dont have the actual ON/OFF switch.
- But only if it over-rides the "input channel"="always On"
- ??? What does "over-rides" mean ? If we say "outside this TPS range the launch is deactivated" than of course deactivates regardless of activated (or alway on) input switch.
- Scenario 1: A guy is running with a clutch switch for his launch control. But the gearbox is set to neutral. At WOT he release the clutch.
- Obviously the lower threshold does not help this poor guy
- Scenario 2: A guy is running witout a clutch switch, and accedently pushes TPS above the high treshold for the launch control.
- Obviously the lower threshold does not help this poor guy. Only the dTPS / dt threshold helps him.
So is there ANY case where the "release throttle" => increase RPM limit (which is the result of the lower threshold ) is justified ? If no, we can just delete the reference to launch deactivated by TPS "lower threshold" and clean up the concept.
- Let`s just forget the lower threshold And clean up this mess.
The two step TPS is a verry good suggestion, and I think we should focus on this.