BACKGROUND OF THE INVENTION
1. Field of the Invention
[0001] The present invention relates to a method of controlling an air-fuel ratio of an
engine.
2. Description of the Related Art
[0002] Known in the art is an internal combustion engine which finds a first angular velocity
of the crankshaft during the time required for the crankshaft to rotate from 30° to
60° after top dead center of the compression stroke from this period, finds a second
angular velocity of the crankshaft during the time required for the crankshaft to
rotate from 90° to 120° after top dead center of the compression stroke from this
period, finds the torque generated by a cylinder from the square of the first angular
velocity and the square of the second angular velocity, and calculates the amount
of fluctuation of the torque from the amount of fluctuation of the generated torque
(see U.S. Patent No. 4,691,286).
[0003] That is, when combustion is performed in a cylinder, the combustion pressure causes
the angular velocity of the crankshaft to rise from a first angular velocity ωa to
a second annular velocity ωb. At this time, if the moment of inertia of rotation of
the engine is I, the combustion pressure causes the kinetic energy to rise from (½)·Iωa
2 to (½)·Iωb
2. Roughly speaking, the amount of rise of the kinetic energy (½)·I·(ωb
2 - ωa
2) causes a torque to be generated, so the generated torque becomes proportional to
(ωb
2 - ωa
2). Therefore, the generated torque is found from the difference between the square
of the first angular velocity ωa and the square of the second angular velocity ωb
and, therefore, in the above-mentioned internal combustion engine, the amount of fluctuation
of the torque is calculated from the thus found generated torque.
[0004] However, if it is possible to calculate the amount of fluctuation of the torque in
this way, it is also possible to control the air-fuel ratio to the lean limit based
on this amount of torque fluctuation. That is, when the air-fuel ratio is at the rich
side of the lean limit, the amount of torque fluctuation is small, while when the
air-fuel ratio is at the lean side of the lean limit, the amount of torque fluctuation
becomes large, so by correcting the air-fuel ratio based on the amount of torque fluctuation
so that the amount of torque fluctuation becomes within a predetermined range, it
is possible to control the air-fuel ratio to the lean limit. When the engine speed
becomes high, however, the time required for the crankshaft to rotate by, for example,
30° crank angle becomes short. This causes the detected time to include an error of
detection and, therefore, the amount of torque fluctuation calculated based on the
first angular velocity ωa and the second angular velocity ωb may include an error.
Such an error becomes larger as the engine speed becomes higher and, therefore, a
ratio of the error to the amount of torque fluctuation calculated based on the angular
velocities becomes higher as the engine speed becomes higher. However, if the ratio
of the error becomes higher, the calculated amount of torque fluctuation does not
fall sufficiently even if the air-fuel ratio is made richer to reduce the combustion
pressure, and does not increase sufficiently even if the air-fuel ratio is made leaner
to increase the combustion pressure. Namely, when the engine speed becomes higher,
the rate of change in the calculated amount of torque fluctuation to the change in
the air-fuel ratio becomes lower and, therefore, the controllability of the air-fuel
ratio for controlling the air-fuel ratio to the lean limit will become lower.
SUMMARY OF THE INVENTION
[0005] An object of the present invention is to provide method of control of an air-fuel
ratio capable of ensuring the controllability of the air-fuel ratio regardless of
the engine speed.
[0006] According to the present invention, there is provided a method of control of an air-fuel
ratio in an engine, comprising the steps of setting a first crank angle range in a
crank angle region from the end of a compression stroke to the beginning of an expansion
stroke, detecting a first angular velocity of the crankshaft in the first crank angle
range, setting a second crank angle range in a crank angle region in the middle of
the expansion stroke a predetermined crank angle away from the first crank angle range,
detecting a second angular velocity of the crankshaft in the second crank angle range,
finding the basic output fluctuation of the cylinders based on the first angular velocity
and the second angular velocity, finding a set value based on the engine speed, finding
the output fluctuation of the cylinders by correcting the basic output fluctuation
of the cylinders based on the set value, and correcting the air-fuel ratio based on
the output fluctuation.
BRIEF DESCRIPTION OF THE DRAWINGS
[0007] The present invention may be more fully understood from the description of the preferred
embodiments of the invention set forth below together with the accompanying drawings,
in which:
Fig. 1 is an overall view of an internal combustion engine;
Fig. 2 is a view of a map of the basic fuel injection time;
Fig. 3 is a view of the amount of generation of NOx and torque fluctuation;
Fig. 4 is a view of a map of a lean correction coefficient;
Fig. 5 is a view of a map of a lean limit feedback correction coefficient;
Figs. 6A and 6B are time charts of the changes in the elapsed times Ta(i) and Tb(i)
of 30° crank angle;
Fig. 7 is a time chart of the changes in the elapsed time Ta(i) of 30° crank angle;
Fig. 8 is a time chart of the changes in the elapsed times Ta(i) and Tb(i) of 30°
crank angle;
Fig. 9 is a time chart of the changes in the elapsed times Ta(i) and Tb(i) of 30°
crank angle;
Fig. 10 is a time chart of the changes in the elapsed time Ta(i) of 30° crank angle;
Fig. 11 is a view of the relationship between differences of elapsed times DTa(i)
and Kb(i);
Figs. 12A and 12B are views of the change in the amount of torque fluctuation to the
change in the air-fuel ratio;
Fig. 13 is a view of a map of the set value KDLN;
Fig. 14 is a view of the relationship between the true torque fluctuation amount and
the calculated torque fluctuation amount;
Fig. 15 is a time chart of the changes in the elapsed time Ta(i) during a deceleration
operation;
Fig. 16 is a time chart of the changes of the difference in the elapsed times DTa(i);
Fig. 17 is a flow chart of the interruption routine;
Figs. 18 and 19 are flow charts for calculating the difference of elapsed times DTa(i)
and elapsed time Tb(i);
Fig. 20 is a flow chart for calculating KTa(i);
Fig. 21 is a flow chart for calculating KTb(i);
Figs. 22 to 24 are flow charts for checking permission for calculation of the amount
of torque fluctuation;
Fig. 25 is a time chart of the changes in the difference of elapsed times DTa(i) and
the changes in the flags XMXREC and XMNREC;
Fig. 26 is a flow chart for calculating the amount of torque fluctuation;
Fig. 27 is a flow chart of the processing of the counter CDLNIX;
Fig. 28 is a view of the timings for calculation of various values;
Figs. 29A and 29B are views of a target torque fluctuation value;
Figs. 30A and 30B are views of the fluctuation amount judgement values DH(n) and DL(n)
and the levels of torque fluctuation LVLH(n) and LVLL(n);
Fig. 31 is a flow chart of a main routine;
Figs. 32 and 33 are flow charts of the calculation of the torque fluctuation value;
Fig. 34 is a flow chart of the calculation of a lean limit feedback correction coefficient;
and
Fig. 35 is a flow chart of the calculation of the fuel injection time.
DESCRIPTION OF THE PREFERRED EMBODIMENTS
[0008] Referring to Fig. 1, 1 shows an engine body provided with four cylinders consisting
of the No. 1 cylinder #1, No. 2 cylinder #2, No. 3 cylinder #3, and No. 4 cylinder
#4. The cylinders #1, #2, #3, and #4 are respectively connected through the corresponding
intake pipes 2 to a surge tank 3. In the intake pipes 2 are provided fuel injectors
4 for injecting fuel toward the corresponding intake ports. The surge tank 3 is connected
through an intake duct 5 and air flow meter 6 to an air cleaner 7. In the intake duct
5, a throttle valve 8 is arranged. On the other hand, the cylinders #1, #2, #3, and
#4 are connected through an intake manifold 9 and an exhaust pipe 10 to a casing 12
accommodating an NOx absorbent 11. This NOx absorbent 11 has the function of absorbing
the NOx included in the exhaust gas when the air-fuel ratio is lean and discharging
and reducing the absorbed NOx when the air-fuel ratio is the stoichiometric air-fuel
ratio or rich.
[0009] The electronic control unit 20 is comprised of a digital computer and is provided
with a ROM (read only memory) 22, a RAM (random access memory) 23, a CPU (microprocessor)
24, a backup RAM 25 (B-RAM) connected to a constant power supply, an input port 26,
and an output port 27 connected with each other by a bidirectional bus 21. The output
shaft 13 of the engine has attached to it a rotor 14 with outer teeth. A crank angle
sensor 15 comprising an electromagnetic pickup is arranged facing the outer teeth
of the rotor 14. In the embodiment shown in Fig. 1, the rotor 14 has an outer tooth
formed on its periphery at every 30° crank angle and, for example, has a part of the
outer teeth removed for detecting the top dead center of the compression stroke of
the No. 1 cylinder. Therefore, except for the portion where the outer teeth are removed,
that is, the non-tooth portion, the crank angle sensor 15 generates an output pulse
every time the output shaft 13 turns by 30° crank angle. This output pulse is input
to the input port 26.
[0010] The air flow meter 6 generates an output voltage proportional to the amount of intake
air. This output voltage is input through a corresponding A/D converter 28 to the
input port 26. Further, the throttle valve 8 has attached to it an idle switch 16
for detecting when the throttle valve 8 is at the idling opening position. The output
signal of this idle switch 16 is input to the input port 26. Further, the intake manifold
9 has disposed in it an air-fuel ratio sensor (O
2 sensor) 17 for detecting the air-fuel ratio. The output signal of this air-fuel ratio
sensor 17 is input through the corresponding AD converter 28 to the input port 26.
On the other hand, the output port 27 is connected through the corresponding drive
circuit 29 to the fuel injectors 4.
[0011] In the internal combustion engine shown in Fig. 1, the fuel injection time TAU is
calculated based on the following equation:

