Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Trigger: "Single 60deg tooth before TDC" for Saruman, Sovek ignition #5347

Merged
merged 2 commits into from
Jun 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion firmware/controllers/algo/engine_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,9 @@ enum class trigger_type_e : uint32_t {
TT_GM_24x_2 = 74,
TT_UNUSED_75 = 75,
TT_MITSU_4G63_CRANK = 76,
TT_UNUSED_77 = 77,
/* pull-up'ed(inverted in): pull down 2x 30 deg before tdc on cam, till tdc.
e.g. Sovek, Saruman ignition blind type */
TT_60DEG_TOOTH = 77,
TT_UNUSED_78 = 78,

// do not forget to edit "#define trigger_type_e_enum" line in integration/rusefi_config.txt file to propogate new value to rusefi.ini TS project
Expand Down
24 changes: 24 additions & 0 deletions firmware/controllers/trigger/decoders/trigger_misc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -171,3 +171,27 @@ void configureBenelli(TriggerWaveform *s) {
s->addEvent360(angle, TriggerValue::FALL);
}
}

void configure60degSingleTooth(TriggerWaveform *s) {
/** @todo
* My approach was to utilize ::Both especially for single
* tooth and manual kikstarter, to be ready on both sides of blind.
* But unfortuneally, my experiments show me the Trigger can't
* become syncronized by 'last' and folowed 'first' events only.
* Also I observe phase-aligment mehanism is trying to consume a
* longer side of trigger as latest before TDC.
* I wish to setup SyncEdge::Both for my TT_60DEG_TOOTH after
* this case of scenario become work well. For now, ::Rise work
* well for my 60 degree trigger and both edges phase sync work
* as mush as expected for my engine startup. */

s->initialize(FOUR_STROKE_CRANK_SENSOR, SyncEdge::Rise);

s->addEvent360(300, TriggerValue::RISE);
s->addEvent360(360, TriggerValue::FALL);

s->tdcPosition = 60;

s->isSynchronizationNeeded = false;
s->useOnlyPrimaryForSync = true;
}
6 changes: 6 additions & 0 deletions firmware/controllers/trigger/decoders/trigger_misc.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,9 @@ void configureTriTach(TriggerWaveform * s);
// TT_VVT_BARRA_3_PLUS_1
void configureBarra3plus1cam(TriggerWaveform *s);
void configureBenelli(TriggerWaveform *s);

/**
* @brief Configure trigger as Sovek or Saruman ignition
* @param s Trigger waveform visitor to config
*/
void configure60degSingleTooth(TriggerWaveform *s);
13 changes: 12 additions & 1 deletion firmware/controllers/trigger/decoders/trigger_structure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -551,6 +551,9 @@ void TriggerWaveform::initializeTriggerWaveform(operation_mode_e triggerOperatio
break;

case trigger_type_e::TT_ONE:
/** @note TT_ONE setup events as 180 and 360 degrees. It uses SyncEdge::Rise
* for additionaly phase align on falling edge and will not work with non-
* symmetrical blind type where open and closed sections are not qual */
initializeSkippedToothTrigger(this, 1, 0, triggerOperationMode, SyncEdge::Rise);
break;

Expand Down Expand Up @@ -634,9 +637,17 @@ void TriggerWaveform::initializeTriggerWaveform(operation_mode_e triggerOperatio
case trigger_type_e::TT_VVT_FORD_COYOTE:
configureFordCoyote(this);
break;
case trigger_type_e::TT_60DEG_TOOTH:
/** @note
* Have a something like TT_ONE_PHASED trigger with
* externally setuped blind width will be a good
* approach to utilize ::Rise(and::Both in future)
* with both edges phase-sync, but to stay simple I suggest
* just to use another enum for each trigger type. */
configure60degSingleTooth(this);
break;
case trigger_type_e::TT_UNUSED_11:
case trigger_type_e::TT_UNUSED_75:
case trigger_type_e::TT_UNUSED_77:
case trigger_type_e::TT_UNUSED_78:
case trigger_type_e::TT_MITSU_4G63_CAM:
initializeMitsubishi4g63Cam(this);
Expand Down
2 changes: 1 addition & 1 deletion firmware/integration/rusefi_config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,7 @@ adc_channel_e fuelLevelSensor;This is the processor pin that your fuel level sen
struct trigger_config_s @brief Trigger wheel(s) configuration

! 'INVALID' for TT_VVT_* wheels
#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", "trg11", "EZ30", "INVALID", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "INVALID", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Benelli Tre", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "dev 2JZ 3/34 simulator", "Rover K", "GM 24x 5 degree", "Honda CBR 600", "Mitsubishi 4G92/93/94 Cam 29", "Honda CBR 600 custom", "3/1 skipped", "Dodge Neon 2003 crank", "Miata NB", "Mitsubishi 4G63 Cam 34", "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", "Mitsu 4G63 Crank", "trg77", "trg78", "trg79"
#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", "trg11", "EZ30", "INVALID", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "INVALID", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Benelli Tre", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "dev 2JZ 3/34 simulator", "Rover K", "GM 24x 5 degree", "Honda CBR 600", "Mitsubishi 4G92/93/94 Cam 29", "Honda CBR 600 custom", "3/1 skipped", "Dodge Neon 2003 crank", "Miata NB", "Mitsubishi 4G63 Cam 34", "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", "Mitsu 4G63 Crank", "x2 30 Deg camshaft BTDC", "trg78", "trg79"

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
Expand Down
Loading