Blend tables can override Y axis

This commit is contained in:
Matthew Kennedy 2024-01-17 02:43:04 -08:00
parent 23ea9efe31
commit cde642ae61
5 changed files with 35 additions and 14 deletions

View File

@ -30,8 +30,9 @@ or
## Unreleased
###
- Staged injection: a second set of fuel injectors that inject part of the fuel load when you run out of primary injector.
### Added
- Staged injection: a second set of fuel injectors that inject part of the fuel load when you run out of primary injector
- VE/Ign/Boost blend tables can select a Y axis override for even more flexibility
## December 2023 Release

View File

@ -54,6 +54,7 @@ float AirmassVeModelBase::getVe(int rpm, float load, bool postState) const {
engine->outputChannels.veBlendOutput[i] = result.Value;
}
// Skip extra floating point math if we can...
if (result.Value == 0) {
continue;
}

View File

@ -459,6 +459,12 @@ BlendResult calculateBlend(blend_table_s& cfg, float rpm, float load) {
return { 0, 0, 0 };
}
// Override Y axis value (if necessary)
if (cfg.yAxisOverride != GPPWM_Zero) {
// TODO: is this value_or(0) correct or even reasonable?
load = readGppwmChannel(cfg.yAxisOverride).value_or(0);
}
float tableValue = interpolate3d(
cfg.table,
cfg.loadBins, load,

View File

@ -1711,6 +1711,7 @@ struct blend_table_s
uint16_t[8] rpmBins;;"RPM", 1, 0, 0, 18000, 0
gppwm_channel_e blendParameter
gppwm_channel_e yAxisOverride
int16_t[8] autoscale blendBins;;"", 0.1, 0, -1000, 1000, 1
uint8_t[8] autoscale blendValues;;"%", 0.5, 0, 0, 100, 1

View File

@ -2512,7 +2512,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_
field = "#The X axis of the bias table is controlled by the selected blend"
field = "#parameter below."
field = "Blend parameter", ignBlends1_blendParameter
panel = ignAdder1Bias
field = "Y axis override (set Zero for no override)", ignBlends1_yAxisOverride, {ignBlends1_blendParameter}
panel = ignAdder1Bias, {ignBlends1_blendParameter}
dialog = ignAdder2Cfg, "Ignition adder 2 config"
field = "#The bias table controls how much of the blend table"
@ -2522,7 +2523,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_
field = "#The X axis of the bias table is controlled by the selected blend"
field = "#parameter below."
field = "Blend parameter", ignBlends2_blendParameter
panel = ignAdder2Bias
field = "Y axis override (set Zero for no override)", ignBlends2_yAxisOverride, {ignBlends2_blendParameter}
panel = ignAdder2Bias, {ignBlends2_blendParameter}
dialog = ignAdder3Cfg, "Ignition adder 3 config"
field = "#The bias table controls how much of the blend table"
@ -2532,7 +2534,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_
field = "#The X axis of the bias table is controlled by the selected blend"
field = "#parameter below."
field = "Blend parameter", ignBlends3_blendParameter
panel = ignAdder3Bias
field = "Y axis override (set Zero for no override)", ignBlends3_yAxisOverride, {ignBlends3_blendParameter}
panel = ignAdder3Bias, {ignBlends3_blendParameter}
dialog = ignAdder4Cfg, "Ignition adder 4 config"
field = "#The bias table controls how much of the blend table"
@ -2542,7 +2545,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_
field = "#The X axis of the bias table is controlled by the selected blend"
field = "#parameter below."
field = "Blend parameter", ignBlends4_blendParameter
panel = ignAdder4Bias
field = "Y axis override (set Zero for no override)", ignBlends4_yAxisOverride, {ignBlends4_blendParameter}
panel = ignAdder4Bias, {ignBlends4_blendParameter}
dialog = veBlend1Cfg, "VE blend 1 config"
field = "#The bias table controls how much of the blend table"
@ -2553,7 +2557,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_
field = "#The X axis of the bias table is controlled by the selected blend"
field = "#parameter below."
field = "Blend parameter", veBlends1_blendParameter
panel = veBlend1Bias
field = "Y axis override (set Zero for no override)", veBlends1_yAxisOverride, {veBlends1_blendParameter}
panel = veBlend1Bias, {veBlends1_blendParameter}
dialog = veBlend2Cfg, "VE blend 2 config"
field = "#The bias table controls how much of the blend table"
@ -2564,7 +2569,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_
field = "#The X axis of the bias table is controlled by the selected blend"
field = "#parameter below."
field = "Blend parameter", veBlends2_blendParameter
panel = veBlend2Bias
field = "Y axis override (set Zero for no override)", veBlends2_yAxisOverride, {veBlends2_blendParameter}
panel = veBlend2Bias, {veBlends2_blendParameter}
dialog = veBlend3Cfg, "VE blend 3 config"
field = "#The bias table controls how much of the blend table"
@ -2575,7 +2581,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_
field = "#The X axis of the bias table is controlled by the selected blend"
field = "#parameter below."
field = "Blend parameter", veBlends3_blendParameter
panel = veBlend3Bias
field = "Y axis override (set Zero for no override)", veBlends3_yAxisOverride, {veBlends3_blendParameter}
panel = veBlend3Bias, {veBlends3_blendParameter}
dialog = veBlend4Cfg, "VE blend 4 config"
field = "#The bias table controls how much of the blend table"
@ -2586,7 +2593,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_
field = "#The X axis of the bias table is controlled by the selected blend"
field = "#parameter below."
field = "Blend parameter", veBlends4_blendParameter
panel = veBlend4Bias
field = "Y axis override (set Zero for no override)", veBlends4_yAxisOverride, {veBlends4_blendParameter}
panel = veBlend4Bias, {veBlends4_blendParameter}
dialog = boostOpenBlend1Cfg, "Boost open loop blend 1 config"
field = "#The bias table controls how much of the blend table"
@ -2596,7 +2604,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_
field = "#The X axis of the bias table is controlled by the selected blend"
field = "#parameter below."
field = "Blend parameter", boostOpenLoopBlends1_blendParameter
panel = boostOpenLoopBlend1Bias
field = "Y axis override (set Zero for no override)", boostOpenLoopBlends1_yAxisOverride, {boostOpenLoopBlends1_blendParameter}
panel = boostOpenLoopBlend1Bias, {boostOpenLoopBlends1_blendParameter}
dialog = boostOpenBlend2Cfg, "Boost open loop blend 2 config"
field = "#The bias table controls how much of the blend table"
@ -2606,7 +2615,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_
field = "#The X axis of the bias table is controlled by the selected blend"
field = "#parameter below."
field = "Blend parameter", boostOpenLoopBlends2_blendParameter
panel = boostOpenLoopBlend2Bias
field = "Y axis override (set Zero for no override)", boostOpenLoopBlends2_yAxisOverride, {boostOpenLoopBlends2_blendParameter}
panel = boostOpenLoopBlend2Bias, {boostOpenLoopBlends2_blendParameter}
dialog = boostClosedBlend1Cfg, "Boost closed loop blend 1 config"
field = "#The bias table controls how much of the blend table"
@ -2616,7 +2626,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_
field = "#The X axis of the bias table is controlled by the selected blend"
field = "#parameter below."
field = "Blend parameter", boostClosedLoopBlends1_blendParameter
panel = boostClosedLoopBlend1Bias
field = "Y axis override (set Zero for no override)", boostClosedLoopBlends1_yAxisOverride, {boostClosedLoopBlends1_blendParameter}
panel = boostClosedLoopBlend1Bias, {boostClosedLoopBlends1_blendParameter}
dialog = boostClosedBlend2Cfg, "Boost closed loop blend 2 config"
field = "#The bias table controls how much of the blend table"
@ -2626,7 +2637,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@@@ts_command_e_TS_
field = "#The X axis of the bias table is controlled by the selected blend"
field = "#parameter below."
field = "Blend parameter", boostClosedLoopBlends2_blendParameter
panel = boostClosedLoopBlend2Bias
field = "Y axis override (set Zero for no override)", boostClosedLoopBlends2_yAxisOverride, {boostClosedLoopBlends2_blendParameter}
panel = boostClosedLoopBlend2Bias, {boostClosedLoopBlends2_blendParameter}
dialog = dwellSettings, "", yAxis
panel = dwellCorrection