logging of live data structs was: data points #3614

ETB
This commit is contained in:
rusefillc 2022-04-14 15:25:01 -04:00
parent 16878487d5
commit 084685c747
11 changed files with 63 additions and 7 deletions

View File

@ -3,7 +3,7 @@
#include "FragmentEntry.h"
#include "tunerstudio.h"
static FragmentEntry fragments[15];
static FragmentEntry fragments[16];
void initFragments() {
fragments[0].init((const uint8_t *)getStructAddr(LDS_high_pressure_fuel_pump), sizeof(high_pressure_fuel_pump_s));
@ -21,4 +21,5 @@ void initFragments() {
fragments[12].init((const uint8_t *)getStructAddr(LDS_wall_fuel_state), sizeof(wall_fuel_state_s));
fragments[13].init((const uint8_t *)getStructAddr(LDS_idle_state), sizeof(idle_state_s));
fragments[14].init((const uint8_t *)getStructAddr(LDS_ignition_state), sizeof(ignition_state_s));
fragments[15].init((const uint8_t *)getStructAddr(LDS_electronic_throttle), sizeof(electronic_throttle_s));
};

View File

@ -17,4 +17,5 @@ LDS_trigger_state,
LDS_wall_fuel_state,
LDS_idle_state,
LDS_ignition_state,
LDS_electronic_throttle,
} live_data_e;

View File

@ -218,6 +218,9 @@ const void * getStructAddr(live_data_e structId) {
return static_cast<idle_state_s*>(&engine->module<IdleController>().unmock());
case LDS_ignition_state:
return static_cast<ignition_state_s*>(&engine->ignitionState);
case LDS_electronic_throttle:
// todo: figure out how to handle two units?
return nullptr;
//#if EFI_ELECTRONIC_THROTTLE_BODY
// case LDS_ETB_PID:

View File

@ -8,6 +8,7 @@
#pragma once
#include "global.h"
#include "tunerstudio_io.h"
#include "electronic_throttle_generated.h"
typedef struct {
int queryCommandCounter;

View File

@ -275,7 +275,7 @@ expected<percent_t> EtbController::getSetpointWastegate() const {
return clampF(0, m_wastegatePosition, 100);
}
expected<percent_t> EtbController::getSetpointEtb() const {
expected<percent_t> EtbController::getSetpointEtb() {
// Autotune runs with 50% target position
if (m_isAutotune) {
return 50.0f;
@ -313,14 +313,17 @@ expected<percent_t> EtbController::getSetpointEtb() const {
// [0, 100] -> [idle, 100]
// 0% target from table -> idle position as target
// 100% target from table -> 100% target position
percent_t targetPosition = interpolateClamped(0, etbIdleAddition, 100, 100, targetFromTable);
idlePosition = interpolateClamped(0, etbIdleAddition, 100, 100, targetFromTable);
// Apply any adjustment from Lua
targetPosition += engine->engineState.luaAdjustments.etbTargetPositionAdd;
luaAdjustment = engine->engineState.luaAdjustments.etbTargetPositionAdd;
percent_t targetPosition = idlePosition + luaAdjustment;
// Apply any adjustment that this throttle alone needs
// Clamped to +-10 to prevent anything too wild
targetPosition += clampF(-10, getThrottleTrim(rpm, targetPosition), 10);
trim = clampF(-10, getThrottleTrim(rpm, targetPosition), 10);
targetPosition += trim;
// Lastly, apply ETB rev limiter
auto etbRpmLimit = engineConfiguration->etbRevLimitStart;
@ -334,6 +337,7 @@ expected<percent_t> EtbController::getSetpointEtb() const {
float maxPosition = engineConfiguration->etbMaximumPosition;
if (maxPosition < 70) {
// compatibility with legacy tunes, todo: remove in Aug of 2022
maxPosition = 100;
} else {
// Don't allow max position over 100

View File

@ -0,0 +1,24 @@
// this section was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) controllers/actuators\electronic_throttle.txt Thu Apr 14 14:39:06 EDT 2022
// by class com.rusefi.output.CHeaderConsumer
// begin
#pragma once
#include "rusefi_types.h"
// start of electronic_throttle_s
struct electronic_throttle_s {
/**
* offset 0
*/
float idlePosition = (float)0;
/**
* offset 4
*/
float trim = (float)0;
/**
* offset 8
*/
float luaAdjustment = (float)0;
/** total size 12*/
};
// end
// this section was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) controllers/actuators\electronic_throttle.txt Thu Apr 14 14:39:06 EDT 2022

View File

@ -13,6 +13,7 @@
#include "sensor.h"
#include "efi_pid.h"
#include "error_accumulator.h"
#include "electronic_throttle_generated.h"
/**
* Hard code ETB update speed.
@ -23,7 +24,7 @@
#define ETB_LOOP_FREQUENCY 500
#define DEFAULT_ETB_PWM_FREQUENCY 800
class EtbController : public IEtbController {
class EtbController : public IEtbController, electronic_throttle_s {
public:
bool init(etb_function_e function, DcMotor *motor, pid_s *pidParameters, const ValueProvider3D* pedalMap, bool initializeThrottles) override;
void setIdlePosition(percent_t pos) override;
@ -44,7 +45,7 @@ public:
expected<percent_t> observePlant() const override;
expected<percent_t> getSetpoint() override;
expected<percent_t> getSetpointEtb() const;
expected<percent_t> getSetpointEtb();
expected<percent_t> getSetpointWastegate() const;
expected<percent_t> getSetpointIdleValve() const;

View File

@ -20,3 +20,5 @@ Usages:
wall_fuel_state: [ "WallFuelState.java", "controllers/algo" ]
idle_state: [ "IdleState.java", "controllers/actuators" ]
ignition_state: [ "IgnitionState.java", "controllers/algo" ]
electronic_throttle: [ "ElectronicThrottle.java", "controllers/actuators" ]

View File

@ -19,4 +19,5 @@ public enum live_data_e {
LDS_wall_fuel_state,
LDS_idle_state,
LDS_ignition_state,
LDS_electronic_throttle,
}

View File

@ -38,6 +38,7 @@ public enum StateDictionary {
register(live_data_e.LDS_launch_control_state, LaunchControl.VALUES, "launch_control");
register(live_data_e.LDS_high_pressure_fuel_pump, HighPressureFuelPump.VALUES, "high_pressure_fuel_pump");
register(live_data_e.LDS_ignition_state, IgnitionState.VALUES, "advance_map");
register(live_data_e.LDS_electronic_throttle, ElectronicThrottle.VALUES, "electronic_throttle");
if (map.size() != live_data_e.values().length) {
Set<live_data_e> missing = new HashSet<>(Arrays.asList(live_data_e.values()));
missing.removeAll(map.keySet());

View File

@ -0,0 +1,17 @@
package com.rusefi.config.generated;
// this file was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) controllers/actuators\electronic_throttle.txt Thu Apr 14 14:39:06 EDT 2022
// by class com.rusefi.output.FileJavaFieldsConsumer
import com.rusefi.config.*;
public class ElectronicThrottle {
public static final Field IDLEPOSITION = Field.create("IDLEPOSITION", 0, FieldType.FLOAT);
public static final Field TRIM = Field.create("TRIM", 4, FieldType.FLOAT);
public static final Field LUAADJUSTMENT = Field.create("LUAADJUSTMENT", 8, FieldType.FLOAT);
public static final Field[] VALUES = {
IDLEPOSITION,
TRIM,
LUAADJUSTMENT,
};
}