[0012] Here, TP shows a basic fuel injection time, FLEAN a lean correction coefficient,
FLLFB a lean limit feedback correction coefficient, FAF a stoichiometric air-fuel
ratio feedback correction coefficient, and TAUV an invalid injection time.
[0013] The basic fuel injection time TP shows the injection time required for making the
air-fuel ratio the stoichiometric air-fuel ratio. This basic fuel injection time TP
is found by experiment. This basic fuel injection time TP is stored in the ROM 22
in advance in the form of a map shown in Fig. 2 as a function of the engine load Q/N
(amount of intake air Q/engine speed N) and the engine speed N.
[0014] The lean correction coefficient FLEAN is a correction coefficient for making the
air-fuel ratio a lean air-fuel ratio. This lean correction coefficient FLEAN is stored
in advance in the ROM 22 in the form of the map shown in Fig. 4 as a function of the
engine load Q/N and the engine speed N.
[0015] The lean limit feedback correction coefficient FLLFB is a correction coefficient
for maintaining the air-fuel ratio at the lean limit. In this embodiment according
to the present invention, the learning region for the lean air-fuel ratio feedback
control for the amount of intake air Q and the engine speed N is divided into nine
regions as shown in Fig. 5 for example. Lean limit feedback correction coefficients
FLLEB
11 to FLLFB
33 are set for the learning regions.
[0016] The stoichiometric air-fuel ratio feedback correction coefficient FAF is a coefficient
for maintaining the air-fuel ratio at the stoichiometric air-fuel ratio. The stoichiometric
air-fuel ratio feedback correction coefficient FAF is controlled based on the output
signal of the air-fuel ratio sensor 17 so as to maintain the air-fuel ratio at the
stoichiometric air-fuel ratio. At this time, the stoichiometric air-fuel ratio feedback
correction coefficient FAF varies substantially about 1.0.
[0017] The lean correction coefficient FLEAN is set in accordance with the operating state
of the engine for the operating region enclosed by the broken lines in Fig. 4. In
this operating region, the air-fuel ratio is maintained at the lean air-fuel ratio.
As opposed to this, in the operating region outside the region enclosed by the broken
line in Fig. 4, the air-fuel ratio is maintained at the stoichiometric air-fuel ratio.
When the air-fuel ratio is to be maintained at the stoichiometric air-fuel ratio,
the lean correction coefficient FLEAN and the lean limit feedback correction coefficient
FLLFB are fixed at 1.0 and the stoichiometric air-fuel ratio feedback correction coefficient
FAF is controlled based on the output signal of the air-fuel ratio sensor 17.
[0018] On the other hand, when the air-fuel ratio is to be maintained at the lean air-fuel
ratio, the stoichiometric air-fuel ratio feedback correction coefficient FAF is fixed
at 1.0, that is, the feedback control based on the output signal of the air-fuel ratio
sensor 17 is stopped, and the lean correction coefficient FLEAN and the lean limit
feedback correction coefficient FLLFB are used to control the air-fuel ratio to the
lean air-fuel ratio.
[0019] Next, the lean limit feedback control will be explained referring to Fig. 3. Figure
3 shows the relationship between the amount of torque fluctuation of the engine output
and the amount of generation of NOx and the air-fuel ratio. The leaner the air-fuel
ratio, the smaller the fuel consumption rate. Further, the leaner the air-fuel ratio,
the smaller the amount of generation of NOx. Therefore, viewed from these points,
the air-fuel ratio should desirably be made as lean as possible. Note, however, that
when the air-fuel ratio becomes leaner than a certain extent, the combustion becomes
unstable and, as a result, as shown in Fig. 3, the amount of torque fluctuation becomes
large. Therefore, in this embodiment according to the present invention, as shown
in Fig. 3, the air-fuel ratio is maintained in the air-fuel ratio control region where
the torque fluctuation starts to increase.
[0020] That is, in more detail, the lean correction coefficient FLEAN is determined so that
the air-fuel ratio is in the middle of the air-fuel ratio control region shown in
Fig. 3 when the lean limit feedback correction coefficient FLLFB is made 1.0. On the
other hand, the lean limit feedback correction coefficient FLLFB is controlled to
within the torque fluctuation control region shown in Fig. 3 in accordance with the
amount of torque fluctuation. When the amount of torque fluctuation becomes larger,
the lean limit feedback correction coefficient FLLFB is increased, that is, the air-fuel
ratio is made smaller, while when the amount of torque fluctuation becomes smaller,
the lean limit feedback correction coefficient FLLFB is reduced, that is, the air-fuel
ratio is made larger. In this way, the air-fuel ratio is controlled to within the
air-fuel ratio control region shown in Fig. 3.
[0021] Note that the lean limit feedback correction coefficient FLLFB is set to cover the
engine operating region where the lean correction coefficient FLEAN is set.
[0022] If the amount of torque fluctuation is controlled to within the torque fluctuation
control region shown in Fig. 3, an excellent drivability of the vehicle may be ensured
while the fuel consumption rate and the amount of generation of NOx can be greatly
reduced. However, since the amount of torque fluctuation is controlled to be within
the torque fluctuation control region in this way, the amount of torque fluctuation
must be detected.
[0023] Various methods have been proposed in the past for calculating the amount of torque
fluctuation. To mention typical ones, there are the method of providing a combustion
pressure sensor in the combustion chamber and calculating the amount of torque fluctuation
based on the output signal of this combustion pressure sensor or the method of, as
explained at the beginning, calculating the amount of torque fluctuation from the
difference between the square of the first angular velocity ωa and the square of the
second angular velocity ωb.
[0024] If a combustion pressure sensor is used, there is the advantage that the torque generated
in the cylinder provided with the combustion pressure sensor can be reliably detected,
but there is conversely the disadvantage that the combustion pressure sensor is required.
As opposed to this, the angular velocities ωa and ωb can be calculated from the output
signal of the crank angle sensor provided in the internal combustion engine in the
past, so when calculating the output torque based on the angular velocities ωa and
ωb, there is the advantage that there is no need to mount a new sensor.
[0025] However, in this case, if the engine drive system or crank shaft itself experiences
torsional vibration, there is the problem that the generated torque can no longer
be accurately detected. It is clear, however, that if this problem could be solved,
then the method of calculation of the torque based on the angular velocity, which
does not require a new sensor, would be preferable. Therefore, the embodiment present
invention can calculate the generated torque based on the angular velocities and can
accurately detect the amount of torque fluctuation even if the engine drive system
or crankshaft itself experiences torsional vibration.
[0026] While it is possible to find the output fluctuation and the torque fluctuation of
the engine so long as the angular velocity of the crankshaft is used as the basis,
when the engine drive system or crankshaft itself suffers from torsional vibration
or when the vehicle drives over a bumpy road or when there is variation in the outer
teeth of the rotor, it is not possible to accurately calculate the output fluctuation
and torque fluctuation of the engine. Therefore, in this embodiment of the present
invention, use is made of the new method of calculation of the output fluctuation
and torque fluctuation so as to enable accurate detection of the output fluctuation
and torque fluctuation of the engine even when the engine drive system or crankshaft
itself suffers from torsional vibration or the vehicle drives over a bumpy road or
there is variation in the outer teeth of the rotor.
[0027] Next, the method for calculating the output fluctuation and torque fluctuation of
the engine will be explained.
[0028] First, the method of calculating the drive force generated by each cylinder and the
torque generated in each cylinder will be explained while referring to Figs. 6A and
6B showing the steady operating state where the engine drive system does not experience
torsional vibration. As explained above, the crank angle sensor 15 produces an output
pulse each time the crankshaft rotates by 30° crank angle. Further, the crank angle
sensor 15 is arranged to generate an output pulse at the top dead center TDC of the
compression stroke of the cylinders #1, #2, #3, and #4. Therefore, the crank angle
sensor 15 produces an output pulse for each 30° crank angle from the top dead center
TDC of the compression stroke of the cylinders #1, #2, #3, and #4. Note that, the
ignition sequence of the internal combustion engine used in the present invention
is 1-3-4-2.
[0029] In Figs 6A and 6B, the vertical axis T30 shows the elapsed time of 30° crank angle
from when the crank angle sensor 15 produces an output pulse to when it produces the
next output pulse. Further, Ta(i) shows the elapsed time from the top dead center
of the compression stroke (hereinafter referred to as TDC) to 30° after top dead center
of the compression stroke (hereinafter referred to as ATDC) of the No. i cylinder,
while Tb(i) shows the elapsed time from ATDC 60° to ATDC 90° of the No. i cylinder.
Therefore, for example, Ta(1) shows the elapsed time from TDC to ATDC 30° of the No.
1 cylinder, while Tb(1) shows the elapsed time from ATDC 60° to ATDC 90° of the No.
1 cylinder. On the other hand, if the 30° crank angle is divided by the elapsed time
T30, the result of the division shows the angular velocity ω. In this embodiment according
to the present invention, 30° crank angle/Ta(i) is referred to as the first angular
velocity ωa in the No. i cylinder, while 30° crank angle/Tb(i) is referred to as the
second angular velocity ωb in the No. i cylinder. Therefore, 30° crank angle/Ta(1)
shows the first angular velocity ωa of the No. 1 cylinder, while 30° crank angle/Tb(1)
shows the second angular velocity ωb of the No. 1 cylinder.
[0030] Taking note of the No. 1 cylinder of Figs. 6A and 6B, when the combustion is started
and the combustion pressure rises, the elapsed time falls from Ta(1) to Tb(1) then
rises from Tb(1). In other words, the angular velocity ω of the crankshaft rises from
the first angular velocity ωa to the second angular velocity ωb, then falls again
from the second angular velocity ωb. That is, the combustion pressure causes the angular
velocity ω of the crankshaft to increase from the first angular velocity ωa to the
second angular velocity ωb. Figure 6A shows the case where the combustion pressure
is relatively high, while Fig. 6B shows the case where the combustion pressure is
relatively low. As shown in Figs. 6A and 6B, when the combustion pressure is high,
the amount of reduction of the elapsed time (Ta(i) - Tb(i)) becomes larger compared
with when the combustion pressure is low, therefore the amount of increase (ωb - ωa)
of the angular velocity ω becomes larger. When the combustion pressure becomes higher,
the drive force generated by the cylinder becomes larger, therefore if the amount
of increase (ωb - ωa) of the angular velocity ω becomes larger, the drive force generated
by the cylinder becomes larger. Therefore, it is possible to calculate the drive force
generated by a cylinder from the difference (ωb - ωa) between the first angular velocity
ωa and the second angular velocity ωb.
[0031] On the other hand, if the moment of inertia of rotation of the engine is I, the combustion
pressure causes the kinetic energy to increase from (1/2)Iωa
2 to (1/2)Iω
2. The amount of increase of the kinetic energy (1/2)·I·(ωb2 - ωa
2) expresses the torque generated by that cylinder, therefore it becomes possible to
calculate the torque generated by a cylinder from the difference (ωb
2 - ωa
2) between the square of the first angular velocity ωa and the square of the second
angular velocity ωb.
[0032] By detecting the first angular velocity ωa and the second angular velocity ωb in
this way, it becomes possible to calculate the drive force generated by the corresponding
cylinder and the torque generated by the corresponding cylinder from the detected
values. Note that the change in the elapsed time T30 shown in Figs. 6A and 6B differs
somewhat depending on the engine, therefore the crank angle range for detecting the
first angular velocity ωa and the crank angle range for detecting the second angular
velocity ωb are set in accordance with the engine so that (ωb - ωa) best expresses
the drive force generated by the engine or so that (ωb
2 - ωa
2) best expresses the torque generated by the engine. Therefore, depending on the engine,
the crank angle range for detecting the first angular velocity ωa may be from before
the top dead center of the compression stroke BTDC 30° to TDC, while the crank angle
range for detecting the second angular velocity ωb may be from ATDC 90° to ATDC 120°.
[0033] Therefore, explaining the method of detecting the angular velocities ωa and ωb in
general terms, the first crank angle range is set in the crank angle region from the
end of the compression stroke to the beginning of the expansion stroke, the second
crank angle range is set in a crank angle region in the middle of the expansion stroke
a predetermined crank angle away from the first crank angle range, the first angular
velocity ωa of the crankshaft in the first crank angle range is detected, and the
second angular velocity of the crankshaft ωb in the second crank angle range is detected.
[0034] As explained above, by detecting the angular velocities ωa and ωb, it becomes possible
to calculate the drive force and the torque generated by a corresponding cylinder
based on the detected values. The engine drive system, however, experiences torsional
vibration occurring at the natural frequency of the drive system due to the successive
explosive actions of the cylinders. If the engine drive system experiences such torsional
vibration, it no longer becomes possible to accurately detect the drive force and
the torque generated by a cylinder based on the angular velocities ωa and ωb. Next,
this will be explained with reference to Fig. 7 and Fig. 8.
[0035] Figure 7 shows the changes in the elapsed time Ta(i) successively calculated for
each cylinder when the engine drive system experiences torsional vibration. When the
engine drive system experiences torsional vibration, this torsional vibration causes
the angular velocity of a crankshaft to be cyclically increased and decreased, so
the elapsed time Ta(i) increases and decreases cyclically as shown in Fig. 7.
[0036] On the other hand, Fig. 8 shows the portion where the elapsed time Ta(i) is reduced
in an enlarged manner. As shown in Fig. 8, the elapsed time Ta(i) falls by exactly
the time h
0 between Ta(1) and Ta(3). This reduction of the time h
0 is believed to be due to an increase in the amount of torsion due to the torsional
vibration. In this case, the amount of decrease of the elapsed time due to the torsional
vibration between Ta(1) and Ta(3) is believed to increase substantially linearly along
with the elapse of time, therefore this amount of decrease of the elapsed time due
to the torsional vibration is shown by the difference between the broken line connecting
Ta(1) and Ta(3) and the horizontal line passing through Ta(1). Therefore, between
Ta(1) and Tb(1), the torsional vibration causes the elapsed time to fall by exactly
h.
[0037] In this way, when torsional vibration occurs in the engine drive system, Tb(1) is
lower in elapsed time than Ta(1), but this lower elapsed time includes the amount
of decrease f of the elapsed time due to the combustion pressure and the amount of
decrease h of the elapsed time due to the torsional vibration. Therefore, to find
just the elapsed time Tb(1) decreased due to the combustion pressure, it becomes necessary
to add h to Tb(1). That is, even if finding the drive force or torque generated by
each cylinder based on the detected elapsed time Ta(i) and Tb(i), it is not possible
to find the true drive output or torque and therefore not possible to find the true
output fluctuation or torque fluctuation of the engine.
[0038] Further, in a multi-cylinder internal combustion engine, in addition to the torsional
vibration of the engine drive system, there is torsional vibration of the crankshaft
itself. When this torsional vibration of the crankshaft itself occurs, it is no longer
possible to find the true output fluctuation or torque fluctuation of the engine.
Next, this will be explained with reference to Fig. 9.
[0039] In a multi-cylinder internal combustion engine, for example, a four-cylinder internal
combustion engine as shown in Fig. 1, a large torsional vibration occurs in the No.
1 cylinder and the No. 2 cylinder. That is, in a cylinder where almost no torsional
vibration of the crankshaft itself occurs, for example, the No. 3 cylinder #3, as
shown in Fig. 9, the elapsed time gradually falls from Ta(3) to Tb(3), but in the
No. 1 cylinder #1, the elapsed time does not gradually fall from Ta(1) to Tb(1) and
the torsional vibration of the crankshaft itself causes the elapsed time Tb(1) to
become longer. As a result, it is not possible to find the true drive force or torque
for the No. 1 cylinder #1 even if finding the drive force or torque generated by the
No. 1 cylinder #1 based on the detected elapsed times Ta(1) and Tb(1), therefore it
is not possible to find the true output fluctuation or torque fluctuation of the engine.
[0040] Therefore, in the present invention, use is made of a new method of calculation which
enables calculation of the true output fluctuation and torque fluctuation of the engine
even if torsional vibration of the engine drive system occurs and even if torsional
vibration of the crankshaft occurs. Next, this new method of calculation will be explained
with reference to Fig. 10.
[0041] In Fig. 10, Ta(1)
j-1 and Tb(1)
j-1 show the elapsed times at the time of the previous combustion of the No. 1 cylinder
#1. Ta(1)
j and Tb(1)
j show the elapsed times at the time of the next combustion of the No. 1 cylinder #1.
On the other hand, Ta(3)
j-1 shows the elapsed time at the time of the previous combustion of the No. 3 cylinder
#3 performed after the previous combustion of the No. 1 cylinder #1, while Ta(3)
j shows the elapsed time at the time of the next combustion of the No. 3 cylinder #3.
[0042] First, the difference

