PJSC(Pump Jet Solenoid Controller)はArduinoを使用したバイク用燃料噴射コントローラです。このプロジェクトは、オープンソースECUプロジェクト『Speeduino』をベースにしています。
[Ver 1.02] 2020.06.01
- Basic Distributorで2気筒シーケンシャルまたはセミシーケンシャルを指定すると、インジェクターch3、4の噴射タイミングが異常となるバグを修正
- KATANAデコーダーでクランク角が正しく算出出来ない問題を修正
- シリアルデータストリームにAuto Tune用AFR値を追加
| @@ -49,6 +49,9 @@ | ||
| 49 | 49 | rpmhigh = scalar, U16, "rpm", 1, 0, 0, 30000, 0 |
| 50 | 50 | rpmwarn = scalar, U16, "rpm", 1, 0, 0, 30000, 0 |
| 51 | 51 | rpmdang = scalar, U16, "rpm", 1, 0, 0, 30000, 0 |
| 52 | + maphigh = scalar, U16, "kPa", 1, 0, 0, 30000, 0 ;[PJSC v1.02] | |
| 53 | + mapwarn = scalar, U16, "kPa", 1, 0, 0, 30000, 0 ;[PJSC v1.02] | |
| 54 | + mapdang = scalar, U16, "kPa", 1, 0, 0, 30000, 0 ;[PJSC v1.02] | |
| 52 | 55 | |
| 53 | 56 | idleUnits = bits, U08, [0:2], "None", "On/Off", "Duty Cycle", "Duty Cycle", "Steps", "Steps" |
| 54 | 57 |
| @@ -437,7 +440,10 @@ | ||
| 437 | 440 | inj2SquirtStartEnd = bits, U08, 121, [1:1], "End angle", "Start angle" ;[PJSC v1.01] |
| 438 | 441 | inj3SquirtStartEnd = bits, U08, 121, [2:2], "End angle", "Start angle" ;[PJSC v1.01] |
| 439 | 442 | inj4SquirtStartEnd = bits, U08, 121, [3:3], "End angle", "Start angle" ;[PJSC v1.01] |
| 440 | - unused2_121 = bits, U08, 121, [4:7] ;[PJSC v1.01] | |
| 443 | + afr_sensor_selection1 = bits, U08, 121, [4:4], "Primary", "Secondary" ;[PJSC v1.02] For AFR sensor selection | |
| 444 | + afr_sensor_selection2 = bits, U08, 121, [5:5], "Primary", "Secondary" ;[PJSC v1.02] | |
| 445 | + afr_sensor_selection3 = bits, U08, 121, [6:6], "Primary", "Secondary" ;[PJSC v1.02] | |
| 446 | + afr_sensor_selection4 = bits, U08, 121, [7:7], "Primary", "Secondary" ;[PJSC v1.02] | |
| 441 | 447 | unused2_122 = array, U08, 122, [6], "%", 1.0, 0.0, 0.0, 255, 0 ;[PJSC v1.01] |
| 442 | 448 | |
| 443 | 449 |
| @@ -1447,6 +1453,13 @@ | ||
| 1447 | 1453 | defaultValue = AUXin14Alias Aux14 |
| 1448 | 1454 | defaultValue = AUXin15Alias Aux15 |
| 1449 | 1455 | |
| 1456 | + defaultValue = rpmwarn, 3000 ;[PJSC v1.02] | |
| 1457 | + defaultValue = rpmdang, 5000 ; | |
| 1458 | + defaultValue = rpmhigh, 8000 ; | |
| 1459 | + defaultValue = mapwarn, 200 ; | |
| 1460 | + defaultValue = mapdang, 245 ; | |
| 1461 | + defaultValue = maphigh, 255 ;[PJSC v1.02] | |
| 1462 | + | |
| 1450 | 1463 | [Menu] |
| 1451 | 1464 | |
| 1452 | 1465 | ;---------------------------------------------------------------------------- |
| @@ -1484,6 +1497,10 @@ | ||
| 1484 | 1497 | subMenu = barodensity_curve, "Baro Density", { baroCorr } ;[PJSC v1.01] |
| 1485 | 1498 | subMenu = reset_control, "Reset Control" |
| 1486 | 1499 | |
| 1500 | + subMenu = std_separator ;[PJSC v1.02] | |
| 1501 | + subMenu = gaugeLimits, "Gauge Limits" ; | | |
| 1502 | + subMenu = std_separator ; V | |
| 1503 | + subMenu = io_summary, "I/O Summary" ;[PJSC v1.02] | |
| 1487 | 1504 | |
| 1488 | 1505 | menu = "&Tuning" |
| 1489 | 1506 | subMenu = std_realtime, "Realtime Display" |
| @@ -2216,6 +2233,12 @@ | ||
| 2216 | 2233 | field = "PID Proportional Gain", egoKP, { egoType && (egoAlgorithm == 2) } |
| 2217 | 2234 | field = "PID Integral", egoKI, { egoType && (egoAlgorithm == 2) } |
| 2218 | 2235 | field = "PID Derivative", egoKD, { egoType && (egoAlgorithm == 2) } |
| 2236 | + field = "" ;[PJSC v1.02]For AFR sensor selection | |
| 2237 | + field = "AFR sensor selection for tune analyze VE" ;[PJSC v1.02] | | |
| 2238 | + field = "AFR sensor for VE Table 1", afr_sensor_selection1 ;[PJSC v1.02] | | |
| 2239 | + field = "AFR sensor for VE Table 2", afr_sensor_selection2 ;[PJSC v1.02] | | |
| 2240 | + field = "AFR sensor for VE Table 3", afr_sensor_selection3 ;[PJSC v1.02] V | |
| 2241 | + field = "AFR sensor for VE Table 4", afr_sensor_selection4 ;[PJSC v1.02]For AFR sensor selection | |
| 2219 | 2242 | |
| 2220 | 2243 | dialog = fanSettings,"Fan Settings",7 |
| 2221 | 2244 | field = "Fan Mode", fanEnable |
| @@ -3263,7 +3286,25 @@ | ||
| 3263 | 3286 | dialog = Auxin_config, "",yAxis |
| 3264 | 3287 | panel = Auxin_north |
| 3265 | 3288 | panel = Auxin_south |
| 3266 | - | |
| 3289 | + | |
| 3290 | + dialog = gaugeLimits, "Gauge Limits" ;[PJSC v1.02] Gause limit | |
| 3291 | + field = "#RPM" ; | | |
| 3292 | + field = "Warning", rpmwarn ; | | |
| 3293 | + field = "Danger", rpmdang ; | | |
| 3294 | + field = "High", rpmhigh ; | | |
| 3295 | + field = "#MAP" ; | | |
| 3296 | + field = "Warning", mapwarn ; | | |
| 3297 | + field = "Danger", mapdang ; | | |
| 3298 | + field = "High", maphigh ; V | |
| 3299 | + field = !"Reload project to update gauges" ;[PJSC v1.02] | |
| 3300 | + | |
| 3301 | + dialog = io_summary, "I/O Summary" | |
| 3302 | + displayOnlyField = "fuelPumpPin", fuelPumpPin, {fpPrime} ;[PJSC v1.02] | |
| 3303 | + displayOnlyField = "fanPin", fanPin, {fanEnable} ; | | |
| 3304 | + displayOnlyField = "tachoPin", tachoPin ; | | |
| 3305 | + displayOnlyField = "idleUpPin", idleUpPin, {idleUpEnabled} ; V | |
| 3306 | + displayOnlyField = "baroPin", baroPin,{useExtBaro} ;[PJSC v1.02] | |
| 3307 | + | |
| 3267 | 3308 | ;------------------------------------------------------------------------------- |
| 3268 | 3309 | ; General help text |
| 3269 | 3310 |
| @@ -3715,7 +3756,7 @@ | ||
| 3715 | 3756 | gammaEnrichGauge = gammaEnrich, "Gamma Enrichment", "%", 50, 150, -1, -1, 151, 151, 0, 0 |
| 3716 | 3757 | pulseWidthGauge = pulseWidth, "Pulse Width", "mSec", 0, 35.0, 1.0, 1.2, 20, 25, 3, 3 |
| 3717 | 3758 | ;[PJSC v1.01] tachometer = rpm, "Engine Speed", "RPM", 0, 8000, 300, 600, 3000, 5000, 0, 0 |
| 3718 | - tachometer = rpm, "Engine Speed", "RPM", 0, 13000, 600, 1000,11000,12000, 0, 0 ;[PJSC v1.01] | |
| 3759 | + tachometer = rpm, "Engine Speed", "RPM", 0, {rpmhigh},600, 1000,{rpmwarn},{rpmdang}, 0, 0 ;[PJSC v1.02] | |
| 3719 | 3760 | veGauge = veCurr, "VE Current", "%", 0, 120, -1, -1, 999, 999, 0, 0 |
| 3720 | 3761 | veGauge2 = veCurr2, "VE2 Current", "%", 0, 120, -1, -1, 999, 999, 0, 0 ;[PJSC] |
| 3721 | 3762 | veGauge3 = veCurr3, "VE3 Current", "%", 0, 120, -1, -1, 999, 999, 0, 0 ;[PJSC v1.01] |
| @@ -3727,12 +3768,16 @@ | ||
| 3727 | 3768 | flexEnrich, = flexFuelCor, "Flex Correction", "%", 0, 200, 130, 140, 140, 150, 0, 0 |
| 3728 | 3769 | advanceGauge = advance, "Spark Advance", "deg BTDC", 50, -10, 0, 0, 35, 45, 0, 0 |
| 3729 | 3770 | dwellGauge = dwell, "Ign Dwell", "mSec", 0, 35.0, 1.0, 1.2, 20, 25, 3, 3 |
| 3771 | + boostTargetGauge = boostTarget, "Target Boost", "kPa", 0, {maphigh}, 0, 20, {mapwarn}, {mapdang}, 0, 0 ;[PJSC v1.02] | |
| 3772 | + boostDutyGauge = boostDuty, "Boost Duty Cycle", "%", 0, 100, -1, -1, 101, 110, 1, 1 ;[PJSC v1.02] | |
| 3773 | + afrTargetGauge = afrTarget, "Target AFR", "", 7, 25, 12, 13, 15, 16, 2, 2 ;[PJSC v1.02] | |
| 3730 | 3774 | |
| 3731 | 3775 | gaugeCategory = "Sensor inputs" |
| 3732 | - mapGauge = map, "Engine MAP", "kPa", 0, 255, 0, 20, 200, 245, 0, 0 | |
| 3776 | + mapGauge = map, "Engine MAP", "kPa", 0,{maphigh}, 0, 20,{mapwarn},{mapdang}, 0, 0 ;[PJSC v1.02] | |
| 3733 | 3777 | mapGauge_psi = map_psi, "Engine MAP (PSI)", "PSI", -15, 100, 0, 20, 200, 245, 0, 0 |
| 3734 | 3778 | mapGauge_bar = map_bar, "Engine MAP (BAR)", "Bar", -1, 3, -1, -1, 5, 5, 2, 2 |
| 3735 | 3779 | mapGauge_vacBoost = map_vacboost, "Engine MAP (in-Hg/PSI)", "in-Hg/PSI", -30, 30, -30, -30, 30, 30, 1, 1 |
| 3780 | + baroGauge = baro, "Baro Pressure", "kPa", 0,{maphigh}, 0, 20,{mapwarn},{mapdang}, 0, 0 ;[PJSC v1.02] | |
| 3736 | 3781 | batteryVoltage = batteryVoltage,"Battery Voltage", "volts", 0, 25, 8, 9, 15, 16, 2, 2 |
| 3737 | 3782 | |
| 3738 | 3783 | tpsADCGauge = tpsADC, "TPS ADC", "", 0, 255, -1, -1, 256, 256, 0, 0 |
| @@ -3750,6 +3795,10 @@ | ||
| 3750 | 3795 | dutyRatioGauge2 = dutyRatio2, "Duty Ratio 2", "%", 0, 100, 5, 10, 90, 95, 0, 0 ;[PJSC]For capturing duty pulse |
| 3751 | 3796 | baroGauge = baro, "Barometric Pressure", "kPa", 0, 200, 20, 60, 140, 180, 1, 0 ;[PJSC]Add the gage for barometric sensor |
| 3752 | 3797 | injcountGauge = testCnt, "Injection Count", "pulses", 0, 1000, 65535, 65535,65535, 65535,0, 0 ;[PJSC v1.01] For test mode |
| 3798 | + afrAnalyzeGauge1 = afr_analyze1, "Air:Fuel Ratio for VE1", "", 7, 25, 12, 13, 15, 16, 2, 2 ;[PJSC v1.02] For AFR sensor selection | |
| 3799 | + afrAnalyzeGauge2 = afr_analyze2, "Air:Fuel Ratio for VE2", "", 7, 25, 12, 13, 15, 16, 2, 2 ;[PJSC v1.02] For AFR sensor selection | |
| 3800 | + afrAnalyzeGauge3 = afr_analyze3, "Air:Fuel Ratio for VE3", "", 7, 25, 12, 13, 15, 16, 2, 2 ;[PJSC v1.02] For AFR sensor selection | |
| 3801 | + afrAnalyzeGauge4 = afr_analyze4, "Air:Fuel Ratio for VE4", "", 7, 25, 12, 13, 15, 16, 2, 2 ;[PJSC v1.02] For AFR sensor selection | |
| 3753 | 3802 | |
| 3754 | 3803 | #if CELSIUS |
| 3755 | 3804 | cltGauge = coolant, "Coolant Temp", "TEMP", -40, 215, -15, 0, 95, 105, 0, 0 |
| @@ -3848,7 +3897,7 @@ | ||
| 3848 | 3897 | |
| 3849 | 3898 | ochGetCommand = "r\$tsCanId\x30%2o%2c" |
| 3850 | 3899 | ;[PJSC] ochBlockSize = 90 |
| 3851 | - ochBlockSize = 112 ;[PJSC v1.01] Extend block size for Test mode | |
| 3900 | + ochBlockSize = 116 ;[PJSC v1.02] Extend block size | |
| 3852 | 3901 | |
| 3853 | 3902 | secl = scalar, U08, 0, "sec", 1.000, 0.000 |
| 3854 | 3903 | status1 = scalar, U08, 1, "bits", 1.000, 0.000 |
| @@ -3962,6 +4011,10 @@ | ||
| 3962 | 4011 | afr2 = scalar, U08, 107, "O2", 0.100, 0.000 ;[PJSC v1.01] |
| 3963 | 4012 | fuelLoad2 = scalar, S16, 108, { bitStringValue( algorithmUnits2 , algorithm2 ) }, 1.000, 0.000 ;[PJSC v1.01]For dual fuel load |
| 3964 | 4013 | fuelLoad3 = scalar, S16, 110, { bitStringValue( algorithmUnits2 , algorithm3 ) }, 1.000, 0.000 ;[PJSC v1.01]For dual fuel load |
| 4014 | + afr_analyze1 = scalar, U08, 112, "O2 for VE Table 1", 0.100, 0.000 ;[PJSC v1.02]For AFR sensor selection | |
| 4015 | + afr_analyze2 = scalar, U08, 113, "O2 for VE Table 2", 0.100, 0.000 ;[PJSC v1.02]For AFR sensor selection | |
| 4016 | + afr_analyze3 = scalar, U08, 114, "O2 for VE Table 3", 0.100, 0.000 ;[PJSC v1.02]For AFR sensor selection | |
| 4017 | + afr_analyze4 = scalar, U08, 115, "O2 for VE Table 4", 0.100, 0.000 ;[PJSC v1.02]For AFR sensor selection | |
| 3965 | 4018 | |
| 3966 | 4019 | |
| 3967 | 4020 | #if CELSIUS |
| @@ -4006,12 +4059,6 @@ | ||
| 4006 | 4059 | |
| 4007 | 4060 | boostTableLimit = { boostType == 0 ? 100 : 511 } ;The maximum value allowed in the boost table. 100 is used for duty cycle, 511 for kpa |
| 4008 | 4061 | |
| 4009 | - ;[PJSC v1.02] AFR parameter to separation AFR by VE analyze table | |
| 4010 | - afr_analyze1 = { afr } | |
| 4011 | - afr_analyze2 = { afr2 } | |
| 4012 | - afr_analyze3 = { afr } | |
| 4013 | - afr_analyze4 = { afr2 } | |
| 4014 | - | |
| 4015 | 4062 | ;------------------------------------------------------------------------------- |
| 4016 | 4063 | |
| 4017 | 4064 | [Datalog] |
| @@ -19,7 +19,7 @@ | ||
| 19 | 19 | #define ve3MapPage 11 //[PJSC v1.01] Config Page 12 |
| 20 | 20 | |
| 21 | 21 | //[PJSC]#define SERIAL_PACKET_SIZE 90 //Must match ochBlockSize in ini file |
| 22 | -#define SERIAL_PACKET_SIZE 112 //[PJSC v1.01] Extend serial packet block size for Test mode | |
| 22 | +#define SERIAL_PACKET_SIZE 116 //[PJSC v1.02] Extend serial packet block size | |
| 23 | 23 | |
| 24 | 24 | byte currentPage = 1;//Not the same as the speeduino config page numbers |
| 25 | 25 | bool isMap = true; |
| @@ -527,6 +527,10 @@ | ||
| 527 | 527 | byte veMapSelectionSw1Sec[4]; //[PJSC v1.01] | |
| 528 | 528 | byte veMapSelectionSw2Pri[4]; //[PJSC v1.01] V |
| 529 | 529 | byte veMapSelectionSw2Sec[4]; //[PJSC v1.01] For x4 Fuel table support |
| 530 | + byte afr_analyze1; //[PJSC v1.02] For AFR sensor selection | |
| 531 | + byte afr_analyze2; // | | |
| 532 | + byte afr_analyze3; // V | |
| 533 | + byte afr_analyze4; //[PJSC v1.02] For AFR sensor selection | |
| 530 | 534 | |
| 531 | 535 | //Helpful bitwise operations: |
| 532 | 536 | //Useful reference: http://playground.arduino.cc/Code/BitMath |
| @@ -696,19 +700,19 @@ | ||
| 696 | 700 | byte muxout2Selection: 4; // | MUX output2 selection |
| 697 | 701 | byte muxout3Selection: 4; // |[PJSC v1.01] MUX output3 selection |
| 698 | 702 | byte muxout4Selection: 4; // |[PJSC v1.01] MUX output4 selection |
| 699 | -//[PJSC v1.01] byte baroDenBins[9]; // | For Barometric extend correnction | |
| 700 | -//[PJSC v1.01] byte baroDenRates[9]; // | For Barometric extend correnction | |
| 701 | 703 | byte fuelAlgorithm2: 3; //[PJSC v1.01] For Secondary Fuel Algorithm |
| 702 | 704 | byte fuelAlgorithm3: 3; // | |
| 703 | 705 | byte unused2_118: 2; // | |
| 704 | 706 | byte table4Usage: 1; // | For switching usage of 3rd table Ignition/Fuel |
| 705 | - byte unused2_119: 7; // V | |
| 706 | -//[PJSC v1.01] byte unused2_122[6]; //[PJSC v1.01] For test mode | |
| 707 | - byte inj1SquirtStartEnd: 1; //[PJSC v1.01] | |
| 707 | + byte unused2_119: 7; // | | |
| 708 | + byte inj1SquirtStartEnd: 1; // | | |
| 708 | 709 | byte inj2SquirtStartEnd: 1; // | |
| 709 | - byte inj3SquirtStartEnd: 1; // | | |
| 710 | - byte inj4SquirtStartEnd: 1; // | | |
| 711 | - byte unused2_121: 4; // V | |
| 710 | + byte inj3SquirtStartEnd: 1; // V | |
| 711 | + byte inj4SquirtStartEnd: 1; //[PJSC v1.01] | |
| 712 | + byte afr_sensor_selection1: 1; //[PJSC v1.02] | |
| 713 | + byte afr_sensor_selection2: 1; //[PJSC v1.02] | |
| 714 | + byte afr_sensor_selection3: 1; //[PJSC v1.02] | |
| 715 | + byte afr_sensor_selection4: 1; //[PJSC v1.02] | |
| 712 | 716 | byte unused2_122[6]; //[PJSC v1.01] |
| 713 | 717 | |
| 714 | 718 | #if defined(CORE_AVR) |