PJSC(Pump Jet Solenoid Controller)はArduinoを使用したバイク用燃料噴射コントローラです。このプロジェクトは、オープンソースECUプロジェクト『Speeduino』をベースにしています。
[PJSC v1.03]ポンプジェットモードで出力を反転する Invert mode を追加。
| @@ -351,7 +351,11 @@ | ||
| 351 | 351 | dutyPulseCaptureEnabled2 = bits, U08, 77, [1:1], "Disable", "PWM input" ; | |
| 352 | 352 | dutyPulseOnLevel = bits, U08, 77, [2:2], "High", "Low" ; | |
| 353 | 353 | dutyPulseOnLevel2 = bits, U08, 77, [3:3], "High", "Low" ; V |
| 354 | - unused2_77 = bits, U08, 77, [4:7] ;[PJSC v1.01] | |
| 354 | +;[PJSC v1.03] unused2_77 = bits, U08, 77, [4:7] ;[PJSC v1.01] | |
| 355 | + disableIATcorrection = bits, U08, 77, [4:4], "Enable", "Disable" ;[PJSC v1.03] | |
| 356 | + disableBAROcorrection = bits, U08, 77, [5:5], "Enable", "Disable" ;[PJSC v1.03] | |
| 357 | + disableWUE = bits, U08, 77, [6:6], "Enable", "Disable" ;[PJSC v1.03] | |
| 358 | + disableCrankingEnrichment= bits, U08, 77, [7:7], "Enable", "Disable" ;[PJSC v1.03] | |
| 355 | 359 | #if table4_spark ;[PJSC v1.01] For switching table4 |
| 356 | 360 | veMapSelection1Pri = bits, U08, 78, [0:3], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" |
| 357 | 361 | veMapSelection1Sec = bits, U08, 78, [4:7], "VE Table 1","VE Table 2","VE Table 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID" |
| @@ -448,7 +452,16 @@ | ||
| 448 | 452 | afr_sensor_selection2 = bits, U08, 121, [5:5], "Primary", "Secondary" ;[PJSC v1.02] |
| 449 | 453 | afr_sensor_selection3 = bits, U08, 121, [6:6], "Primary", "Secondary" ;[PJSC v1.02] |
| 450 | 454 | afr_sensor_selection4 = bits, U08, 121, [7:7], "Primary", "Secondary" ;[PJSC v1.02] |
| 451 | - unused2_122 = array, U08, 122, [6], "%", 1.0, 0.0, 0.0, 255, 0 ;[PJSC v1.01] | |
| 455 | +;[PJSC v1.03] unused2_122 = array, U08, 122, [6], "%", 1.0, 0.0, 0.0, 255, 0 ;[PJSC v1.01] | |
| 456 | + squirtDeviceTypeCh1 = bits, U08, 122, [0:0], "Injector", "Pump Jet" ;[PJSC v1.03] | |
| 457 | + squirtDeviceTypeCh2 = bits, U08, 122, [1:1], "Injector", "Pump Jet" ;[PJSC v1.03] | |
| 458 | + squirtDeviceTypeCh3 = bits, U08, 122, [2:2], "Injector", "Pump Jet" ;[PJSC v1.03] | |
| 459 | + squirtDeviceTypeCh4 = bits, U08, 122, [3:3], "Injector", "Pump Jet" ;[PJSC v1.03] | |
| 460 | + solenoidValveDirectionCh1= bits, U08, 122, [4:4], "Normal, 0%=off", "Inverted, 100%=off" ;[PJSC v1.03] | |
| 461 | + solenoidValveDirectionCh2= bits, U08, 122, [5:5], "Normal, 0%=off", "Inverted, 100%=off" ;[PJSC v1.03] | |
| 462 | + solenoidValveDirectionCh3= bits, U08, 122, [6:6], "Normal, 0%=off", "Inverted, 100%=off" ;[PJSC v1.03] | |
| 463 | + solenoidValveDirectionCh4= bits, U08, 122, [7:7], "Normal, 0%=off", "Inverted, 100%=off" ;[PJSC v1.03] | |
| 464 | + unused2_123 = array, U08, 123, [5], "%", 1.0, 0.0, 0.0, 255, 0 ;[PJSC v1.03] | |
| 452 | 465 | |
| 453 | 466 | |
| 454 | 467 | ;Page 2 is the fuel map and axis bins only |
| @@ -2176,30 +2189,61 @@ | ||
| 2176 | 2189 | dialog = veTable4Dialog, "VE Table 4" ; V |
| 2177 | 2190 | panel = sparkTbl ;[PJSC v1.01] |
| 2178 | 2191 | |
| 2179 | - dialog = injCloseAngles_west, "" ;[PJSC v1.01] | |
| 2180 | - field = "Channel 1", inj1SquirtStartEnd, { squirtDeviceType == 0 } ; | | |
| 2181 | - field = "Channel 2", inj2SquirtStartEnd, { (nCylinders > 1 || nInjectors > 1) && indInjAng && squirtDeviceType == 0 } ; | | |
| 2182 | -;[PJSC v1.02] field = "Channel 3", inj3SquirtStartEnd, { indInjAng && (nCylinders > 4 || nCylinders == 3 || nInjectors > 2 || ((nCylinders == 4) && (injLayout == 3))) && squirtDeviceType == 0 } ; V | |
| 2183 | - field = "Channel 3", inj3SquirtStartEnd, { indInjAng && (nCylinders > 2 || nInjectors > 2 && (injLayout > 0)) && squirtDeviceType == 0 } ; V [PJSC v1.02] | |
| 2184 | - field = "Channel 4", inj4SquirtStartEnd, { indInjAng && (nCylinders > 4 || ((nCylinders == 4 || nInjectors > 3) && (injLayout > 0))) && squirtDeviceType == 0 } ;[PJSC v1.01] | |
| 2192 | + dialog = squirtDeviceSelection_west, "" ;[PJSC v1.03] | |
| 2193 | + field = "Channel 1", squirtDeviceTypeCh1 ; | | |
| 2194 | + field = "Channel 2", squirtDeviceTypeCh2 ; | | |
| 2195 | + field = "Channel 3", squirtDeviceTypeCh3 ; V | |
| 2196 | + field = "Channel 4", squirtDeviceTypeCh4 ;[PJSC v1.03] | |
| 2185 | 2197 | |
| 2186 | - dialog = injCloseAngles_east, "" ;[PJSC v1.01] | |
| 2187 | - field = "", inj1Ang, { squirtDeviceType == 0 } ; | | |
| 2188 | - field = "", inj2Ang, { (nCylinders > 1 || nInjectors > 1) && indInjAng && squirtDeviceType == 0 } ; | | |
| 2189 | -;[PJSC v1.02] field = "", inj3Ang, { indInjAng && (nCylinders > 4 || nCylinders == 3 || nInjectors > 2 || ((nCylinders == 4) && (injLayout == 3))) && squirtDeviceType == 0 } ; V | |
| 2190 | - field = "", inj3Ang, { indInjAng && (nCylinders > 2 || nInjectors > 2 && (injLayout > 0)) && squirtDeviceType == 0 } ; V [PJSC v1.02] | |
| 2191 | - field = "", inj4Ang, { indInjAng && (nCylinders > 4 || ((nCylinders == 4 || nInjectors > 3) && (injLayout > 0))) && squirtDeviceType == 0 } ;[PJSC v1.01] | |
| 2198 | + dialog = squirtDeviceSelection_east, "" ;[PJSC v1.03] | |
| 2199 | + field = "Valve Mode", solenoidValveDirectionCh1, { squirtDeviceTypeCh1 == 1 } ; | | |
| 2200 | + field = "Valve Mode", solenoidValveDirectionCh2, { squirtDeviceTypeCh2 == 1 } ; | | |
| 2201 | + field = "Valve Mode", solenoidValveDirectionCh3, { squirtDeviceTypeCh3 == 1 } ; V | |
| 2202 | + field = "Valve Mode", solenoidValveDirectionCh4, { squirtDeviceTypeCh4 == 1 } ;[PJSC v1.03] | |
| 2192 | 2203 | |
| 2204 | + dialog = squirtDeviceSelection, "Squirt Device selection", xAxis ;[PJSC v1.03] | |
| 2205 | + panel = squirtDeviceSelection_west ; V | |
| 2206 | + panel = squirtDeviceSelection_east ;[PJSC v1.03] | |
| 2207 | + | |
| 2208 | + dialog = injCloseAngles_west, "" ;[PJSC v1.03] | |
| 2209 | + field = "Channel 1", inj1SquirtStartEnd, { squirtDeviceTypeCh1 == 0 } ; | | |
| 2210 | + field = "Channel 2", inj2SquirtStartEnd, { indInjAng && squirtDeviceTypeCh2 == 0 } ; | | |
| 2211 | + field = "Channel 3", inj3SquirtStartEnd, { indInjAng && squirtDeviceTypeCh3 == 0 } ; V | |
| 2212 | + field = "Channel 4", inj4SquirtStartEnd, { indInjAng && squirtDeviceTypeCh4 == 0 } ;[PJSC v1.03] | |
| 2213 | + | |
| 2214 | + dialog = injCloseAngles_east, "" ;[PJSC v1.03] | |
| 2215 | + field = "", inj1Ang, { squirtDeviceTypeCh1 == 0 } ; | | |
| 2216 | + field = "", inj2Ang, { indInjAng && squirtDeviceTypeCh2 == 0 } ; | | |
| 2217 | + field = "", inj3Ang, { indInjAng && squirtDeviceTypeCh3 == 0 } ; V | |
| 2218 | + field = "", inj4Ang, { indInjAng && squirtDeviceTypeCh4 == 0 } ;[PJSC v1.03] | |
| 2219 | + | |
| 2220 | +;[PJSC v1.03] dialog = injCloseAngles_west, "" ;[PJSC v1.01] | |
| 2221 | +;[PJSC v1.03] field = "Channel 1", inj1SquirtStartEnd, { squirtDeviceType == 0 } ; | | |
| 2222 | +;[PJSC v1.03] field = "Channel 2", inj2SquirtStartEnd, { (nCylinders > 1 || nInjectors > 1) && indInjAng && squirtDeviceType == 0 } ; | | |
| 2223 | +;[PJSC v1.03] field = "Channel 3", inj3SquirtStartEnd, { indInjAng && (nCylinders > 2 || nInjectors > 2 && (injLayout > 0)) && squirtDeviceType == 0 } ; V | |
| 2224 | +;[PJSC v1.03] field = "Channel 4", inj4SquirtStartEnd, { indInjAng && (nCylinders > 4 || ((nCylinders == 4 || nInjectors > 3) && (injLayout > 0))) && squirtDeviceType == 0 } ;[PJSC v1.01] | |
| 2225 | +;[PJSC v1.03] | |
| 2226 | +;[PJSC v1.03] dialog = injCloseAngles_east, "" ;[PJSC v1.01] | |
| 2227 | +;[PJSC v1.03] field = "", inj1Ang, { squirtDeviceType == 0 } ; | | |
| 2228 | +;[PJSC v1.03] field = "", inj2Ang, { (nCylinders > 1 || nInjectors > 1) && indInjAng && squirtDeviceType == 0 } ; | | |
| 2229 | +;[PJSC v1.03] field = "", inj3Ang, { indInjAng && (nCylinders > 2 || nInjectors > 2 && (injLayout > 0)) && squirtDeviceType == 0 } ; V | |
| 2230 | +;[PJSC v1.03] field = "", inj4Ang, { indInjAng && (nCylinders > 4 || ((nCylinders == 4 || nInjectors > 3) && (injLayout > 0))) && squirtDeviceType == 0 } ;[PJSC v1.01] | |
| 2231 | + | |
| 2193 | 2232 | dialog = injCloseAngles, "Injector squirt angle", xAxis ;[PJSC v1.01] |
| 2194 | 2233 | panel = injCloseAngles_west ; V |
| 2195 | 2234 | panel = injCloseAngles_east ;[PJSC v1.01] |
| 2196 | 2235 | |
| 2197 | 2236 | dialog = injChars, "Injector Characteristics" ;[PJSC v1.01] |
| 2198 | - field = "Squirt Device", squirtDeviceType ; | | |
| 2199 | - field = "PJSC solenoid freq.", pjscFreq, { squirtDeviceType == 1 } ; | | |
| 2200 | - field = "Injector Open Time", injOpen, { squirtDeviceType == 0 } ; | | |
| 2201 | - field = "Injector Duty Limit", dutyLim, { squirtDeviceType == 0 } ; | | |
| 2202 | - field = "Individual channel setting", indInjAng, { squirtDeviceType == 0 } ; | | |
| 2237 | +;[PJSC v1.03] field = "Squirt Device", squirtDeviceType ; | | |
| 2238 | +;[PJSC v1.03] field = "Pump Jet solenoid freq.", pjscFreq, { squirtDeviceType == 1 } ; | | |
| 2239 | +;[PJSC v1.03] field = "Injector Open Time", injOpen, { squirtDeviceType == 0 } ; | | |
| 2240 | +;[PJSC v1.03] field = "Injector Duty Limit", dutyLim, { squirtDeviceType == 0 } ; | | |
| 2241 | +;[PJSC v1.03] field = "Individual channel setting", indInjAng, { squirtDeviceType == 0 } ; | | |
| 2242 | + field = "Injector Open Time", injOpen, { squirtDeviceTypeCh1 == 0 || squirtDeviceTypeCh2 == 0 || squirtDeviceTypeCh3 == 0 || squirtDeviceTypeCh4 == 0 } ; |[PJSC v1.03] | |
| 2243 | + field = "Injector Duty Limit", dutyLim, { squirtDeviceTypeCh1 == 0 || squirtDeviceTypeCh2 == 0 || squirtDeviceTypeCh3 == 0 || squirtDeviceTypeCh4 == 0 } ; |[PJSC v1.03] | |
| 2244 | + field = "Individual channel setting", indInjAng, { squirtDeviceTypeCh1 == 0 || squirtDeviceTypeCh2 == 0 || squirtDeviceTypeCh3 == 0 || squirtDeviceTypeCh4 == 0 } ; |[PJSC v1.03] | |
| 2245 | + field = "Pump Jet solenoid freq.", pjscFreq, { squirtDeviceTypeCh1 == 1 || squirtDeviceTypeCh2 == 1 || squirtDeviceTypeCh3 == 1 || squirtDeviceTypeCh4 == 1 } ; |[PJSC v1.03] | |
| 2246 | + panel = squirtDeviceSelection ; |[PJSC v1.03] | |
| 2203 | 2247 | panel = injCloseAngles ; V |
| 2204 | 2248 | panel = injector_voltage_curve ;[PJSC v1.01] |
| 2205 | 2249 |
| @@ -3768,7 +3812,7 @@ | ||
| 3768 | 3812 | egoCorrGauge = egoCorrection, "EGO Correction", "%", 50, 150, 90, 99, 101, 110, 0, 0 |
| 3769 | 3813 | |
| 3770 | 3814 | gammaEnrichGauge = gammaEnrich, "Gamma Enrichment", "%", 50, 150, -1, -1, 151, 151, 0, 0 |
| 3771 | - pulseWidthGauge = pulseWidth, "Pulse Width", "mSec", 0, 35.0, 1.0, 1.2, 20, 25, 3, 3 | |
| 3815 | + pulseWidthGauge = pulseWidth, "Pulse Width", "mSec", 0, 10, 0, 0, 8, 9, 2, 2 | |
| 3772 | 3816 | ;[PJSC v1.01] tachometer = rpm, "Engine Speed", "RPM", 0, 8000, 300, 600, 3000, 5000, 0, 0 |
| 3773 | 3817 | tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh},600, 1000,{rpmwarn},{rpmdang}, 0, 0 ;[PJSC v1.02] |
| 3774 | 3818 | veGauge = veCurr, "VE Current", "%", 0, 120, -1, -1, 999, 999, 0, 0 |
| @@ -3787,18 +3831,18 @@ | ||
| 3787 | 3831 | afrTargetGauge = afrTarget, "Target AFR", "", 7, 25, 12, 13, 15, 16, 2, 2 ;[PJSC v1.02] |
| 3788 | 3832 | |
| 3789 | 3833 | gaugeCategory = "Sensor inputs" |
| 3790 | - mapGauge = map, "Engine MAP", "kPa", 0,{maphigh}, 0, 20,{mapwarn},{mapdang}, 0, 0 ;[PJSC v1.02] | |
| 3791 | - mapGauge_psi = map_psi, "Engine MAP (PSI)", "PSI", -15, 100, 0, 20, 200, 245, 0, 0 | |
| 3834 | + mapGauge = map, "Engine MAP", "kPa", 40,{maphigh}, 50, 60,{mapwarn},{mapdang}, 0, 0 ;[PJSC v1.02] | |
| 3835 | + mapGauge_psi = map_psi, "Engine MAP (PSI)", "PSI", -15, 100, 0, 20, 200, 245, 0, 0 | |
| 3792 | 3836 | mapGauge_bar = map_bar, "Engine MAP (BAR)", "Bar", -1, 3, -1, -1, 5, 5, 2, 2 |
| 3793 | 3837 | mapGauge_vacBoost = map_vacboost, "Engine MAP (in-Hg/PSI)", "in-Hg/PSI", -30, 30, -30, -30, 30, 30, 1, 1 |
| 3794 | - baroGauge = baro, "Baro Pressure", "kPa", 0,{maphigh}, 0, 20,{mapwarn},{mapdang}, 0, 0 ;[PJSC v1.02] | |
| 3795 | - batteryVoltage = batteryVoltage,"Battery Voltage", "volts", 0, 25, 8, 9, 15, 16, 2, 2 | |
| 3838 | + baroGauge = baro, "Baro Pressure", "kPa", 0,{maphigh}, 50, 20,{mapwarn},{mapdang}, 0, 0 ;[PJSC v1.02] | |
| 3839 | + batteryVoltage = batteryVoltage,"Battery Voltage", "volts", 8, 17, 9, 10, 15, 16, 2, 2 | |
| 3796 | 3840 | |
| 3797 | 3841 | tpsADCGauge = tpsADC, "TPS ADC", "", 0, 255, -1, -1, 256, 256, 0, 0 |
| 3798 | 3842 | throttleGauge = throttle, "Throttle Position", "%TPS", 0, 100, -1, 1, 90, 100, 0, 0 |
| 3799 | 3843 | |
| 3800 | - afrGauge = afr, "Air:Fuel Ratio", "", 7, 25, 12, 13, 15, 16, 2, 2 | |
| 3801 | - afrGauge2 = afr2, "Air:Fuel Ratio 2", "", 7, 25, 12, 13, 15, 16, 2, 2 | |
| 3844 | + afrGauge = afr, "Air:Fuel Ratio", "", 10, 18, 11, 12, 16, 17, 2, 2 | |
| 3845 | + afrGauge2 = afr2, "Air:Fuel Ratio 2", "", 10, 18, 11, 12, 16, 17, 2, 2 | |
| 3802 | 3846 | lambdaGauge = lambda, "Lambda", "", 0.5, 1.5, 0.5, 0.7, 2, 1.1, 2, 2 |
| 3803 | 3847 | exValvePosGauge = valvePosition, "Exhaust Valve Position", "%open", 0, 100, -1, 1, 90, 100, 0, 0 ;[PJSC]For External Trigger |
| 3804 | 3848 | exValveADCGauge = valvePositionADC, "Exhaust Valve ADC", "", 0, 255, -1, -1, 256, 256, 0, 0 ;[PJSC]For External Trigger |
| @@ -3816,8 +3860,8 @@ | ||
| 3816 | 3860 | syncLossGauge = syncLossCounter, "Sync Loss Count", "", 0, 120, -1, -1, 999, 999, 0, 0 ;[PJSC v1.02] |
| 3817 | 3861 | |
| 3818 | 3862 | #if CELSIUS |
| 3819 | - cltGauge = coolant, "Coolant Temp", "TEMP", -40, 215, -15, 0, 95, 105, 0, 0 | |
| 3820 | - iatGauge = iat, "Inlet Air Temp", "TEMP", -40, 215, -15, 0, 95, 100, 0, 0 | |
| 3863 | + cltGauge = coolant, "Coolant Temp", "TEMP", -10, 120, 0, 10, 95, 110, 0, 0 | |
| 3864 | + iatGauge = iat, "Inlet Air Temp", "TEMP", -10, 80, 0, 5, 55, 70, 0, 0 | |
| 3821 | 3865 | #else |
| 3822 | 3866 | cltGauge = coolant, "Coolant Temp", "TEMP", -40, 215, 0, 30, 200, 220, 0, 0 |
| 3823 | 3867 | iatGauge = iat, "Inlet Air Temp", "TEMP", -40, 215, 0, 30, 200, 210, 0, 0 |
| @@ -667,7 +667,11 @@ | ||
| 667 | 667 | byte dutyPulseCaptureEnabled2: 1; // | For capturing duty pulse ch2 |
| 668 | 668 | byte dutyPulseOnLevel: 1; // | For capturing duty pulse ch1, 0: high, 1: low |
| 669 | 669 | byte dutyPulseOnLevel2: 1; // | For capturing duty pulse ch2, 0: high, 1: low |
| 670 | - byte unused2_77: 4; // V | |
| 670 | +//[PJSC v1.03] byte unused2_77: 4; // V | |
| 671 | + byte disableIATcorrection: 1; //[PJSCv1.03] | |
| 672 | + byte disableBAROcorrection: 1; // | | |
| 673 | + byte disableWUE: 1; // V | |
| 674 | + byte disableCrankingEnrichment: 1; //[PJSCv1.03] | |
| 671 | 675 | byte veMapSelectionInj1Pri: 4; //[PJSCv1.10] For x4 Fuel table support |
| 672 | 676 | byte veMapSelectionInj1Sec: 4; //[PJSCv1.10] | |
| 673 | 677 | byte veMapSelectionInj2Pri: 4; //[PJSCv1.10] | |
| @@ -700,7 +704,7 @@ | ||
| 700 | 704 | byte muxout2Selection: 4; // | MUX output2 selection |
| 701 | 705 | byte muxout3Selection: 4; // |[PJSC v1.01] MUX output3 selection |
| 702 | 706 | byte muxout4Selection: 4; // |[PJSC v1.01] MUX output4 selection |
| 703 | - byte fuelAlgorithm2: 3; //[PJSC v1.01] For Secondary Fuel Algorithm | |
| 707 | + byte fuelAlgorithm2: 3; // |[PJSC v1.01] For Secondary Fuel Algorithm | |
| 704 | 708 | byte fuelAlgorithm3: 3; // | |
| 705 | 709 | byte unused2_118: 2; // | |
| 706 | 710 | byte table4Usage: 1; // | For switching usage of 3rd table Ignition/Fuel |
| @@ -713,7 +717,16 @@ | ||
| 713 | 717 | byte afr_sensor_selection2: 1; //[PJSC v1.02] |
| 714 | 718 | byte afr_sensor_selection3: 1; //[PJSC v1.02] |
| 715 | 719 | byte afr_sensor_selection4: 1; //[PJSC v1.02] |
| 716 | - byte unused2_122[6]; //[PJSC v1.01] | |
| 720 | +//[PJSC v1.03] byte unused2_122[6]; //[PJSC v1.01] | |
| 721 | + byte squirtDeviceTypeCh1 : 1; //[PJSC v1.03] | |
| 722 | + byte squirtDeviceTypeCh2 : 1; // | | |
| 723 | + byte squirtDeviceTypeCh3 : 1; // | | |
| 724 | + byte squirtDeviceTypeCh4 : 1; // | | |
| 725 | + byte solenoidValveDirectionCh1 : 1; // | | |
| 726 | + byte solenoidValveDirectionCh2 : 1; // | | |
| 727 | + byte solenoidValveDirectionCh3 : 1; // | | |
| 728 | + byte solenoidValveDirectionCh4 : 1; // V | |
| 729 | + byte unused2_123[5]; //[PJSC v1.03] | |
| 717 | 730 | |
| 718 | 731 | #if defined(CORE_AVR) |
| 719 | 732 | }; |