between Ta(1)
j and Ta(1)
j-1 and the difference

between Ta(3)
j and Tb(3)
j-1 are found. Next, the assumed elapsed time from ATDC 60° to ATDC 90° at the time of
the next combustion of the No. 1 cylinder #1, when assuming that the output torque
at the time of the previous combustion of the No. 1 cylinder #1 and the output torque
at the time of the next combustion are identical, is made Tb'(1) and the difference

between Tb'(1)
j and Tb(1)
j-1 is found. The differences DTa(1), Kb(1), and DTa(3) become as shown in Fig. 11 when
rewritten as heights on a straight line.
[0043] The difference of elapsed times falls by exactly the time I
0 between the differences of elapsed times DTa(1) and DTa(3) as shown in Fig. 11. Even
if torsional vibration occurs in the crankshaft itself, the effect of the torsional
vibration does not appear in the difference of the elapsed times and therefore the
decrease of the time I
0 in the difference of elapsed times is due to the torsional vibration of the drive
system. In this case, the amount of decrease of the difference of elapsed times due
to the torsional vibration of the engine drive system may be considered to increase
substantially linearly along with the elapse of time between DTa(1) and DTa(3). Therefore,
if it is assumed that the output torque at the time of the previous combustion of
the No. 1 cylinder #1 and the output torque at the time of the next combustion are
identical, the difference of elapsed times can be considered to decrease by exactly
I due to the torsional vibration of the engine drive system between the differences
of elapsed times DTa(1) and Kb(1). Therefore, as will be understood from Fig. 11,
the assumed difference of elapsed times Kb(1) when assuming that the output torque
at the time of previous combustion of the No. 1 cylinder #1 and the output torque
at the time of the next combustion are identical is expressed as an interpolated value
from DTa(1) and DTa(3) and becomes as shown in the following equation:

[0044] The assumed elapsed time Tb'(1)
j of the No. 1 cylinder #1, when assuming that the output torque at the time of the
previous combustion of the No. 1 cylinder #1 and the output torque at the time of
the next combustion are identical, is expressed as follows:

[0045] Therefore, the assumed output torque DNS(1) at the time of the next combustion of
the No. 1 cylinder #1, when assuming that the output torque at the time of the previous
combustion of the No. 1 cylinder #1 and the output torque at the time of the next
combustion are identical, is expressed as follows:

[0046] On the other hand, when calculating the actual output torque using the actual elapsed
time Tb(1)
j from ATDC 60° to ATDC 90° at the time of the next combustion of the No. 1 cylinder
#1, the output torque DN(1) is expressed by the following equation:

[0047] In this case, the difference between the assumed output torque DNS(1) of the No.
1 cylinder #1 and the actual output torque DN(1) shows the amount of torque fluctuation
of the No. 1 cylinder #1. Therefore, the amount of torque fluctuation DLN(1) of the
No. 1 cylinder #1 is shown by the following equation:

[0048] Expressed generally, the amount of torque fluctuation DLN(i) of the No. i cylinder
can be shown by the following equation:

[0049] That is, the amount of torque fluctuation of the No. i cylinder can be found from
the difference between the square of the assumed second angular velocity of the No.
i cylinder and the square of the actual second angular velocity. By calculating the
amount of torque fluctuation by this method, even if torsional vibration occurs in
the engine drive system, it is possible to accurately detect the amount of torque
fluctuation of the cylinders even if torsional vibration occurs in the crankshaft
itself.
[0050] However, it is not possible to calculate the amount of torque fluctuation of the
cylinders accurately when the engine speed becomes high, as explained at the beginning.
That is, when the engine speed becomes high, the elapsed time Ta(i), Tb(i) becomes
short and, therefore, it becomes difficult to detect the elapsed time Ta(i), Tb(i)
accurately and the elapsed time Ta(i), Tb(i) includes the error. As a result, the
first angular velocity ωa and the second angular velocity ωb also include the error
and, therefore, the amount of torque fluctuation DLN(i) calculated based on the angular
velocities ωa and ωb includes the error. Such an error becomes larger as the engine
speed becomes higher.
[0051] On the other hand, when the engine speed becomes higher, the higher components of
the torsional vibration of the engine drive system and the torsional vibration of
the crankshaft itself become larger. The higher component affects the difference of
elapsed time DTa(1), DTa(3). That is, the calculated amount of torque fluctuation
will deviate from the true amount of torque fluctuation, even if the assumed second
angular velocity is adapted. The deviation in the calculated amount of torque fluctuation
becomes larger as the engine speed becomes higher.
[0052] Namely, a ratio of the error to the calculated amount of torque fluctuation becomes
higher as the engine speed becomes higher. As a result, as shown in Fig. 12B, the
rate of change in the calculated amount of torque fluctuation to the change in the
air-fuel ratio becomes lower. However, if the rate of change in the amount of torque
fluctuation becomes lower around the torque fluctuation control area (see Fig. 3),
the controllability of the air-fuel ratio for maintaining the amount of torque fluctuation
within the torque fluctuation control area becomes lower.
[0053] On the other hand, the amounts of the error and the deviation explained above depend
on the engine speed, that is, they become larger as the engine speed becomes higher,
but the amounts of the error and the deviation do not depend on the air-fuel ratio
and the cylinder. Therefore, by finding a set value KDLN representing the error and
the deviation in advance based on the engine speed, and subtracting the set value
KDLN from DLN(i) explained above, the result of the subtraction accurately represents
the amount of torque fluctuation. Therefore, in the embodiment of the present invention,
the set value KDLN is found by experiment in advance, and is stored in the ROM 22,
in advance, in the form of a map shown in Fig. 13, and then the amount of torque fluctuation
DLN(i) of the No. i cylinder is calculated by subtracting the set value KDLN from
the difference between the assumed output torque DNS (i) of the No. i cylinder and
the actual output torque DN(i).
[0054] Namely, if the difference (DNS(i) - DN(i)) between the assumed output torque DNS(i)
of No. i cylinder and the actual output torque DN(i) is referred to as a basic amount
of torque fluctuation DLNB(i) of the No. i cylinder, the amount of torque fluctuation
DLN(i) of the No. i cylinder is calculated based on the following equation:

