12 tooth crank mode (#4179)

* 12 tooth crank

* comment

* s

* rusefi config
This commit is contained in:
Matthew Kennedy 2022-05-17 18:38:24 -07:00 committed by GitHub
parent ba35749238
commit fe77f5127e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 46 additions and 4 deletions

View File

@ -423,7 +423,7 @@ typedef enum {
// this one is 6 cylinder, see TT_JEEP_4_cyl for 4 cylinders
TT_JEEP_18_2_2_2 = 37,
TT_UNUSED_38 = 38,
TT_12_TOOTH_CRANK = 38,
TT_DODGE_NEON_1995_ONLY_CRANK = 39,

View File

@ -236,6 +236,11 @@ typedef enum {
*/
FOUR_STROKE_THREE_TIMES_CRANK_SENSOR = 5,
// Same pattern TWELVE TIMES on the crank wheel!
// This usually means Honda, which often has a 12 tooth crank wheel or 24 tooth cam wheel
// without a missing tooth, plus a single tooth cam channel to resolve the engine phase.
FOUR_STROKE_TWELVE_TIMES_CRANK_SENSOR = 6,
} operation_mode_e;
/**

View File

@ -332,7 +332,10 @@ bool noFiringUntilVvtSync(vvt_mode_e vvtMode) {
// Symmetrical crank modes require cam sync before firing
// non-symmetrical cranks can use faster spin-up mode (firing in wasted/batch before VVT sync)
// Examples include Nissan MR/VQ, Miata NB, etc
return operationMode == FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR || operationMode == FOUR_STROKE_THREE_TIMES_CRANK_SENSOR;
return
operationMode == FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR ||
operationMode == FOUR_STROKE_THREE_TIMES_CRANK_SENSOR ||
operationMode == FOUR_STROKE_TWELVE_TIMES_CRANK_SENSOR;
}
/**

View File

@ -108,6 +108,8 @@ angle_t TriggerWaveform::getCycleDuration() const {
return FOUR_STROKE_CYCLE_DURATION / SYMMETRICAL_THREE_TIMES_CRANK_SENSOR_DIVIDER;
case FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR:
return FOUR_STROKE_CYCLE_DURATION / SYMMETRICAL_CRANK_SENSOR_DIVIDER;
case FOUR_STROKE_TWELVE_TIMES_CRANK_SENSOR:
return FOUR_STROKE_CYCLE_DURATION / SYMMETRICAL_TWELVE_TIMES_CRANK_SENSOR_DIVIDER;
case FOUR_STROKE_CRANK_SENSOR:
case TWO_STROKE:
return TWO_STROKE_CYCLE_DURATION;
@ -124,6 +126,7 @@ angle_t TriggerWaveform::getCycleDuration() const {
*/
size_t TriggerWaveform::getLength() const {
/**
* 24 for FOUR_STROKE_TWELVE_TIMES_CRANK_SENSOR
* 6 for FOUR_STROKE_THREE_TIMES_CRANK_SENSOR
* 4 for FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR
* 2 for FOUR_STROKE_CRANK_SENSOR
@ -726,7 +729,10 @@ void TriggerWaveform::initializeTriggerWaveform(operation_mode_e triggerOperatio
initialize2jzGE1_12(this);
break;
case TT_UNUSED_38:
case TT_12_TOOTH_CRANK:
configure12ToothCrank(this);
break;
case TT_NISSAN_SR20VE:
initializeNissanSR20VE_4(this);
break;

View File

@ -146,3 +146,22 @@ void configureQuickStartSenderWheel(TriggerWaveform *s) {
s->addEvent360(offset + 270, T_PRIMARY, TV_RISE);
s->addEvent360(offset + 340, T_PRIMARY, TV_FALL);
}
// Useful for:
// - Honda 24+1 (set this on crank primary, single tooth cam)
// - AEM 24+1 CAS wheel (same config as Honda)
void configure12ToothCrank(TriggerWaveform* s) {
s->initialize(FOUR_STROKE_TWELVE_TIMES_CRANK_SENSOR);
s->useRiseEdge = true;
s->shapeWithoutTdc = true;
// Sync after 3 good teeth
for (size_t i = 0; i < 3; i++) {
s->setTriggerSynchronizationGap3(i, 0.75f, 1.25f);
}
// Just a single tooth with 50% duty cycle
s->addEventAngle(15, T_PRIMARY, TV_FALL);
s->addEventAngle(30, T_PRIMARY, TV_RISE);
}

View File

@ -29,3 +29,6 @@ void configureQuickStartSenderWheel(TriggerWaveform *s);
// TT_KAWA_KX450F
void configureKawaKX450F(TriggerWaveform *s);
// TT_12_TOOTH_CRANK
void configure12ToothCrank(TriggerWaveform*);

View File

@ -92,6 +92,8 @@ static int getCrankDivider(operation_mode_e operationMode) {
return SYMMETRICAL_CRANK_SENSOR_DIVIDER;
case FOUR_STROKE_THREE_TIMES_CRANK_SENSOR:
return SYMMETRICAL_THREE_TIMES_CRANK_SENSOR_DIVIDER;
case FOUR_STROKE_TWELVE_TIMES_CRANK_SENSOR:
return SYMMETRICAL_TWELVE_TIMES_CRANK_SENSOR_DIVIDER;
default:
case FOUR_STROKE_CAM_SENSOR:
case TWO_STROKE:

View File

@ -142,3 +142,4 @@ void onConfigurationChangeTriggerCallback();
#define SYMMETRICAL_CRANK_SENSOR_DIVIDER 4
#define SYMMETRICAL_THREE_TIMES_CRANK_SENSOR_DIVIDER 6
#define SYMMETRICAL_TWELVE_TIMES_CRANK_SENSOR_DIVIDER 24

View File

@ -72,12 +72,15 @@ static float getRpmMultiplier(operation_mode_e mode) {
return SYMMETRICAL_THREE_TIMES_CRANK_SENSOR_DIVIDER / 2;
} else if (mode == FOUR_STROKE_SYMMETRICAL_CRANK_SENSOR) {
return SYMMETRICAL_CRANK_SENSOR_DIVIDER / 2;
} else if (mode == FOUR_STROKE_TWELVE_TIMES_CRANK_SENSOR) {
return SYMMETRICAL_TWELVE_TIMES_CRANK_SENSOR_DIVIDER / 2;
} else if (mode == FOUR_STROKE_CAM_SENSOR) {
return 0.5;
} else if (mode == FOUR_STROKE_CRANK_SENSOR) {
// unit test coverage still runs if the value below is changed to '2' not a great sign!
return 1;
}
return 1;
}

View File

@ -579,7 +579,7 @@ adc_channel_e fuelLevelSensor;+This is the processor pin that your fuel level se
struct trigger_config_s @brief Trigger wheel(s) configuration
#define trigger_type_e_enum "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "INVALID", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Mercedes Two Segment", "Mitsubishi 4G93", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "INVALID", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "dev 2JZ 3/34 simulator", "Rover K", "GM 24x 5 degree", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped", "Dodge Neon 2003 crank", "Miata NB", "INVALID", "INVALID", "Subaru 7+6", "Jeep 18-2-2-2", "INVALID", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "INVALID", "Renix 44-2-2", "Renix 66-2-2-2", "Honda K 12+1", "INVALID", "36/2", "Subaru SVX", "1+16", "Subaru 7 without 6", "INVALID", "TriTach", "GM 60/2/2/2", "Skoda Favorit", "Barra 3+1 Cam", "Kawa KX450F", "Nissan VQ35", "INVALID", "Nissan VQ30", "Nissan QR25", "Mitsubishi 3A92", "Subaru SVX Crank 1", "Subaru SVX Cam VVT", "Ford PIP", "Suzuki G13B", "Honda K 4+1", "Nissan MR18 Crank", "32/2", "36-2-1", "36-2-1-1", "INVALID", "INVALID", "GM 24x 3 degree", "trg75"
#define trigger_type_e_enum "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "INVALID", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Mercedes Two Segment", "Mitsubishi 4G93", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "INVALID", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "dev 2JZ 3/34 simulator", "Rover K", "GM 24x 5 degree", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped", "Dodge Neon 2003 crank", "Miata NB", "INVALID", "INVALID", "Subaru 7+6", "Jeep 18-2-2-2", "12 tooth crank", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "INVALID", "Renix 44-2-2", "Renix 66-2-2-2", "Honda K 12+1", "INVALID", "36/2", "Subaru SVX", "1+16", "Subaru 7 without 6", "INVALID", "TriTach", "GM 60/2/2/2", "Skoda Favorit", "Barra 3+1 Cam", "Kawa KX450F", "Nissan VQ35", "INVALID", "Nissan VQ30", "Nissan QR25", "Mitsubishi 3A92", "Subaru SVX Crank 1", "Subaru SVX Cam VVT", "Ford PIP", "Suzuki G13B", "Honda K 4+1", "Nissan MR18 Crank", "32/2", "36-2-1", "36-2-1-1", "INVALID", "INVALID", "GM 24x 3 degree", "trg75"
custom trigger_type_e 4 bits, U32, @OFFSET@, [0:6], @@trigger_type_e_enum@@
trigger_type_e type;+https://github.com/rusefi/rusefi/wiki/All-Supported-Triggers\nset trigger_type X