|
Subaru OBD-I (1990-5) Trouble Codes
This is an attempt to collect some of the less
common information on some of the more esoteric codes here, rather than
the full diagnostic procedure (which can be found in the service manual).
Here is a listing of the OBD-I / VSS trouble codes (and the fail-safe
operation the ECU resorts to when the code is thrown);
if there is more info on the code, the
code number will link to a section on the lower page.
Code |
Item |
Contents of Diagnosis |
Fail-Safe Operation |
|
Crank angle sensor |
No signal entered from crank angle sensor, but signal
entered from cam angle sensor |
- |
|
Ignition (starter) switch |
Abnormal signal emitted from starter switch |
Ignores start signal |
|
Cam angle sensor |
No signal entered from cam angle sensor, but signal entered
from crank angle sensor |
- |
14-17 |
Injector #1-4 |
Fuel injector inoperative (Abnormal signal emitted from monitor circuit) |
- |
21 |
Water temperature sensor |
Abnormal signal emitted from water temperature sensor |
Maintains radiator fan "ON" to prevent overheating |
|
Knock sensor |
Abnormal voltage produced in knock sensor monitor circuit |
Uses basic fuel map and retards ignition timing (reportedly
by 5 degrees) |
23 |
Air flow sensor |
Abnormal voltage input entered from air flow sensor |
Injection duration determined by TPS and RPM only |
|
Air control valve |
Air control valve inoperative (Abnormal signal produced in monitor
circuit) |
ECU turns off 1 or 2 injectors to reduce idle speed for certain
RPMs, speed, and throttle |
31 |
Throttle sensor |
Abnormal voltage input entered from throttle sensor |
Sets TPS output to a fixed voltage; injection duration
determined by idle switch, AFM, and RPM only |
32 |
Oxygen sensor |
Oxygen sensor inoperative |
- |
|
Vehicle speed sensor |
Abnormal voltage input entered from speed sensor |
Sets vehicle speed signal to a fixed value |
35 |
Canister purge solenoid valve |
Solenoid valve inoperative |
- |
|
A/F learning control |
Faulty learning control function |
Falls back to simple feedback control |
42 |
Idle switch |
Abnormal voltage input entered from idle switch |
"Judges OFF operation" (from the Subaru repair manual) |
45 |
Atmospheric pressure sensor |
Faulty sensor |
Sets sensor to 760 mmHg |
49 |
Air flow sensor |
Use of improper air flow sensor |
- |
|
Neutral switch (MT) |
Abnormal signal entered from neutral switch |
- |
|
Inhibitor switch (AT) |
Abnormal signal entered from inhibitor switch |
- |
|
Parking switch |
Abnormal signal entered from parking switch |
- |
turbo only:
|
44 |
Wastegate control solenoid valve |
Wastegate control solenoid valve inoperative |
- |
45 |
Pressure sensor and pressure exchange solenoid valve |
Faulty sensor or pressure exchange solenoid valve inoperative |
Prevents abnormal supercharging pressure using "fuel cut" in relation to engine load |
The operation of the cam and crank angle sensors, and the relationship
between the two, can be seen with an oscilloscope. This can be very
useful in debugging problems with the angle sensors and the timing belt,
as shown
here.
Some users have reported both codes 11 and 13 can result from simple
engine stalls. It is recommended
to clear the code to see if it returns without an engine stall, before
replacing the angle sensor.
This is one of the easiest ones to fix. The ECU relies on getting the
start signal only while the engine is actively cranking. This signals
the ECU to go into starting mode and do 2 things to make the engine
easier to start under a wide range of conditions:
- use a long injector duration for extra fuel
- use fixed 10*BTDC timing
To test, just back-probe the ECU's B56 connector/pin 10 with a needle
or paperclip, and use a voltmeter to check for 10-14V
between the probe and ground while someone is cranking the engine. The
voltage should be present ONLY while actively cranking.
If the signal is not present
during starting, the engine will be difficult to start.
If the signal is present while running, the fixed timing and long
injector duration will cause very poor performance: running rich and
with incorrect timing.
The signal comes from the red/black wire in the large electrical
junction box. If that is not available, a new wire can be run from
the starter solenoid, which is hot only while cranking.
An EJ22 service bulletin issued by Subaru noted that a code 13 can be
thrown from a simple engine stall "for any reason" (some users have
reported both codes 11 and 13
can result from stalls). It was recommended
to clear the code 13 to see if it returns without an engine stall, before
replacing the angle sensor.
The operation of the cam and crank angle sensors, and the relationship
between the two, can be seen with an oscilloscope. This can be very
useful in debugging problems with the angle sensors and the timing belt,
as shown
here.
A code 22 will cause a significant loss of engine power. When the knock
code is thrown, the ECU retards timing into a safe zone in order to
prevent any knocking from happening while the sensor is down. This will
causing the engine to bog.
With the IAC code 24 thrown, the ECU will use what is called 'fuel cut' to
reduce excessive engine RPM. It turns off 1 or 2 injectors to maintain
idle speed, for certain values of RPM, vehicle speed, and throttle position.
This can result in a rough idle, and poor idle exhaust emissions values.
Most often with the IAC code, the IAC valve just needs to be cleaned. These
are the best resources I have found for IAC cleaning:
On some early EJ22s, there is an idle adjustment/air bypass screw on the
intake body, which is used to adjust the idle air only to the point that
the IAC duty cycle remains in range.
The ECU does not depend much on the VSS signal. Having an
active code 33 will not degrade the performance of the engine much, if
at all. Some people have reported engine stalls while coasting at
speed with the clutch in with active code 33, for some there are no
ill effects at all.
Subaru put a basic adaptive learning system in the ECU, to reduce
feedback control error in the air/fuel ratio feedback system.
The system constantly corrects the a/f ratio for the exhaust gas mixture as
read by the O2 sensor.
The ECU looks up the basic amount of fuel required in its internal
static memory maps, given the amount of air being consumed and the load
on the engine. It then adds to this
basic amount several correction factors for the current state of
the O2 sensor, engine temperature, etc., with the goal of keeping
the exhaust gasses as close to perfect as possible.
The adaptive learning system comes into play when the
ECU stores those corrections required under various operating
conditions, and uses the stored corrections where possible in addition
to the live calculations. This smooths
the feedback response ("eliminating transients" according to the Subaru
repair manual) and compensates for age-related degradation
of sensors.
From the Subaru EJ22 Repair Manual
(M505): the "air-fuel ratio learning control system constantly memorizes the
amount of correction required...so that the correction affected by
feedback control is minimized".
The learning function takes 3 full engine cycles up to operating RPM
(2000 rpm or greater) and back after ECU reset to be operational
(from The 'How To' of Rotorcraft Fuel Injection by Vann Hand,
Homebuilt Rotorcraft December 1995.)
When the memorized correction factors exceed a factory-determined
range, the code is thrown. Because the learning system relies upon
almost all the ECU inputs: the AFM, water temp sensor, TPS, O2 sensor,
and injectors, elimination of the code requires checking all of the
above. However, the engine will usually perform very well with the
code 41 active; it falls back to simple feedback control with
the sensors, which is what many ECUs rely upon anyway.
I haven't seen any quantified reports or information on the gains in
performance or efficiency of the learning control.
(Note: the Subaru Technicians Booklet, Fuel Injection and
Engine Management, Module 406, p.17, section "Learning Control",
says this about the learning function...
but seems to be only describing the simple map for determining basic
injector duration:
"The amount of air monitored by the mass air flow
meter or QA compared to the engine rpm is
memorized by the ECM. This results in a
representation of engine load.
Engine load is used to update Basic duration.")
For engine-swapped vehicles which do not have the original neutral (MT)
or inhibitor (AT) switch, this code can be eliminated by a switch that
is occasionally exercised. The logic that the ECU uses to when to
throw the code isn't readily apparent; it seems to just need to
be "occasionally" toggled.
One possible way to mock up this signal is to use a microswitch
placed on the clutch pedal. Even
though this will not give the correct signal when the transmission is
in gear but the clutch is depressed, the ECU does not seem to care.
Here's an example of a microswitch mounted on the clutch pedal
in a VW Vanagon:
Another fairly correct way is using a
hall sensor and a magnet placed on the transmission linkage,
so the signal is present when the transmission actually is in or
passes through neutral.
For engine-swapped vehicles which do not have the original parking
switch, this code can be eliminated by using a switch that
is occasionally exercised. The logic that the ECU uses to when to
throw the code isn't readily apparent; it seems to just need to
be "occasionally" toggled.
One good way of simulating this signal is using a microswitch placed
on the parking brake, or creating a diode-protected circuit that taps
into the existing parking brake warning light circuit.
|
[]
[]
[]
|
|