[0055] By calculating the amount of torque fluctuation in this way, the rate of change in
the amount of torque fluctuation to the change in the air-fuel ratio can be kept larger
as shown in Fig. 12A and, therefore, the controllability of the air-fuel ratio for
maintaining the amount of torque fluctuation within the torque fluctuation control
area can be kept higher.
[0056] As can be seen from Fig. 13, the set value KDLN becomes larger when the average of
the engine speed N
AVE becomes larger. Note, however, that the amount of torque fluctuation DLN(i) varies
with the engine speed for the identical true amounts of torque fluctuation, even when
the amount of torque fluctuation DLN(i) is calculated in the above-mentioned manner.
That is, as shown in Fig. 14, DLN(i) becomes larger as the average of the engine speed
N
AVE becomes higher when the true amount of torque fluctuation is small, and DLN(i) becomes
smaller as the average of the engine speed N
AVE becomes higher when the true amount of torque fluctuation is large. However, the
variation or the constancy can be determined based on the set value KDLN. Therefore,
in the embodiment of the present invention, the set value KDLN is set so that the
amount of torque fluctuation DLN(i) is almost constant regardless of the average of
the engine speed N
AVE when the true amount of torque fluctuation is at the approximately middle of the
torque fluctuation control area (Fig. 3).
[0057] On the other hand, when calculating the amount of torque fluctuation by this method,
it is not possible to accurately detect the amount of torque fluctuation of the cylinders
if there is a variation in the spaces of the outer teeth formed along the outer circumference
of the rotor 14 (Fig. 1). Therefore, in this embodiment of the present invention,
even if there is a variation in the spaces of the outer teeth of the rotor 14, it
is made possible to correct the elapsed times Ta(i), Tb(i) detected so as to enable
accurate detection of the amount of torque fluctuation of the cylinders. Next, an
explanation will be made of the method of correction of the elapsed time Ta(i) with
reference to Fig. 15.
[0058] In this embodiment of the present invention, the elapsed time Ta(i) is calculated
based on the following equation:

[0059] Here, KTa(i) shows the correction coefficient for the No. i cylinder. The correction
coefficient KTa(i) is calculated at the time when the fuel supply is stopped during
a deceleration operation where torsional vibration of the engine drive system does
not occur and torsional vibration of the crankshaft does not occur either.
[0060] Figure 15 shows the change of the elapsed time Ta(i) at the time of a deceleration
operation. At the time of a deceleration operation, the rotational speed of the crankshaft
gradually falls, so the elapsed time Ta(i) gradually increases as shown by Ta(1)
j-1, Ta(3)
j-1, Ta(4)
j-1, Ta(2)
j-1, Ta(1)
j, Ta(3)
j, Ta(4)
j, and Ta(2)
j. At this time, if the spaces between the outer teeth of the rotor 14 are the same,
the elapsed time Ta(i) can be considered to change along the solid line in Fig. 15.
When the detected elapsed time Ta(i) deviates from the solid line of Fig. 15, it is
considered that the spaces of the outer teeth for detection of the elapsed time Ta(i)
deviated from the solid line deviate from the correct spaces. Therefore, in this embodiment
of the present invention, when the elapsed time Ta(i) deviates from the line shown
in Fig. 15, the elapsed time Ta(i) is corrected by the correction coefficient KTa(i)
so that the elapsed time Ta(i) is positioned on the solid line of Fig. 15.
[0061] Explaining this in more detail, in this embodiment of the present invention, the
average value

,

, ... of the elapsed times TA(i) of four cylinders in a 720° crank angle range (j-1),
(j) ... are found in turn. Next, it is considered that the elapsed times Ta(4)
j-1, Ta(2)
j-1, Ta(1)
j, and Ta(3)
j increase by an average constant rate of increase from the average value TaAV
j-1 to average value TaAV
j, and the elapsed times AAV(4), AAV(2), AAV(1), and AAV(3) for the cylinders when
considering an increase by an average constant rate of increase are found by the following
equations:

[0062] Next, the ratios of deviation KAFC(4), KAFC(2), KAFC(1), and KAFC(3) for the actually
measured elapsed times Ta(4)
j-1, Ta(2)
j-1, Ta(1)
j, and Ta(3)
j for the elapsed times AAV(4), AAV(2), AAV(1), and AAV(3) for the cylinders are found
based on the following equations:

[0063] Next, the basic correction coefficient KTaB(i) is found for each cylinder using the
following equation:

[0064] That is, the basic correction coefficient KTaB(i) is calculated by subtracting 1/4
of the ratio of deviation KAFC(i) from the correction coefficient KTa(i)
j-1 up to then for each cylinder.
[0065] Next, the mean value tKTaM of the basic correction coefficient KTaB(i) is calculated
based on the following equation:

[0066] Next, the correction coefficient KTa(i) for each cylinder is calculated by subtracting
the average value tKTaM from the basic correction coefficient KTaB(i) as shown by
the following equation:

[0067] The correction coefficient KTa(i)
j-1 is not directly corrected based on the ratio of deviation KAFC(i). The basic correction
coefficient KTaB(i) is found once in this way for the following reason. For example,
assume that there is a ratio of deviation KAFC(1) for only the No. 1 cylinder #1 and
that only the correction coefficient KTa(1) of the No. 1 cylinder #1 is corrected
based on the ratio of deviation KAFC(1). In this case, the elapsed time Ta(1) of only
the No. 1 cylinder #1 is increased or decreased. If the elapsed time Ta(1) of only
the No. 1 cylinder #1 is increased or decreased, deviation will occur in the correction
coefficients KTa(2), KTa(3), and KTa(4) of the remaining cylinders #2, #3, and #4.
[0068] To prevent this problem from occurring, the basic correction coefficient KTaB(i)
is found once and the mean value tKTaM of the basic correction coefficient is subtracted
from the basic correction coefficient KTaB(i) to find the final correction coefficient
KTa(i). That is, for example, when the basic correction coefficient KTa(1) of the
No. 1 cylinder #1 is increased, the mean value tKTaM of the basic correction coefficient
is subtracted from the basic correction coefficients KTaB(i) of all of the cylinders
#1, #2, #3, and #4. If tKTaM is subtracted from the basic correction coefficients
KTaB(i) of all of the cylinders in this way, the correction coefficient KTa(1) of
the No. 1 cylinder #1 will increase, but the correction coefficients KTa(2), KTa(3),
and KTa(4) of the remaining cylinders #2, #3, and #4 will be decreased and the sum
of KTa(1), KTa(2), KTa(3), and KTa(4) will be maintained constantly at zero. If the
correction coefficient KTa(i) is corrected so that the sum of KTa(1), KTa(2), KTa(3),
and KTa(4) is maintained constantly at zero, then no matter which correction coefficient
KTa(i) is corrected, deviation will no longer occur in the other correction coefficients
KTa(i).
[0069] In the embodiment shown in Fig. 15, when the elapsed time Ta(1)
j of the No. 1 cylinder #1, for example, is larger than the elapsed time AAV(1) when
assuming an increase by an average constant rate of increase, the ratio of deviation
KAFC(1) for the No. 1 cylinder #1 becomes a positive value. As a result, the correction
coefficient KTa(1) is decreased until the ratio of deviation KAFC(1) becomes zero.
If the ratio of deviation KAFC(1) becomes zero, the value of the correction coefficient
KTAa(1) settles down to a constant value. At this time, the elapsed time Ta(1) matches
with the elapsed time AVV(1). If the correction coefficients KTa(1) for all cylinders
settle down to constant values, when the rotational speed of the rotor 14 is constant,
the elapsed times Ta(i) of the cylinders corrected using the correction coefficients
KTa(i) all become equal. Therefore, even if there is variation in the spaces of the
outer teeth of the rotor 14, it is possible to accurately detect the torque fluctuation
of the cylinders.
[0070] Returning the discussion to the calculation of torque fluctuation once again, when
torsional vibration occurs in the engine drive system, the difference in elapsed times
DTa(i) fluctuates as shown in Fig. 10. This difference in elapsed times DTa(i), however,
fluctuates even when the vehicle is driving over a bumpy road. Further, at this time,
the degree of fluctuation of the DTa(i) becomes extremely large in some cases. Figure
16 shows the fluctuation in DTa(i) when the vehicle is riding over a bumpy road. AMP
in Fig. 16 shows the difference between the minimum DTa(i) and the maximum DTa(i),
that is, the amplitude. When this amplitude AMP is small, it is possible to accurately
detect the output fluctuation and torque fluctuation of the cylinders by the method
described above.
[0071] When the amplitude AMP becomes large, however, it no longer becomes possible to accurately
detect the output fluctuation or torque fluctuation of the cylinder giving the maximum
or minimum DTa(i). That is, in Fig. 16, first, assuming that the cylinder giving the
maximum DTa(i) is the No. 1 cylinder #1, the amount of decrease I due to the torsional
vibration of the assumed difference of elapsed times Kb(1) of the No. 1 cylinder #1
is found from the slope of the broken line connecting DTa(1) and DTa(3) in Fig. 11.
Near where DTa(1) becomes a maximum, the amount of increase or amount of decrease
of the elapsed time due to the torsional vibration changes along a smooth curve passing
through DTa(2), DTa(1), and DTa(3). Therefore, if the Kb(1) of the No. 1 cylinder
#1 is found from DTa(1) and DTa(3), the value of Kb(1) is calculated considerably
smaller than the actual value. As a result, Kb(1) no longer shows the correct value
and therefore the amount of output fluctuation and the amount of torque fluctuation
can no longer be accurately detected. If the amplitude AMP becomes larger, the same
thing happens in the cylinder giving the minimum DTa(i).
[0072] Further, the value of Kb(i) deviates from the actual value even in cylinders where
the DTa(i) sharply changes from the DTa(i) of the cylinder where combustion was performed
one time before, therefore it no longer becomes possible to accurately detect the
output fluctuation and torque fluctuation. Therefore, in this embodiment according
to the present invention, when the amplitude AMP is large, the amount of output fluctuation
or amount of torque fluctuation is not sought for the cylinders giving the maximum
or minimum DTa(i). Further, the amount of output fluctuation or the amount of torque
fluctuation is not sought for cylinders where DTa(i) changes sharply from the DTa(i)
of the cylinder where combustion was performed one time before.
[0073] Next, the routines for finding the amount of fluctuation of torque at each cylinder
will be explained referring to Fig. 17 to Fig. 28. Note that Fig. 28 shows the timing
for calculation of the various values performed in each routine.
[0074] Figure 17 shows an interruption routine performed at every 30° crank angle. Referring
to Fig. 17, first the routine (step 100) for calculating the difference of elapsed
times DTa(i) and the elapsed time Tb(i) is followed. This routine is shown in Fig.
18 to Fig. 21. Next, the routine (step 200) for checking if calculation of the torque
fluctuation is permitted or not is followed. This routine is shown in Fig. 22 to Fig.
24. Next, the routine for calculating the torque fluctuation (step 300) is followed.
This routine is shown in Fig. 26. Next, the routine for processing of the counter
CDLNIX used for calculating the torque fluctuation value is followed. This routine
is shown in Fig. 27.
[0075] Referring to Fig. 18 to Fig. 21 showing the routine for calculation of the difference
of elapsed times DTa(i) and the elapsed time Tb(i), first, at step 101, the time TIME
is made the TIME0. The electronic control unit 20 is provided with a free run counter
showing the time. The time TIME is calculated from the count value of this free run
counter. Next, at step 102, the current time TIME is fetched. Therefore, the TIME0
of step 101 expresses the time of 30° crank angle before.
[0076] Next, at step 103, whether the No. i cylinder is currently at ATDC 30° or not is
judged. When the No. i cylinder is not currently at ATDC 30°, step 111 is jumped to,
where it is judged whether the No. i cylinder is currently at ATDC 90° or not. When
the No. i cylinder is not currently at ATDC 90°, the routine for calculation of the
difference of elapsed times DTa(i) and the elapsed time Tb(i) is ended.
[0077] As opposed to this, when it is judged at step 103 that the No. i cylinder is currently
at ATDC 30°, the routine proceeds to step 104, where the elapsed time Ta(i) calculated
720° crank angle before is made TaO(i). Next, at step 105, the final elapsed time
Ta(i) from TDC to ATDC 30° of the No. No. i cylinder is calculated based on the following
equation:

