ETB target is using integer values #945

first we will write a unit test
This commit is contained in:
rusEfi 2019-09-22 00:16:46 -04:00
parent 185f4cb708
commit f843968636
8 changed files with 44 additions and 23 deletions

View File

@ -18,10 +18,13 @@
#include "engine_math.h" #include "engine_math.h"
#include "fsio_impl.h" #include "fsio_impl.h"
#if EFI_ELECTRONIC_THROTTLE_BODY
#include "electronic_throttle.h"
#endif
#if EFI_PROD_CODE #if EFI_PROD_CODE
#include "can_hw.h" #include "can_hw.h"
#include "scheduler.h" #include "scheduler.h"
#include "electronic_throttle.h"
#endif /* EFI_PROD_CODE */ #endif /* EFI_PROD_CODE */
EXTERN_ENGINE; EXTERN_ENGINE;

View File

@ -117,6 +117,8 @@ private:
SimplePwm etbPwmUp; SimplePwm etbPwmUp;
public: public:
DECLARE_ENGINE_PTR;
EtbControl() : etbPwmUp("etbUp"), dcMotor(&m_pwmEnable, &m_pwmDir1, &m_pwmDir2) {} EtbControl() : etbPwmUp("etbUp"), dcMotor(&m_pwmEnable, &m_pwmDir1, &m_pwmDir2) {}
TwoPinDcMotor dcMotor; TwoPinDcMotor dcMotor;
@ -163,7 +165,7 @@ static EtbControl etb1;
extern percent_t mockPedalPosition; extern percent_t mockPedalPosition;
Pid etbPid(&engineConfiguration->etb); Pid etbPid;
static percent_t directPwmValue = NAN; static percent_t directPwmValue = NAN;
static percent_t currentEtbDuty; static percent_t currentEtbDuty;
@ -173,6 +175,8 @@ static percent_t currentEtbDuty;
#define ETB_PERCENT_TO_DUTY(X) (maxF(minF((X * 0.01), ETB_DUTY_LIMIT - 0.01), 0.01 - ETB_DUTY_LIMIT)) #define ETB_PERCENT_TO_DUTY(X) (maxF(minF((X * 0.01), ETB_DUTY_LIMIT - 0.01), 0.01 - ETB_DUTY_LIMIT))
class EtbController : public PeriodicTimerController { class EtbController : public PeriodicTimerController {
public:
DECLARE_ENGINE_PTR;
int getPeriodMs() override { int getPeriodMs() override {
return GET_PERIOD_LIMITED(&engineConfiguration->etb); return GET_PERIOD_LIMITED(&engineConfiguration->etb);
@ -396,7 +400,7 @@ void setEtbOffset(int value) {
showEthInfo(); showEthInfo();
} }
void setBoschVNH2SP30Curve(DECLARE_ENGINE_PARAMETER_SIGNATURE) { void setBoschVNH2SP30Curve(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
engineConfiguration->etbBiasBins[0] = 0; engineConfiguration->etbBiasBins[0] = 0;
engineConfiguration->etbBiasBins[1] = 1; engineConfiguration->etbBiasBins[1] = 1;
engineConfiguration->etbBiasBins[2] = 5; engineConfiguration->etbBiasBins[2] = 5;
@ -426,7 +430,7 @@ void setBoschVNH2SP30Curve(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
engineConfiguration->etbBiasValues[7] = 28; engineConfiguration->etbBiasValues[7] = 28;
} }
void setDefaultEtbParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE) { void setDefaultEtbParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
CONFIG(etbIdleThrottleRange) = 5; CONFIG(etbIdleThrottleRange) = 5;
setLinearCurveAny<uint8_t>(config->pedalToTpsPedalBins, PEDAL_TO_TPS_SIZE, /*from*/0, /*to*/100, 1); setLinearCurveAny<uint8_t>(config->pedalToTpsPedalBins, PEDAL_TO_TPS_SIZE, /*from*/0, /*to*/100, 1);
@ -462,6 +466,7 @@ static bool isSamePins(etb_io *current, etb_io *active) {
current->directionPin2 != active->directionPin2; current->directionPin2 != active->directionPin2;
} }
#if EFI_PROD_CODE
bool isETBRestartNeeded(void) { bool isETBRestartNeeded(void) {
/** /**
* We do not want any interruption in HW pin while adjusting other properties * We do not want any interruption in HW pin while adjusting other properties
@ -474,6 +479,7 @@ void stopETBPins(void) {
brain_pin_markUnused(activeConfiguration.bc.etb1.directionPin1); brain_pin_markUnused(activeConfiguration.bc.etb1.directionPin1);
brain_pin_markUnused(activeConfiguration.bc.etb1.directionPin2); brain_pin_markUnused(activeConfiguration.bc.etb1.directionPin2);
} }
#endif /* EFI_PROD_CODE */
void onConfigurationChangeElectronicThrottleCallback(engine_configuration_s *previousConfiguration) { void onConfigurationChangeElectronicThrottleCallback(engine_configuration_s *previousConfiguration) {
shouldResetPid = !etbPid.isSame(&previousConfiguration->etb); shouldResetPid = !etbPid.isSame(&previousConfiguration->etb);
@ -513,7 +519,7 @@ static void setAutoOffset(int offset) {
autoTune.reset(); autoTune.reset();
} }
void setDefaultEtbBiasCurve(DECLARE_ENGINE_PARAMETER_SIGNATURE) { void setDefaultEtbBiasCurve(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
engineConfiguration->etbBiasBins[0] = 0; engineConfiguration->etbBiasBins[0] = 0;
engineConfiguration->etbBiasBins[1] = 1; engineConfiguration->etbBiasBins[1] = 1;
engineConfiguration->etbBiasBins[2] = 2; engineConfiguration->etbBiasBins[2] = 2;
@ -547,12 +553,18 @@ void unregisterEtbPins() {
} }
void initElectronicThrottle(void) { void initElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
addConsoleAction("ethinfo", showEthInfo); addConsoleAction("ethinfo", showEthInfo);
addConsoleAction("etbreset", etbReset); addConsoleAction("etbreset", etbReset);
etbPid.initPidClass(&engineConfiguration->etb);
INJECT_ENGINE_REFERENCE(etb1);
INJECT_ENGINE_REFERENCE(etbController);
pedal2tpsMap.init(config->pedalToTpsTable, config->pedalToTpsPedalBins, config->pedalToTpsRpmBins); pedal2tpsMap.init(config->pedalToTpsTable, config->pedalToTpsPedalBins, config->pedalToTpsRpmBins);
engine->engineState.hasEtbPedalPositionSensor = hasPedalPositionSensor(); engine->engineState.hasEtbPedalPositionSensor = hasPedalPositionSensor(PASS_ENGINE_PARAMETER_SIGNATURE);
if (!engine->engineState.hasEtbPedalPositionSensor) { if (!engine->engineState.hasEtbPedalPositionSensor) {
return; return;
} }

View File

@ -13,10 +13,10 @@
#define DEFAULT_ETB_PWM_FREQUENCY 300 #define DEFAULT_ETB_PWM_FREQUENCY 300
#include "engine.h" #include "engine.h"
void initElectronicThrottle(void); void initElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE);
void setDefaultEtbBiasCurve(DECLARE_ENGINE_PARAMETER_SIGNATURE); void setDefaultEtbBiasCurve(DECLARE_CONFIG_PARAMETER_SIGNATURE);
void setDefaultEtbParameters(DECLARE_ENGINE_PARAMETER_SIGNATURE); void setDefaultEtbParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE);
void setBoschVNH2SP30Curve(DECLARE_ENGINE_PARAMETER_SIGNATURE); void setBoschVNH2SP30Curve(DECLARE_CONFIG_PARAMETER_SIGNATURE);
void setEtbPFactor(float value); void setEtbPFactor(float value);
void setEtbIFactor(float value); void setEtbIFactor(float value);
void setEtbDFactor(float value); void setEtbDFactor(float value);

View File

@ -555,11 +555,7 @@ static void initIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
void startIdleThread(Logging*sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) { void startIdleThread(Logging*sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) {
logger = sharedLogger; logger = sharedLogger;
idleControllerInstance.engine = engine; INJECT_ENGINE_REFERENCE(idleControllerInstance);
idleControllerInstance.engineConfiguration = engineConfiguration;
idleControllerInstance.config = config;
idleControllerInstance.boardConfiguration = boardConfiguration;
idlePid.initPidClass(&engineConfiguration->idleRpmPid); idlePid.initPidClass(&engineConfiguration->idleRpmPid);

View File

@ -14,10 +14,7 @@
class IdleController : public PeriodicTimerController { class IdleController : public PeriodicTimerController {
public: public:
Engine *engine = NULL; DECLARE_ENGINE_PTR;
engine_configuration_s *engineConfiguration = NULL;
persistent_config_s *config = NULL;
board_configuration_s *boardConfiguration = NULL;
int getPeriodMs() override; int getPeriodMs() override;
void PeriodicTask() override; void PeriodicTask() override;

View File

@ -587,8 +587,8 @@ static void setDefaultEngineConfiguration(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
#if EFI_ELECTRONIC_THROTTLE_BODY #if EFI_ELECTRONIC_THROTTLE_BODY
setDefaultEtbParameters(PASS_ENGINE_PARAMETER_SIGNATURE); setDefaultEtbParameters(PASS_CONFIG_PARAMETER_SIGNATURE);
setDefaultEtbBiasCurve(PASS_ENGINE_PARAMETER_SIGNATURE); setDefaultEtbBiasCurve(PASS_CONFIG_PARAMETER_SIGNATURE);
#endif /* EFI_ELECTRONIC_THROTTLE_BODY */ #endif /* EFI_ELECTRONIC_THROTTLE_BODY */
CONFIGB(mafSensorType) = Bosch0280218037; CONFIGB(mafSensorType) = Bosch0280218037;

View File

@ -65,4 +65,17 @@
#define DISPLAY_SENSOR(x) {} #define DISPLAY_SENSOR(x) {}
#define DISPLAY_IF(x) x #define DISPLAY_IF(x) x
#define DECLARE_ENGINE_PTR \
Engine *engine = NULL; \
engine_configuration_s *engineConfiguration = NULL; \
persistent_config_s *config = NULL; \
board_configuration_s *boardConfiguration = NULL;
#define INJECT_ENGINE_REFERENCE(x) \
x.engine = engine; \
x.engineConfiguration = engineConfiguration; \
x.config = config; \
x.boardConfiguration = boardConfiguration;
#endif /* CONTROLLERS_CORE_COMMON_HEADERS_H_ */ #endif /* CONTROLLERS_CORE_COMMON_HEADERS_H_ */

View File

@ -212,7 +212,7 @@ percent_t getPedalPosition(DECLARE_ENGINE_PARAMETER_SIGNATURE) {
DISPLAY_TEXT(Analog_MCU_reads); DISPLAY_TEXT(Analog_MCU_reads);
float voltage = getVoltageDivided("pPS", CONFIG(DISPLAY_CONFIG(throttlePedalPositionAdcChannel))); float voltage = getVoltageDivided("pPS", CONFIG(DISPLAY_CONFIG(throttlePedalPositionAdcChannel)));
float result = interpolateMsg("pedal", engineConfiguration->throttlePedalUpVoltage, 0, engineConfiguration->throttlePedalWOTVoltage, 100, voltage); percent_t result = interpolateMsg("pedal", engineConfiguration->throttlePedalUpVoltage, 0, engineConfiguration->throttlePedalWOTVoltage, 100, voltage);
// this would put the value into the 0-100 range // this would put the value into the 0-100 range
return maxF(0, minF(100, result)); return maxF(0, minF(100, result));