(57)【要約】      （修正有）【課題】ロータ角速度に対応する補正値の、取得機会を多く確保する。【解決手段】所定条件が成立している場合、クランクシャフト２４ｃが所定角度回転するのに要する所要時間Ｔ’に補正係数Ｋを乗じることによって所要時間を補正して最終的な所要時間Ｔを取得する。別の所定条件が成立している場合、前記所要時間Ｔ”を取得し、この所要時間を取得した第１時点よりもクランクシャフトが１回転する期間だけ遡った第２時点から同第１時点までの時間に応じた時間を基準所要時間として取得し、取得した所要時間に対する基準所要時間の比に基づいて補正係数を新たに取得して回転速度領域Ｒ毎に補正係数の学習を行うとともに、補正係数の学習が行われていない回転速度領域が存在する場合、学習が行われていない回転速度領域の補正係数として新たに取得した補正係数を記憶するように構成されている。【選択図】図８
2016102422.tif 000002
【特許請求の範囲】
【請求項１】
クランクシャフトと共に回転するように同クランクシャフトに配設され、外周部に複数の被検出部位を等角度間隔で備えるように加工されたロータ、及び、
前記被検出部位を検出するクランク角度センサ、
を備えた内燃機関に適用され、
所定の学習条件が成立している場合、所定数の前記被検出部位が前記クランク角度センサによって検出されるのに要した時間を仮所要時間として取得し、同取得された仮所要時間に基づいて前記機関の複数の回転速度領域のそれぞれに対応して設定される補正係数を取得し、同取得された補正係数を、前記仮所要時間が取得されたときの前記機関の実際の回転速度が属する前記回転速度領域に対する補正係数として記憶する学習を行う学習部、及び、
所定の回転速度対応値取得条件が成立している場合、前記所定数の前記被検出部位が前記クランク角度センサによって検出されるのに要した時間を仮所要時間として取得し、同取得された仮所要時間に、同仮所要時間が取得されたときの前記機関の実際の回転速度が属する前記回転速度領域に対して記憶されている前記補正係数又はその逆数を乗じる、ことによって同仮所要時間を補正して最終的な所要時間を取得する最終所要時間取得部、
を備え、
前記学習部は、
前記仮所要時間を新たに取得したときに、同新たに仮所要時間を取得した第１時点よりも前記クランクシャフトが１回転する期間だけ遡った第２時点から同第１時点までの時間に応じた時間を基準所要時間として取得し、前記新たに取得した仮所要時間に対する前記取得した基準所要時間の比に基づいて前記補正係数を新たに取得して前記学習を行うとともに、前記補正係数の学習が行われていない前記回転速度領域が存在する場合には同学習が行われていない前記回転速度領域の前記補正係数として前記新たに取得した補正係数を記憶するように構成された、
内燃機関の回転速度対応値取得装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内燃機関のクランクシャフトタイミングロータが所定角度回転するのに要する時間を取得する回転速度対応値取得装置に関する。
【背景技術】
【０００２】
内燃機関のクランクシャフトタイミングロータが所定角度回転するのに要する時間を取得する装置が知られている（例えば、特許文献１を参照。）。この装置（以下、「従来装置」と称呼する。）は、ロータの回転中、ロータの外周部に３０°間隔で設けられた複数の歯のうち、ロータの所定角度範囲（１２０°）に設けられた複数の歯がクランク角度センサによって検出されるのに要した所要時間を「互いに異なる所定角度範囲毎」に取得する。
【０００３】
更に、従来装置は、基準となる所要時間（例えば、クランクシャフトが１回転（３６０°）回転するのに要する時間の三分の一の時間）に対する前記取得した各所要時間の差分（誤差）を取得する。加えて、従来装置は、これら取得した差分に基づいて同差分が補償されるように各所要時間を補正するための補正値を取得する。従来装置は、取得した所要時間から前記補正値を減ずることにより、ロータが所定角度回転するのに要する所要時間を正確に取得するようにしている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２２５５５２号公報（段落００１５及び段落００１６、並びに、段落００３０乃至段落００３６を参照。）
【発明の概要】
【０００５】
ところで、前記基準となる所要時間に対する前記取得された各所要時間の差分は、ロータの角速度の大きさ（所要時間の大きさ）によって異なる。このため、この差分に基づいた補正値を使用して正確な所要時間を取得するためには、ロータの角速度（所要時間）毎に補正値を取得する必要がある。
【０００６】
しかしながら、このようにロータの角速度毎に補正値を取得することは、非常に煩雑である。加えて、そのときのロータの角速度に対応する補正値が取得されていなければ、その補正値が取得されるまで正確な所要時間を取得することができず、その結果、正確な所要時間が取得される機会が少なくなる。
【０００７】
本発明は、上述した課題に対処するためになされたものである。即ち、本発明の目的の１つは、簡便な形で補正係数を取得することができ且つ正確な所要時間を取得する機会が多い「内燃機関の回転速度対応値取得装置（以下、「本発明装置」と称呼する。）」を提供することにある。
【０００８】
本発明装置が適用される内燃機関は、「クランクシャフトと共に回転するように同クランクシャフトに配設され、外周部に複数の被検出部位を等角度間隔で備えるように加工されたロータ」、及び、「前記被検出部位を検出するクランク角度センサ」を備える。
【０００９】
そして、本発明装置は、所定の学習条件が成立している場合、「所定数の前記被検出部位が前記クランク角度センサによって検出されるのに要した時間」を仮所要時間として取得し、同取得された仮所要時間に基づいて「前記機関の複数の回転速度領域のそれぞれに対応して設定される補正係数」を取得し、同取得された補正係数を、「前記仮所要時間が取得されたときの前記機関の実際の回転速度が属する前記回転速度領域に対する補正係数」として記憶する学習を行う学習部、を備える。
【００１０】
更に、本発明装置は、所定の回転速度対応値取得条件が成立している場合、「前記所定数の前記被検出部位が前記クランク角度センサによって検出されるのに要した時間」を仮所要時間として取得し、同取得された仮所要時間に、「同仮所要時間が取得されたときの前記機関の実際の回転速度が属する前記回転速度領域に対して記憶されている前記補正係数又はその逆数」を乗じる、ことによって同仮所要時間を補正して最終的な所要時間を取得する最終所要時間取得部、を備える。
【００１１】
加えて、本発明装置の前記学習部は、前記仮所要時間を新たに取得したときに、「同新たに仮所要時間を取得した第１時点よりも前記クランクシャフトが１回転する期間だけ遡った第２時点」から「同第１時点」までの時間に応じた時間を基準所要時間として取得し、「前記新たに取得した仮所要時間に対する前記取得した基準所要時間の比」に基づいて前記補正係数を新たに取得して前記学習を行うとともに、前記補正係数の学習が行われていない前記回転速度領域が存在する場合には同学習が行われていない前記回転速度領域の前記補正係数として前記新たに取得した補正係数を記憶するように構成されている。
【００１２】
前記補正係数は、仮所要時間に対する基準所要時間の比に基づいて取得される値である。このため、「その補正係数を取得したときの機関の実際の回転速度が属する回転速度領域」とは異なる回転速度領域に属する機関の回転速度において取得された仮所要時間の補正に、その補正係数を使用して正確な所要時間を取得することができる。
【００１３】
つまり、対応する補正係数が学習されていない回転速度領域が存在したとしても、その回転速度領域に属する機関の回転速度において取得された仮所要時間の補正に「別の回転速度領域に対する補正係数として取得された補正係数」を使用することができる。従って、本発明装置によれば、簡便な形で各回転速度領域に対する補正係数を取得することができるとともに、正確な所要時間を取得する機会が多くなる。
【図面の簡単な説明】
【００１４】
【図１】図１は、本発明の実施形態に係る回転速度対応値取得装置が適用される内燃機関を示した全体図である。
【図２】図２は、図１に示した内燃機関の縦断面図である。
【図３】図３は、図１に示した内燃機関のクランクシャフトタイミングロータ及びクランク角度センサを示した図である。
【図４】図４は、図１に示したＥＣＵのＣＰＵが実行する失火判定許可フラグ設定ルーチンを示したフローチャートである。
【図５】図５は、図１に示したＥＣＵのＣＰＵが実行する所要時間取得ルーチンを示したフローチャートである。
【図６】図６は、図１に示したＥＣＵのＣＰＵが実行する失火判定ルーチンを示したフローチャートである。
【図７】図７は、図１に示した内燃機関の各気筒における機関行程をそれぞれ示した図である。
【図８】図８は、本実施形態に係る補正係数の取得（学習）を説明するための図である。
【図９】図９は、図１に示したＥＣＵのＣＰＵが実行する学習許可フラグ設定ルーチンを示したフローチャートである。
【図１０】図１０は、図１に示したＥＣＵのＣＰＵが実行する所要時間取得ルーチンを示したフローチャートである。
【図１１】図１１は、図１に示したＥＣＵのＣＰＵが実行する補正係数取得ルーチンを示したフローチャートである。
【発明を実施するための形態】
【００１５】
以下、図面を参照しながら本発明の実施形態に係る内燃機関の回転速度対応値取得装置（以下、「本実施装置」と称呼する。）について説明する。本実施装置は、図１及び図２に示した内燃機関１０に適用される。機関１０は、４サイクル・ピストン往復動型・Ｖ型６気筒・ガソリン機関である。機関１０は、機関本体部２０、吸気システム３０、及び、排気システム４０を備えている。
【００１６】
図２に示したように、機関本体部２０は、シリンダブロック、シリンダブロックロワーケース、及び、オイルパン等を含むシリンダブロック部２０ｂ、並びに、シリンダブロック部２０ｂの上に固定されるシリンダヘッド部２０ｈを含んでいる。
【００１７】
シリンダブロック部２０ｂは、シリンダ２１、ピストン２２、コンロッド２３、及び、クランクシャフト２４ｃを備えている。ピストン２２は、シリンダ２１内を往復動する。ピストン２２の往復動は、コンロッド２３を介してクランクシャフト２４ｃに伝達され、これにより、クランクシャフト２４ｃが回転するようになっている。シリンダ２１、ピストン２２及びシリンダヘッド部２０ｈは、燃焼室２５（気筒）を形成している。
【００１８】
図１に示したように、機関本体部２０は、６個の気筒（燃焼室２５）を備えている。第１気筒♯１、第３気筒♯３及び第５気筒♯５は、右バンクＲＢに備えられている。第２気筒♯２、第４気筒♯４及び第６気筒♯６は、左バンクＬＢに備えられている。
【００１９】
図２に示したように、シリンダヘッド部２０ｈは、燃焼室２５に連通した吸気ポート２６ｉ、吸気ポート２６ｉを開閉する吸気弁２７ｉ、燃焼室２５に連通した排気ポート２６ｅ、排気ポート２６ｅを開閉する排気弁２７ｅ、燃焼室２５内の燃料に点火する点火装置２８、及び、燃料を吸気ポート２６ｉ内に噴射する燃料噴射弁２９を備えている。
【００２０】
燃料噴射弁２９は、後述するエンジンＥＣＵ（電子制御ユニット）７０の指示に応答して開弁し、吸気ポート２６ｉに燃料を噴射するようになっている。
【００２１】
点火装置２８は、点火プラグ２８ｐ、及び、点火プラグ２８ｐに与える高電圧を発生するイグニッションコイルを含むイグナイタ２８ｉを含む。イグナイタ２８ｉは、後述するＥＣＵ７０の指示に応答してイグニッションコイルによって高電圧を発生するようになっている。この高電圧は点火プラグ２８ｐに与えられ、点火プラグ２８ｐによって火花が生成される。
【００２２】
図１に示したように、吸気システム３０は、吸気ポート２６ｉに連通したインテークマニホールド３１、及び、インテークマニホールド３１に一端が接続された吸気管３２を備えている。吸気ポート２６ｉ、インテークマニホールド３１及び吸気管３２は、吸気通路を構成している。
【００２３】
吸気システム３０は、シリンダブロック部２０ｂに空気を供給する。吸気システム３０は、吸気管３２に配設されたスロットル弁３３及びスロットル弁アクチュエータ３３ａを備えている。
【００２４】
スロットル弁３３は、吸気管３２に回転可能に支持され、スロットル弁アクチュエータ３３ａによって駆動されることにより開度が調整されるようになっている。
【００２５】
スロットル弁アクチュエータ３３ａは、ＤＣモータからなり、ＥＣＵ７０の指示に応答してスロットル弁３３を駆動するようになっている。
【００２６】
排気システム４０は、シリンダブロック部２０ｂからの排ガスを外部に放出する。排気システム４０は、排気ポート２６ｅに連通するエキゾーストマニホールド４１、及び、エキゾーストマニホールド４１に接続された排気管４２を備えている。排気ポート２６ｅ、エキゾーストマニホールド４１及び排気管４２は、排気通路を構成している。
【００２７】
ＥＣＵ７０は、周知のマイクロコンピュータを含む電子回路であり、ＣＰＵ、ＲＯＭ、ＲＡＭ、バックアップＲＡＭ及びインターフェース等を含む。ＥＣＵ７０は、以下に述べるセンサ類と接続されていて、これらのセンサからの信号を受信（入力）するようになっている。更に、ＥＣＵ７０は、各種アクチュエータ（スロットル弁アクチュエータ３３ａ、燃料噴射弁２９及び点火装置２８）に指示（駆動）信号を送出するようになっている。
【００２８】
図１及び図２に示したように、ＥＣＵ７０は、エアフローメータ６１、スロットルポジションセンサ６２、水温センサ６３、クランク角度センサ６４、インテークカムポジションセンサ６５、アクセル操作量センサ６６及び車速センサ６７と接続されている。
【００２９】
エアフローメータ６１は、吸気管３２に配設されている。このエアフローメータ６１は、吸気通路内を通過する吸入空気の質量流量（吸入空気量）を測定し、その吸入空気量Ｇａを表す信号を出力する。
【００３０】
スロットルポジションセンサ６２は、スロットル弁３３の開度を検出し、同開度ＴＡを表す信号を出力する。
水温センサ６３は、機関１０を冷却する冷却水の温度を検出し、同温度ＴＨＷを表す信号を出力する。
【００３１】
クランク角度センサ６４は、クランクシャフト２４ｃに取り付けられたクランクシャフトタイミングロータ２４ｒに近接してシリンダブロック部２０ｂに配設されている。ロータ２４ｒは、クランクシャフト２４ｃが回転すると同クランクシャフト２４ｃとともに回転する。
【００３２】
図３に示したように、ロータ２４ｒは、その外周部に複数（本例において、３４個）の歯部２４ｔを備えている。これら３４個の歯部２４ｔは、等角度間隔（本例において、１０°）を開けて位置するようにロータ２４ｒの外周部に設けられており、特定の２つの歯部２４ｔ_ref及び２４ｔ_３３は、３０°の角度間隔を開けて位置するようにロータ２４ｒの外周部に設けられている。
【００３３】
クランク角度センサ６４は、各歯部２４ｔが同センサ６４の検出領域を通過するときに信号を出力する。即ち、クランク角度センサ６４は、クランクシャフト２４ｃの回転位置（即ち、クランク角度）に応じた信号を出力する。
【００３４】
インテークカムポジションセンサ６５は、図示しないインテークカムシャフトが所定角度から９０°、次いで９０°、更に１８０°回転する毎に１つの信号（パルス）を出力する。インテークカムシャフトは、クランクシャフト２４ｃが７２０°回転する間に３６０°回転する。
【００３５】
本例においては、「クランク角度センサ６４が基準歯部２４ｔ_refを検出して信号を出力するタイミング」が「第１気筒♯１のピストン２２が圧縮上死点に到達するタイミング」と一致するように、ロータ２４ｒが配設されている。
【００３６】
ＥＣＵ７０は、「クランク角度センサ６４が基準歯部２４ｔ_refを検出して信号を出力するタイミング」と、「インテークカムポジションセンサ６５が信号を出力するタイミング」との関係から、クランクシャフト２４ｃが２回転（７２０°回転）する間にクランク角度センサ６４から出力される「基準歯部２４ｔ_refに対応する２つの信号」のうち、「第１気筒♯１の圧縮上死点」に対応する信号を特定する。
【００３７】
更に、ＥＣＵ７０は、第１気筒♯１の圧縮上死点に対応する信号を受信した時点をクランク角度「０°」としたときの機関１０のクランク角度（以下、「絶対クランク角度」と称呼する。）を取得する。
【００３８】
加えて、ＥＣＵ７０は、クランク角度センサ６４からの信号に基づいてロータ２４ｒ（クランクシャフト２４ｃ）が３６０°回転するのに要する時間をクランク角度３０°毎に取得し、これら取得した時間に基づいて機関回転速度ＮＥを取得する。更に、ＥＣＵ７０は、この取得した機関回転速度ＮＥをバックアップＲＡＭに格納する。
【００３９】
アクセル操作量センサ６６は、図示しないアクセルペダルの操作量を検出し、同操作量Ａccpを表す信号を出力する。
【００４０】
車速センサ６７は、機関１０が搭載された図示しない車両の車速を検出し、同車速ＳＰＤを表す信号を出力する。
【００４１】
（本実施装置の失火判定に係る作動）
次に、図４乃至図６を参照しながら、各気筒♯１乃至♯６において失火が生じているか否かを判定する「本実施装置の失火判定」に係る作動について説明する。
【００４２】
ＥＣＵ７０のＣＰＵは、所定クランク角度毎（１２０°以下の角度毎であり、本例において、基準歯部２４ｔ_refを基準としてクランク角度３０°毎）に図４に示した失火判定許可フラグ設定ルーチンを実行するようになっている。従って、ＥＣＵ７０のＣＰＵは、所定のタイミングになると、図４のステップ４００から処理を開始してステップ４０５に進み、失火判定条件が成立しているか否かを判定する。失火判定条件は、例えば、「フューエルカット中ではないこと」及び「機関サイクルが所定回数行われる間における機関回転速度ＮＥの変動幅（本例において、機関回転速度ＮＥの最大値と最小値との差）が比較的小さい一定幅以内であること」である。尚、フューエルカットとは、「機関１０において燃料噴射弁２９からの燃料噴射を停止する制御」である。
【００４３】
ＣＰＵがステップ４０５の処理を実行する時点において、失火判定条件が成立している場合、ＣＰＵはそのステップ４０５にて「Ｙｅｓ」と判定してステップ４１０に進み、失火判定許可フラグＸper_diagの値が「０」であるか否かを判定する。
【００４４】
ＣＰＵがステップ４１０の処理を実行する時点において、失火判定許可フラグＸper_diagの値が「１」である場合、ＣＰＵはそのステップ４１０にて「Ｎｏ」と判定してステップ４９５に進み、本ルーチンを一旦終了する。
【００４５】
これに対し、ＣＰＵがステップ４１０の処理を実行する時点において、失火判定許可フラグＸper_diagの値が「０」である場合、ＣＰＵはそのステップ４１０にて「Ｙｅｓ」と判定してステップ４１５に進み、絶対クランク角度θが１２０°のｎ倍の角度であるか否かを判定する。前記「ｎ」は、０〜５の整数である。
【００４６】
ＣＰＵがステップ４１５の処理を実行する時点において、その時点の絶対クランク角度θが１２０°のｎ倍の角度ではない場合、ＣＰＵはそのステップ４１５にて「Ｎｏ」と判定してステップ４９５に進み、本ルーチンを一旦終了する。
【００４７】
これに対し、ＣＰＵがステップ４１５の処理を実行する時点において、その時点の絶対クランク角度θが１２０°のｎ倍の角度である場合、ＣＰＵはそのステップ４１５にて「Ｙｅｓ」と判定し、以下に述べるステップ４２０及びステップ４２５の処理を順に実行する。その後、ＣＰＵは、ステップ４９５に進み、本ルーチンを一旦終了する。
【００４８】
ステップ４２０：ＣＰＵは、失火判定許可フラグＸper_diagをセットする。
ステップ４２５：ＣＰＵは、現時刻ｔ_nowを取得し、前回時刻ｔ_oldに格納する。
【００４９】
一方、ＣＰＵがステップ４０５の処理を実行する時点において、失火判定条件が成立していない場合、ＣＰＵはそのステップ４０５にて「Ｎｏ」と判定し、以下に述べるステップ４３０を実行する。その後、ＣＰＵは、ステップ４９５に進み、本ルーチンを一旦終了する。
【００５０】
ステップ４３０：ＣＰＵは、失火判定許可フラグＸper_diagをリセットする。
【００５１】
ＣＰＵは、図４のルーチンに続いて図５にフローチャートにより示した所要時間取得ルーチンを実行するようになっている。従って、図４のルーチンが終了すると、ＣＰＵは、図５のステップ５００から処理を開始してステップ５０５に進み、失火判定許可フラグＸper_diagの値が「１」であるか否かを判定する。
【００５２】
ＣＰＵがステップ５０５の処理を実行する時点において、失火判定許可フラグＸper_diagの値が「１」である場合、ＣＰＵはそのステップ５０５にて「Ｙｅｓ」と判定してステップ５１０に進み、クランク角度カウンタＣnorの値が「１２０」であるか否かを判定する。
【００５３】
このクランク角度カウンタＣnorは、図４のステップ４２５又は後に述べるステップ５３５において現時刻t_nowが前回時刻ｔ_oldに格納されてからＣＰＵの演算上で進んだクランク角度を表すカウンタである。別の言い方をすると、クランク角度カウンタＣnorは、絶対クランク角度θが１２０°のｎ倍（「ｎ」は、０〜５の整数）の角度になってからＣＰＵの演算上で進んだクランク角度を表すカウンタである。従って、クランク角度カウンタＣnorが「１２０」になった時点は、絶対クランク角度θが１２０°のｎ倍の角度になってからクランク角度がＣＰＵの演算上で１２０°進んだ時点である。
【００５４】
ＣＰＵがステップ５１０の処理を実行する時点において、クランク角度カウンタＣnorの値が「１２０」である場合、ＣＰＵはそのステップ５１０にて「Ｙｅｓ」と判定し、以下に述べるステップ５１５乃至ステップ５４５の処理を順に実行する。その後、ＣＰＵは、ステップ５５０に進む。
【００５５】
ステップ５１５：ＣＰＵは、現時刻ｔ_nowから前回時刻ｔ_oldを減ずることにより「仮所要時間Ｔ’」を取得する（Ｔ’＝ｔ_now−ｔ_old）。この仮所要時間Ｔ’は、「クランク角度センサ６４が基準歯部２４ｔ_ref（図３を参照。）を検出してから１２番目の歯部２４ｔ_１２を検出するまでに経過した時間」、又は、「クランク角度センサ６４が１２番目の歯部２４ｔ_１２を検出してから２４番目の歯部２４ｔ_２４を検出するまでに経過した時間」、又は、「クランク角度センサ６４が２４番目の歯部２４ｔ_２４を検出してから基準歯部２４ｔ_refを検出するまでに経過した時間」である。
【００５６】
ステップ５２０：ＣＰＵは、その時点の機関回転速度ＮＥを取得する。機関回転速度ＮＥは、先に述べたように、クランクシャフト２４ｃが３６０°回転するのに要する時間に基づいて取得される速度であり、ＣＰＵが別途実行するルーチンにより取得されてＥＣＵ７０のバックアップＲＡＭに格納されている。
【００５７】
ステップ５２５：ＣＰＵは、「機関回転速度ＮＥ」及び「絶対クランク角度対応値ｎ」をルックアップテーブルMapK(NE,n)に適用することにより「後に述べる所要時間補正係数Ｋ１２又はＫ２４又はＫ３６」を取得する。
【００５８】
前記絶対クランク角度対応値ｎは、その時点の絶対クランク角度θが「１２０°」である場合、「１」であり、同絶対クランク角度θが「２４０°」である場合、「２」であり、同絶対クランク角度θが「３６０°」である場合、「３」である。更に、前記絶対クランク角度対応値ｎは、その時点の絶対クランク角度θが「４８０°」である場合、「４」であり、同絶対クランク角度θが「６００°」である場合、「５」であり、同絶対クランク角度θが「７２０°（＝０°）」である場合、「６」である。
【００５９】
従って、前記ルックアップテーブルMapK(NE,n)によれば、ＣＰＵがステップ５２５の処理を実行する時点における絶対クランク角度θが「１２０°」又は「４８０°」である場合（即ち、絶対クランク角度対応値ｎが「１」又は「４」である場合）、その時点の機関回転速度ＮＥが属する領域（後に述べる領域Ｒ１乃至Ｒ５の何れか１つ）に対応する所要時間補正係数Ｋ１２が取得される。
【００６０】
一方、絶対クランク角度θが「２４０°」又は「６００°」である場合（即ち、絶対クランク角度対応値ｎが「２」又は「５」である場合）、その時点の機関回転速度ＮＥが属する領域（後に述べる領域Ｒ１乃至Ｒ５の何れか１つ）に対応する所要時間補正係数Ｋ２４が取得される。
【００６１】
一方、絶対クランク角度θが「３６０°」又は「７２０°（＝０°）」である場合（即ち、絶対クランク角度対応値ｎが「３」又は「６」である場合）、その時点の機関回転速度ＮＥが属する領域（後に述べる領域Ｒ１乃至Ｒ５の何れか１つ）に対応する所要時間補正係数Ｋ３６が取得される。
【００６２】
ステップ５３０：ＣＰＵは、仮所要時間Ｔ’に「先に述べたステップ５２５にて取得した所要時間補正係数Ｋ（Ｋ１２又はＫ２４又はＫ３６）」を乗ずることにより最終的な所要時間Ｔを取得する（Ｔ＝Ｔ’・Ｋ）。更に、ＣＰＵは、この所要時間Ｔを「その時点においてクランク角度が膨張行程１２０°にある気筒（その時点においてその気筒のクランク角度がその気筒における圧縮上死点後１２０°にある気筒）」及び「現時刻ｔ_now」に対応させてバックアップＲＡＭに格納する。
【００６３】
より具体的に述べると、本例においては、各気筒♯１乃至♯６の膨張行程は、図７に示したように、第１気筒♯１、第２気筒♯２、第３気筒♯３、第４気筒♯４、第５気筒♯５、第６気筒♯６の順に行われる。
【００６４】
そして、ＣＰＵがステップ５３０の処理を実行する時点の絶対クランク角度が１２０°である場合、ＣＰＵは、取得した所要時間Ｔ（＝Ｔ’・Ｋ１２）を「第１気筒♯１及び現時刻ｔ_now」に対応させてバックアップＲＡＭに格納する。このときに格納される所要時間Ｔは、図７に示したように、「第１気筒♯１の膨張行程の開始時点（同気筒♯１の圧縮上死点）」から「その気筒♯１におけるクランク角度が１２０°に達する時点」までの時間Ｔ（♯１）である。
【００６５】
一方、ＣＰＵがステップ５３０の処理を実行する時点の絶対クランク角度が２４０°である場合、ＣＰＵは、取得した所要時間Ｔ（＝Ｔ’・Ｋ２４）を「第２気筒♯２及び現時刻ｔ_now」に対応させてバックアップＲＡＭに格納する。このときに格納される所要時間Ｔは、図７に示したように、「第２気筒♯２の膨張行程の開始時点（同気筒♯２の圧縮上死点）」から「その気筒♯２における圧縮上死点後のクランク角度が１２０°に達する時点」までの時間Ｔ（♯２）である。
【００６６】
一方、ＣＰＵがステップ５３０の処理を実行する時点の絶対クランク角度が３６０°である場合、ＣＰＵは、取得した所要時間Ｔ（＝Ｔ’・Ｋ３６）を「第３気筒♯３及び現時刻ｔ_now」に対応させてバックアップＲＡＭに格納する。このときに格納される所要時間Ｔは、図７に示したように、「第３気筒♯３の膨張行程の開始時点（同気筒♯３の圧縮上死点）」から「その気筒♯３における圧縮上死点後のクランク角度が１２０°に達する時点」までの時間Ｔ（♯３）である。
【００６７】
更に、ＣＰＵがステップ５３０の処理を実行する時点の絶対クランク角度が４８０°である場合、ＣＰＵは、取得した所要時間Ｔ（＝Ｔ’・Ｋ１２）を「第４気筒♯４及び現時刻ｔ_now」に対応させてバックアップＲＡＭに格納する。このときに格納される所要時間Ｔは、図７に示したように、「第４気筒♯４の膨張行程の開始時点（同気筒♯４の圧縮上死点）」から「その気筒♯４における圧縮上死点後のクランク角度が１２０°に達する時点」までの時間Ｔ（♯４）である。
【００６８】
一方、ＣＰＵがステップ５３０の処理を実行する時点の絶対クランク角度が６００°である場合、ＣＰＵは、取得した所要時間Ｔ（＝Ｔ’・Ｋ２４）を「第５気筒♯５及び現時刻ｔ_now」に対応させてバックアップＲＡＭに格納する。このときに格納される所要時間Ｔは、図７に示したように、「第５気筒♯５の膨張行程の開始時点（同気筒♯５の圧縮上死点）」から「その気筒♯５における圧縮上死点後のクランク角度が１２０°に達する時点」までの時間Ｔ（♯５）である。
【００６９】
一方、ＣＰＵがステップ５３０の処理を実行する時点の絶対クランク角度が７２０°（＝０°）である場合、ＣＰＵは、取得した所要時間Ｔ（＝Ｔ’・Ｋ３６）を「第６気筒♯６及び現時刻ｔ_now」に対応させてバックアップＲＡＭに格納する。このときに格納される所要時間Ｔは、図７に示したように、「第６気筒♯６の膨張行程の開始時点（同気筒♯６の圧縮上死点）」から「その気筒♯６における圧縮上死点後のクランク角度が１２０°に達する時点」までの時間Ｔ（♯６）である。
【００７０】
ステップ５３５：ＣＰＵは、現時刻ｔ_nowを前回時刻ｔ_oldに格納する。
ステップ５４０：ＣＰＵは、データ取得数カウンタＣdataをカウントアップする。
ステップ５４５：ＣＰＵは、クランク角度カウンタＣnorをクリアする。
【００７１】
ＣＰＵは、ステップ５５０に進むと、データ取得数カウンタＣdataが「４」以上であるか否かを判定する。データ取得数カウンタＣdataが「４」以上である場合、ＣＰＵはそのステップ５５０にて「Ｙｅｓ」と判定し、以下に述べるステップ５５５及びステップ５６０の処理を順に実行する。その後、ＣＰＵは、ステップ５９５に進み、本ルーチンを一旦終了する。
【００７２】
ステップ５５５：ＣＰＵは、失火判定実行フラグＸdiagをセットする。
ステップ５６０：ＣＰＵは、クランク角度カウンタＣnorを所定値ΔＣnorだけカウントアップする。前記所定値ΔＣnorは、本ルーチンの実行クランク角度間隔に相当する値（３０）である。
【００７３】
これに対し、ＣＰＵがステップ５５０の処理を実行する時点において、データ取得数カウンタＣdataが「３」以下である場合、ＣＰＵはそのステップ５５０にて「Ｎｏ」と判定し、先に述べたステップ５６０の処理を実行する。その後、ＣＰＵは、ステップ５９５に進み、本ルーチンを一旦終了する。
【００７４】
一方、ＣＰＵがステップ５１０の処理を実行する時点において、クランク角度カウンタＣnorの値が「１２０」ではない場合、ＣＰＵはそのステップ５１０にて「Ｎｏ」と判定し、先に述べたステップ５６０の処理を実行する。その後、ＣＰＵは、ステップ５９５に進み、本ルーチンを一旦終了する。
【００７５】
更に、ＣＰＵがステップ５０５の処理を実行する時点において、失火判定許可フラグＸper_diagの値が「０」である場合、ＣＰＵはそのステップ５０５にて「Ｎｏ」と判定し、以下に述べるステップ５６５乃至ステップ５７５の処理を順に実行する。その後、ＣＰＵは、ステップ５９５に進み、本ルーチンを一旦終了する。
【００７６】
ステップ５６５：ＣＰＵは、失火判定実行フラグＸdiagをリセットする。
ステップ５７０：ＣＰＵは、データ取得数カウンタＣdataをクリアする。
ステップ５７５：ＣＰＵは、クランク角度カウンタＣnorをクリアする。
【００７７】
ＣＰＵは、図５の所要時間取得ルーチンに続いて図６の失火判定ルーチンを実行するようになっている。従って、図５のルーチンが終了すると、ＣＰＵは、図６のステップ６００から処理を開始してステップ６０５に進み、失火判定実行フラグＸdiagの値が「１」であるか否かを判定する。
【００７８】
ＣＰＵがステップ６０５の処理を実行する時点において、失火判定実行フラグＸdiagの値が「０」である場合、ＣＰＵはそのステップ６０５にて「Ｎｏ」と判定してステップ６９５に進み、本ルーチンを一旦終了する。
【００７９】
これに対し、ＣＰＵがステップ６０５の処理を実行する時点において、失火判定実行フラグＸdiagの値が「１」である場合、ＣＰＵはそのステップ６０５にて「Ｙｅｓ」と判定し、以下に述べるステップ６１０の処理を実行する。その後、ＣＰＵは、ステップ６１５に進む。
【００８０】
ステップ６１０：ＣＰＵは、「連続気筒間変動量ΔＴcon」、「間欠気筒間変動量ΔＴint」及び「対向気筒間変動量ΔＴopp」を取得する。
【００８１】
前記連続気筒間変動量ΔＴconは、膨張行程が連続する２つの気筒それぞれに対応して格納されている所要時間Ｔ間の差分に相当する。例えば、ＣＰＵが図５のステップ５３０において「第４気筒♯４及びその時点の現時刻ｔ_now」に対応させて所要時間Ｔを格納した場合、連続気筒間変動量ΔＴconは、「その第４気筒♯４に対応して格納された所要時間Ｔ（♯４）」から「第３気筒♯３に対応して格納されている最新の所要時間Ｔ（♯３）」を減ずることによって取得される（ΔＴcon＝Ｔ（♯４）−Ｔ（♯３））。
【００８２】
前記間欠気筒間変動量ΔＴintは、１つの気筒の膨張行程を挟んで前後に膨張行程が行われる２つの気筒それぞれに対応して格納されている所要時間Ｔ間の差分に相当する。例えば、同じく、ＣＰＵが図５のステップ５３０において「第４気筒♯４及びその時点の現時刻ｔ_now」に対応させて所要時間Ｔを格納した場合、間欠気筒間変動量ΔＴintは、「その第４気筒♯４に対応して格納された所要時間Ｔ（♯４）」から「第２気筒♯２に対応して格納されている最新の所要時間Ｔ（♯２）」を減ずることによって取得される（ΔＴint＝Ｔ（♯４）−Ｔ（♯２））。
【００８３】
前記対向気筒間変動量ΔＴoppは、膨張行程が３６０°クランク角度ずれて行われる２つの気筒それぞれに対応して格納されている所要時間Ｔ間の差分に相当する。例えば、同じく、ＣＰＵが図５のステップ５３０において「第４気筒♯４及びその時点の現時刻ｔ_now」に対応させて所要時間Ｔを格納した場合、対向気筒間変動量ΔＴoppは、「その第４気筒♯４に対応して格納された所要時間Ｔ（♯４）」から「第１気筒♯１に対応して格納されている最新の所要時間Ｔ（♯１）」を減ずることによって取得される（ΔＴopp＝Ｔ（♯４）−Ｔ（♯１））。
【００８４】
ＣＰＵは、ステップ６１５に進むと、「連続気筒間変動量ΔＴcon」、「間欠気筒間変動量ΔＴint」及び「対向気筒間変動量ΔＴopp」の総てが所定量ΔＴthよりも小さいか否かを判定する。
【００８５】
ＣＰＵがステップ６１５の処理を実行する時点において、変動量ΔＴcon、ΔＴint及びΔＴoppのうち何れか１つでも所定量ΔＴth以上である場合、ＣＰＵはそのステップ６１５にて「Ｎｏ」と判定し、以下に述べるステップ６２０の処理を実行する。その後、ＣＰＵは、ステップ６９５に進み、本ルーチンを一旦終了する。
【００８６】
ステップ６２０：ＣＰＵは、図５のステップ５３０において所要時間Ｔを格納するときに対応させた気筒♯Ｎにおいて失火が生じていると判定する。
【００８７】
より具体的に述べると、ＣＰＵが図５のステップ５３０において「第４気筒♯４及びその時点の現時刻ｔ_now」に対応させて所要時間Ｔを格納した場合、連続気筒間変動量ΔＴconは、先に述べたように、所要時間Ｔ（♯４）から所要時間Ｔ（♯３）を減ずることによって取得される（ΔＴcon＝Ｔ（♯４）−Ｔ（♯３））。このとき、第３気筒♯３において失火が生じておらず且つ第４気筒♯４において失火が生じている場合、所要時間Ｔ（♯４）は所要時間Ｔ（♯３）よりも一定時間以上長くなる。このため、連続気筒間変動量ΔＴconは、前記所定量ΔＴth以上となる。その結果、ＣＰＵは、ステップ６１５にて「Ｎｏ」と判定し、ステップ６２０にて、第４気筒♯４にて失火が生じていると判定する。
【００８８】
同じく、ＣＰＵが図５のステップ５３０において「第４気筒♯４及びその時点の現時刻ｔ_now」に対応させて所要時間Ｔを格納した場合、間欠気筒間変動量ΔＴintは、先に述べたように、所要時間Ｔ（♯４）から所要時間Ｔ（♯２）を減ずることによって取得される（ΔＴint＝Ｔ（♯４）−Ｔ（♯２））。このとき、第２気筒♯２において失火が生じておらず且つ第４気筒♯４において失火が生じている場合、所要時間Ｔ（♯４）は所要時間Ｔ（♯２）よりも一定時間以上長くなる。このため、間欠気筒間変動量ΔＴintは、前記所定量ΔＴth以上となる。その結果、ＣＰＵは、ステップ６１５にて「Ｎｏ」と判定し、ステップ６２０にて、第４気筒♯４にて失火が生じていると判定する。
【００８９】
同じく、ＣＰＵが図５のステップ５３０において「第４気筒♯４及びその時点の現時刻ｔ_now」に対応させて所要時間Ｔを格納した場合、対向気筒間変動量ΔＴoppは、所要時間Ｔ（♯４）から所要時間Ｔ（♯１）を減ずることによって取得される（ΔＴopp＝Ｔ（♯４）−Ｔ（♯１））。このとき、第１気筒♯１において失火が生じておらず且つ第４気筒♯４において失火が生じている場合、所要時間Ｔ（♯４）は所要時間Ｔ（♯１）よりも一定時間以上長くなる。このため、対向気筒間変動量ΔＴoppは、前記所定量ΔＴth以上となる。その結果、ＣＰＵは、ステップ６１５にて「Ｎｏ」と判定し、ステップ６２０にて、第４気筒♯４にて失火が生じていると判定する。
【００９０】
一方、ＣＰＵがステップ６１５の処理を実行する時点において、総ての変動量ΔＴcon、ΔＴint及びΔＴoppが所定量ΔＴthよりも小さい場合、ＣＰＵはそのステップ６１５にて「Ｙｅｓ」と判定してステップ６９５に進み、本ルーチンを一旦終了する。この場合、失火が生じていると判定される気筒はない。
【００９１】
以上が本実施装置の失火判定に係る作動である。
【００９２】
（本実施装置の「補正係数学習及び取得」に係る作動の概要）
次に、図８を参照しながら、本実施装置の「補正係数学習及び取得」に係る作動の概要について説明する。先に述べたように、本実施装置は、ロータ２４ｒが絶対クランク角度０°から１２０°まで回転するのに要する時間（所要時間Ｔ１２）、ロータ２４ｒが絶対クランク角度１２０°から２４０°まで回転するのに要する時間（所要時間Ｔ２４）、及び、ロータ２４ｒが絶対クランク角度２４０°から３６０°まで回転するのに要する時間（所要時間Ｔ３６）、を用いて、各気筒♯Ｎに失火が生じているか否かを判定する。
【００９３】
ここで、ロータ２４ｒの各歯部２４ｔが正確に１０°角度間隔にて設けられていれば、ロータ２４ｒの角速度が一定である場合、「クランク角度センサ６４により基準歯部２４ｔ_ref（図３を参照。）が検出されてから１２番目の歯部２４ｔ_１２が検出されるまでに要する時間（以下、「検出時間Ｔdtc１」と称呼する。）」、「クランク角度センサ６４により１２番目の歯部２４ｔ_１２が検出されてから２４番目の歯部２４ｔ_２４が検出されるまでに要する時間（以下、「検出時間Ｔdtc２」と称呼する。）」及び「クランク角度センサ６４により２４番目の歯部２４ｔ_２４が検出されてから基準歯部（３６番目の歯部）２４ｔ_refが検出されるまでに要する時間（以下、「検出時間Ｔdtc３」と称呼する。）」は、互いに正確に一致する。
【００９４】
しかしながら、実際には、製造誤差があることから、各歯部２４ｔが正確に１０°角度間隔で設けられていないことがある。この場合、ロータ２４ｒの角速度が一定であったとしても、前記検出時間Ｔdtc１乃至Ｔdtc３は、互いに一致しない。
【００９５】
そこで、本例においては、先に述べたように、ＣＰＵは、絶対クランク角度が「１２０°」又は「４８０°」であるときに取得した仮所要時間Ｔ’（前記検出時間Ｔdtc１に相当し、以下、「仮所要時間Ｔ１２’」と称呼する。）を所要時間補正係数Ｋ１２により補正する（図５のステップ５３０を参照。）。これにより、ＣＰＵは、ロータ２４ｒが基準歯部２４ｔ_refから１２０°回転するのに要する正確な時間（所要時間Ｔ１２）を取得するようにしている。
【００９６】
更に、ＣＰＵは、絶対クランク角度が「２４０°」又は「６００°」であるときに取得した仮所要時間Ｔ’（前記検出時間Ｔdtc２に相当し、以下、「仮所要時間Ｔ２４’」と称呼する。）を所要時間補正係数Ｋ２４により補正する（図５のステップ５３０を参照。）。これにより、ＣＰＵは、ロータ２４ｒが１２番目の歯部２４ｔ_１２から１２０°回転するのに要する正確な時間（所要時間Ｔ２４）を取得するようにしている。
【００９７】
加えて、ＣＰＵは、絶対クランク角度が「３６０°」又は「７２０°」であるときに取得した仮所要時間Ｔ’（前記検出時間Ｔdtc３に相当し、以下、「仮所要時間Ｔ３６’」と称呼する。）を所要時間補正係数Ｋ３６により補正する（図５のステップ５３０を参照。）。これにより、ＣＰＵは、ロータ２４ｒが２４番目の歯部２４ｔ_２４から１２０°回転するのに要する正確な時間（所要時間Ｔ３６）を取得するようになっている。
【００９８】
本実施装置は、このように正確な所要時間Ｔ１２乃至Ｔ３６を取得するために使用する所要時間補正係数Ｋ１２、Ｋ２４及びＫ３６を以下のようにして取得（学習）する。
【００９９】
即ち、本実施装置は、図８に示したように、機関回転速度ＮＥに関して分割した５つの領域（第１領域Ｒ１乃至第５領域Ｒ５）にそれぞれ対応して、３つの補正係数Ｋ１２、Ｋ２４及びＫ３６を取得する。
【０１００】
本例においては、前記第１領域Ｒ１は、機関回転速度ＮＥが「０」以上であり且つ第１速度ＮＥ１（＞０）未満の範囲である。前記第２領域Ｒ２は、機関回転速度ＮＥが前記第１速度ＮＥ１以上であり且つ第２速度ＮＥ２（＞第１速度ＮＥ１）未満である範囲である。前記第３領域Ｒ３は、機関回転速度ＮＥが前記第２速度ＮＥ２以上であり且つ第３速度ＮＥ３（＞第２速度ＮＥ２）未満である範囲である。前記第４領域Ｒ４は、機関回転速度ＮＥが第３速度ＮＥ３以上であり且つ第４速度ＮＥ４（＞第３速度ＮＥ３）未満の範囲である。前記第５領域Ｒ５は、機関回転速度ＮＥが前記第４速度ＮＥ４以上である範囲である。
【０１０１】
何れの領域Ｒ１乃至Ｒ５に対しても、補正係数Ｋ１２、Ｋ２４及びＫ３６が取得されていない場合、これら補正係数Ｋ１２、Ｋ２４及びＫ３６の値は、図８の（Ａ）に示したように、それぞれ「１．０」である。加えて、この場合、総ての領域Ｒ１乃至Ｒ５において、「学習」は完了していない（未完了）。
【０１０２】
ところで、前記フューエルカットが実行されているとき、各気筒♯１乃至♯６において燃料の燃焼が行われない。従って、ロータ２４ｒの回転速度が一定であれば、前記仮所要時間Ｔ１２’、Ｔ２４’及びＴ３６’の間に生じている差は、失火に起因して生じた差ではなく、ロータ２４ｒの歯部２４ｔの製造誤差に起因して生じた差である。
【０１０３】
そこで、本実施装置は、フューエルカットの開始後、同フューエルカット中に、絶対クランク角度θが１２０°のｎ倍の角度（「ｎ」は、０〜５の整数）になったときに前記仮所要時間Ｔ’の計測を開始し、３つの仮所要時間Ｔ１２’、Ｔ２４’及びＴ３６’を取得する。
【０１０４】
更に、ロータ２４ｒの回転速度が一定でなければ、その回転速度の変化に起因して、前記仮所要時間Ｔ１２’、Ｔ２４’及びＴ３６’の間に差が生じる。フューエルカット中は、ロータ２４ｒの回転速度（即ち、機関回転速度ＮＥ）は一定ではなく、低下する。従って、この回転速度の低下に起因して、前記仮所要時間Ｔ１２’、Ｔ２４’及びＴ３６’の間に差が生じる。
【０１０５】
そこで、本実施装置は、下記の（１）式乃至（３）式に従って、各仮所要時間Ｔ１２’、Ｔ２４’及びＴ３６’を「ロータ２４ｒの回転速度（即ち、機関回転速度ＮＥ）が一定であった場合の所要時間Ｔ１２”、Ｔ２４”及びＴ３６”」に換算する。
【０１０６】
Ｔ１２”＝Ｔ１２’・（ＮＥ１２／ＮＥint）      …（１）
Ｔ２４”＝Ｔ２４’・（ＮＥ２４／ＮＥint）      …（２）
Ｔ３６”＝Ｔ３６’・（ＮＥ３６／ＮＥint）      …（３）
【０１０７】
上記の（１）式乃至（３）式において、「ＮＥint」は、前記仮所要時間Ｔ１２’、Ｔ２４’及びＴ３６’のうち、最初に取得された仮所要時間Ｔ’の計測開示時点の機関回転速度ＮＥであり、「ＮＥ１２」は、仮所要時間Ｔ１２’の計測開始時点の機関回転速度ＮＥであり、「ＮＥ２４」は、仮所要時間Ｔ２４’の計測開始時点の機関回転速度ＮＥであり、「ＮＥ３６」は、仮所要時間Ｔ３６’の計測開始時点の機関回転速度ＮＥである。
【０１０８】
更に、本実施装置は、これら換算した所要時間Ｔ１２”、Ｔ２４”及びＴ３６”を用いて、下記（４）式乃至（６）式に従って所要時間補正係数Ｋ１２、Ｋ２４及びＫ３６を取得する。
Ｋ１２＝｛（Ｔ１２”＋Ｔ２４”＋Ｔ３６”）／３｝／Ｔ１２”      …（４）
Ｋ２４＝｛（Ｔ１２”＋Ｔ２４”＋Ｔ３６”）／３｝／Ｔ２４”      …（５）
Ｋ３６＝｛（Ｔ１２”＋Ｔ２４”＋Ｔ３６”）／３｝／Ｔ３６”      …（６）
【０１０９】
つまり、本実施装置は、３つの所要時間Ｔ１２”、Ｔ２４”及びＴ３６”の平均値を「基準所要時間」とし、この基準所要時間に対する各所要時間Ｔ１２”、Ｔ２４”及びＴ３６”の比の逆数をそれぞれ「所要時間補正係数Ｋ１２、Ｋ２４及びＫ３６」として取得する。
【０１１０】
そして、本実施装置は、前記機関回転速度ＮＥintが属する領域Ｒに対応する補正係数Ｋ１２、Ｋ２４及びＫ３６を「これら新たに取得した補正係数Ｋ１２、Ｋ２４及びＫ３６」に置き換える（取得し、学習する）。これにより、この領域Ｒの学習が完了する。
【０１１１】
更に、本実施装置は、「各補正係数Ｋ１２、Ｋ２４及びＫ３６の学習が完了していない領域Ｒであって各補正係数の値が「１．０」である領域Ｒ」がある場合、その領域Ｒの補正係数Ｋ１２、Ｋ２４及びＫ３６を、今回学習が完了した領域Ｒの補正係数Ｋ１２、Ｋ２４及びＫ３６に置き換える（取得する）。但し、この場合、その領域Ｒの学習は完了しない。
【０１１２】
加えて、本実施装置は、「各補正係数Ｋ１２、Ｋ２４及びＫ３６の学習が完了していない領域Ｒであって今回学習が完了した領域Ｒの機関回転速度ＮＥよりも大きい機関回転速度ＮＥが属する領域Ｒの補正係数Ｋ１２、Ｋ２４及びＫ３６が補正係数として取得されている領域Ｒ」がある場合、その領域Ｒの補正係数Ｋ１２、Ｋ２４及びＫ３６を、今回学習が完了した領域Ｒの補正係数Ｋ１２、Ｋ２４及びＫ３６に置き換える（取得する）。この場合にも、その領域の学習は完了しない。
【０１１３】
一方、本実施装置は、「各補正係数Ｋ１２、Ｋ２４及びＫ３６の学習が完了していない領域Ｒであって今回学習が完了した領域Ｒの機関回転速度ＮＥよりも小さい機関回転速度ＮＥが属する領域Ｒの補正係数Ｋ１２、Ｋ２４及びＫ３６が補正係数として取得されている領域Ｒ」については、その領域Ｒの補正係数の置き換え（取得）を行わない。勿論、この場合、その領域Ｒの学習は完了しない。
【０１１４】
これによれば、例えば、機関回転速度ＮＥintが第３領域Ｒ３に属するときに「値Ｋ１２_Ｘ」、「値Ｋ２４_Ｘ」及び「値Ｋ３６_Ｘ」がそれぞれ補正係数Ｋ１２、Ｋ２４及びＫ３６として取得されると、図８の（Ｂ）に示したように、第３領域Ｒ３に対応する補正係数Ｋ１２、Ｋ２４及びＫ３６の値がそれぞれ「値Ｋ１２_Ｘ」、「値Ｋ２４_Ｘ」及び「値Ｋ３６_Ｘ」に置き換えられる（取得され、学習される）。これにより、第３領域Ｒ３に対応する補正係数の学習は完了する。
【０１１５】
加えて、このとき、補正係数の学習が完了していないその他の領域（第１領域Ｒ１、第２領域Ｒ２、第４領域Ｒ４及び第５領域Ｒ５）に対応する補正係数Ｋ１２、Ｋ２４及びＫ３６の値は「１．０」である。従って、これら「領域Ｒ１、Ｒ２、Ｒ４及びＲ５」に対応する補正係数Ｋ１２、Ｋ２４及びＫ３６がそれぞれ「値Ｋ１２_Ｘ」、「値Ｋ２４_Ｘ」及び「値Ｋ３６_Ｘ」に置き換えられる（取得される）。これにより、「これら領域Ｒ１、Ｒ２、Ｒ４及びＲ５」に対応する各補正係数Ｋ１２、Ｋ２４及びＫ３６の値は、図８の（Ｃ）に示したようになる。しかしながら、「これら領域Ｒ１、Ｒ２、Ｒ４及びＲ５」に対応する補正係数の学習は完了していない。
【０１１６】
その後、機関回転速度ＮＥintが第４領域Ｒ４に属するときに「値Ｋ１２_Ｙ」、「値Ｋ２４_Ｙ」及び「値Ｋ３６_Ｙ」がそれぞれ補正係数Ｋ１２、Ｋ２４及びＫ３６として取得されると、図８の（Ｄ）に示したように、第４領域Ｒ４に対応する補正係数Ｋ１２、Ｋ２４及びＫ３６の値がそれぞれ「値Ｋ１２_Ｙ」、「値Ｋ２４_Ｙ」及び「値Ｋ３６_Ｙ」に置き換えられる（取得され、学習される）。これにより、第４領域Ｒ４に対応する補正係数の学習は完了する。
【０１１７】
このとき、補正係数の学習が完了していないその他の領域（第１領域Ｒ１、第２領域Ｒ２及び第５領域Ｒ５）に対応する補正係数Ｋ１２、Ｋ２４及びＫ３６は、「今回学習が完了した第４領域Ｒ４の機関回転速度ＮＥよりも小さい機関回転速度ＮＥが属する第３領域Ｒ３」について学習された補正係数Ｋ１２_Ｘ、Ｋ２４_Ｘ及びＫ３６_Ｘである。従って、これら「領域Ｒ１、Ｒ２及びＲ５」に対応する補正係数Ｋ１２、Ｋ２４及びＫ３６の置き換え（取得）は行われず、図８の（Ｄ）に示した状態が維持される。
【０１１８】
その後、機関回転速度ＮＥintが前記第２領域Ｒ２に属するときに「値Ｋ１２_Ｚ」、「値Ｋ２４_Ｚ」及び「値Ｋ３６_Ｚ」がそれぞれ補正係数Ｋ１２、Ｋ２４及びＫ３６として取得されると、図８の（Ｅ）に示したように、第２領域Ｒ２に対応する補正係数Ｋ１２、Ｋ２４及びＫ３６の値がそれぞれ「値Ｋ１２_Ｚ」、「値Ｋ２４_Ｚ」及び「値Ｋ３６_Ｚ」に置き換えられる（取得され、学習される）。これにより、第２領域Ｒ２に対応する補正係数の学習は完了する。
【０１１９】
加えて、このとき、補正係数の学習が完了していないその他の領域（第１領域Ｒ１及び第５領域Ｒ５）に対応する補正係数Ｋ１２、Ｋ２４及びＫ３６の値は、「今回学習が完了した第２領域Ｒ２の機関回転速度ＮＥよりも大きい機関回転速度ＮＥが属する第３領域Ｒ３」について学習された補正係数Ｋ１２_Ｘ、Ｋ２４_Ｘ及びＫ３６_Ｘである。従って、これら領域Ｒ１及びＲ５に対応する補正係数Ｋ１２、Ｋ２４及びＫ３６は、それぞれ「値Ｋ１２_Ｚ」、「値Ｋ２４_Ｚ」及び「値Ｋ３６_Ｚ」に置き換えられる（取得される）。これにより、「これら領域Ｒ１及びＲ５」に対応する各補正係数Ｋ１２、Ｋ２４及びＫ３６は、図８（Ｆ）に示したようになる。しかしながら、「これら領域Ｒ１及びＲ５」に対応する補正係数の学習は完了していない。
【０１２０】
本実施装置は、フューエルカット実行中、こうした補正係数Ｋ１２、Ｋ２４及びＫ３６の「取得及び置き換え」を繰り返す。
【０１２１】
以上が本実施装置の「補正係数学習及び取得」に係る作動の概要である。
【０１２２】
（本実施装置の「補正係数学習及び取得」に係る具体的な作動）
次に、図９乃至図１１を参照しながら、本実施装置の「補正係数学習及び取得」に係る具体的な作動について説明する。
【０１２３】
ＣＰＵは、所定クランク角度毎（１２０°以下の角度毎であり、本例において、基準歯部２４ｔ_refを基準としてクランク角度３０°毎）に図９にフローチャートにより示した学習許可フラグ設定ルーチンを実行するようになっている。従って、ＥＣＵ７０のＣＰＵは、所定のタイミングになると、図９のステップ９００から処理を開始してステップ９０５に進み、フューエルカット中であるか否かを判定する。
【０１２４】
ＣＰＵがステップ９０５の処理を実行する時点において、フューエルカット中である場合、ＣＰＵはそのステップ９０５にて「Ｙｅｓ」と判定してステップ９１０に進み、学習許可フラグＸper_gの値が「０」であるか否かを判定する。
【０１２５】
ＣＰＵがステップ９１０の処理を実行する時点において、学習許可フラグＸper_gの値が「１」である場合、ＣＰＵはそのステップ９１０にて「Ｎｏ」と判定してステップ９９５に進み、本ルーチンを一旦終了する。
【０１２６】
これに対し、ＣＰＵがステップ９１０の処理を実行する時点において、学習許可フラグＸper_gの値が「０」である場合、ＣＰＵはそのステップ９１０にて「Ｙｅｓ」と判定してステップ９１５に進み、その時点の絶対クランク角度θが１２０°のｎ倍の角度であるか否かを判定する。前記「ｎ」は、０〜５の整数である。
【０１２７】
ＣＰＵがステップ９１５の処理を実行する時点において、その時点の絶対クランク角度θが１２０°のｎ倍の角度ではない場合、ＣＰＵはそのステップ９１５にて「Ｎｏ」と判定してステップ９９５に進み、本ルーチンを一旦終了する。
【０１２８】
これに対し、ＣＰＵがステップ９１５の処理を実行する時点において、その時点の絶対クランク角度θが１２０°のｎ倍の角度である場合、ＣＰＵはそのステップ９１５にて「Ｙｅｓ」と判定し、以下に述べるステップ９２０乃至ステップ９３５の処理を順に実行する。その後、ＣＰＵは、ステップ９９５に進み、本ルーチンを一旦終了する。
【０１２９】
ステップ９２０：ＣＰＵは、学習許可フラグＸper_gをセットする。
【０１３０】
ステップ９２５：ＣＰＵは、その時点の機関回転速度ＮＥを取得し、その機関回転速度ＮＥを初期機関回転速度ＮＥintとしてバックアップＲＡＭに格納する。機関回転速度ＮＥは、先に述べたように、クランクシャフト２４ｃが３６０°回転するのに要する時間に基づいて取得される速度であり、ＣＰＵが別途実行するルーチンにより取得されてＥＣＵ７０のバックアップＲＡＭに格納されている。
【０１３１】
ステップ９３０：ＣＰＵは、初期機関回転速度ＮＥintをルックアップテーブルMapR(NEint)に適用することにより、その初期機関回転速度ＮＥintが属する領域Ｒ（図８の第１領域Ｒ１乃至第５領域Ｒ５の何れか）を取得する。
【０１３２】
ステップ９３５：ＣＰＵは、現時刻ｔ_nowを取得し、前回時刻ｔ_oldに格納する。
【０１３３】
一方、ＣＰＵがステップ９０５の処理を実行する時点において、フューエルカット中ではない場合、ＣＰＵはそのステップ９０５にて「Ｎｏ」と判定し、以下に述べるステップ９４０の処理を実行する。その後、ＣＰＵは、ステップ９９５に進み、本ルーチンを一旦終了する。
【０１３４】
ステップ９４０：ＣＰＵは、学習許可フラグＸper_gをリセットする。
【０１３５】
ＣＰＵは、図９の学習許可フラグ設定ルーチンに続いて図１０の所要時間取得ルーチンを実行するようになっている。従って、図９のルーチンが終了すると、ＣＰＵは、図１０のステップ１０００から処理を開始してステップ１００５に進み、学習許可フラグＸper_gの値が「１」であるか否かを判定する。
【０１３６】
ＣＰＵがステップ１００５の処理を実行する時点において、学習許可フラグＸper_gの値が「１」である場合、ＣＰＵはそのステップ１００５にて「Ｙｅｓ」と判定してステップ１０１０に進み、その時点の機関回転速度ＮＥが図９のステップ９３０にて取得された領域Ｒに属しているか否かを判定する。
【０１３７】
ＣＰＵがステップ１０１０の処理を実行する時点において、その時点の機関回転速度ＮＥが図９のステップ９３０にて取得された領域Ｒに属している場合、ＣＰＵはそのステップ１０１０にて「Ｙｅｓ」と判定してステップ１０１５に進み、その時点のクランク角度カウンタＣfcの値が「１２０」又は「２４０」又は「３６０」であるか否かを判定する。
【０１３８】
このクランク角度カウンタＣfcは、仮所要時間Ｔ’の計測が開始されてからＣＰＵの演算上で進んだクランク角度を表すカウンタである。従って、クランク角度カウンタＣnorが「１２０」「２４０」及び「３６０」になった時点は、それぞれ、仮所要時間Ｔ’の計測が開始されてからクランク角度がＣＰＵの演算上で「１２０°」「２４０°」及び「３６０°」進んだ時点である。
【０１３９】
ＣＰＵがステップ１０１５の処理を実行する時点において、その時点のクランク角度カウンタＣfcの値が「１２０」又は「２４０」又は「３６０」である場合、ＣＰＵはそのステップ１０１５にて「Ｙｅｓ」と判定し、以下に述べるステップ１０２０乃至ステップ１０３５の処理を順に実行する。その後、ＣＰＵは、ステップ１０４０に進む。
【０１４０】
ステップ１０２０：ＣＰＵは、現時刻ｔ_nowから前回時刻ｔ_oldを減ずることにより「仮所要時間Ｔ’」を取得する（Ｔ’＝ｔ_now−ｔ_old）。
【０１４１】
ステップ１０２５：ＣＰＵは、その時点の機関回転速度ＮＥを取得する。
【０１４２】
ステップ１０３０：ＣＰＵは、ステップ１０２５にて取得した機関回転速度ＮＥを図９のステップ９２５にて取得した初期機関回転速度ＮＥintにより除した値を仮所要時間Ｔ’に乗ずることにより仮所要時間Ｔ’を補正して所要時間Ｔ”を取得する（Ｔ”＝Ｔ’・（ＮＥ／ＮＥint））。更に、ＣＰＵは、取得した所要時間Ｔ”をその時点の絶対クランク角度θに応じて所要時間Ｔ１２”、Ｔ２４”又はＴ３６”としてバックアップＲＡＭに格納する。
【０１４３】
より具体的に述べると、ＣＰＵがこのステップ１０３０の処理を実行する時点において、絶対クランク角度θが「１２０°」又は「４８０°」である場合、ＣＰＵは取得した所要時間Ｔ”を所要時間Ｔ１２”としてバックアップＲＡＭに格納する。一方、絶対クランク角度θが「２４０°」又は「６００°」である場合、ＣＰＵは取得した所要時間Ｔ”を所要時間Ｔ２４”としてバックアップＲＡＭに格納する。一方、絶対クランク角度θが「３６０°」又は「７２０°（＝０°）」である場合、ＣＰＵは取得した所要時間Ｔ”を所要時間Ｔ３６”としてバックアップＲＡＭに格納する。
【０１４４】
ステップ１０３５：ＣＰＵは、現時刻ｔ_nowを前回時刻ｔ_oldに格納する。
【０１４５】
ＣＰＵは、ステップ１０４０に進むと、クランク角度カウンタＣfcの値が「３６０」であるか否かを判定する。クランク角度カウンタＣfcの値が「３６０」である場合、ＣＰＵはそのステップ１０４０にて「Ｙｅｓ」と判定し、以下に述べるステップ１０４５及びステップ１０５０の処理を順に行う。その後、ＣＰＵは、ステップ１０９５に進み、本ルーチンを一旦終了する。
【０１４６】
ステップ１０４５：ＣＰＵは、学習実行フラグＸgをセットする。
ステップ１０５０：ＣＰＵは、クランク角度カウンタＣfcをクリアする。
【０１４７】
これに対し、ＣＰＵがステップ１０４０の処理を実行する時点において、クランク角度カウンタＣfcの値が「３６０」ではない場合、ＣＰＵはそのステップ１０４０にて「Ｎｏ」と判定し、以下に述べるステップ１０５５の処理を実行する。その後、ＣＰＵは、ステップ１０９５に進み、本ルーチンを一旦終了する。
【０１４８】
ステップ１０５５：ＣＰＵは、クランク角度カウンタＣfcを所定値ΔＣfcだけカウントアップする。前記所定値ΔＣfcは、本ルーチンの実行クランク角度間隔（本例において、３０°）に相当する値である。
【０１４９】
一方、ＣＰＵがステップ１０１５の処理を実行する時点において、その時点のクランク角度カウンタＣfcの値が「１２０」、「２４０」及び「３６０」の何れでもない場合、ＣＰＵはそのステップ１０１５にて「Ｎｏ」判定し、先に述べたステップ１０５５の処理を実行する。その後、ＣＰＵは、ステップ１０９５に進み、本ルーチンを一旦終了する。
【０１５０】
更に、ＣＰＵがステップ１０１０の処理を実行する時点において、その時点の機関回転速度ＮＥが図９のステップ９３０にて取得された領域Ｒに属していない場合、ＣＰＵはそのステップ１０１０にて「Ｎｏ」と判定し、以下に述べるステップ１０６０及びステップ１０６５の処理を順に実行する。その後、ＣＰＵは、ステップ１０９５に進み、本ルーチンを一旦終了する。
【０１５１】
ステップ１０６０：ＣＰＵは、学習実行フラグＸgをリセットする。
ステップ１０６５：ＣＰＵは、クランク角度カウンタＣfcをクリアする。
【０１５２】
加えて、ＣＰＵがステップ１００５の処理を実行する時点において、学習許可フラグＸper_gの値が「０」である場合、先に述べたステップ１０６０及びステップ１０６５を順に実行する。その後、ＣＰＵは、ステップ１０９５に進み、本ルーチンを一旦終了する。
【０１５３】
ＣＰＵは、図１０の所要時間取得ルーチンに続いて図１１の補正係数学習ルーチンを実行するようになっている。従って、図１０のルーチンが終了すると、ＣＰＵは、図１１のステップ１１００から処理を開始してステップ１１０５に進み、学習実行フラグＸgの値が「１」であるか否かを判定する。
【０１５４】
ＣＰＵがステップ１１０５の処理を実行する時点において、学習実行フラグＸgの値が「０」である場合、ＣＰＵはそのステップ１１０５にて「Ｎｏ」と判定してステップ１１９５に進み、本ルーチンを一旦終了する。
【０１５５】
これに対し、ＣＰＵがステップ１１０５の処理を実行する時点において、学習実行フラグＸgの値が「１」である場合、ＣＰＵはそのステップ１１０５にて「Ｙｅｓ」と判定し、以下に述べるステップ１１１０及びステップ１１１５の処理を順に実行する。その後、ＣＰＵは、ステップ１１９５に進み、本ルーチンを一旦終了する。
【０１５６】
ステップ１１１０：ＣＰＵは、図９のステップ９３０にて取得された領域Ｒに対応する所要時間Ｔ１２”、Ｔ２４”及びＴ３６”をバックアップＲＡＭから取得し、これら所要時間Ｔ１２”、Ｔ２４”及びＴ３６”を用いて下記の（４）式乃至（６）式に従って所要時間補正係数Ｋ１２、Ｋ２４及びＫ３６を取得する。
Ｋ１２＝{（Ｔ１２”＋Ｔ２４”＋Ｔ３６”）／３}／Ｔ１２”      …（４）
Ｋ２４＝{（Ｔ１２”＋Ｔ２４”＋Ｔ３６”）／３}／Ｔ２４”      …（５）
Ｋ３６＝{（Ｔ１２”＋Ｔ２４”＋Ｔ３６”）／３}／Ｔ３６”      …（６）
【０１５７】
更に、ＣＰＵは、このステップ１１１０において、「図９のステップ９３０にて取得された領域Ｒに対応して格納されている補正係数Ｋ１２、Ｋ２４及びＫ３６」を「前記取得した補正係数Ｋ１２、Ｋ２４及びＫ３６」に置き換える（補正係数を取得し、学習・記憶する）。これにより、図９のステップ９３０にて取得された領域Ｒについては、所要時間補正係数の学習が完了する。
【０１５８】
ステップ１１１５：ＣＰＵは、「所要時間補正係数の学習が完了していない領域Ｒのうち、補正係数Ｋ１２、Ｋ２４及びＫ３６の値が「１．０」である領域Ｒ」、及び、「所要時間補正係数の学習が完了していない領域Ｒのうち、ステップ１１１０にて学習が完了した領域Ｒの機関回転速度ＮＥよりも大きい機関回転速度ＮＥが属する領域Ｒに対応する補正係数Ｋ１２、Ｋ２４及びＫ３６が補正係数として取得されている領域Ｒ」に対応して格納されている補正係数Ｋ１２、Ｋ２４及びＫ３６」を「前記取得した補正係数Ｋ１２、Ｋ２４及びＫ３６」に置き換える（補正係数を取得し、記憶する）。但し、この領域Ｒについては、補正係数の学習は完了していない。
【０１５９】
以上が本実施装置の「補正係数学習及び取得」に係る具体的な作動である。
【０１６０】
以上説明したように、本実施装置が適用される内燃機関１０は、
クランクシャフト２４ｃと共に回転するように同クランクシャフトに配設され、外周部に複数の被検出部位（歯部２４ｔ）を等角度間隔（本例において、１０°）で備えるように加工されたロータ２４ｒ、及び、
前記被検出部位を検出するクランク角度センサ６４、
を備える。
【０１６１】
そして、本実施装置は、所定の学習条件が成立している場合（図９のステップ９０５にて「Ｙｅｓ」の場合を参照。）、所定数（本例において、１２個）の前記被検出部位が前記クランク角度センサによって検出されるのに要した時間を仮所要時間（Ｔ１２’、Ｔ２４’及びＴ３６’、又は、Ｔ１２”、Ｔ２４”及びＴ３６”）として取得し（図１０のステップ１０２０及びステップ１０３０を参照。）、同取得された仮所要時間に基づいて前記機関の複数の回転速度領域（領域Ｒ１乃至Ｒ５）のそれぞれに対応して設定される補正係数（Ｋ１２、Ｋ２４及びＫ３６）を取得し、同取得された補正係数を、前記仮所要時間が取得されたときの前記機関の実際の回転速度（初期機関回転速度ＮＥint）が属する前記回転速度領域に対する補正係数として記憶する学習を行う学習部を備える。
【０１６２】
更に、本実施装置は、所定の回転速度対応値取得条件が成立している場合（図４のステップ４０５にて「Ｙｅｓ」の場合を参照。）、前記所定数の前記被検出部位が前記クランク角度センサによって検出されるのに要した時間を仮所要時間（Ｔ１２’、Ｔ２４’及びＴ３６’）として取得し（図５のステップ５１５を参照。）、同取得された仮所要時間に、同仮所要時間が取得されたときの前記機関の実際の回転速度が属する前記回転速度領域に対して記憶されている前記補正係数（Ｋ１２又はＫ２４又はＫ３６）又はその逆数を乗じる、ことによって同仮所要時間を補正して最終的な所要時間を取得する（図５のステップ５３０を参照。）最終所要時間取得部を備える。
【０１６３】
加えて、前記学習部は、前記仮所要時間を新たに取得したときに、同新たに仮所要時間を取得した第１時点よりも前記クランクシャフトが１回転する期間だけ遡った第２時点から同第１時点までの時間に応じた時間（（４）式乃至（６）式の「（Ｔ１２”＋Ｔ２４”＋Ｔ３６”）／３」を参照）を基準所要時間として取得し（図１１のステップ１１１０を参照。）、前記新たに取得した仮所要時間に対する前記取得した基準所要時間の比に基づいて前記補正係数を新たに取得して前記学習を行う（図１１のステップ１１１０を参照。）とともに、前記補正係数の学習が行われていない前記回転速度領域が存在する場合には同学習が行われていない前記回転速度領域の前記補正係数として前記新たに取得した補正係数を記憶する（図１１のステップ１１１５を参照。）ように構成されている。
【０１６４】
以上の構成を備えた本実施装置によれば、簡便な形で各回転速度領域（各領域Ｒ１乃至Ｒ５）に対応する補正係数を取得することができるとともに、正確な所要時間（Ｔ（♯１）乃至Ｔ（♯６））を取得する機会が多くなる。
【符号の説明】
【０１６５】
１０…内燃機関、２４ｃ…クランクシャフト、２４ｒ…クランクシャフトタイミングロータ、歯部２４ｔ、６４…クランク角度センサ、６５…インテークカムポジションセンサ、７０…ＥＣＵ
【図１】
2016102422.tif 000003
【図２】
2016102422.tif 000004
【図３】
2016102422.tif 000005
【図４】
2016102422.tif 000006
【図５】
2016102422.tif 000007
【図６】
2016102422.tif 000008
【図７】
2016102422.tif 000009
【図８】
2016102422.tif 000010
【図９】
2016102422.tif 000011
【図１０】
2016102422.tif 000012
【図１１】
2016102422.tif 000013