commit
2c10a969dd
|
@ -1,28 +1,28 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<msq xmlns="http://www.msefi.com/:msq">
|
||||
<bibliography author="TunerStudio MS 3.0.28 - EFI Analytics, Inc." tuneComment="" writeDate="Mon Oct 09 12:00:10 AEDT 2017"/>
|
||||
<versionInfo fileFormat="5.0" firmwareInfo="Speeduino+2017.09" nPages="10" signature="speeduino 201709"/>
|
||||
<bibliography author="TunerStudio MS(Beta) 3.0.50.17 - EFI Analytics, Inc." tuneComment="" writeDate="Sun Dec 10 17:18:48 AEDT 2017"/>
|
||||
<versionInfo fileFormat="5.0" firmwareInfo="Speeduino+2017.11" nPages="10" signature="speeduino 201711"/>
|
||||
<page>
|
||||
<pcVariable name="tsCanId">"CAN ID 0"</pcVariable>
|
||||
</page>
|
||||
<page number="0" size="288">
|
||||
<constant cols="16" digits="0" name="veTable" rows="16" units="%">
|
||||
44.0 44.0 49.0 49.0 23.0 17.0 19.0 35.0 51.0 54.0 51.0 51.0 51.0 51.0 51.0 51.0
|
||||
44.0 45.0 49.0 44.0 24.0 17.0 16.0 34.0 61.0 63.0 57.0 57.0 56.0 56.0 56.0 56.0
|
||||
45.0 45.0 55.0 47.0 31.0 29.0 21.0 51.0 64.0 62.0 64.0 60.0 60.0 60.0 60.0 60.0
|
||||
44.0 47.0 50.0 63.0 37.0 34.0 33.0 54.0 65.0 64.0 69.0 63.0 63.0 63.0 63.0 63.0
|
||||
51.0 60.0 61.0 60.0 42.0 46.0 39.0 59.0 66.0 66.0 71.0 65.0 65.0 65.0 65.0 65.0
|
||||
56.0 62.0 63.0 68.0 53.0 53.0 50.0 70.0 72.0 68.0 72.0 68.0 68.0 67.0 67.0 67.0
|
||||
58.0 61.0 64.0 75.0 61.0 60.0 64.0 75.0 86.0 75.0 77.0 72.0 72.0 71.0 71.0 71.0
|
||||
54.0 60.0 65.0 82.0 65.0 65.0 68.0 74.0 84.0 75.0 83.0 75.0 68.0 68.0 68.0 58.0
|
||||
57.0 60.0 61.0 85.0 74.0 70.0 71.0 85.0 76.0 73.0 71.0 64.0 64.0 64.0 64.0 64.0
|
||||
58.0 61.0 64.0 87.0 82.0 78.0 74.0 83.0 76.0 68.0 74.0 67.0 67.0 67.0 67.0 66.0
|
||||
64.0 64.0 79.0 87.0 81.0 81.0 86.0 86.0 78.0 72.0 78.0 76.0 73.0 71.0 69.0 69.0
|
||||
66.0 72.0 80.0 89.0 85.0 86.0 97.0 101.0 105.0 87.0 80.0 78.0 73.0 71.0 69.0 69.0
|
||||
66.0 75.0 80.0 93.0 89.0 91.0 100.0 105.0 112.0 99.0 89.0 89.0 83.0 77.0 74.0 74.0
|
||||
66.0 75.0 84.0 88.0 92.0 103.0 108.0 117.0 119.0 96.0 95.0 94.0 84.0 79.0 77.0 77.0
|
||||
66.0 75.0 84.0 88.0 105.0 115.0 121.0 150.0 166.0 125.0 113.0 102.0 87.0 83.0 80.0 80.0
|
||||
66.0 71.0 85.0 84.0 95.0 109.0 116.0 140.0 140.0 102.0 95.0 93.0 88.0 85.0 84.0 84.0
|
||||
44.0 44.0 49.0 49.0 23.0 20.0 18.0 32.0 52.0 54.0 51.0 51.0 51.0 51.0 51.0 51.0
|
||||
44.0 45.0 49.0 38.0 20.0 21.0 18.0 30.0 63.0 63.0 57.0 57.0 56.0 56.0 56.0 56.0
|
||||
45.0 45.0 55.0 44.0 27.0 31.0 26.0 46.0 64.0 62.0 64.0 60.0 60.0 60.0 60.0 60.0
|
||||
44.0 47.0 50.0 62.0 41.0 41.0 36.0 54.0 65.0 67.0 69.0 63.0 63.0 63.0 63.0 63.0
|
||||
51.0 60.0 61.0 59.0 47.0 52.0 47.0 55.0 66.0 66.0 71.0 65.0 65.0 65.0 65.0 65.0
|
||||
56.0 62.0 63.0 69.0 58.0 61.0 55.0 67.0 72.0 68.0 72.0 68.0 68.0 67.0 67.0 67.0
|
||||
58.0 61.0 64.0 80.0 65.0 64.0 64.0 72.0 85.0 75.0 77.0 72.0 72.0 71.0 71.0 71.0
|
||||
54.0 60.0 65.0 84.0 73.0 67.0 65.0 75.0 86.0 75.0 83.0 75.0 68.0 68.0 68.0 58.0
|
||||
57.0 60.0 74.0 86.0 80.0 74.0 72.0 82.0 76.0 73.0 73.0 64.0 64.0 64.0 64.0 64.0
|
||||
58.0 61.0 79.0 88.0 81.0 80.0 79.0 82.0 76.0 68.0 75.0 67.0 67.0 67.0 67.0 66.0
|
||||
64.0 64.0 79.0 87.0 89.0 87.0 83.0 85.0 78.0 72.0 78.0 76.0 73.0 71.0 69.0 69.0
|
||||
66.0 72.0 80.0 89.0 93.0 94.0 96.0 100.0 106.0 87.0 80.0 78.0 73.0 71.0 69.0 69.0
|
||||
66.0 75.0 80.0 93.0 109.0 111.0 110.0 106.0 114.0 99.0 89.0 89.0 83.0 77.0 74.0 74.0
|
||||
66.0 75.0 84.0 100.0 118.0 119.0 117.0 129.0 121.0 96.0 99.0 96.0 84.0 79.0 77.0 77.0
|
||||
66.0 75.0 86.0 102.0 122.0 125.0 132.0 158.0 174.0 130.0 118.0 102.0 87.0 83.0 80.0 80.0
|
||||
66.0 71.0 93.0 97.0 111.0 133.0 142.0 147.0 151.0 112.0 104.0 93.0 88.0 85.0 84.0 84.0
|
||||
</constant>
|
||||
<constant cols="1" digits="0" name="rpmBins" rows="16" units="RPM">
|
||||
500.0
|
||||
|
@ -64,7 +64,7 @@
|
|||
<page number="1" size="128">
|
||||
<constant digits="0" name="flexBoostLow" units="kPa">50.0</constant>
|
||||
<constant digits="0" name="flexBoostHigh" units="kPa">50.0</constant>
|
||||
<constant digits="0" name="asePct" units="%">5.0</constant>
|
||||
<constant digits="0" name="asePct" units="%">15.0</constant>
|
||||
<constant digits="0" name="aseCount" units="s">5.0</constant>
|
||||
<constant cols="1" digits="0" name="wueRates" rows="10" units="%">
|
||||
179.0
|
||||
|
@ -72,8 +72,8 @@
|
|||
179.0
|
||||
179.0
|
||||
179.0
|
||||
129.0
|
||||
114.0
|
||||
155.0
|
||||
128.0
|
||||
112.0
|
||||
108.0
|
||||
100.0
|
||||
|
@ -82,9 +82,9 @@
|
|||
<constant name="pinLayout">"NA6 MX5 PNP"</constant>
|
||||
<constant name="tachoPin">"Board Default"</constant>
|
||||
<constant name="tachoDiv">"Normal"</constant>
|
||||
<constant digits="1" name="tdePct" units="ms">3.2</constant>
|
||||
<constant digits="1" name="taeColdA" units="ms">0.0</constant>
|
||||
<constant digits="0" name="tpsThresh" units="%/s">60.0</constant>
|
||||
<constant digits="1" name="unused2-17" units="ms">3.2</constant>
|
||||
<constant digits="1" name="unused2-18" units="ms">0.0</constant>
|
||||
<constant digits="0" name="tpsThresh" units="%/s">30.0</constant>
|
||||
<constant digits="0" name="taeTime" units="ms">700.0</constant>
|
||||
<constant name="display">"Unused"</constant>
|
||||
<constant name="display1">"VE"</constant>
|
||||
|
@ -113,8 +113,6 @@
|
|||
<constant name="twoStroke">"Four-stroke"</constant>
|
||||
<constant name="injType">"Port"</constant>
|
||||
<constant name="nCylinders">"4"</constant>
|
||||
<constant name="cltType">"GM"</constant>
|
||||
<constant name="matType">"GM"</constant>
|
||||
<constant name="nInjectors">"4"</constant>
|
||||
<constant name="engineType">"Even fire"</constant>
|
||||
<constant name="flexEnabled">"Off"</constant>
|
||||
|
@ -144,10 +142,9 @@
|
|||
<constant digits="0" name="iacCLminDuty" units="%">40.0</constant>
|
||||
<constant digits="0" name="iacCLmaxDuty" units="%">80.0</constant>
|
||||
<constant digits="0" name="boostMinDuty" units="%">12.0</constant>
|
||||
<constant cols="1" digits="0" name="unused2-64" rows="63" units="%">
|
||||
16.0
|
||||
16.0
|
||||
57.0
|
||||
<constant digits="0" name="baroMin" units="kpa">16.0</constant>
|
||||
<constant digits="0" name="baroMax" units="kpa">14608.0</constant>
|
||||
<constant cols="1" digits="0" name="unused2-67" rows="60" units="%">
|
||||
60.0
|
||||
60.0
|
||||
64.0
|
||||
|
@ -210,7 +207,7 @@
|
|||
77.0
|
||||
</constant>
|
||||
<constant digits="0" name="UNALLOCATED_TOP_1" units="RAW">
|
||||
0.0
|
||||
77.0
|
||||
</constant>
|
||||
</page>
|
||||
<page number="2" size="288">
|
||||
|
@ -282,35 +279,35 @@
|
|||
<constant name="TrigEdgeSec">"Trailing"</constant>
|
||||
<constant name="fuelPumpPin">"Board Default"</constant>
|
||||
<constant name="useResync">"Yes"</constant>
|
||||
<constant digits="1" name="sparkDur" units="ms">6.5</constant>
|
||||
<constant digits="0" name="IdleAdvRPM" units="RPM">3200.0</constant>
|
||||
<constant digits="1" name="IdleAdvCLT" units="C">-21.0</constant>
|
||||
<constant digits="0" name="IdleDelayTime" units="sec">38.0</constant>
|
||||
<constant digits="0" name="StgCycles" units="cycles">0.0</constant>
|
||||
<constant name="dwellcont">"Dwell control"</constant>
|
||||
<constant name="useDwellLim">"Off"</constant>
|
||||
<constant digits="1" name="sparkDur" units="ms">1.0</constant>
|
||||
<constant digits="1" name="unused4-8" units="ms">3.2</constant>
|
||||
<constant digits="1" name="unused4-9" units="ms">1.9</constant>
|
||||
<constant digits="1" name="unused4-10" units="ms">3.8</constant>
|
||||
<constant digits="0" name="SkipCycles" units="cycles">0.0</constant>
|
||||
<constant name="unused4-12a">"NOTHING"</constant>
|
||||
<constant name="useDwellLim">"On"</constant>
|
||||
<constant name="sparkMode">"Wasted Spark"</constant>
|
||||
<constant name="TrigFilter">"Weak"</constant>
|
||||
<constant name="ignCranklock">"On"</constant>
|
||||
<constant digits="1" name="dwellcrank" units="ms">6.0</constant>
|
||||
<constant digits="1" name="dwellrun" units="ms">5.0</constant>
|
||||
<constant digits="0" name="numteeth" units="teeth">2.0</constant>
|
||||
<constant digits="0" name="onetwo" units="teeth">1.0</constant>
|
||||
<constant digits="1" name="dwellrun" units="ms">4.0</constant>
|
||||
<constant digits="0" name="numTeeth" units="teeth">2.0</constant>
|
||||
<constant digits="0" name="missingTeeth" units="teeth">1.0</constant>
|
||||
<constant digits="0" name="crankRPM" units="rpm">400.0</constant>
|
||||
<constant digits="0" name="tpsflood" units="%">90.0</constant>
|
||||
<constant digits="0" name="SoftRevLim" units="rpm">6000.0</constant>
|
||||
<constant digits="0" name="SoftLimRetard" units="deg">1.0</constant>
|
||||
<constant digits="1" name="SoftLimMax" units="s">2.0</constant>
|
||||
<constant digits="0" name="HardRevLim" units="rpm">6500.0</constant>
|
||||
<constant digits="0" name="HardRevLim" units="rpm">6000.0</constant>
|
||||
<constant cols="1" digits="0" name="taeBins" rows="4" units="%/s">
|
||||
20.0
|
||||
280.0
|
||||
10.0
|
||||
260.0
|
||||
640.0
|
||||
970.0
|
||||
</constant>
|
||||
<constant cols="1" digits="0" name="taeRates" rows="4" units="%">
|
||||
69.0
|
||||
90.0
|
||||
98.0
|
||||
104.0
|
||||
106.0
|
||||
120.0
|
||||
</constant>
|
||||
|
@ -321,7 +318,7 @@
|
|||
-14.0
|
||||
-4.0
|
||||
15.0
|
||||
33.0
|
||||
32.0
|
||||
48.0
|
||||
66.0
|
||||
77.0
|
||||
|
@ -423,7 +420,7 @@
|
|||
1.0
|
||||
</constant>
|
||||
<constant digits="0" name="UNALLOCATED_TOP_3" units="RAW">
|
||||
0.0
|
||||
134.0
|
||||
</constant>
|
||||
</page>
|
||||
<page number="4" size="288">
|
||||
|
@ -493,7 +490,7 @@
|
|||
<constant digits="0" name="egoKD" units="%">0.0</constant>
|
||||
<constant digits="0" name="egoTemp" units="C">158.0</constant>
|
||||
<constant digits="0" name="egoCount">16.0</constant>
|
||||
<constant digits="0" name="egoDelta" units="%">1.0</constant>
|
||||
<constant digits="0" name="unused6-6" units="%">1.0</constant>
|
||||
<constant digits="0" name="egoLimit">15.0</constant>
|
||||
<constant digits="1" name="ego_min" units="AFR">9.0</constant>
|
||||
<constant digits="1" name="ego_max" units="AFR">19.0</constant>
|
||||
|
@ -654,7 +651,7 @@
|
|||
-40.0
|
||||
</constant>
|
||||
</page>
|
||||
<page number="6" size="160">
|
||||
<page number="6" size="240">
|
||||
<constant cols="8" digits="0" name="boostTable" rows="8" units="kPa">
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
|
@ -686,14 +683,14 @@
|
|||
0.0
|
||||
</constant>
|
||||
<constant cols="8" digits="0" name="vvtTable" rows="8" units="%">
|
||||
150.0 0.0 0.0 0.0 184.0 184.0 0.0 5.0
|
||||
32.0 0.0 6.0 184.0 0.0 0.0 0.0 184.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
116.0 0.0 100.0 0.0 70.0 0.0 50.0 0.0
|
||||
</constant>
|
||||
<constant cols="1" digits="0" name="rpmBinsVVT" rows="8" units="RPM">
|
||||
0.0
|
||||
|
@ -715,6 +712,36 @@
|
|||
0.0
|
||||
0.0
|
||||
</constant>
|
||||
<constant cols="8" digits="0" name="stagingTable" rows="8" units="%">
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 10.0 18.0 25.0
|
||||
0.0 0.0 0.0 9.0 9.0 22.0 35.0 50.0
|
||||
0.0 0.0 0.0 14.0 14.0 29.0 53.0 75.0
|
||||
0.0 0.0 0.0 22.0 22.0 39.0 63.0 90.0
|
||||
0.0 0.0 0.0 31.0 31.0 52.0 80.0 100.0
|
||||
0.0 0.0 0.0 40.0 40.0 64.0 90.0 100.0
|
||||
</constant>
|
||||
<constant cols="1" digits="0" name="rpmBinsStaging" rows="8" units="RPM">
|
||||
100.0
|
||||
600.0
|
||||
1000.0
|
||||
2000.0
|
||||
300.0
|
||||
4000.0
|
||||
5500.0
|
||||
7000.0
|
||||
</constant>
|
||||
<constant cols="1" digits="0" name="mapBinsStaging" rows="8" units="kPa">
|
||||
10.0
|
||||
50.0
|
||||
70.0
|
||||
100.0
|
||||
116.0
|
||||
140.0
|
||||
170.0
|
||||
200.0
|
||||
</constant>
|
||||
</page>
|
||||
<page number="7" size="192">
|
||||
<constant cols="6" digits="0" name="fuelTrim1Table" rows="6" units="%">
|
||||
|
@ -833,54 +860,38 @@
|
|||
<constant name="caninput_sel13">"Off"</constant>
|
||||
<constant name="caninput_sel14">"Off"</constant>
|
||||
<constant name="caninput_sel15">"Off"</constant>
|
||||
<constant name="caninput_param_group0">"blank"</constant>
|
||||
<constant name="caninput_param_group1">"blank"</constant>
|
||||
<constant name="caninput_param_group2">"blank"</constant>
|
||||
<constant name="caninput_param_group3">"blank"</constant>
|
||||
<constant name="caninput_param_group4">"blank"</constant>
|
||||
<constant name="caninput_param_group5">"blank"</constant>
|
||||
<constant name="caninput_param_group6">"blank"</constant>
|
||||
<constant name="caninput_param_group7">"blank"</constant>
|
||||
<constant name="caninput_param_group8">"blank"</constant>
|
||||
<constant name="caninput_param_group9">"blank"</constant>
|
||||
<constant name="caninput_param_group10">"blank"</constant>
|
||||
<constant name="caninput_param_group11">"blank"</constant>
|
||||
<constant name="caninput_param_group12">"blank"</constant>
|
||||
<constant name="caninput_param_group13">"blank"</constant>
|
||||
<constant name="caninput_param_group14">"blank"</constant>
|
||||
<constant name="caninput_param_group15">"blank"</constant>
|
||||
<constant name="caninput_param_start_byte0">"7"</constant>
|
||||
<constant name="caninput_param_start_byte1">"1"</constant>
|
||||
<constant name="caninput_param_start_byte2">"1"</constant>
|
||||
<constant name="caninput_param_start_byte3">"1"</constant>
|
||||
<constant name="caninput_param_start_byte4">"1"</constant>
|
||||
<constant name="caninput_param_start_byte5">"1"</constant>
|
||||
<constant name="caninput_param_start_byte6">"1"</constant>
|
||||
<constant name="caninput_param_start_byte7">"1"</constant>
|
||||
<constant name="caninput_param_start_byte8">"1"</constant>
|
||||
<constant name="caninput_param_start_byte9">"7"</constant>
|
||||
<constant name="caninput_param_start_byte10">"7"</constant>
|
||||
<constant name="caninput_param_start_byte11">"7"</constant>
|
||||
<constant name="caninput_param_start_byte12">"7"</constant>
|
||||
<constant name="caninput_param_start_byte13">"7"</constant>
|
||||
<constant name="caninput_param_start_byte14">"7"</constant>
|
||||
<constant name="caninput_param_start_byte15">"7"</constant>
|
||||
<constant name="caninput_param_num_bytes0">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes1">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes2">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes3">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes4">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes5">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes6">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes7">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes8">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes9">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes10">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes11">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes12">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes13">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes14">"2"</constant>
|
||||
<constant name="caninput_param_num_bytes15">"2"</constant>
|
||||
<constant name="caninput_source_start_byte0">"7"</constant>
|
||||
<constant name="caninput_source_start_byte1">"1"</constant>
|
||||
<constant name="caninput_source_start_byte2">"1"</constant>
|
||||
<constant name="caninput_source_start_byte3">"1"</constant>
|
||||
<constant name="caninput_source_start_byte4">"1"</constant>
|
||||
<constant name="caninput_source_start_byte5">"1"</constant>
|
||||
<constant name="caninput_source_start_byte6">"1"</constant>
|
||||
<constant name="caninput_source_start_byte7">"1"</constant>
|
||||
<constant name="caninput_source_start_byte8">"1"</constant>
|
||||
<constant name="caninput_source_start_byte9">"7"</constant>
|
||||
<constant name="caninput_source_start_byte10">"7"</constant>
|
||||
<constant name="caninput_source_start_byte11">"7"</constant>
|
||||
<constant name="caninput_source_start_byte12">"7"</constant>
|
||||
<constant name="caninput_source_start_byte13">"7"</constant>
|
||||
<constant name="caninput_source_start_byte14">"7"</constant>
|
||||
<constant name="caninput_source_start_byte15">"7"</constant>
|
||||
<constant name="caninput_source_num_bytes0">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes1">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes2">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes3">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes4">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes5">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes6">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes7">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes8">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes9">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes10">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes11">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes12">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes13">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes14">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes15">"2"</constant>
|
||||
<constant digits="0" name="unused10_53">255.0</constant>
|
||||
<constant digits="0" name="unused10_54">255.0</constant>
|
||||
<constant name="enable_candata_out">"Off"</constant>
|
||||
|
@ -915,9 +926,6 @@
|
|||
<constant digits="0" name="unused10_98">0.0</constant>
|
||||
<constant digits="0" name="unused10_99">0.0</constant>
|
||||
<constant name="speeduino_tsCanId">"CAN ID 0"</constant>
|
||||
<constant name="true_address">"blank"</constant>
|
||||
<constant name="realtime_base_address">"blank"</constant>
|
||||
<constant name="obd_address">"blank"</constant>
|
||||
<constant digits="0" name="unused10_107">0.0</constant>
|
||||
<constant digits="0" name="unused10_108">0.0</constant>
|
||||
<constant digits="0" name="unused10_109">0.0</constant>
|
||||
|
@ -938,24 +946,24 @@
|
|||
<constant digits="0" name="unused10_124">0.0</constant>
|
||||
<constant digits="0" name="unused10_125">0.0</constant>
|
||||
<constant digits="0" name="unused10_126">0.0</constant>
|
||||
<constant digits="0" name="unused10_127">156.0</constant>
|
||||
<constant digits="0" name="unused10_127">132.0</constant>
|
||||
</page>
|
||||
<page number="9" size="192">
|
||||
<constant cols="1" digits="0" name="crankingEnrichBins" rows="4" units="C">
|
||||
-40.0
|
||||
-3.0
|
||||
-39.0
|
||||
1.0
|
||||
34.0
|
||||
83.0
|
||||
</constant>
|
||||
<constant cols="1" digits="0" name="crankingEnrichValues" rows="4" units="%">
|
||||
162.0
|
||||
164.0
|
||||
176.0
|
||||
173.0
|
||||
128.0
|
||||
125.0
|
||||
</constant>
|
||||
<constant name="rotaryType">"FC"</constant>
|
||||
<constant name="unused11-8c">"On"</constant>
|
||||
<constant name="unused11-8d">"On"</constant>
|
||||
<constant name="stagingEnabled">"Off"</constant>
|
||||
<constant name="stagingMode">"Automatic"</constant>
|
||||
<constant name="unused11-8e">"On"</constant>
|
||||
<constant name="unused11-8f">"On"</constant>
|
||||
<constant name="unused11-8g">"On"</constant>
|
||||
|
@ -982,11 +990,9 @@
|
|||
</constant>
|
||||
<constant digits="0" name="boostSens">65535.0</constant>
|
||||
<constant digits="0" name="boostIntv" units="ms">255.0</constant>
|
||||
<constant cols="1" digits="0" name="unused11_28_192" rows="164" units="RPM">
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
<constant digits="0" name="stagedInjSizePri" units="cc/min">300.0</constant>
|
||||
<constant digits="0" name="stagedInjSizeSec" units="cc/min">700.0</constant>
|
||||
<constant cols="1" digits="0" name="unused11_32_192" rows="159" units="RPM">
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
|
@ -1146,6 +1152,8 @@
|
|||
0.0
|
||||
0.0
|
||||
0.0
|
||||
</constant>
|
||||
<constant digits="0" name="UNALLOCATED_TOP_9" units="RAW">
|
||||
0.0
|
||||
</constant>
|
||||
</page>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<msq xmlns="http://www.msefi.com/:msq">
|
||||
<bibliography author="TunerStudio MS(Beta) 3.0.50.10 - EFI Analytics, Inc." tuneComment="" writeDate="Tue Nov 07 22:13:14 AEDT 2017"/>
|
||||
<versionInfo fileFormat="5.0" firmwareInfo="Speeduino+2017.09" nPages="10" signature="speeduino 201710"/>
|
||||
<bibliography author="TunerStudio MS(Beta) 3.0.50.17 - EFI Analytics, Inc." tuneComment="" writeDate="Sun Dec 10 15:54:48 AEDT 2017"/>
|
||||
<versionInfo fileFormat="5.0" firmwareInfo="Speeduino+2017.10" nPages="10" signature="speeduino 201711"/>
|
||||
<page>
|
||||
<pcVariable name="tsCanId">"CAN ID 0"</pcVariable>
|
||||
</page>
|
||||
|
@ -82,6 +82,8 @@
|
|||
<constant name="pinLayout">"Speeduino v0.4"</constant>
|
||||
<constant name="tachoPin">"Board Default"</constant>
|
||||
<constant name="tachoDiv">"Normal"</constant>
|
||||
<constant digits="1" name="unused2-17" units="ms">25.5</constant>
|
||||
<constant digits="1" name="unused2-18" units="ms">25.5</constant>
|
||||
<constant digits="0" name="tpsThresh" units="%/s">70.0</constant>
|
||||
<constant digits="0" name="taeTime" units="ms">200.0</constant>
|
||||
<constant name="display">"Unused"</constant>
|
||||
|
@ -111,6 +113,8 @@
|
|||
<constant name="twoStroke">"Four-stroke"</constant>
|
||||
<constant name="injType">"Port"</constant>
|
||||
<constant name="nCylinders">"4"</constant>
|
||||
<constant name="unused2-37a">"None"</constant>
|
||||
<constant name="unused2-37b">"None"</constant>
|
||||
<constant name="nInjectors">"4"</constant>
|
||||
<constant name="engineType">"Even fire"</constant>
|
||||
<constant name="flexEnabled">"Off"</constant>
|
||||
|
@ -140,71 +144,6 @@
|
|||
<constant digits="0" name="iacCLminDuty" units="%">0.0</constant>
|
||||
<constant digits="0" name="iacCLmaxDuty" units="%">0.0</constant>
|
||||
<constant digits="0" name="boostMinDuty" units="%">20.0</constant>
|
||||
<constant cols="1" digits="0" name="unused2-64" rows="63" units="%">
|
||||
16.0
|
||||
18.0
|
||||
57.0
|
||||
62.0
|
||||
62.0
|
||||
60.0
|
||||
61.0
|
||||
64.0
|
||||
65.0
|
||||
66.0
|
||||
68.0
|
||||
68.0
|
||||
70.0
|
||||
71.0
|
||||
71.0
|
||||
71.0
|
||||
71.0
|
||||
66.0
|
||||
59.0
|
||||
60.0
|
||||
60.0
|
||||
61.0
|
||||
63.0
|
||||
64.0
|
||||
66.0
|
||||
67.0
|
||||
68.0
|
||||
69.0
|
||||
70.0
|
||||
71.0
|
||||
72.0
|
||||
74.0
|
||||
69.0
|
||||
61.0
|
||||
59.0
|
||||
60.0
|
||||
61.0
|
||||
62.0
|
||||
64.0
|
||||
66.0
|
||||
67.0
|
||||
69.0
|
||||
70.0
|
||||
71.0
|
||||
72.0
|
||||
72.0
|
||||
73.0
|
||||
74.0
|
||||
64.0
|
||||
59.0
|
||||
61.0
|
||||
60.0
|
||||
61.0
|
||||
64.0
|
||||
65.0
|
||||
67.0
|
||||
68.0
|
||||
68.0
|
||||
70.0
|
||||
71.0
|
||||
71.0
|
||||
71.0
|
||||
71.0
|
||||
</constant>
|
||||
<constant digits="0" name="UNALLOCATED_TOP_1" units="RAW">
|
||||
255.0
|
||||
</constant>
|
||||
|
@ -279,7 +218,11 @@
|
|||
<constant name="fuelPumpPin">"Board Default"</constant>
|
||||
<constant name="useResync">"No"</constant>
|
||||
<constant digits="1" name="sparkDur" units="ms">1.0</constant>
|
||||
<constant digits="1" name="unused4-8" units="ms">25.5</constant>
|
||||
<constant digits="1" name="unused4-9" units="ms">25.5</constant>
|
||||
<constant digits="1" name="unused4-10" units="ms">25.5</constant>
|
||||
<constant digits="0" name="SkipCycles" units="cycles">1.0</constant>
|
||||
<constant name="unused4-12a">"NOTHING"</constant>
|
||||
<constant name="useDwellLim">"On"</constant>
|
||||
<constant name="sparkMode">"Wasted Spark"</constant>
|
||||
<constant name="TrigFilter">"Off"</constant>
|
||||
|
@ -485,6 +428,7 @@
|
|||
<constant digits="0" name="egoKD" units="%">0.0</constant>
|
||||
<constant digits="0" name="egoTemp" units="C">70.0</constant>
|
||||
<constant digits="0" name="egoCount">16.0</constant>
|
||||
<constant digits="0" name="unused6-6" units="%">255.0</constant>
|
||||
<constant digits="0" name="egoLimit">15.0</constant>
|
||||
<constant digits="1" name="ego_min" units="AFR">9.0</constant>
|
||||
<constant digits="1" name="ego_max" units="AFR">19.0</constant>
|
||||
|
@ -645,7 +589,7 @@
|
|||
158.0
|
||||
</constant>
|
||||
</page>
|
||||
<page number="6" size="160">
|
||||
<page number="6" size="240">
|
||||
<constant cols="8" digits="0" name="boostTable" rows="8" units="kPa">
|
||||
150.0 150.0 150.0 150.0 150.0 150.0 150.0 150.0
|
||||
150.0 150.0 150.0 150.0 150.0 150.0 150.0 150.0
|
||||
|
@ -706,6 +650,36 @@
|
|||
80.0
|
||||
100.0
|
||||
</constant>
|
||||
<constant cols="8" digits="0" name="stagingTable" rows="8" units="%">
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
|
||||
</constant>
|
||||
<constant cols="1" digits="0" name="rpmBinsStaging" rows="8" units="RPM">
|
||||
500.0
|
||||
1000.0
|
||||
2000.0
|
||||
3000.0
|
||||
4000.0
|
||||
5000.0
|
||||
6000.0
|
||||
7000.0
|
||||
</constant>
|
||||
<constant cols="1" digits="0" name="mapBinsStaging" rows="8" units="kPa">
|
||||
10.0
|
||||
30.0
|
||||
46.0
|
||||
60.0
|
||||
80.0
|
||||
100.0
|
||||
120.0
|
||||
150.0
|
||||
</constant>
|
||||
</page>
|
||||
<page number="7" size="192">
|
||||
<constant cols="6" digits="0" name="fuelTrim1Table" rows="6" units="%">
|
||||
|
@ -824,6 +798,38 @@
|
|||
<constant name="caninput_sel13">"Off"</constant>
|
||||
<constant name="caninput_sel14">"Off"</constant>
|
||||
<constant name="caninput_sel15">"Off"</constant>
|
||||
<constant name="caninput_source_start_byte0">"7"</constant>
|
||||
<constant name="caninput_source_start_byte1">"7"</constant>
|
||||
<constant name="caninput_source_start_byte2">"7"</constant>
|
||||
<constant name="caninput_source_start_byte3">"7"</constant>
|
||||
<constant name="caninput_source_start_byte4">"7"</constant>
|
||||
<constant name="caninput_source_start_byte5">"7"</constant>
|
||||
<constant name="caninput_source_start_byte6">"7"</constant>
|
||||
<constant name="caninput_source_start_byte7">"7"</constant>
|
||||
<constant name="caninput_source_start_byte8">"7"</constant>
|
||||
<constant name="caninput_source_start_byte9">"7"</constant>
|
||||
<constant name="caninput_source_start_byte10">"7"</constant>
|
||||
<constant name="caninput_source_start_byte11">"7"</constant>
|
||||
<constant name="caninput_source_start_byte12">"7"</constant>
|
||||
<constant name="caninput_source_start_byte13">"7"</constant>
|
||||
<constant name="caninput_source_start_byte14">"7"</constant>
|
||||
<constant name="caninput_source_start_byte15">"7"</constant>
|
||||
<constant name="caninput_source_num_bytes0">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes1">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes2">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes3">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes4">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes5">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes6">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes7">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes8">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes9">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes10">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes11">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes12">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes13">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes14">"2"</constant>
|
||||
<constant name="caninput_source_num_bytes15">"2"</constant>
|
||||
<constant digits="0" name="unused10_53">255.0</constant>
|
||||
<constant digits="0" name="unused10_54">255.0</constant>
|
||||
<constant name="enable_candata_out">"On"</constant>
|
||||
|
@ -881,7 +887,7 @@
|
|||
<constant digits="0" name="unused10_124">255.0</constant>
|
||||
<constant digits="0" name="unused10_125">255.0</constant>
|
||||
<constant digits="0" name="unused10_126">255.0</constant>
|
||||
<constant digits="0" name="unused10_127">100.0</constant>
|
||||
<constant digits="0" name="unused10_127">124.0</constant>
|
||||
</page>
|
||||
<page number="9" size="192">
|
||||
<constant cols="1" digits="0" name="crankingEnrichBins" rows="4" units="C">
|
||||
|
@ -897,199 +903,36 @@
|
|||
100.0
|
||||
</constant>
|
||||
<constant name="rotaryType">"FC"</constant>
|
||||
<constant name="unused11-8c">"On"</constant>
|
||||
<constant name="unused11-8d">"Off"</constant>
|
||||
<constant name="stagingEnabled">"Off"</constant>
|
||||
<constant name="stagingMode">"Automatic"</constant>
|
||||
<constant name="unused11-8e">"Off"</constant>
|
||||
<constant name="unused11-8f">"Off"</constant>
|
||||
<constant name="unused11-8g">"Off"</constant>
|
||||
<constant name="unused11-8h">"Off"</constant>
|
||||
<constant cols="1" digits="0" name="rotarySplitValues" rows="8" units="degrees">
|
||||
255.0
|
||||
7.0
|
||||
255.0
|
||||
7.0
|
||||
255.0
|
||||
7.0
|
||||
255.0
|
||||
7.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
10.0
|
||||
10.0
|
||||
10.0
|
||||
11.0
|
||||
12.0
|
||||
</constant>
|
||||
<constant cols="1" digits="0" name="rotarySplitBins" rows="8" units="kPa">
|
||||
510.0
|
||||
14.0
|
||||
510.0
|
||||
14.0
|
||||
510.0
|
||||
14.0
|
||||
510.0
|
||||
14.0
|
||||
0.0
|
||||
30.0
|
||||
50.0
|
||||
70.0
|
||||
90.0
|
||||
110.0
|
||||
140.0
|
||||
200.0
|
||||
</constant>
|
||||
<constant digits="0" name="boostSens">2047.0</constant>
|
||||
<constant digits="0" name="boostIntv" units="ms">20.0</constant>
|
||||
<constant cols="1" digits="0" name="unused11_28_192" rows="163" units="RPM">
|
||||
700.0
|
||||
25300.0
|
||||
1000.0
|
||||
25000.0
|
||||
1300.0
|
||||
24700.0
|
||||
700.0
|
||||
700.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
100.0
|
||||
700.0
|
||||
700.0
|
||||
700.0
|
||||
700.0
|
||||
700.0
|
||||
600.0
|
||||
0.0
|
||||
3800.0
|
||||
25500.0
|
||||
21400.0
|
||||
100.0
|
||||
100.0
|
||||
100.0
|
||||
100.0
|
||||
100.0
|
||||
100.0
|
||||
100.0
|
||||
100.0
|
||||
5600.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
17700.0
|
||||
500.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
100.0
|
||||
100.0
|
||||
200.0
|
||||
200.0
|
||||
100.0
|
||||
100.0
|
||||
100.0
|
||||
10700.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
14300.0
|
||||
0.0
|
||||
100.0
|
||||
0.0
|
||||
100.0
|
||||
12000.0
|
||||
13400.0
|
||||
12300.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
10500.0
|
||||
3500.0
|
||||
6600.0
|
||||
9700.0
|
||||
13500.0
|
||||
13100.0
|
||||
11300.0
|
||||
10000.0
|
||||
3300.0
|
||||
800.0
|
||||
1100.0
|
||||
700.0
|
||||
500.0
|
||||
800.0
|
||||
1000.0
|
||||
1200.0
|
||||
1400.0
|
||||
1500.0
|
||||
2200.0
|
||||
3400.0
|
||||
4300.0
|
||||
4900.0
|
||||
6100.0
|
||||
8400.0
|
||||
11700.0
|
||||
19500.0
|
||||
5000.0
|
||||
2400.0
|
||||
600.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
0.0
|
||||
20900.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
25500.0
|
||||
</constant>
|
||||
<constant digits="0" name="stagedInjSizePri" units="cc/min">200.0</constant>
|
||||
<constant digits="0" name="stagedInjSizeSec" units="cc/min">600.0</constant>
|
||||
<constant digits="0" name="UNALLOCATED_TOP_9" units="RAW">
|
||||
255.0
|
||||
</constant>
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -6,7 +6,7 @@
|
|||
MTversion = 2.25
|
||||
|
||||
queryCommand = "Q"
|
||||
signature = "speeduino 201711-dev"
|
||||
signature = "speeduino 201711"
|
||||
versionInfo = "S" ;This info is what is displayed to user
|
||||
|
||||
[TunerStudio]
|
||||
|
@ -701,7 +701,7 @@ page = 10
|
|||
|
||||
rotaryType = bits , U08, 8, [0:1], "FC", "FD", "RX8", "INVALID"
|
||||
stagingEnabled = bits , U08, 8, [2:2], "Off","On"
|
||||
stagingMode = bits , U08, 8, [3:3], "Table","INVALID"
|
||||
stagingMode = bits , U08, 8, [3:3], "Table","Automatic"
|
||||
unused11-8e = bits , U08, 8, [4:4], "Off","On"
|
||||
unused11-8f = bits , U08, 8, [5:5], "Off","On"
|
||||
unused11-8g = bits , U08, 8, [6:6], "Off","On"
|
||||
|
@ -751,6 +751,9 @@ page = 10
|
|||
requiresPowerCycle = useExtBaro
|
||||
requiresPowerCycle = baroPin
|
||||
requiresPowerCycle = rotaryType
|
||||
requiresPowerCycle = stagedInjSizePri
|
||||
requiresPowerCycle = stagedInjSizeSec
|
||||
requiresPowerCycle = stagingEnabled
|
||||
|
||||
defaultValue = pinLayout, 1
|
||||
defaultValue = TrigPattern, 0
|
||||
|
@ -1087,6 +1090,9 @@ menuDialog = main
|
|||
boostIntv = "The closed loop control interval will run every this many ms. Generally values between 50% and 100% of the valve frequency work best"
|
||||
VVTasOnOff = "Whether or not the VVT table should be treated as on and off control only. If you are using the VVT map to control a switch, this should be Yes. If you are using the VVT control to drive a PWM signal, this should be No"
|
||||
|
||||
stagedInjSizePri= "Size of the primary injectors. The sum of the Pri and Sec injectors values MUST match the value used in the req_fuel calculation"
|
||||
stagedInjSizeSec= "Size of the secondary injectors. The sum of the Pri and Sec injectors values MUST match the value used in the req_fuel calculation"
|
||||
|
||||
[UserDefined]
|
||||
|
||||
; Enhanced TunerStudio dialogs can be defined here
|
||||
|
@ -2235,7 +2241,7 @@ cmdtestspk450dc = "E\x03\x0C"
|
|||
; you change it.
|
||||
|
||||
ochGetCommand = "r\$tsCanId\x30%2o%2c"
|
||||
ochBlockSize = 75
|
||||
ochBlockSize = 81
|
||||
|
||||
secl = scalar, U08, 0, "sec", 1.000, 0.000
|
||||
status1 = scalar, U08, 1, "bits", 1.000, 0.000
|
||||
|
@ -2316,9 +2322,12 @@ cmdtestspk450dc = "E\x03\x0C"
|
|||
canin_gauge14 = scalar, U16, 69, "", 1.000, 0.000
|
||||
canin_gauge15 = scalar, U16, 71, "", 1.000, 0.000
|
||||
tpsADC = scalar, U08, 73, "ADC",1.000, 0.000
|
||||
errors = scalar, U08, 36, "bits", 1.000, 0.000
|
||||
errorNum = bits, U08, 36, [0:1]
|
||||
currentError = bits, U08, 36, [2:7]
|
||||
errors = scalar, U08, 74, "bits", 1.000, 0.000
|
||||
errorNum = bits, U08, 74, [0:1]
|
||||
currentError = bits, U08, 74, [2:7]
|
||||
pulseWidth2 = scalar, U16, 75, "ms", 0.001, 0.000
|
||||
pulseWidth3 = scalar, U16, 77, "ms", 0.001, 0.000
|
||||
pulseWidth4 = scalar, U16, 79, "ms", 0.001, 0.000
|
||||
|
||||
#if CELSIUS
|
||||
coolant = { coolantRaw - 40 } ; Temperature readings are offset by 40 to allow for negatives
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 529 KiB |
|
@ -12,7 +12,7 @@
|
|||
#define canbusPage 9//Config Page 9
|
||||
#define warmupPage 10 //Config Page 10
|
||||
|
||||
#define SERIAL_PACKET_SIZE 75
|
||||
#define SERIAL_PACKET_SIZE 81
|
||||
|
||||
byte currentPage = 1;//Not the same as the speeduino config page numbers
|
||||
bool isMap = true;
|
||||
|
|
|
@ -132,7 +132,7 @@ void command()
|
|||
break;
|
||||
|
||||
case 'Q': // send code version
|
||||
Serial.print("speeduino 201711-dev");
|
||||
Serial.print("speeduino 201711");
|
||||
break;
|
||||
|
||||
case 'r': //New format for the optimised OutputChannels
|
||||
|
@ -162,7 +162,7 @@ void command()
|
|||
break;
|
||||
|
||||
case 'S': // send code version
|
||||
Serial.print("Speeduino 2017.11-dev");
|
||||
Serial.print("Speeduino 2017.11");
|
||||
currentStatus.secl = 0; //This is required in TS3 due to its stricter timings
|
||||
break;
|
||||
|
||||
|
@ -451,6 +451,13 @@ void sendValues(uint16_t offset, uint16_t packetLength, byte cmd, byte portNum)
|
|||
fullStatus[73] = currentStatus.tpsADC;
|
||||
fullStatus[74] = getNextError();
|
||||
|
||||
fullStatus[75] = lowByte(currentStatus.PW2); //Pulsewidth 2 multiplied by 10 in ms. Have to convert from uS to mS.
|
||||
fullStatus[76] = highByte(currentStatus.PW2); //Pulsewidth 2 multiplied by 10 in ms. Have to convert from uS to mS.
|
||||
fullStatus[77] = lowByte(currentStatus.PW3); //Pulsewidth 3 multiplied by 10 in ms. Have to convert from uS to mS.
|
||||
fullStatus[78] = highByte(currentStatus.PW3); //Pulsewidth 3 multiplied by 10 in ms. Have to convert from uS to mS.
|
||||
fullStatus[79] = lowByte(currentStatus.PW4); //Pulsewidth 4 multiplied by 10 in ms. Have to convert from uS to mS.
|
||||
fullStatus[80] = highByte(currentStatus.PW4); //Pulsewidth 4 multiplied by 10 in ms. Have to convert from uS to mS.
|
||||
|
||||
for(byte x=0; x<packetLength; x++)
|
||||
{
|
||||
if (portNum == 0) { Serial.write(fullStatus[offset+x]); }
|
||||
|
|
|
@ -59,6 +59,7 @@ volatile unsigned long triggerFilterTime; // The shortest time (in uS) that puls
|
|||
unsigned long triggerSecFilterTime; // The shortest time (in uS) that pulses will be accepted (Used for debounce filtering) for the secondary input
|
||||
unsigned int triggerSecFilterTime_duration; // The shortest valid time (in uS) pulse DURATION
|
||||
volatile int triggerToothAngle; //The number of crank degrees that elapse per tooth
|
||||
volatile bool triggerToothAngleIsCorrect = false; //Whether or not the triggerToothAngle variable is currently accurate. Some patterns have times when the triggerToothAngle variable cannot be accurately set.
|
||||
bool secondDerivEnabled; //The use of the 2nd derivative calculation is limited to certain decoders. This is set to either true or false in each decoders setup routine
|
||||
bool decoderIsSequential; //Whether or not the decoder supports sequential operation
|
||||
bool decoderIsLowRes = false; //Is set true, certain extra calculations are performed for better timing accuracy
|
||||
|
|
|
@ -173,6 +173,7 @@ void triggerPri_missingTooth()
|
|||
triggerFilterTime = 0; //This is used to prevent a condition where serious intermitent signals (Eg someone furiously plugging the sensor wire in and out) can leave the filter in an unrecoverable state
|
||||
toothLastMinusOneToothTime = toothLastToothTime;
|
||||
toothLastToothTime = curTime;
|
||||
triggerToothAngleIsCorrect = false; //The tooth angle is double at this point
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -181,6 +182,7 @@ void triggerPri_missingTooth()
|
|||
setFilter(curGap);
|
||||
toothLastMinusOneToothTime = toothLastToothTime;
|
||||
toothLastToothTime = curTime;
|
||||
triggerToothAngleIsCorrect = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -238,6 +240,7 @@ int getCrankAngle_missingTooth(int timePerDegree)
|
|||
//crankAngle += DIV_ROUND_CLOSEST(elapsedTime, timePerDegree);
|
||||
if(elapsedTime < SHRT_MAX ) { crankAngle += div((int)elapsedTime, timePerDegree).quot; } //This option is much faster, but only available for smaller values of elapsedTime
|
||||
else { crankAngle += ldiv(elapsedTime, timePerDegree).quot; }
|
||||
//crankAngle += uSToDegrees(elapsedTime);
|
||||
|
||||
//Sequential check (simply sets whether we're on the first or 2nd revoltuion of the cycle)
|
||||
if (tempRevolutionOne) { crankAngle += 360; }
|
||||
|
@ -289,6 +292,7 @@ void triggerSetup_DualWheel()
|
|||
triggerSecFilterTime = (int)(1000000 / (MAX_RPM / 60 * 2)) / 2; //Same as above, but fixed at 2 teeth on the secondary input and divided by 2 (for cam speed)
|
||||
secondDerivEnabled = false;
|
||||
decoderIsSequential = true;
|
||||
triggerToothAngleIsCorrect = true; //This is always true for this pattern
|
||||
MAX_STALL_TIME = (3333UL * triggerToothAngle); //Minimum 50rpm. (3333uS is the time per degree at 50rpm)
|
||||
}
|
||||
|
||||
|
@ -437,6 +441,7 @@ void triggerSetup_BasicDistributor()
|
|||
decoderIsSequential = false;
|
||||
toothCurrentCount = 0; //Default value
|
||||
decoderHasFixedCrankingTiming = true;
|
||||
triggerToothAngleIsCorrect = true;
|
||||
if(configPage1.nCylinders <= 4) { MAX_STALL_TIME = (1851UL * triggerToothAngle); }//Minimum 90rpm. (1851uS is the time per degree at 90rpm). This uses 90rpm rather than 50rpm due to the potentially very high stall time on a 4 cylinder if we wait that long.
|
||||
else { MAX_STALL_TIME = (3200UL * triggerToothAngle); } //Minimum 50rpm. (3200uS is the time per degree at 50rpm).
|
||||
|
||||
|
@ -648,6 +653,7 @@ void triggerSetup_4G63()
|
|||
secondDerivEnabled = false;
|
||||
decoderIsSequential = true;
|
||||
decoderHasFixedCrankingTiming = true;
|
||||
triggerToothAngleIsCorrect = true;
|
||||
MAX_STALL_TIME = 366667UL; //Minimum 50rpm based on the 110 degree tooth spacing
|
||||
if(initialisationComplete == false) { toothLastToothTime = micros(); } //Set a startup value here to avoid filter errors when starting. This MUST have the initi check to prevent the fuel pump just staying on all the time
|
||||
//decoderIsLowRes = true;
|
||||
|
@ -1167,6 +1173,7 @@ void triggerSetup_Audi135()
|
|||
MAX_STALL_TIME = (3333UL * triggerToothAngle); //Minimum 50rpm. (3333uS is the time per degree at 50rpm)
|
||||
secondDerivEnabled = false;
|
||||
decoderIsSequential = true;
|
||||
triggerToothAngleIsCorrect = true;
|
||||
}
|
||||
|
||||
void triggerPri_Audi135()
|
||||
|
@ -1408,6 +1415,7 @@ void triggerSetup_Miata9905()
|
|||
triggerFilterTime = 1500; //10000 rpm, assuming we're triggering on both edges off the crank tooth.
|
||||
triggerSecFilterTime = 0; //Need to figure out something better for this
|
||||
decoderHasFixedCrankingTiming = true;
|
||||
triggerToothAngleIsCorrect = true;
|
||||
}
|
||||
|
||||
void triggerPri_Miata9905()
|
||||
|
|
|
@ -136,6 +136,9 @@
|
|||
#define EGO_ALGORITHM_SIMPLE 0
|
||||
#define EGO_ALGORITHM_PID 2
|
||||
|
||||
#define STAGING_MODE_TABLE 0
|
||||
#define STAGING_MODE_AUTO 1
|
||||
|
||||
#define MAX_RPM 18000 //This is the maximum rpm that the ECU will attempt to run at. It is NOT related to the rev limiter, but is instead dictates how fast certain operations will be allowed to run. Lower number gives better performance
|
||||
#define engineSquirtsPerCycle 2 //Would be 1 for a 2 stroke
|
||||
|
||||
|
@ -636,7 +639,9 @@ struct config11 {
|
|||
|
||||
uint16_t boostSens;
|
||||
byte boostIntv;
|
||||
byte unused11_28_192[164];
|
||||
uint16_t stagedInjSizePri;
|
||||
uint16_t stagedInjSizeSec;
|
||||
byte unused11_28_192[160];
|
||||
|
||||
#if defined(CORE_AVR)
|
||||
};
|
||||
|
|
|
@ -6,6 +6,7 @@ unsigned long percentage(byte, unsigned long);
|
|||
|
||||
//#define degreesToUS(degrees) (decoderIsLowRes == true ) ? ((degrees * 166666UL) / currentStatus.RPM) : (degrees * (unsigned long)timePerDegree)
|
||||
#define degreesToUS(degrees) ((degrees * revolutionTime) / 360)
|
||||
#define fastDegreesToUS(degrees) (degrees * (unsigned long)timePerDegree)
|
||||
//#define degreesToUS(degrees) ((degrees * revolutionTime * 3054198967ULL) >> 40) //Fast version of divide by 360
|
||||
//#define degreesToUS(degrees) (degrees * (unsigned long)timePerDegree)
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ See page 136 of the processors datasheet: http://www.atmel.com/Images/doc2549.pd
|
|||
#ifndef SCHEDULER_H
|
||||
#define SCHEDULER_H
|
||||
|
||||
|
||||
#define IGNITION_REFRESH_THRESHOLD 30 //Time in uS that the refresh functions will check to ensure there is enough time before changing the end compare
|
||||
#if defined(CORE_AVR)
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/io.h>
|
||||
|
@ -298,7 +298,7 @@ static inline void refreshIgnitionSchedule1(unsigned long timeToEnd) __attribute
|
|||
static inline void ignitionSchedule5Interrupt();
|
||||
#endif
|
||||
|
||||
enum ScheduleStatus {OFF, PENDING, RUNNING}; //The 3 statuses that a schedule can have
|
||||
enum ScheduleStatus {OFF, PENDING, STAGED, RUNNING}; //The 3 statuses that a schedule can have
|
||||
|
||||
struct Schedule {
|
||||
volatile unsigned long duration;
|
||||
|
|
|
@ -442,6 +442,8 @@ void setIgnitionSchedule1(void (*startCallback)(), unsigned long timeout, unsign
|
|||
static inline void refreshIgnitionSchedule1(unsigned long timeToEnd)
|
||||
{
|
||||
if( (ignitionSchedule1.Status == RUNNING) && (timeToEnd < ignitionSchedule1.duration) )
|
||||
//Must have the threshold check here otherwise it can cause a condition where the compare fires twice, once after the other, both for the end
|
||||
//if( (timeToEnd < ignitionSchedule1.duration) && (timeToEnd > IGNITION_REFRESH_THRESHOLD) )
|
||||
{
|
||||
noInterrupts();
|
||||
ignitionSchedule1.endCompare = IGN1_COUNTER + uS_TO_TIMER_COMPARE(timeToEnd);
|
||||
|
@ -568,7 +570,7 @@ void setIgnitionSchedule5(void (*startCallback)(), unsigned long timeout, unsign
|
|||
//If the startCallback function is called, we put the scheduler into RUNNING state
|
||||
//Timer3A (fuel schedule 1) Compare Vector
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
ISR(TIMER3_COMPA_vect, ISR_NOBLOCK) //fuelSchedules 1 and 5
|
||||
ISR(TIMER3_COMPA_vect) //fuelSchedules 1 and 5
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void fuelSchedule1Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
|
@ -605,7 +607,7 @@ static inline void fuelSchedule1Interrupt() //Most ARM chips can simply call a f
|
|||
}
|
||||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
ISR(TIMER3_COMPB_vect, ISR_NOBLOCK) //fuelSchedule2
|
||||
ISR(TIMER3_COMPB_vect) //fuelSchedule2
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void fuelSchedule2Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
|
@ -640,7 +642,7 @@ static inline void fuelSchedule2Interrupt() //Most ARM chips can simply call a f
|
|||
}
|
||||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
ISR(TIMER3_COMPC_vect, ISR_NOBLOCK) //fuelSchedule3
|
||||
ISR(TIMER3_COMPC_vect) //fuelSchedule3
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void fuelSchedule3Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
|
@ -677,7 +679,7 @@ static inline void fuelSchedule3Interrupt() //Most ARM chips can simply call a f
|
|||
}
|
||||
|
||||
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) //AVR chips use the ISR for this
|
||||
ISR(TIMER4_COMPB_vect, ISR_NOBLOCK) //fuelSchedule4
|
||||
ISR(TIMER4_COMPB_vect) //fuelSchedule4
|
||||
#elif defined (CORE_TEENSY) || defined(CORE_STM32)
|
||||
static inline void fuelSchedule4Interrupt() //Most ARM chips can simply call a function
|
||||
#endif
|
||||
|
@ -722,6 +724,20 @@ static inline void ignitionSchedule1Interrupt() //Most ARM chips can simply call
|
|||
ignitionSchedule1.startTime = micros();
|
||||
IGN1_COMPARE = ignitionSchedule1.endCompare;
|
||||
}
|
||||
/*
|
||||
This code is all to do with the staged ignition timing testing. That is, calling this interrupt slightly before the true ignition point and recalculating the end time for more accuracy
|
||||
IGN1_COMPARE = ignitionSchedule1.endCompare - 20;
|
||||
ignitionSchedule1.Status = STAGED;
|
||||
}
|
||||
else if (ignitionSchedule1.Status == STAGED)
|
||||
{
|
||||
int16_t crankAngle = getCrankAngle(timePerDegree);
|
||||
if(ignition1EndAngle > crankAngle)
|
||||
{ IGN1_COMPARE = IGN1_COUNTER + uS_TO_TIMER_COMPARE( (ignition1EndAngle - crankAngle) * timePerDegree ); }
|
||||
else { IGN1_COMPARE = ignitionSchedule1.endCompare; }
|
||||
|
||||
ignitionSchedule1.Status = RUNNING;
|
||||
}*/
|
||||
else if (ignitionSchedule1.Status == RUNNING)
|
||||
{
|
||||
ignitionSchedule1.EndCallback();
|
||||
|
|
|
@ -50,7 +50,9 @@ struct config3 configPage3;
|
|||
struct config10 configPage10;
|
||||
struct config11 configPage11;
|
||||
|
||||
int req_fuel_uS, inj_opentime_uS;
|
||||
uint16_t req_fuel_uS, inj_opentime_uS;
|
||||
uint16_t staged_req_fuel_mult_pri;
|
||||
uint16_t staged_req_fuel_mult_sec;
|
||||
|
||||
bool ignitionOn = false; //The current state of the ignition system
|
||||
bool fuelOn = false; //The current state of the ignition system
|
||||
|
@ -274,6 +276,23 @@ void setup()
|
|||
req_fuel_uS = configPage1.reqFuel * 100; //Convert to uS and an int. This is the only variable to be used in calculations
|
||||
inj_opentime_uS = configPage1.injOpen * 100; //Injector open time. Comes through as ms*10 (Eg 15.5ms = 155).
|
||||
|
||||
if(configPage11.stagingEnabled == true)
|
||||
{
|
||||
uint32_t totalInjector = configPage11.stagedInjSizePri + configPage11.stagedInjSizeSec;
|
||||
/*
|
||||
These values are a percentage of the req_fuel value that would be required for each injector channel to deliver that much fuel.
|
||||
Eg:
|
||||
Pri injectors are 250cc
|
||||
Sec injectors are 500cc
|
||||
Total injector capacity = 750cc
|
||||
|
||||
staged_req_fuel_mult_pri = 300% (The primary injectors would have to run 3x the overall PW in order to be the equivalent of the full 750cc capacity
|
||||
staged_req_fuel_mult_sec = 150% (The secondary injectors would have to run 1.5x the overall PW in order to be the equivalent of the full 750cc capacity
|
||||
*/
|
||||
staged_req_fuel_mult_pri = (100 * totalInjector) / configPage11.stagedInjSizePri;
|
||||
staged_req_fuel_mult_sec = (100 * totalInjector) / configPage11.stagedInjSizeSec;
|
||||
}
|
||||
|
||||
//Begin the main crank trigger interrupt pin setup
|
||||
//The interrupt numbering is a bit odd - See here for reference: http://arduino.cc/en/Reference/AttachInterrupt
|
||||
//These assignments are based on the Arduino Mega AND VARY BETWEEN BOARDS. Please confirm the board you are using and update acordingly.
|
||||
|
@ -425,6 +444,16 @@ void setup()
|
|||
}
|
||||
if (!configPage1.injTiming) { channel1InjDegrees = channel2InjDegrees = 0; } //For simultaneous, all squirts happen at the same time
|
||||
|
||||
//Check if injector staging is enabled
|
||||
if(configPage11.stagingEnabled == true)
|
||||
{
|
||||
channel3InjEnabled = true;
|
||||
channel4InjEnabled = true;
|
||||
|
||||
channel3InjDegrees = channel1InjDegrees;
|
||||
channel4InjDegrees = channel2InjDegrees;
|
||||
}
|
||||
|
||||
channel1InjEnabled = true;
|
||||
channel2InjEnabled = true;
|
||||
break;
|
||||
|
@ -940,25 +969,72 @@ void loop()
|
|||
}
|
||||
else
|
||||
{
|
||||
long rpm_adjust = ((long)(micros() - toothOneTime) * (long)currentStatus.rpmDOT) / 1000000; //Take into account any likely accleration that has occurred since the last full revolution completed
|
||||
//If we can, attempt to get the timePerDegree by comparing the times of the last two teeth seen. This is only possible for evenly spaced teeth
|
||||
if(triggerToothAngleIsCorrect == true && toothLastToothTime > toothLastMinusOneToothTime)
|
||||
{
|
||||
noInterrupts();
|
||||
unsigned long tempToothLastToothTime = toothLastToothTime;
|
||||
unsigned long tempToothLastMinusOneToothTime = toothLastMinusOneToothTime;
|
||||
uint16_t tempTriggerToothAngle = triggerToothAngle;
|
||||
interrupts();
|
||||
timePerDegree = (unsigned long)(tempToothLastToothTime - tempToothLastMinusOneToothTime) / tempTriggerToothAngle;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
long rpm_adjust = ((long)(micros() - toothOneTime) * (long)currentStatus.rpmDOT) / 1000000; //Take into account any likely accleration that has occurred since the last full revolution completed
|
||||
timePerDegree = ldiv( 166666L, currentStatus.RPM + rpm_adjust).quot; //There is a small amount of rounding in this calculation, however it is less than 0.001 of a uS (Faster as ldiv than / )
|
||||
}
|
||||
|
||||
//timePerDegree = DIV_ROUND_CLOSEST(166666L, (currentStatus.RPM + rpm_adjust));
|
||||
timePerDegree = ldiv( 166666L, currentStatus.RPM + rpm_adjust).quot; //There is a small amount of rounding in this calculation, however it is less than 0.001 of a uS (Faster as ldiv than / )
|
||||
}
|
||||
|
||||
//Check that the duty cycle of the chosen pulsewidth isn't too high. This is disabled at cranking
|
||||
if( !BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK) )
|
||||
//Check that the duty cycle of the chosen pulsewidth isn't too high.
|
||||
unsigned long pwLimit = percentage(configPage1.dutyLim, revolutionTime); //The pulsewidth limit is determined to be the duty cycle limit (Eg 85%) by the total time it takes to perform 1 revolution
|
||||
if (CRANK_ANGLE_MAX_INJ == 720) { pwLimit = pwLimit * 2; } //For sequential, the maximum pulse time is double (2 revolutions). Wouldn't work for 2 stroke...
|
||||
//Apply the pwLimit if staging is dsiabled and engine is not cranking
|
||||
if( (!BIT_CHECK(currentStatus.engine, BIT_ENGINE_CRANK)) && configPage11.stagingEnabled == false) { if (currentStatus.PW1 > pwLimit) { currentStatus.PW1 = pwLimit; } }
|
||||
|
||||
//Calculate staging pulsewidths if used
|
||||
if(configPage11.stagingEnabled == true)
|
||||
{
|
||||
unsigned long pwLimit = percentage(configPage1.dutyLim, revolutionTime); //The pulsewidth limit is determined to be the duty cycle limit (Eg 85%) by the total time it takes to perform 1 revolution
|
||||
if (CRANK_ANGLE_MAX_INJ == 720) { pwLimit = pwLimit * 2; } //For sequential, the maximum pulse time is double (2 revolutions). Wouldn't work for 2 stroke...
|
||||
if (currentStatus.PW1 > pwLimit) { currentStatus.PW1 = pwLimit; }
|
||||
}
|
||||
//Scale the 'full' pulsewidth by each of the injector capacities
|
||||
uint32_t tempPW1 = ((unsigned long)currentStatus.PW1 * staged_req_fuel_mult_pri) / 100;
|
||||
|
||||
if(configPage11.stagingMode == STAGING_MODE_TABLE)
|
||||
{
|
||||
uint32_t tempPW3 = ((unsigned long)currentStatus.PW1 * staged_req_fuel_mult_sec) / 100; //This is ONLY needed in in table mode. Auto mode only calculates the difference.
|
||||
|
||||
byte stagingSplit = get3DTableValue(&stagingTable, currentStatus.MAP, currentStatus.RPM);
|
||||
currentStatus.PW1 = ((100 - stagingSplit) * tempPW1) / 100;
|
||||
|
||||
if(stagingSplit > 0) { currentStatus.PW3 = (stagingSplit * tempPW3) / 100; }
|
||||
else { currentStatus.PW3 = 0; }
|
||||
}
|
||||
else if(configPage11.stagingMode == STAGING_MODE_AUTO)
|
||||
{
|
||||
currentStatus.PW1 = tempPW1;
|
||||
//If automatic mode, the primary injectors are used all the way up to their limit (COnfigured by the pulsewidth limit setting)
|
||||
//If they exceed their limit, the extra duty is passed to the secondaries
|
||||
if(tempPW1 > pwLimit)
|
||||
{
|
||||
uint32_t extraPW = tempPW1 - pwLimit;
|
||||
currentStatus.PW1 = pwLimit;
|
||||
currentStatus.PW3 = ((extraPW * staged_req_fuel_mult_sec) / staged_req_fuel_mult_pri) + inj_opentime_uS; //Convert the 'left over' fuel amount from primary injector scaling to secondary
|
||||
}
|
||||
else { currentStatus.PW3 = 0; } //If tempPW1 < pwLImit it means that the entire fuel load can be handled by the primaries. Simply set the secondaries to 0
|
||||
}
|
||||
|
||||
//currentStatus.PW3 = 2000;
|
||||
//Set the 2nd channel of each stage with the same pulseWidth
|
||||
currentStatus.PW2 = currentStatus.PW1;
|
||||
currentStatus.PW4 = currentStatus.PW3;
|
||||
}
|
||||
//If staging is off, all the pulse widths are set the same (Sequential adjustments will be made below)
|
||||
else { currentStatus.PW2 = currentStatus.PW3 = currentStatus.PW4 = currentStatus.PW1; } // Initial state is for all pulsewidths to be the same (This gets changed below)
|
||||
|
||||
//***********************************************************************************************
|
||||
//BEGIN INJECTION TIMING
|
||||
//Determine next firing angles
|
||||
currentStatus.PW2 = currentStatus.PW3 = currentStatus.PW4 = currentStatus.PW1; // Initial state is for all pulsewidths to be the same (This gets changed below)
|
||||
if(!configPage1.indInjAng) {configPage1.inj4Ang = configPage1.inj3Ang = configPage1.inj2Ang = configPage1.inj1Ang;} //Forcing all injector close angles to be the same.
|
||||
int PWdivTimerPerDegree = div(currentStatus.PW1, timePerDegree).quot; //How many crank degrees the calculated PW will take at the current speed
|
||||
injector1StartAngle = configPage1.inj1Ang - ( PWdivTimerPerDegree ); //This is a little primitive, but is based on the idea that all fuel needs to be delivered before the inlet valve opens. See http://www.extraefi.co.uk/sequential_fuel.html for more detail
|
||||
|
@ -1013,6 +1089,17 @@ void loop()
|
|||
if (pw4percent != 100) { currentStatus.PW4 = (pw4percent * currentStatus.PW4) / 100; }
|
||||
}
|
||||
}
|
||||
if(configPage11.stagingEnabled == true)
|
||||
{
|
||||
PWdivTimerPerDegree = div(currentStatus.PW3, timePerDegree).quot; //Need to redo this for PW3 as it will be dramatically different to PW1 when staging
|
||||
injector3StartAngle = configPage1.inj3Ang - ( PWdivTimerPerDegree ); //This is a little primitive, but is based on the idea that all fuel needs to be delivered before the inlet valve opens. See http://www.extraefi.co.uk/sequential_fuel.html for more detail
|
||||
if(injector3StartAngle < 0) {injector3StartAngle += CRANK_ANGLE_MAX_INJ;}
|
||||
if(injector3StartAngle > CRANK_ANGLE_MAX_INJ) {injector3StartAngle -= CRANK_ANGLE_MAX_INJ;}
|
||||
|
||||
injector4StartAngle = injector3StartAngle + (CRANK_ANGLE_MAX_INJ / 2);
|
||||
if(injector4StartAngle < 0) {injector4StartAngle += CRANK_ANGLE_MAX_INJ;}
|
||||
if(injector4StartAngle > CRANK_ANGLE_MAX_INJ) {injector4StartAngle -= CRANK_ANGLE_MAX_INJ;}
|
||||
}
|
||||
break;
|
||||
//5 cylinders
|
||||
case 5:
|
||||
|
@ -1184,15 +1271,18 @@ void loop()
|
|||
int crankAngle = getCrankAngle(timePerDegree);
|
||||
if (crankAngle > CRANK_ANGLE_MAX_INJ ) { crankAngle -= 360; }
|
||||
|
||||
if (fuelOn && currentStatus.PW1 > 0 && !BIT_CHECK(currentStatus.status1, BIT_STATUS1_BOOSTCUT))
|
||||
if (fuelOn && !BIT_CHECK(currentStatus.status1, BIT_STATUS1_BOOSTCUT))
|
||||
{
|
||||
if ( (injector1StartAngle <= crankAngle) && (fuelSchedule1.Status == RUNNING) ) { injector1StartAngle += CRANK_ANGLE_MAX_INJ; }
|
||||
if (injector1StartAngle > crankAngle)
|
||||
if(currentStatus.PW1 >= inj_opentime_uS)
|
||||
{
|
||||
setFuelSchedule1(
|
||||
((unsigned long)(injector1StartAngle - crankAngle) * (unsigned long)timePerDegree),
|
||||
(unsigned long)currentStatus.PW1
|
||||
);
|
||||
if ( (injector1StartAngle <= crankAngle) && (fuelSchedule1.Status == RUNNING) ) { injector1StartAngle += CRANK_ANGLE_MAX_INJ; }
|
||||
if (injector1StartAngle > crankAngle)
|
||||
{
|
||||
setFuelSchedule1(
|
||||
((unsigned long)(injector1StartAngle - crankAngle) * (unsigned long)timePerDegree),
|
||||
(unsigned long)currentStatus.PW1
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------------
|
||||
|
@ -1206,7 +1296,7 @@ void loop()
|
|||
| This will very likely need to be rewritten when sequential is enabled
|
||||
|------------------------------------------------------------------------------------------
|
||||
*/
|
||||
if(channel2InjEnabled)
|
||||
if( (channel2InjEnabled) && (currentStatus.PW2 >= inj_opentime_uS) )
|
||||
{
|
||||
tempCrankAngle = crankAngle - channel2InjDegrees;
|
||||
if( tempCrankAngle < 0) { tempCrankAngle += CRANK_ANGLE_MAX_INJ; }
|
||||
|
@ -1222,7 +1312,7 @@ void loop()
|
|||
}
|
||||
}
|
||||
|
||||
if(channel3InjEnabled)
|
||||
if( (channel3InjEnabled) && (currentStatus.PW3 >= inj_opentime_uS) )
|
||||
{
|
||||
tempCrankAngle = crankAngle - channel3InjDegrees;
|
||||
if( tempCrankAngle < 0) { tempCrankAngle += CRANK_ANGLE_MAX_INJ; }
|
||||
|
@ -1238,7 +1328,7 @@ void loop()
|
|||
}
|
||||
}
|
||||
|
||||
if(channel4InjEnabled)
|
||||
if( (channel4InjEnabled) && (currentStatus.PW4 >= inj_opentime_uS) )
|
||||
{
|
||||
tempCrankAngle = crankAngle - channel4InjDegrees;
|
||||
if( tempCrankAngle < 0) { tempCrankAngle += CRANK_ANGLE_MAX_INJ; }
|
||||
|
@ -1311,20 +1401,19 @@ void loop()
|
|||
unsigned long timePerDegree_1 = ldiv( 166666L, newRPM).quot;
|
||||
unsigned long timeout = (unsigned long)(ignition1StartAngle - crankAngle) * 282UL;
|
||||
*/
|
||||
setIgnitionSchedule1(ign1StartFunction,
|
||||
//((unsigned long)(ignition1StartAngle - crankAngle) * (unsigned long)timePerDegree),
|
||||
degreesToUS((ignition1StartAngle - crankAngle)),
|
||||
currentStatus.dwell + fixedCrankingOverride, //((unsigned long)((unsigned long)currentStatus.dwell* currentStatus.RPM) / newRPM) + fixedCrankingOverride,
|
||||
ign1EndFunction
|
||||
);
|
||||
if(ignitionSchedule1.Status != RUNNING)
|
||||
{
|
||||
setIgnitionSchedule1(ign1StartFunction,
|
||||
//((unsigned long)(ignition1StartAngle - crankAngle) * (unsigned long)timePerDegree),
|
||||
degreesToUS((ignition1StartAngle - crankAngle)),
|
||||
currentStatus.dwell + fixedCrankingOverride, //((unsigned long)((unsigned long)currentStatus.dwell* currentStatus.RPM) / newRPM) + fixedCrankingOverride,
|
||||
ign1EndFunction
|
||||
);
|
||||
}
|
||||
}
|
||||
/*
|
||||
if(ignition1EndAngle > crankAngle && configPage2.StgCycles == 0)
|
||||
{
|
||||
unsigned long uSToEnd = degreesToUS( (ignition1EndAngle - crankAngle) );
|
||||
refreshIgnitionSchedule1( uSToEnd + fixedCrankingOverride );
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
tempCrankAngle = crankAngle - channel2IgnDegrees;
|
||||
if( tempCrankAngle < 0) { tempCrankAngle += CRANK_ANGLE_MAX_IGN; }
|
||||
|
|
|
@ -289,8 +289,8 @@ void setPinMapping(byte boardID)
|
|||
//Pin mappings as per the MX5 PNP shield
|
||||
pinInjector1 = 11; //Output pin injector 1 is on
|
||||
pinInjector2 = 10; //Output pin injector 2 is on
|
||||
pinInjector3 = 8; //Output pin injector 3 is on
|
||||
pinInjector4 = 9; //Output pin injector 4 is on
|
||||
pinInjector3 = 9; //Output pin injector 3 is on
|
||||
pinInjector4 = 8; //Output pin injector 4 is on
|
||||
pinInjector5 = 14; //Output pin injector 5 is on
|
||||
pinCoil1 = 39; //Pin for coil 1
|
||||
pinCoil2 = 41; //Pin for coil 2
|
||||
|
|
Loading…
Reference in New Issue