[0078] That is, for example, when the No. 1 cylinder #1 is currently at ATDC 30°, the final
elapsed time Ta(1) from TDC to ATDC 30° of the No. 1 cylinder #1 is calculated from
(TIME - TIME0)·(1 + KTa(i)). Here, (TIME - TIME0) expresses the elapsed time Ta(1)
actually measured from the crank angle sensor 15 and KTa(1) is a correction coefficient
for correction of the error due to the spaces of the outer teeth of the rotor 14,
therefore the final elapsed time Ta(1) obtained by multiplying (TIME - TIME0) with
(1 + KTa(1)) comes to accurately express the elapsed time when the crankshaft rotates
by 30° crank angle.
[0079] Next, at step 106, the elapsed time Ta(i) currently calculated is reduced by the
elapsed time TaO(i) calculated 720° crank angle before so as to calculate the difference
of elapsed times

. Next, at step 107, it is judged if No. 2 cylinder #2 is currently at ATDC 30°. When
the No. 2 cylinder #2 is not at ATDC 30°, the routine jumps to step 110, where the
flag XCAL(i-1) of the No. (i-1) cylinder where combustion had been performed one time
before showing that the amount of torque fluctuation should be calculated is set (XCAL(i-1)
← "1"). Next, the routine proceeds to step 111. In this embodiment according to the
present invention, as explained above, since the ignition sequence is 1-3-4-2, when
the No. 1 cylinder #1 is currently at ATDC 30°, the flag XCAL(2) of the No. 2 cylinder
#2 where the combustion had been performed one time before showing that the amount
of torque fluctuation should be calculated is set. In the same way, when the final
elapsed time Ta(3) is calculated as shown in Fig. 28, the flag XCAL(1) is set, when
the final elapsed time Ta(4) is calculated, the flag XCAL(3) is set, and when the
final elapsed time Ta(2) is calculated, the flag XCAL(4) is set.
[0080] On the other hand, when it is judged at step 111 that the No. 1 cylinder is currently
at ATDC 90°, the routine proceeds to step 112, where the elapsed time Tb(i) calculated
720° crank angle before is made TbO(i). Next, at step 113, the final elapsed time
Tb(i) from ATDC 60° to ATDC 90° of the No. i cylinder is calculated based on the following
equation:

[0081] That is, for example, when the No. 1 cylinder #1 is currently at ATDC 90°, the final
elapsed time Tb(1) from ATDC 60° to ATDC 90° of the No. 1 cylinder #1 is calculated
from (TIME - TIME0)·(1 + KTb(1)). In this case as well, since the value (1 + KTb(1))
for correcting the error due to the spaces of the outer teeth of the rotor 14 is multiplied
by (TIME - TIME0), the final elapsed time Tb(1) accurately expresses the elapsed time
in the cycle when the crankshaft rotates by 30° crank angle. Next, at step 114, it
is judged if the No. 2 cylinder #2 is currently at ATDC 90° or not. When the No. 2
cylinder #2 is not currently at ATDC 90°, the routine for calculation of the difference
of elapsed times DTa(i) and the elapsed time Tb(i) is ended.
[0082] On the other hand, when it is judged at step 107 that the No. 2 cylinder #2 is currently
at ATDC 30°, the routine proceeds to step 108, where the average value TaAV
j of the elapsed times Ta(i) in the 720° crank angle range (j) shown in Fig. 15 is
calculated based on the following equation:

[0083] Here, Ta(1), Ta(3), Ta(4), and Ta(2) correspond to Ta(1)
j, Ta(3)
j, Ta(4)
j, and Ta(2)
j in Fig. 15. Next, the routine for calculation of the correction coefficient KTa(i)
of step 109 is followed. This routine is shown in Fig. 20.
[0084] Referring to Fig. 20, first, at step 120, it is judged if the fuel supply is stopped
during a deceleration operation or not. When the fuel supply is not stopped during
a deceleration operation, the processing cycle ends, while when the fuel is stopped
during the deceleration operation, the routine proceeds to step 121. At step 121,
the elapsed times AAV(4), AAV(2), AAV(1), and AAV(3) shown in Fig. 15 when assuming
an increase by an average constant rate of increase are calculated as follows from
the average value TaAv
j of the elapsed times Ta(i) calculated at step 108 and the average value TaAV
j-1 of the elapsed time Ta(i) at the 720° crank angle range (j-1) of Fig. 15 calculated
previously (= (Ta(1) + Ta(3) + Ta(4) + Ta(2))/4) (where Ta(1), Ta(3), Ta(4), and Ta(2)
correspond to Ta(1)
j-1, Ta(3)
j-1, Ta(4)
j-1, and Ta(2)
j-1 shown in Fig. 12).

[0085] Next, at step 122, the ratios of deviation KAFC(4), KAFC(2), KAFC(1), and KAFC(3)
for the actually detected elapsed times TaO(4), TaO(2), TaO(1), and TaO(3) for the
elapsed times AAV(4), AAV(2), AAV(1), and AAV(3) are found based on the following
equations: Here, TaO(4), TaO(2), Ta(1), and Ta(3) correspond to the Ta(4)
j-1, Ta(2)
j-1, Ta(1)
j, and Ta(3)
j shown in Fig. 15.

[0086] Next, at step 123, it is judged if the conditions for learning the correction coefficient
KTa(i) are satisfied or not. For example, when a predetermined time has elapsed from
when the fuel supply is stopped and the engine speed is in a predetermined range and
the vehicle is not driving over rough roads, for example, when the amplitude AMP of
the difference of elapsed times DTa(i) shown in Fig. 16 does not exceed a set value,
it is judged that the learning conditions are satisfied. When the learning conditions
are not satisfied, the routine proceeds to step 128, where the cumulative count KAFCI(i)
of the amount of deviation KAFC(i) is made zero. Next, at step 129, the count CKAFC
is cleared.
[0087] As opposed to this, when the learning conditions are satisfied, the routine proceeds
to step 124, where the amount of deviation KAFC(i) for the cylinders is added to the
corresponding cumulative value KAFCI(i). Next, at step 125, the cumulative count CKAFC
is incremented by exactly 1. Next, at step 126, it is judged if the cumulative count
CKAFC has become "8". When the cumulative count CKAFC is not "8", the processing cycle
ends, while when the cumulative count CKAFC becomes "8", the routine proceeds to step
127, where the correction coefficient KTa(i) is calculated. That is, when the amount
of deviation KAFC(i) is cumulatively added eight times for each cylinder, the routine
proceeds to step 127, where the correction coefficient KTa(i) is calculated.
[0088] At step 127, the correction coefficient KTa(i) is calculated in the following way.
That is, first, the cumulative value KAFCI(i) is replaced by KAFCE(i). Next, the basic
correction coefficient KTaB(i) is calculated based on the following equation:

[0089] That is, when deviation occurs from the elapsed time AAC(i) when assuming the actually
detected elapsed time Ta(i) increases by an average constant rate of increase, the
value of the current correction coefficient KTa(i) revised by exactly 1/4 of the average
value of the cumulative value KAFCI(i) is made the basic correction coefficient KTaB(i).
Next, the mean value tKTaM of the basic correction coefficient KTaB(i) for all of
the cylinders is calculated based on the following equation:

[0090] Next, the basic correction coefficient KTaB(i) is revised by the average value tKTaM
as shown by the following equation so as to update the correction coefficient KTa(i).

[0091] The correction coefficients KTa(i) for all cylinders at the time the fuel injection
is stopped during a deceleration operation are updated in this way.
[0092] On the other hand, when it is judged at step 114 of Fig. 19 that the No. 2 cylinder
#2 is currently at ATDC 90°, the routine proceeds to step 115, where the same method
as when finding TaAV
j is used to calculate the average value TbAV
j of the elapsed time Tb(i) in the 720° crank angle range based on the following equation:

[0093] Next, the routine for calculation of the correction coefficient KTb(i) of step 116
is followed. This routine is shown in Fig. 21.
[0094] Referring to Fig. 21, first, at step 130, it is judged if the supply of fuel has
been stopped during a deceleration operation. When the supply of fuel has not been
stopped during a deceleration operation, the processing cycle is ended, while when
the supply of fuel has been stopped during a deceleration operation, the routine proceeds
to step 131. At step 131, the elapsed times BAV(4), BAV(2), BAV(1), and BAV(3) when
assuming an increase by an average constant rate of increase are calculated from the
average value TbAV
j of the elapsed time Tb(i) calculated at step 115 and the average value TbAV
j-1 of the elapsed time Tb(i) in the one previous 720° crank angle range (= (Tb(1) +
Tb(3) + Tb(4) + Tb(2))/4).

[0095] Next, the ratios of deviation KBFC(4), KBFC(2), KBFC(1), and KBFC(3) for the actually
detected elapsed times TbO(4), TbO(2), Tb(1), and Tb(3) for the elapsed times BAV(4),
BAV(2), BAV(1), and BAV(3) are found based on the following equations:

[0096] Next, at step 133, it is judged if the correction coefficient KTb(i) is satisfied
or not. As explained above, when a predetermined time elapses from when the fuel supply
is stopped, the engine speed is within a predetermined range, and the vehicle is not
driving over rough roads, for example, when the amplitude AMP of the difference of
elapsed times DTa(i) shown in Fig. 16 is not over the set value, it is judged that
the learning conditions are satisfied. When the learning conditions are not satisfied,
the routine proceeds to step 138, where the cumulative value KBFCI(i) of the amount
of deviation KFBC(i) is made zero. Next, at step 139, the cumulative count CKBFC is
cleared.
[0097] As opposed to this, when the learning conditions are satisfied, the routine proceeds
to step 134, where the amount of deviation KBFC(i) with respect to the cylinders is
added to the corresponding cumulative value KBFCI(i), then the cumulative count CKBFC
is incremented by exactly 1 at step 135. Next, at step 136, it is judged if the cumulative
count CKBFC has become "8" or not. When the cumulative count CKBFC is not "8", the
processing cycle is ended. When the cumulative count CKBFC has become "8", the routine
proceeds to step 137, where the correction coefficient KTb(i) is calculated. That
is, if the amount of deviation KBFC(i) is cumulatively added eight times for each
cylinder, the routine proceeds to step 137, where the correction coefficient KTb(i)
is calculated.
[0098] At step 137, the correction coefficient KTb(i) is calculated in the following way.
That is, first, the, cumulative value KBFCI(i) is replaced by KBFCE(i). Next, the
basic correction coefficient KTbB(i) is calculated based on the following equation:

[0099] That is, when a deviation occurs from the elapsed time BAV(i) when assuming the actually
detected elapsed time Tb(i) increases by an average constant rate of increase, the
value of the current correction coefficient KTb(i) revised by exactly 1/4 of the average
value of the cumulative value KBFCE(i) is made the basic correction coefficient KTbB(i).
Next, the average value tKTbM of the basic correction coefficients KTbB(i) for all
of the cylinders is calculated based on the following equation:

[0100] Next, as shown by the following equation, the basic correction coefficient KTbB(i)
is revised by the average value tKTbM to update the correction coefficient KTb(i):

[0101] The correction coefficients KTb(i) for all cylinders at the time the fuel injection
is stopped during a deceleration operation are updated in this way.
[0102] Next, the routine for checking permission for calculation of the torque fluctuation
shown in Fig. 22 to Fig. 24 will be explained referring to Fig. 25. This routine is
set so as to prohibit the calculation of the amount of torque fluctuation for a specific
cylinder when the amplitude AMP of the fluctuation of difference of elapsed times
DTa(i) (Fig. 16) becomes large due to the vehicle traveling over a bumpy road.
[0103] That is, referring to Fig. 22 to Fig. 24, first, at step 201, whether one of the
cylinders is currently at ATDC 30° or not is judged. When none of the cylinders is
currently at ATDC 30°, the processing cycle is ended, while when one of the cylinders
is at ATDC 30°, the routine proceeds to step 202.
[0104] At step 202 to step 204, the maximum difference of elapsed times DT30max when the
difference of elapsed times DTa(i) increases and then decreases is calculated. That
is, at step 202, whether the DTa(i) calculated at step 106 of Fig. 18 is larger than
the maximum difference of elapsed times DT30max or not is judged. When DT30max > DTa(i),
the routine jumps to step 205, while when DT30max ≤ DTa(i), the routine proceeds to
step 203, where DTa(i) is made DT30max. Next, at step 204, the increase flag XMXREC
showing that DTa(i) is increasing is set (XMXREC ← "1"), then the routine proceeds
to step 205.
[0105] At step 205 to step 207, the minimum difference of elapsed times DT30min when the
difference of elapsed time DTa(i) decreases and then increases is calculated. That
is, at step 205, it is judged whether the DTa(i) calculated at step 106 of Fig. 18
is smaller than the minimum difference of elapsed times DT30min or not. When DT30min
< DTa(i), the routine jumps to step 208, while when DT30min ≥ DTa(i), the routine
proceeds to step 206, where DTa(i) is made DT30min. Next, at step 207, the decrease
flag XMNREC showing that DTa(i) has decreased is set (XMNREC ← "1"), then the routine
proceeds to step 208.
[0106] At step 208 to step 214, when the amplitude AMP of the fluctuation of DTa(i) (Fig.
16) has exceeded the set value A
0, the prohibit flag prohibiting the calculation of the amount of torque fluctuation
for the cylinder giving the maximum DTa(i) is set. That is, at step 208, it is judged
whether DT30max > DTa(i) and XMXREC = "1" or not. When DT30max ≤ DTa(i) or the increase
flag XMXREC is reset (XMXREC = "0"), the routine jumps to step 215, while when DT30max
> DTa(i) and XMXREC = "1", the routine proceeds to step 209.
[0107] That is, as shown in Fig. 25 at the time t
1, the difference of the elapsed times DTa(1) of the No. 1 cylinder #1 has become maximum.
In this case, in the interruption routine performed at the time t
1, the routine proceeds to step 202 to step 203, where the DTa(1) is made DT30max,
then, at step 204, the maximum flag XMXREC is set. On the other hand, in the interruption
routine performed at the time t
2 of Fig. 25, the routine jumps to step 202 to step 205. At this time, since it is
judged at step 208 that DT30max > DTa(3) and XMXREC = "1", the routine proceeds to
step 209. That is, the routine proceeds to step 209 at the time t
2 when the elapsed time DTa(i) starts to decrease.
[0108] At step 209, the maximum difference of elapsed times DT30max is made TMXREC. Next,
at step 210, the minimum difference of elapsed times TMNREC (found at the later explained
step 216) is subtracted from the maximum difference of elapsed times TMXREC so as
to calculate the amplitude AMP of the fluctuation of DTa(i). Next, at step 211, the
initial value of the minimum difference of elapsed times DT30min is made DTa(i). Next,
at step 212, the increase flag XMXREC is reset (XMXREC ← "0"). Next, at step 213,
whether the amplitude AMP is larger than the set value A
0 or not is judged. When AMP < A
0, the routine jumps to step 215. As opposed to this, when AMP ≥ A
0, the routine proceeds to step 214, where the torque fluctuation calculation prohibition
flag XNOCAL is set (XNOCAL ← "1"). That is, in the interruption routine performed
at the time t
2 of Fig. 25 as explained above, the amount of torque fluctuation of the No. 1 cylinder
#1 is calculated. Therefore, in this interruption routine, when AMP ≥ A
0 and the torque fluctuation calculation prohibition flag XNOCAL is set, the calculation
of the amount of torque fluctuation of the No. 1 cylinder #1, that is, the calculation
of the amount of torque fluctuation of the cylinder giving the maximum DTa(i), is
prohibited.
[0109] At step 215 to step 221, when the amplitude AMP of the fluctuation of DTa(i) has
exceeded the set value A
0, the prohibition flag prohibiting the calculation of the amount of torque fluctuation
of the cylinder giving the minimum DTa(i) is set. That is, at step 215, it is judged
whether DT30min < DTa(i) and XMNREC = "1" or not. When DT30min ≥ DTa(i) or the decrease
flag XMNREC is reset (XMNREC = "0"), the routine jumps to step 222, while when DT30min
< DTa(i) and XMNREC = "1", the routine proceeds to step 216.
[0110] That is, as shown in Fig. 25 at the time t
3, the difference of elapsed times DTa(1) of the No. 1 cylinder #1 is considered to
have become the minimum. In this case, at the interruption routine performed at the
time t
3, the routine proceeds to step 205 to step 206, where the DTa(1) is made DT30min,
then at step 207, the decrease flag XMNREC is set. On the other hand, the interruption
routine performed at the time t
4 of Fig. 25 jumps from step 205 to step 208. At this time, since it is judged at step
215 that DT30min < DTa(3) and XMNREC = "1", the routine proceeds to step 216. That
is, the routine proceeds to step 216 at the time t
4 where the difference of elapsed times DTa(i) starts to be increased.
[0111] At step 216, the minimum difference of elapsed times DT30min is made TMNREC. Next,
at step 217, the minimum difference of elapsed times TMNREC is subtracted from the
maximum difference of elapsed times TMXREC whereby the amplitude AMP of the fluctuation
of DTa(i) is calculated. Next, at step 218, the initial value of the maximum difference
of elapsed times DT30max is made DTa(i). Next, at step 219, the decrease flag XMNREC
is reset (XMNREC ← "0"). Next, at step 220, it is judged whether the amplitude AMP
is larger than the set value A
0 or not. When AMP < A
0, the routine jumps to step 222. As opposed to this, when AMP ≥ A
0, the routine proceeds to step 221, where the torque fluctuation calculation prohibition
flag XNOCAL is set (XNOCAL ← "1"). That is, in the interruption routine performed
at the time t
4 of Fig. 25, the amount of torque fluctuation of the No. 1 cylinder #1 is calculated.
Therefore, in this interruption routine, when AMP ≥ A
0 and the torque calculation prohibition flag XNOCAL is set, the calculation of the
amount of torque fluctuation of the No. 1 cylinder #1, that is, the calculation of
the amount of torque fluctuation of the cylinder where DTa(i) becomes smallest, is
prohibited.
[0112] At step 222 and step 223, the calculation of the amount of torque fluctuation of
a cylinder where the elapsed time DTa(i) changes sharply is prohibited. That is, at
step 222, whether |DTa(i-2) - DTa(i-1)| is larger than K
0·|DTa(i-1) - DTa(i)| or not is judged. Here, the constant K
0 is a value of about 3.0 to 4.0. When it is judged at step 222 that |DTa(i-2) - DTa(i-1)|
< K
0·|DTa(i-1) - DTa(i)|, the processing routine is ended, while when it is judged that
|DTa(i-2) - DTa(i-1)| ≥ K
0·|DTa(i-1) - DTa(i)|, the routine proceeds to step 223, where the torque fluctuation
calculation prohibition flag XNOCAL is set.
[0113] That is, when the interruption routine is at the time t
3 of Fig. 25, whether at this time |DTa(4) - DTa(2)| ≥ K
0·|DTa(2) - DTa(1)| or not is judged. As shown in Fig. 25, when DTa(2) changes rapidly
from DTa(4), |DTa(4) - DTa(2)| becomes larger than K
0·|DTa(2) - DTa(1)|. At this time, the torque fluctuation calculation prohibition flag
is set and the calculation of the amount of torque fluctuation of the No. 2 cylinder
#2 where the elapsed time DTa(i) has changed sharply is prohibited.
[0114] Next, the torque fluctuation calculation routine shown in Fig. 26 will be explained.
Referring to Fig. 26, first, at step 301, whether the flag XCAL(i-1) showing that
the amount of torque fluctuation of the No. (i-1) cylinder where combustion had been
performed one time before should be calculated is set or not is judged. When the flag
XCAL(i-1) = "0", that is, when the flag XCAL(i-1) is not set, the processing cycle
is ended. As opposed to this, when the flag XCAL(i-1) = "1", that is, the flag XCAL(i-1)
is set, the routine proceeds to step 302, where the flag XCAL(i-1) is reset, then
the routine proceeds to step 303.
[0115] At step 303, whether the prohibition flag XNOCAL prohibiting the calculation of the
amount of torque fluctuation for the cylinder at which the combustion was performed
one time before is reset (XNOCAL = "0") or not is judged. When this prohibition flag
is set (XNOCAL = "1"), the routine proceeds to step 313, where the prohibition flag
XNOCAL is reset. As opposed to this, when the prohibition flag is reset, the routine
proceeds to step 304. That is, only when the flag XCAL is set and the prohibition
flag XNOCAL is reset, the routine proceeds to step 304.
[0116] At step 304, the assumed difference of elapsed times Kb(i-1) of the No. (i-1) cylinder
where the combustion was performed one time before (see Fig. 10 and Fig. 11) is calculated
based on the following equation:

[0117] Next, at step 305, the actual output torque DN(i-1) of the No. (i-1) cylinder where
combustion was performed one time before is calculated based on the following equation:

[0118] Next, at step 306, the assumed output torque DNS(i-1) of the No. (i-1) cylinder where
combustion had been performed one time before is calculated based on the following
equation:

[0119] Next, at step 307, as shown in the following equation, the actual output torque DN(i-1)
is subtracted from the assumed output torque DNS(i-1) to calculate the basic amount
of torque fluctuation DLNB(i-1) of the No. (i-1) cylinder where combustion had been
performed one time before.

[0120] Next, at step 308, the set value KDLN is found from the average of the engine speed
NAVE (step 409 in Fig. 27) using the map shown in Fig. 13. Next, at step 309, as shown
in the following equation, the set value KDLN is subtracted from the basic amount
of torque fluctuation DLNB(i-1) to calculate the amount of torque fluctuation DLN(i-1)
of the No. (i-1) cylinder where combustion had been performed one time before.

[0121] That is, for example, when the No. 3 cylinder #3 is at ATDC 30° and the flag XCAL(1)
is set, the difference of elapsed times Kb(1) for the No. 1 cylinder #1 is calculated
at step 304, then the actual output torque DN(1) of the No. 1 cylinder #1 is calculated
at step 305, the assumed output torque DNS(1) of the No. 1 cylinder #1 is calculated
at step 306, then the basic amount of torque fluctuation DLNB (1) of the No. 1 cylinder
#1 is calculated at step 307, then the set value KDLN is calculated at step 308, and
then the amount of torque fluctuation DLN(1) of the No. 1 cylinder #1 is calculated
at step 309.
[0122] Note that when finding the amount of output fluctuation GLN(i-1) of the cylinders,
the following calculation may be performed from step 305 to step 309.
[0123] That is, at step 305, instead of finding the actual amount of torque fluctuation
DN(i-1), the actual amount of output fluctuation GN(i-1) is calculated based on the
following equation:

[0124] Next, at step 306, instead of finding the assumed amount of torque fluctuation DNS(i-1),
the assumed amount of output fluctuation GNS(i-1) is calculated based on the following
equation:

[0125] Next, at step 307, instead of finding the basic amount of torque fluctuation DLNB(i-1),
the basic amount of output fluctuation GLNB(i-1) is calculated based on the following
equation;

[0126] Next, at step 308, instead of finding the set value KDLN for the amount of torque
fluctuation, the set value KGLN for the amount of output fluctuation is found. The
set value KGLN represents the amount of increase of the amount of output fluctuation
due to the higher component of the torsional vibration of the engine drive system
and the torsional vibration of the crankshaft itself. The set value KGLN is found
by experiments and is stored in the ROM 22 in advance.
[0127] Next, when the amount of torque fluctuation DLN(i-1) is calculated at step 309, the
routine proceeds to step 310, where it is judged whether the amount of torque fluctuation
DLN(i-1) is positive or not. When DLN(i-1) ≥ 0, the routine jumps to step 312, where
the cumulative addition request flag XCDLN(i-1) showing that the amount of torque
fluctuation DLN(i-1) of the cylinder at which the combustion was performed one time
before should be cumulatively added is set (XCDLN(i-1) ← "1"). As opposed to this,
when DLN(i-1) < 0, the routine proceeds to step 311, where DLN(i-1) is made zero,
then the routine proceeds to step 312. Note that, the torque of each cylinder repeatedly
rises and falls, so in this case, to find the amount of torque fluctuation, it is
sufficient to cumulatively add either the amount of increase of the torque or the
amount of decrease of the torque. In the routine shown in Fig. 26, just the amount
of decrease of the torque is cumulatively added, therefore, as explained above, when
DLN(i-1) < 0, DLN(i-1) is made zero.
[0128] Next, the processing of the counter CDLNIX will be explained referring to Fig. 27.
The count value of the counter CDLNIX is used for the later explained calculation
of the torque fluctuation value of the engine.
[0129] Referring to Fig. 27, first, at step 401, whether the No. 3 cylinder #3 is currently
at ATDC 30° or not is judged. When the No. 3 cylinder #3 is currently not at ATDC
30°, the processing cycle is ended, while when the No. 3 cylinder #3 is currently
at ATDC 30°, the routine proceeds to step 402. At step 402, whether the conditions
for calculating the torque fluctuation value are satisfied or not is judged. For example,
when the conditions for making the air-fuel ratio lean are not satisfied or the amount
of change per unit time ΔQ/N of the engine load Q/N is more than the set value or
the amount of change per unit time ΔN of the engine speed is more than a set value,
it is judged that the conditions for calculating the torque fluctuation value are
not satisfied, while at other times it is judged that the conditions for calculating
the torque fluctuation value are satisfied.
[0130] When it is judged at step 402 that the conditions for calculating the torque fluctuation
value are satisfied, the routine proceeds to step 408, where the count value CDLNIX
is incremented by exactly 1. The increment action of this count value CDLNIX is performed
every time the No. 3 cylinder #3 reaches ATDC 30°, that is, every 720° crank angle.
Next, at step 409, the average value of the engine speed N
AVE and the average value Q
AVE of the amount of intake air Q in the cycle, from when the increment action of the
count value CDLNIX is started to when the count value CDLNIX is cleared, are calculated.
[0131] On the other hand, when it is judged at step 402 that the conditions for calculating
the torque fluctuation value are not satisfied, the routine proceeds to step 403,
where the count value CDLNIX is cleared. Next, at step 404, the cumulative value DLNI(i)
of the torque fluctuation value DLN(i) for each cylinder (this cumulative value is
calculated by the later explained routine) is cleared. Next, at step 405, the cumulative
count value CDLNI(i) for each cylinder (this cumulative count value is calculated
by the later explained routine) is cleared.
[0132] Next, at step 406, the target torque fluctuation value LVLLFB is calculated. In this
embodiment according to the present invention, as explained later, the air-fuel ratio
is feedback controlled so that the calculated torque fluctuation value becomes this
target torque fluctuation value LVLLFB. This target torque fluctuation value LVLLFB,
as shown by Fig. 29A showing the equivalent fluctuation value by the solid line, becomes
larger the higher the engine load Q/N and becomes larger the higher the engine speed
N. This target torque fluctuation value LVLLFB is stored in the ROM 22 in advance
in the form of a map shown in Fig. 29B as a function of the engine load Q/N and the
engine speed N. Next, at step 407, the torque fluctuation value DLNISM(i) of each
cylinder (this torque fluctuation value is calculated by the later explained routine)
is made the target torque fluctuation value LVLLFB calculated from the map of Fig.
29B.
[0133] Figure 31 shows the repeatedly executed main routine. In this main routine, first
the routine for calculation of the torque fluctuation value (step 600) is executed.
This routine is shown in Fig. 32 and Fig. 33. Next, the routine for calculation of
the lean limit feedback correction coefficient FLLFB (step 700) is executed. This
routine is shown in Fig. 34. Next, when the predetermined crank angle is reached,
the routine for calculation of the fuel injection time (step 800) is executed. This
routine is shown in Fig. 35. Next, the other routines (step 900) are executed.
[0134] Next, the routine for calculation of the torque fluctuation value shown in Fig. 32
and Fig. 33 will be explained.
[0135] Referring to Fig. 32 and Fig. 33, first, at step 601, whether the cumulative addition
request flag XDLN(i) showing that the amount of torque fluctuation DLN(i) should be
cumulatively added is set (XDLN(i) = "1") or not is judged. When the cumulative addition
request flag XDLN(i) is not set, the routine jumps to step 609, while when the cumulative
addition request flag XDLN(i) is set, the routine proceeds to step 602. At step 602,
the cumulative addition request flag XDLN(i) is reset. Next, at step 603, the amount
of torque fluctuation DLN(i) is added to the cumulative value DLNI(i) of the amount
of torque fluctuation. Next, at step 604, the cumulative count value CDLNI(i) is incremented
by exactly 1. That is, for example, at step 601, if the cumulative addition request
flag CDLN(1) is set for the No. 1 cylinder, this flag XDLN(1) is reset at step 602,
then the cumulative value DLNI(1) of the amount of torque fluctuation is calculated
at step 603, and the cumulative count value CDLNI(1) is incremented by exactly 1 at
step 604.
[0136] Next, at step 605, whether the cumulative count value CDLNI(i) has become "8" or
not is judged. When CDLNI(i) is not "8", the routine jumps to step 609, while when
CDLNI(i) becomes "8", the routine proceeds to step 606, where the torque fluctuation
value DLNISM(i) of the cylinders is calculated from the following equation:

