OBD CAN sensors #1733

This commit is contained in:
rusefi 2020-09-03 23:27:53 -04:00
parent 675cce3854
commit bc115e70a0
8 changed files with 46 additions and 19 deletions

View File

@ -127,7 +127,7 @@ static void handleGetDataRequest(const CANRxFrame& rx) {
obdSendValue(_1_MODE, pid, 1, getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE) * 2.55f);
break;
case PID_COOLANT_TEMP:
obdSendValue(_1_MODE, pid, 1, Sensor::get(SensorType::Clt).value_or(0) + 40.0f);
obdSendValue(_1_MODE, pid, 1, Sensor::get(SensorType::Clt).value_or(0) + ODB_TEMP_EXTRA);
break;
case PID_STFT_BANK1:
obdSendValue(_1_MODE, pid, 1, 128 * ENGINE(engineState.running.pidCorrection));
@ -148,7 +148,7 @@ static void handleGetDataRequest(const CANRxFrame& rx) {
break;
}
case PID_INTAKE_TEMP:
obdSendValue(_1_MODE, pid, 1, Sensor::get(SensorType::Iat).value_or(0) + 40.0f);
obdSendValue(_1_MODE, pid, 1, Sensor::get(SensorType::Iat).value_or(0) + ODB_TEMP_EXTRA);
break;
case PID_INTAKE_MAF:
obdSendValue(_1_MODE, pid, 2, getRealMaf(PASS_ENGINE_PARAMETER_SIGNATURE) * 100.0f); // grams/sec (A*256+B)/100

View File

@ -44,3 +44,4 @@ void obdOnCanPacketRx(const CANRxFrame& rx);
#endif /* HAL_USE_CAN */
#define ODB_RPM_MULT 4
#define ODB_TEMP_EXTRA 40

View File

