Hi All,
Recently I've been doing some digging into how the AT interacts with the newer DBW Subaru ECUs and have made a few breakthroughs. I'm aware in the older ecus (Cable Throttle and 16bit units) the logic is spark only based and is relatively simple. There are simple tables (Per Gear in some binaries) that define a spark retard vs throttle position and this is something that was covered in another thread a while back.
The 32bit DBW ECUs however, they are a whole new beast when it comes to AT interaction..
The 32bit ECU has many more closed loop torque routines and one of those routines is used to handle meeting AT torque reduction demands. Its worth pointing out that all the information I am about to share has been gathered from reverse engineering the ROM for my car (D0XJ001M - Where most of the associated tables and scalers are 0'd out) however with some further checking I've found the logic to be very much the same in the auto equivalent ROM (D0XJ001T from memory) as I also have a 5EAT H6 using this ROM, where this work is a tad more useful. I'd also be curious after making this post to see if disassembly fluent users with turbo models are able to find the same logic in their ECUs. Anyway, getting on with it. In the below diagrams, I've included table addresses for D0XJ001M where possible.
Firstly, the H6 ecu uses a simple table set to provide the AT (And other modules requesting current torque) an estimation of current torque via K-line / CAN depending on model. This is so the TCM, ABS, Trac control, etc can make choices depending on engine torque, including when and how aggressively they need to request a reduction of engine torque. This logic works like so:
Code:
Initial Torque Estimation Table for TCM (C10E0) > Atmospheric Pressure Correction (C0830) > Smoothing Function & Correction Based on Timing Retard and Cylinders Off > Final TCM Torque Corrected > TCM Torque as Fraction of Maximum (Maximum Torque Being the Current Value of the Initial Table) Depending on Spark Retard, ETC Adjustment and Cylinders Off / Fuel Cut.
Next, depending on Conditions and calibration of the TCM, the AT might request either Torque Down (Shown as "Retard Signal from AT" by Romraider Logger) or it may request Fuel Cutoff (Shown as "Fuel Cut Signal From AT" by Romraider Logger). The ECU may also choose to ignore these requests which will be shown by the ECU sending the Ban of Torque Down signal. Ban of Torque Down is controlled via a few dedicated scalers with some complex code that set operation limits for Torque requests. While I don't yet understand Ban of Torque Down, I'll go over the logic for the Retard from AT and Fuel Cut from AT logic below.
Retard Signal from AT / AT Torque Down works like this:
High Level - This signal will trigger Cylinders to turn off, which if not sufficient to reduce torque to the desire, will also be combined with a spark retard. Spark Retard Occurs First and is then adjusted from there. The ECU will also close the ETC conditionally. ETC closure is controlled by adjusting the ECUs desired ETC angle, but there is an important note to make here:
Final ETC Angle = ECUs Desired Angle + Drivers Desired Angle. AT Requests can only affect the ECUs desired Angle, so if the driver is requesting 84 Degrees (Maximum Angle), then the ECU angle is irrelevant and ETC closure will not be possible. TL:DR for this section - Drivers Demand of the ETC is Final and will not be tampered with by the ECU. While I don't fully understand the logic that drives this system yet. I've included a few parts of bits I do understand below:
Minimum Timing Adjustment - Creates a lowest allowable amount of timing adjustment for Torque:
Code:
Minimum Retard Table (C70A8) * ECT Multiplier (C7660).
Minimum Retard Table is Scaled with the current amount of Dynamic Retard. Presumably this creates an instant spark retard before the slower main logic creates a dynamic retard to meet the exact torque requirement.
Main Torque Timing Adjustment - Creates a Base Timing Retard, considering the current ETC angle. Low clipped by the Minimum Timing Adjustment logic:
Code:
Main Timing Adjustment = Main Timing Adjustment - Step Tables (3 Tables Selected based on below logic, all scaled with current ETC Deviation from ECU Desired, Degrees)
Code:
Step Table A - Main Timing Adjustment Lagging below Lowest Allowed, Torque Down Request Active (Aggressive Step)
Step Table B - Main Timing Adjustment Above Minimum, Torque Down Request Active (Mild Step)
Step Table C - Torque Down Request Not Active / Ramp Timing back to Normal (Reverse Step)
This Timing logic also works into the current number of cylinders off. The number of Cylinders Off Depends on the below Logic:
Code:
If (Torque Based Timing Not Removing > 36 Degrees + Torque Down Request Active + Cylinders Off General Allow Flag + Above Minimum Cylinders Off RPM)
Cylinders Off = Table C60A4 (Scaled with MAP and Current Final Torque) / 2 (12 = 6 Cylinders on. Odd Numbers mean a given number of cylinders skipping a firing event every 2 revs)
Code:
Minimum Cylinders Off RPM = Table C5A44 Scaled with ECT
Unfortunately, I don't yet have my head around the ETC code. But based on the Above, when ETC has the throttle angle fully under its control, there will be minimal corrective spark retard, as you would expect.
If anyone else has anything to add, I'd love to hear and start a discussion around this torque logic.