diff --git a/firmware/config/boards/microrusefi/board_configuration.cpp b/firmware/config/boards/microrusefi/board_configuration.cpp index 07ef8b76ac..ce0e406659 100644 --- a/firmware/config/boards/microrusefi/board_configuration.cpp +++ b/firmware/config/boards/microrusefi/board_configuration.cpp @@ -95,11 +95,11 @@ static void setupEtb() { // set_fsio_output_pin 7 PC8 #if EFI_FSIO - // set_rpn_expression 7 "1" + // set_rpn_expression 8 "1" // disable ETB by default setFsio(7, GPIOC_8, "1" PASS_CONFIG_PARAMETER_SUFFIX); // enable ETB - // set_rpn_expression 7 "0" + // set_rpn_expression 8 "0" //setFsio(7, GPIOC_8, "0" PASS_CONFIG_PARAMETER_SUFFIX); #endif /* EFI_FSIO */ diff --git a/firmware/config/engines/custom_engine.cpp b/firmware/config/engines/custom_engine.cpp index 4f4a80657a..a580a4b691 100644 --- a/firmware/config/engines/custom_engine.cpp +++ b/firmware/config/engines/custom_engine.cpp @@ -237,38 +237,8 @@ void setFrankensoBoardTestConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { boardConfiguration->ignitionPins[8] = GPIOE_0; // brain board, not discovery boardConfiguration->ignitionPins[9] = GPIOE_1; // brain board, not discovery - } -void setBoschVNH2SP30Curve(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - engineConfiguration->etbBiasBins[0] = 0; - engineConfiguration->etbBiasBins[1] = 1; - engineConfiguration->etbBiasBins[2] = 5; - /** - * This specific throttle has default position of about 7% open - */ - engineConfiguration->etbBiasBins[3] = 7; - engineConfiguration->etbBiasBins[4] = 14; - engineConfiguration->etbBiasBins[5] = 65; - engineConfiguration->etbBiasBins[6] = 66; - engineConfiguration->etbBiasBins[7] = 100; - - /** - * Some negative bias for below-default position - */ - engineConfiguration->etbBiasValues[0] = -15; - engineConfiguration->etbBiasValues[1] = -15; - engineConfiguration->etbBiasValues[2] = -10; - /** - * Zero bias for index which corresponds to default throttle position, when no current is applied - * This specific throttle has default position of about 7% open - */ - engineConfiguration->etbBiasValues[3] = 0; - engineConfiguration->etbBiasValues[4] = 19; - engineConfiguration->etbBiasValues[5] = 20; - engineConfiguration->etbBiasValues[6] = 26; - engineConfiguration->etbBiasValues[7] = 28; -} // ETB_BENCH_ENGINE // set engine_type 58 @@ -294,9 +264,6 @@ void setEtbTestConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { #if EFI_ELECTRONIC_THROTTLE_BODY setBoschVNH2SP30Curve(PASS_CONFIG_PARAMETER_SIGNATURE); // setDefaultEtbParameters(PASS_CONFIG_PARAMETER_SIGNATURE); - // values are above 100% since we have feedforward part of the total summation - engineConfiguration->etb.minValue = -200; - engineConfiguration->etb.maxValue = 200; #endif /* EFI_ELECTRONIC_THROTTLE_BODY */ engineConfiguration->tps1_1AdcChannel = EFI_ADC_2; // PA2 @@ -407,10 +374,6 @@ void setTle8888TestConfiguration(DECLARE_CONFIG_PARAMETER_SIGNATURE) { engineConfiguration->etb.dFactor = 0; engineConfiguration->etb.offset = 0; -#if EFI_PROD_CODE - engineConfiguration->etb.periodMs = (1000 / DEFAULT_ETB_LOOP_FREQUENCY); - engineConfiguration->etbFreq = DEFAULT_ETB_PWM_FREQUENCY; -#endif engineConfiguration->etb_iTermMin = -300; engineConfiguration->etb_iTermMax = 300; diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index 3745afad81..96b1ff16cc 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -373,6 +373,40 @@ void setEtbOffset(int value) { showEthInfo(); } +void setBoschVNH2SP30Curve(DECLARE_ENGINE_PARAMETER_SIGNATURE) { + engineConfiguration->etbBiasBins[0] = 0; + engineConfiguration->etbBiasBins[1] = 1; + engineConfiguration->etbBiasBins[2] = 5; + /** + * This specific throttle has default position of about 7% open + */ + engineConfiguration->etbBiasBins[3] = 7; + engineConfiguration->etbBiasBins[4] = 14; + engineConfiguration->etbBiasBins[5] = 65; + engineConfiguration->etbBiasBins[6] = 66; + engineConfiguration->etbBiasBins[7] = 100; + + /** + * Some negative bias for below-default position + */ + engineConfiguration->etbBiasValues[0] = -15; + engineConfiguration->etbBiasValues[1] = -15; + engineConfiguration->etbBiasValues[2] = -10; + /** + * Zero bias for index which corresponds to default throttle position, when no current is applied + * This specific throttle has default position of about 7% open + */ + engineConfiguration->etbBiasValues[3] = 0; + engineConfiguration->etbBiasValues[4] = 19; + engineConfiguration->etbBiasValues[5] = 20; + engineConfiguration->etbBiasValues[6] = 26; + engineConfiguration->etbBiasValues[7] = 28; + + // values are above 100% since we have feedforward part of the total summation + engineConfiguration->etb.minValue = -200; + engineConfiguration->etb.maxValue = 200; +} + void setDefaultEtbParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE) { CONFIG(etbIdleThrottleRange) = 5; diff --git a/firmware/controllers/actuators/electronic_throttle.h b/firmware/controllers/actuators/electronic_throttle.h index 9ea6fc44f7..2e14237e07 100644 --- a/firmware/controllers/actuators/electronic_throttle.h +++ b/firmware/controllers/actuators/electronic_throttle.h @@ -16,6 +16,7 @@ void initElectronicThrottle(void); void setDefaultEtbBiasCurve(DECLARE_ENGINE_PARAMETER_SIGNATURE); void setDefaultEtbParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE); +void setBoschVNH2SP30Curve(DECLARE_ENGINE_PARAMETER_SIGNATURE); void setEtbPFactor(float value); void setEtbIFactor(float value); void setEtbDFactor(float value); diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 70f9a6bc69..dde8fa341e 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -812,6 +812,6 @@ int getRusEfiVersion(void) { if (initBootloader() != 0) return 123; #endif /* EFI_BOOTLOADER_INCLUDE_CODE */ - return 20190829; + return 20190830; } #endif /* EFI_UNIT_TEST */ diff --git a/java_console/ui/src/com/rusefi/ui/etb/CommandsPanel.java b/java_console/ui/src/com/rusefi/ui/etb/CommandsPanel.java index 1c59240cfc..82ddad90ae 100644 --- a/java_console/ui/src/com/rusefi/ui/etb/CommandsPanel.java +++ b/java_console/ui/src/com/rusefi/ui/etb/CommandsPanel.java @@ -23,7 +23,8 @@ public class CommandsPanel { JPanel testParameters = new JPanel(new VerticalFlowLayout()); testParameters.setBorder(BorderFactory.createTitledBorder("Try PID settings")); EtbTestSequence etbTestSequence = new EtbTestSequence(); - testParameters.add(UiUtils.wrap(etbTestSequence.getButton())); + testParameters.add(etbTestSequence.getButton()); + testParameters.add(UiUtils.wrap(etbTestSequence.getCancelButton())); testParameters.add(etbTestSequence.getResult()); testParameters.add(new JLabel("To change setting use following commands:")); testParameters.add(new JLabel("set etb_p X")); diff --git a/java_console/ui/src/com/rusefi/ui/etb/EtbTestSequence.java b/java_console/ui/src/com/rusefi/ui/etb/EtbTestSequence.java index fbe89cc0a4..a2a21e5dbb 100644 --- a/java_console/ui/src/com/rusefi/ui/etb/EtbTestSequence.java +++ b/java_console/ui/src/com/rusefi/ui/etb/EtbTestSequence.java @@ -7,6 +7,8 @@ import com.rusefi.etb.StandardTestSequence; import com.rusefi.etb.TestSequenceStep; import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.atomic.AtomicInteger; @@ -36,10 +38,17 @@ public class EtbTestSequence { private final JButton button = new JButton(BUTTON_TEXT); private final JLabel result = new JLabel("Result: N/A"); + private final JButton cancelButton = new JButton("Cancel"); + private boolean isCancelled; public EtbTestSequence() { + cancelButton.setEnabled(false); + + button.addActionListener(e -> { + isCancelled = false; button.setEnabled(false); + cancelButton.setEnabled(true); // 3000 data points at 10Hz should be 300 seconds worth of data StandardTestSequence.metric.start(/* buffer size: */durationSeconds * frequencyHz, /*period, ms: */ 1000 / frequencyHz); @@ -50,10 +59,7 @@ public class EtbTestSequence { TestSequenceStep lastStep = new TestSequenceStep(SECOND, EtbTarget.Condition.YES) { @Override protected void doJob() { - button.setEnabled(true); - button.setText(BUTTON_TEXT); - double finalValue = StandardTestSequence.metric.getStandardDeviation(); - result.setText(String.format("Final Result: %.3f", finalValue)); + endTestSequence(); } }; @@ -65,13 +71,38 @@ public class EtbTestSequence { }); TestSequenceStep firstStep = new EtbTarget(10 * SECOND, 4, /*position*/onEachStep, TestSequenceStep.Condition.YES); - TestSequenceStep result = StandardTestSequence.addSequence(firstStep, onEachStep, TestSequenceStep.Condition.YES); + TestSequenceStep result = StandardTestSequence.addSequence(firstStep, onEachStep, new TestSequenceStep.Condition() { + @Override + public boolean shouldRunTask() { + if (isCancelled) + endTestSequence(); + return !isCancelled; + } + }); result.addNext(lastStep); totalSteps.set(TestSequenceStep.count(firstStep)); firstStep.execute(executor); }); + + + + cancelButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + isCancelled = true; + cancelButton.setEnabled(false); + } + }); + } + + private void endTestSequence() { + button.setEnabled(true); + cancelButton.setEnabled(false); + button.setText(BUTTON_TEXT); + double finalValue = StandardTestSequence.metric.getStandardDeviation(); + result.setText(String.format("Final Result: %.3f", finalValue)); } public JButton getButton() { @@ -81,4 +112,8 @@ public class EtbTestSequence { public JLabel getResult() { return result; } + + public JComponent getCancelButton() { + return cancelButton; + } } diff --git a/java_console/ui/src/com/rusefi/ui/livedocs/LiveDocPanel.java b/java_console/ui/src/com/rusefi/ui/livedocs/LiveDocPanel.java index 69c0bfcbf5..d0a03b17b0 100644 --- a/java_console/ui/src/com/rusefi/ui/livedocs/LiveDocPanel.java +++ b/java_console/ui/src/com/rusefi/ui/livedocs/LiveDocPanel.java @@ -203,6 +203,7 @@ public class LiveDocPanel { liveDocs.add(createPanel("Idle", "", Fields.LDS_ENGINE_STATE_INDEX, EngineState.VALUES, IdleThreadMeta.CONTENT), CONSTRAINTS); + // todo: fix the defect - we request ETB structure but decode it as EngineState liveDocs.add(createPanel("ETB", "", Fields.LDS_ETB, EngineState.VALUES, ElectronicThrottleMeta.CONTENT), CONSTRAINTS);