@ -86,7 +86,9 @@ EXTERN_ENGINE;
static Logging * logger;
RpmCalculator::RpmCalculator() {
RpmCalculator::RpmCalculator() :
rpmSensor(SensorType::Rpm, 0)
{
#if !EFI_PROD_CODE
mockRpm = MOCK_UNDEFINED;
#endif /* EFI_PROD_CODE */
@ -132,6 +134,11 @@ void RpmCalculator::assignRpmValue(float floatRpmValue DECLARE_ENGINE_PARAMETER_
previousRpmValue = rpmValue;
// we still persist integer RPM! todo: figure out the next steps
rpmValue = floatRpmValue;
if (!CONFIG(consumeObdSensors)) {
rpmSensor.Register();
}
if (rpmValue <= 0) {
oneDegreeUs = NAN;
} else {

View File

@ -10,6 +10,7 @@
#include "globalaccess.h"
#include "scheduler.h"
#include "stored_value_sensor.h"
// we use this value in case of noise on trigger input lines
#define NOISY_RPM -1
@ -65,6 +66,8 @@ public:
bool checkIfSpinning(efitick_t nowNt DECLARE_ENGINE_PARAMETER_SUFFIX) const;
StoredValueSensor rpmSensor;
/**
* This accessor is used in unit-tests.
*/

View File

@ -5,12 +5,16 @@
* @author Matthew Kennedy, (c) 2020
*/
#include "global.h"
#include "engine_configuration.h"
#if EFI_CAN_SUPPORT
#include "can_sensor.h"
#include "can.h"
EXTERN_CONFIG
;
#define TIMEOUT MS2NT(100)
CanSensor<int16_t, PACK_MULT_PERCENT> canPedalSensor(
@ -18,15 +22,24 @@ CanSensor<int16_t, PACK_MULT_PERCENT> canPedalSensor(
SensorType::AcceleratorPedal, TIMEOUT
);
ObdCanSensor<int16_t, ODB_RPM_MULT> obdCltSensor(
ObdCanSensor<int16_t, ODB_RPM_MULT> obdRpmSensor(
PID_RPM,
SensorType::Rpm, TIMEOUT
);
ObdCanSensor<int16_t, 1> obdCltSensor(
PID_COOLANT_TEMP,
SensorType::Clt, TIMEOUT
);
void initCanSensors() {
#if EFI_CANBUS_SLAVE
registerCanSensor(canPedalSensor);
registerCanSensor(obdCltSensor);
if (CONFIG(consumeObdSensors)) {
registerCanSensor(obdRpmSensor);
registerCanSensor(obdCltSensor);
}
#endif // EFI_CANBUS_SLAVE
}

View File

@ -69,15 +69,17 @@ static void configureTempSensor(FunctionalSensor &sensor,
}
void initThermistors(DECLARE_CONFIG_PARAMETER_SIGNATURE) {
configureTempSensor(clt,
if (!CONFIG(consumeObdSensors)) {
configureTempSensor(clt,
fclt,
CONFIG(clt),
CONFIG(useLinearCltSensor));
configureTempSensor(iat,
configureTempSensor(iat,
fiat,
CONFIG(iat),
CONFIG(useLinearIatSensor));
}
configureTempSensor(aux1,
faux1,

View File

@ -886,7 +886,7 @@ custom maf_sensor_type_e 4 bits, S32, @OFFSET@, [0:1], @@maf_sensor_type_e_enum@
bit enableSoftwareKnock
bit verboseVVTDecoding;enable vvt_details
bit invertCamVVTSignal;get invertCamVVTSignal
bit consumeObdSensors;enable consumeObdSensors
bit consumeObdSensors;+This property is useful if using rusEFI as TCM or BCM only\nenable consumeObdSensors
bit knockBankCyl1,Channel 2,Channel 1;
bit knockBankCyl2,Channel 2,Channel 1;
bit knockBankCyl3,Channel 2,Channel 1;

View File

@ -1391,7 +1391,7 @@ menuDialog = main
subMenu = lcdScreen, "LCD" @@if_ts_show_lcd
subMenu = joystickPanel, "Joystick" @@if_ts_show_joystick
subMenu = spiFunction, "SPI"@@if_ts_show_spi
subMenu = monitoringSettings, "rusEfi console"
subMenu = monitoringSettings, "rusEFI console"
subMenu = std_separator
subMenu = canBusMain, "CAN Bus Communication"
@ -1428,7 +1428,7 @@ menuDialog = main
menu = "Help"
subMenu = helpGeneral, "rusEfi Info"
subMenu = helpGeneral, "rusEFI Info"
[ControllerCommands]
@ -1654,8 +1654,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00"
dialog = triggerConfiguration
panel = triggerConfiguration_settings, North
panel = triggerInputs, South
panel = triggerConfiguration_settings, North, { consumeObdSensors == 0 }
panel = triggerInputs, South, { consumeObdSensors == 0 }
; Engine->Injection Settings
dialog = injChars, "Injector Settings", yAxis
@ -2587,10 +2587,11 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00"
dialog = canBus, "CAN Bus"
field = "Can Read Enabled", canReadEnabled
field = "Can Write Enabled", canWriteEnabled
field = "consumeObdSensors", consumeObdSensors, { canReadEnabled == 1 && canWriteEnabled == 1}
field = "Can Nbc Type", canNbcType
field = "Can Baud Rate", canBaudRate
field = "Enable rusEFI CAN broadcast", enableVerboseCanTx
field = "rusEfi CAN data base address", verboseCanBaseAddress
field = "rusEFI CAN data base address", verboseCanBaseAddress
field = "Can Sleep Period", canSleepPeriodMs
field = "RX pin", canRxPin @@if_ts_show_can_pins
field = "TX pin", canTxPin @@if_ts_show_can_pins
@ -2601,7 +2602,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00"
field = "Can Nbc Type", can2NbcType
field = "Can Baud Rate", can2BaudRate
field = "Enable rusEFI CAN broadcast", enableVerboseCan2Tx
field = "rusEfi CAN data base address", verboseCan2BaseAddress
field = "rusEFI CAN data base address", verboseCan2BaseAddress
field = "Can Sleep Period", can2SleepPeriodMs
field = "RX pin", can2RxPin @@if_ts_show_can_pins
field = "TX pin", can2TxPin @@if_ts_show_can_pins
@ -2653,7 +2654,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00"
panel = gpsReceiver @@if_ts_show_gps
dialog = monitoringSettings, "rusEfi Console Settings"
dialog = monitoringSettings, "rusEFI Console Settings"
field = "Sensor Sniffer", sensorChartMode
field = " Threshold", sensorSnifferRpmThreshold
field = " Each X cycle", sensorChartFrequency
@ -2822,7 +2823,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00"
dialog = fsioFormulas, "FSIO Formulas"
field = "!FSIO uses Reverse Polish Notation. Please read http://rusefi.com/s/fsio"
field = "#fsioinfo command in rusEfi console could be useful while troubleshooting those"
field = "#fsioinfo command in rusEFI console could be useful while troubleshooting those"
field = "#1", fsioFormulas1
field = "#2", fsioFormulas2
field = "#3", fsioFormulas3
@ -3013,8 +3014,8 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00"
panel = testMisc, East
dialog = engineTypeDialog, "Popular vehicles"
field = "!These buttons send a command to rusEfi controller to apply preset values"
field = "!Once you send the command, please reconnect to rusEfi controller in order to read fresh values"
field = "!These buttons send a command to rusEFI controller to apply preset values"
field = "!Once you send the command, please reconnect to rusEFI controller in order to read fresh values"
commandButton = "Frankenso Miata NA6 Stage 0", cmd_set_engine_type_Frankenso_Miata_NA6_VAF@@if_show_Frankenso_presets
commandButton = "Frankenso Miata NA6 Stage 1", cmd_set_engine_type_Frankenso_Miata_NA6_MAP@@if_show_Frankenso_presets
commandButton = "Frankenso Miata NB2 MAP", cmd_set_engine_type_Frankenso_Miata_NB2@@if_show_Frankenso_presets