Announcement Announcement Module
Collapse
No announcement yet.
Stock ECU load computing 200% limitation and ways to circumvent it Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Originally posted by ast View Post
    I only have access to my car (it's the only Asia / Australia model Colt on my country) so I only have the JDM 38250016 ROM and AUS 39670016 ROM that has been shared on this forum. Is the 33520003 newer one?
    Yes. In 2006 JDM Version-R got full aluminium intercooler and a bit higher boost.

    Originally posted by ast View Post
    It would be very helpful if you could share the equations and which intermediate steps are used between MAF scaling table result and Master Load. I found at least two different RAM locations that are stored to Master Load which I believe are some intermediate results of this calculation but haven't been able to trace more backwards from this. These variables are unfortunately used in many places of the code.
    Code:
    void calc_ipw_shaft_int(uint16_t p0)
    {
    ...
        if (shaft_period1_short_copy_dline[0] < flash_revolution_period_limit) {
            run_state_extended_flags |= 0x20;//overrev condition
        } else {
            run_state_extended_flags &= ~0x20;
        }
        l_lsvc_prev = load_source_value_compensated_prescaled_prev;/*sp22*/
        S_DEC(maf_low_tps_decay);
        if (!(fp12498_f16 & 0x40)) {//always true - cause of ff map
            maf_low_tps_decay = s_add16(flash_init_maf_tps_low_decay, 1);
        }
        if (engine_transient_flags & 0x1000) { //unstable boost
            maf_scaled1_avg = MIN16(ps16_divu32_16(maf_scaled1_sum, maf_scaled1_sample_counter), maf_scaled1_avg_transient_limit_high);
        } else {
            maf_scaled1_avg = ps16_divu32_16(maf_scaled1_sum, maf_scaled1_sample_counter);
        }
        maf_scaled1_sample_counter = 0;
        maf_scaled1_sum = 0;
        if ((run_state_extended_flags & 0x11)
        || !maf_low_tps_decay) {//false
            maf_scaled1_iat_compensated = default_maf_scaled1;
        } else {
            maf_scaled1_iat_compensated = ps_mul_divu16(maf_scaled1_avg, s_add16(maf_x_iat_mapped, 896), 1024);
            maf_scaled1_iat_compensated = ps_mul_divu16(iat_gradient_maf_compensation, maf_scaled1_iat_compensated, 4096);
        }
        maf_scaled1_iat_compensated_aprx_prev = maf_scaled1_iat_compensated_aprx;
        if (run_state_extended_flags & 0x11) {
            maf_scaled1_iat_compensated_aprx_prev = maf_scaled1_iat_compensated;
        }
        maf_scaled1_iat_compensated_aprx = aprxu16_256(maf_scaled1_iat_compensated_aprx_prev, maf_scaled1_iat_compensated, maf_smooth_rate);
        maf_charge_current = ps_scale32_base256(ps_scale32_base256(maf_scaled1_iat_compensated, flash_inverse_cylinder_volume), shaft_period2_short);
        maf_charge_aprx_bound_prev = maf_charge_aprx_bound;
        if (run_state_extended_flags & 0x11) {
            maf_charge_aprx_bound_prev = flash_maf_charge_max_base_vs_rpm_2dmap16.data2d[0];
            r9 = maf_charge_aprx_bound_prev;
        } else {
            r9 = aprxu32(maf_charge_aprx_bound_prev, maf_charge_current, maf_smooth_rate);
        }
        maf_charge_aprx_bound = mid32(r9, maf_charge_min, maf_charge_max);
        load_source_value_prev = load_source_value;
        load_source_value_compensated_prev = load_source_value_compensated;
        if (run_state_extended_flags & 0x11) {
            l_lsv = s_32to16(maf_charge_aprx_bound);/*r9*/
        } else
        if (sensor_faults & 0x08) {
            l_lsv = 0x8000;
        } else {
            l_lsv = s_32to16(maf_charge_aprx_bound);
        }
        ret = ps_scale_base128(l_lsv, warmup_fuel_correction);
        load_source_value = l_lsv;// <<<<<<<<<<<<<< MASTER_LOAD
        ...
    }
    Mapping to assembly left for reader's excercise. Variables names sometimes are not clear, used them as placeholders and never got to name them properly.

    Originally posted by ast View Post
    I'm also interested in experiences with throttle response as it's horribly slow as stock. I have identified some tables related to this but haven't tried any changes yet.
    That's quite interesting. Do you still experience it as horrible if you disconnect clutch pedal switch?

    Comment


    • #17
      Originally posted by Rcus View Post
      Mapping to assembly left for reader's excercise. Variables names sometimes are not clear, used them as placeholders and never got to name them properly.
      Superb, I really appreciate sharing this. It seems to be a good idea to write the code open like you have done. I'll try to continue from here in few days.

      Originally posted by Rcus View Post
      That's quite interesting. Do you still experience it as horrible if you disconnect clutch pedal switch?
      Never thought of this but now that you said it, throttle seems to react faster clutch pressed than de-pressed. I'll try this also in the comings days.

      Comment


      • #18
        Originally posted by ast View Post
        Never thought of this but now that you said it, throttle seems to react faster clutch pressed than de-pressed. I'll try this also in the comings days.
        I think I know what algorithm spoils your experience of electronic throttle control. I personally don't view it as constraining that much, my only complain would be that it uses only 2 sets of settings: for 1-2 gears and other for 3-4-5. I'd prefer to have separate set for 2nd gear, but CZT has only 384KiB flash memory to begin with and my modifications already consumed all free space and some bits of disabled code space.

        Comment


        • #19
          I have been now able to follow the path from MAF scaling to master load and other loads generated from master load. I found 8 places that required patching, but this is not complete as the car doesn't want to run with the modified ROM. It starts and runs few seconds until the startup enrichments run out, then it goes lean which is confirmed by both wideband and logging IPW which is lower than it should be.

          2 byte load, master load and ignition timing however are as expected so basically I think I haven't found something in the IPW calculation that is using master load as it's now half of what is was and this causes insufficient fueling.

          Oh well, back to the drawing board

          Edit: I think I found the missing location, will test it tomorrow. However I still have only 9 places to modify and Rcus said it required 12 patches so not sure what did you calculate to that 12?
          Last edited by ast; 22-05-2015, 07:39 AM.

          Comment


          • #20
            10th patch is for new code, and 3 more for data.

            Comment


            • #21
              OK, I calculated the new code and patch to the existing code as one. Car runs now, but AFR fluctuates too much in load change situations so some table or multiplier must now be incorrect for the new lower master load.

              I also found two more locations in the code to patch, not sure if they are necessary but clearly different scaling in Evo X.
              Last edited by ast; 22-05-2015, 09:06 PM.

              Comment


              • #22
                I have now been driving with load patch for few days and everything seems to work just like it did before. My solution seems to be a bit different as it contains 12 patches to the existing code section, one new piece of code and 5 patches to the data section (4 tables and 1 constant re-scaled).

                Big thanks to Rcus for your posts here, it helped me a lot.

                Comment


                • #23
                  Guess you patched over old load delta ipw compensation algorithm? I didn't deem that necessary because added/subtracted ipw is always zero due to zeroed out coolant temperature compensation maps.

                  Comment


                  • #24
                    Originally posted by Rcus View Post
                    Guess you patched over old load delta ipw compensation algorithm? I didn't deem that necessary because added/subtracted ipw is always zero due to zeroed out coolant temperature compensation maps.
                    Yes, you are right. I didn't notice at the time that they are not used. It would be interesting to try enabling them to see if they would affect AFR behavior during / right after spool in low gears.

                    Comment


                    • #25
                      Of course they will. I suspect it's an old fuel film compensation system (used prior to introduction of hot-film maf). New one uses separate state for each cylinder and is a bit more sophisticated.

                      Comment


                      • #26
                        guys , i assume that the 400% load is a success.. is this share-able or we have to pay to get it ?

                        Comment


                        • #27
                          My version is based on 33520003 JDM ROM.
                          It works on AU ECUs just fine, but writing stock ROM back and mine again causes ECUID re-generation and conseqeuently prohibits engine start. So I'm not very keen to distribute it.

                          And with relocation to other country, new job and promotion ahead I have no time to work on it.

                          P.S. I can't see your visitor's message due to the forum bug.

                          Comment


                          • #28
                            Not to want to sound pushy, but do you have an ETA?

                            If you guys want a hand, I have a couple of people that would be interested in fixing this problem. Any info anyone wants to share I will happy to send it to the right people.

                            Comment

                            Working...
                            X