[0137] Next, at step 607, the cumulative value DLNI(i) of the amount of torque fluctuation
for the cylinders is cleared. Next, at step 608, the cumulative count value CDLNI(i)
is reset.
[0138] That is, when there is a difference between the calculated cumulative value DLNI(i)
of the amount of torque fluctuation and the previously used amount of torque fluctuation
DLNISM(i), the value of the difference {DLNI(i) - DLNISM(i)} multiplied by 1/4 is
added to the amount of torque fluctuation DLNISM(i). Therefore, for example, when
the cumulative count value CDLNI(1) for the No. 1 cylinder #1 becomes "8", at step
606, the torque fluctuation value DLNISM(1) is calculated.
[0139] Next, at step 609, whether the count value CDLNIX calculated at the routine shown
in Fig. 27 has become "8" or not is judged. When CDLNIX is not "8", the processing
cycle is ended, while when CDLNIX becomes "8", the routine proceeds to step 610, where
the mean value

of the mean torque fluctuation values DLNISM (i) of the cylinders is calculated.
Next, at step 611 the count value CDLNIX is cleared. In this way, the value DLNISM
expressing the amount of torque fluctuation of the engine is calculated.
[0140] Note that, as explained above,the count value CDLNIX is incremented by exactly 1
with each 720° crank angle. Unless the calculation of the torque is prohibited for
one of the cylinders, when the count value CDLNIX has become "8", the cumulative count
values CDLNI(1), CDLNI(2), CDLNI(3), and CDLNI(4) for all of the cylinders have already
become "8". Therefore, in this case, the torque fluctuation value DLNISM(i) for all
of the cylinders is calculated. On the other hand, for example, if the calculation
of the amount of torque fluctuation for the No. 1 cylinder #1 is prohibited, when
the count value CDLNIX has become "8", just the cumulative count value CDLNI(1) of
the No. 1 cylinder #1 does not become "8", so the new cumulative value DLNI(1) of
the amount of torque fluctuation for the No. 1 cylinder #1 is not calculated. Therefore,
in this case, when finding the mean torque fluctuation value DLNISM at step 610, the
previously calculated torque fluctuation value DLNISM(1) is used just for the No.
1 cylinder #1.
[0141] Next, the routine for calculation of FLLFB will be explained referring to Fig. 34.
[0142] Referring to Fig. 34, first, at step 701, whether the conditions for updating the
lean limit feedback correction coefficient FLLFB are satisfied or not is judged. For
example, at the time of engine warmup or when the operating state of the engine is
not in the learning region enclosed by the broken lines in Fig. 5, it is judged that
the conditions for updating are not satisfied, while at other times it is judged that
the conditions for updating are satisfied. When the conditions for updating are not
satisfied, the processing cycle is ended, while when the conditions for updating are
satisfied, the routine proceeds to step 702.
[0143] At step 702, the target torque fluctuation value LVLLFB is calculated from the engine
load Q/N and the engine speed N based on the map shown in Fig. 29B. Next, at step
703 and step 704, the levels of torque fluctuation LVLH(n) and LVLL(n) shown in the
following equations are calculated based on the fluctuation amount judgement values
DH(n) and DL(n) in accordance with the target torque fluctuation value LVLLFB:

[0144] Here, the fluctuation amount judgement values DH(n) and DL(n) are determined in advance
as shown in Fig. 30A. That is, as will be understood from Fig. 30A, three positive
values are set for DH(n) which are in the relationship of DH(3) > DH(2) > DH(1). Further,
these DH(1), DH(2), and DH(3) gradually increase as the target torque fluctuation
value LVLLFB becomes larger. On the other hand, three negative values are set for
DL(n) which are in the relationship of DL(1) > DL(2) > DL(3). Further, the absolute
values of these DL(1), DL(2), and DL(3) gradually increase as the target torque fluctuation
value LVLLFB becomes larger.
[0145] Assume, however, that the target torque fluctuation value LVLLFB calculated at step
702 is the value shown by the broken line. In this case, at step 703, the values of
DH(1), DH(2), and DH(3) on the broken line plus the target torque fluctuation value
LVLLFB are made the levels of torque fluctuation LVLH(1), LVLH(2), and LVLH(3) and,
at step 704, the values of DL(1), DL(2), and DL(3) on the broken line plus the target
torque fluctuation value LVLLFB are made the levels of torque fluctuation LVLL(1),
LVLL(2), and LVLL(3).
[0146] On the other hand, the feedback correction values +a
1, +a
2, +a
3, +a
4, -b
1, -b
2, -b
3, and -b
4 are determined in advance for the regions between the levels of torque fluctuation
LVLH(n) and LVLL(n) as shown in Fig. 30B. For example, the feedback correction value
becomes +a
2 for the region where the level of torque fluctuation is between LVLH(1) and LVLH(2).
These feedback correction values are +a
4 > +a
3 > +a
2 > +a
1 and -b
1 > -b
2 > -b
3 > -b
4. The feedback correction values +a
1, +a
2, +a
3, +a
4, -b
1, -b
2, -b
3 and -b
4 shown in Fig. 30B are shown in the corresponding regions of Fig. 30A.
[0147] When the levels of torque fluctuation LVLH(n) and LVLL(n) are calculated at step
703 and step 704, the routine proceeds to step 705, where whether the mean torque
fluctuation value DLNISM calculated in the routine for calculation of the torque fluctuation
value shown in Fig. 32 and Fig. 33 is between the levels of torque fluctuation LVLH(n)
and LVLL(n) shown in Fig. 30B or not is judged. Next, at step 706, the corresponding
feedback correction value DLFB is calculated. For example, when the target fluctuation
level LVLLFB is the value shown by the broken line in Fig. 30A and the calculated
mean torque fluctuation value DLNISM is between LVLH(1) and LVLH(2) of Fig. 30B, that
is, the deviation of the mean torque fluctuation value DLNISM from the target fluctuation
level LVLLFB is between DH(1) and DH(2) on the broken line in Fig. 50A, the feedback
correction value DLFB is made +a
2.
[0148] Next, at step 707, it is determined what lean limit feedback correction coefficient
of which learning region shown in Fig. 5 the lean limit feedback correction coefficient
FLLFB
ij is to be updated based on the average value of the engine speed N
AVE and the average value Q
AVE of the amount of intake air Q found at step 409 of the processing routine of CDLNIX
shown in Fig. 27. Next, at step 708, the lean limit feedback correction coefficient
FLLFB
ij determined at step 707 is increased by the feedback correction value DLFB.
[0149] That is, as explained above, when, for example, DLNISM > LVLLFB and LVLH(1) < DLNISM
< LVLH(2), the lean limit feedback correction coefficient FLLFB
ij is increased by +a
2. As a result, the air-fuel ratio becomes smaller, so the amount of torque fluctuation
of each cylinder is reduced. On the other hand, when DLNISM < LVLLFB and LVLL(1) >
DLNISM > LVLL(2), the lean limit feedback correction coefficient FLLFB
ij is increased by -b
2. As a result, the air-fuel ratio becomes large, so the amount of torque fluctuation
of the cylinders is increased. In this way the air-fuel ratio at the time of lean
operation is controlled so that the mean torque fluctuation value DLNISM of all of
the cylinders becomes the target torque fluctuation value LVLLFB.
[0150] Note that, when the conditions for calculation of the torque fluctuation value in
the routine shown in Fig. 27 are not satisfied, at step 407, the DLNISM(i) for all
of the cylinders is made LVLLFB and therefore the mean torque fluctuation value DLNISM
is also made the target torque fluctuation value LVLLFB. Therefore, at this time,
the lean limit feedback correction coefficient FLLFB
ij is not updated.
[0151] Next, the routine for calculation of the fuel injection time will be explained with
reference to Fig. 35.
[0152] Referring to Fig. 35, first, at step 801, the basic fuel injection time TP is calculated
from the map shown in Fig. 2. Next, at step 802, whether the operating state is one
in which a lean operation should be performed or not is judged. When the operating
state is one in which a lean operation should be performed, the routine proceeds to
step 803, where the value of the stoichiometric air-fuel ratio feedback correction
coefficient FAF is fixed at 1.0. Next, at step 804, the lean correction coefficient
FLEAN is calculated from the map shown in Fig. 4, then at step 805, the lean limit
feedback correction coefficient FLLFB is read from the map shown in Fig. 5. Next,
at step 809, the fuel injection time TAU is calculated from the following equation:

[0153] As opposed to this, when it is judged at step 802 that the operating state is not
one where a lean operation should be performed, that is, when the air-fuel ratio should
be made the stoichiometric air-fuel ratio, the routine proceeds to step 806, where
the lean correction coefficient FLEAN is fixed at 1.0, then, at step 807, the lean
limit feedback correction coefficient FLLFB is fixed at 1.0. Next, at step 808, the
stoichiometric air-fuel ratio feedback correction coefficient FAF is controlled based
on the output signal of the air-fuel ratio sensor 17 so that the air-fuel ratio becomes
the stoichiometric air-fuel ratio. Next, the routine proceeds to step 809, where the
fuel injection time TAU is calculated.
[0154] Note that, to find the true output fluctuation or torque fluctuation of the engine,
it is possible to correct the torsional vibration of the engine drive system or crankshaft
itself or the effects of the variation of the spaces between the outer teeth of the
rotor 14 in any way.
[0155] In this way, according to the present invention, it becomes possible to ensure the
controllability of the air-fuel ratio regardless of the engine speed.
[0156] While the invention has been described by reference to specific embodiments chosen
for purposes of illustration, it should be apparent that numerous modifications could
be made thereto by those skilled in the art without departing from the basic concept
and scope of the invention.