(57)【特許請求の範囲】
【請求項１】
実値に対して浮動小数点演算によりなまし計算を実施する際に、該なまし計算の計算値が前記実値に収束したことを判定するための収束判定方法であって、
浮動小数点演算の演算誤差により前記なまし計算の今回の計算値が前回の計算値よりも前記実値に近づかなかったことを検出して、そのことを検出した場合に、収束したと判定すること、
を特徴とする浮動小数点演算によるなまし計算の収束判定方法。
【請求項２】
請求項１に記載の浮動小数点演算によるなまし計算の収束判定方法において、
今回の計算値と前記実値との差の絶対値Ｚ１と、前回の計算値と前記実値との差の絶対値Ｚ２とを比較して、「Ｚ１≧Ｚ２」となったら、収束したと判定すること、
を特徴とする浮動小数点演算によるなまし計算の収束判定方法。
【請求項３】
実値に対して浮動小数点演算によりなまし計算を実施する電子制御装置において、
浮動小数点演算の演算誤差により前記なまし計算の今回の計算値が前回の計算値よりも前記実値に近づかなかったことを検出して、そのことを検出した場合に、前記なまし計算の計算値が前記実値に収束したと判定するように構成されていること、
を特徴とする電子制御装置。
【請求項４】
請求項３に記載の電子制御装置において、
今回の計算値と前記実値との差の絶対値Ｚ１と、前回の計算値と前記実値との差の絶対値Ｚ２とを比較して、「Ｚ１≧Ｚ２」となったら、前記なまし計算の計算値が前記実値に収束したと判定するように構成されていること、
を特徴とする電子制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、浮動小数点演算によるなまし計算の収束を判定する技術に関するものである。
【０００２】
【従来の技術】
従来より、例えば自動車のエンジン制御などに適用される電子制御装置においては、制御処理に使用される制御データの値（制御値）が急変した場合の制御性の低下を防止するために、制御データの値を急変前の値から急変後の値へと緩やかに近づけていく処理を行っており、その処理として、なまし計算がある。
【０００３】
この種のなまし計算は、例えば特開２００１−１９６９３３号公報に記載されているように、「今回のなまし値＝実値＋（前回のなまし値−実値）×なまし率」といった計算式で実施される。そして、こうしたなまし計算の計算値であるなまし値は、収束目標値である実値へと徐々に近づいていくこととなり、また、制御データの値として制御処理に使用される。
【０００４】
尚、本明細書において、「実値」とは、各種センサによる実際の検出値や各種処理で求められた実際の指令値など、なまし計算の対象となるデータの実際の値（即ち、なまし前の値）を指している。
また近年、電子制御装置においては、マイクロプロセッサの高速化や制御へのモデル理論の適用などに伴って、高精度な計算が可能な浮動小数点演算（浮動小数点数を用いた計算）が実施されるようになってきている。
【０００５】
【発明が解決しようとする課題】
ところで、なまし計算において、固定小数点数（固定小数点型データ）を用いる場合には、なまし値と目標値である実値との差を求めて、その差が１ＬＳＢ以下となった場合に、なまし値が実値に収束したと判定することができる。なぜなら、１ＬＳＢ以下の値は表現できないため、切り捨てられるからである。しかし、固定小数点数を用いた場合、最小単位以下の精度はとり得ないため、高精度な制御ができないという欠点がある。
【０００６】
これに対して、浮動小数点数（浮動小数点型データ）を用いたならば、例えば、仮数部が２３ビットで構成される合計４バイトの単精度形式のデータでも、固定小数点数と比較すると、その１ＬＳＢが約０．００００００１と非常に小さな値となるため、より高精度な制御ができるものの、なまし計算の面では、なまし値が目標値である実値に近づくにつれて、そのなまし値と実値との差よりも演算誤差が大きくなるため、なまし値は必ずしも実値に収束しない（なまし値＝実値とならない）。これは、浮動小数点演算では、高精度な計算が可能であると同時に演算誤差を持つという特徴があるからである。
【０００７】
そして、なまし値が実値に収束したことを判定することができないと、なまし値が収束してから起動するような処理が遅れたり、収束するまで継続する処理が必要以上に長引いたりして、制御性が低下する可能性がある。
そこで、浮動小数点演算によるなまし計算の計算値（なまし値）が目標値である実値に収束したことを判定するための収束判定方法としては、例えば、実値となまし値との差に対してしきい値を設定して、その差がしきい値以下になったら収束したと判定する、といった方法が考えられる。
【０００８】
しかしながら、その様な方法では、しきい値を設定しなければならないことから、次のような様々な問題がある。つまり、しきい値を決めること自体が難しく、しかも、全てのなまし計算について、同一のしきい値を用いることができるという保証はないため、各なまし計算毎にしきい値を決めなければならず、その作業が非常に面倒なものとなってしまう。
【０００９】
一方、上記特開２００１−１９６９３３号公報には、前述した計算式における（前回のなまし値−実値）の項に対して、桁落ちを故意に生じさせるためのオフセットを加算した後、そのオフセットを減算することにより、実値となまし値との偏差がオフセットに応じた所定値以下になったときに、今回のなまし値を強制的に実値へと収束させる（今回のなまし値＝実値にさせる）ことが記載されている。
【００１０】
しかし、この公報に記載の方法においても、上記オフセットは、前述の方法におけるしきい値と同様の意味を持つものであり、そのオフセットを設定する必要があるため、前述の方法と全く同じ問題がある。
本発明は、こうした問題に鑑みなされたものであり、浮動小数点演算によるなまし計算の収束を簡単且つ正確に判定できるようにすることを目的としている。
【００１１】
【課題を解決するための手段及び発明の効果】
上記目的を達成するためになされた請求項１に記載の本発明は、実値に対して浮動小数点演算によりなまし計算を実施する際に、そのなまし計算の計算値が実値に収束したことを判定するための収束判定方法であって、浮動小数点演算の演算誤差によりなまし計算の今回の計算値が前回の計算値よりも実値に近づかなかったことを検出して、そのことを検出した場合に、収束したと判定することを特徴としている。
【００１２】
つまり、なまし計算の計算値は、本来ならば、計算の度に目標値である実値に近づいていくはずであるが、最後には、浮動小数点演算の演算誤差が原因で、今回の計算値が前回の計算値よりも実値に近づかないという事象が起こる。そこで、請求項１の収束判定方法では、その演算誤差に起因した事象を検出したときに、収束したと判定するようにしている。
【００１３】
そして、このような請求項１の収束判定方法によれば、「発明が解決しようとする課題」の欄で述べた従来の方法のようなしきい値やオフセットといった特別な値を設定しなくても良く、浮動小数点演算によるなまし計算の収束を簡単且つ正確に判定することができる。そして更に、この請求項１の収束判定方法によれば、様々なアプリケーションに使用されるなまし計算の各々について、全く同じロジックで収束を判定することができる。
【００１４】
ところで、請求項１に記載の『浮動小数点演算の演算誤差によりなまし計算の今回の計算値が前回の計算値よりも実値に近づかなかったこと』は、請求項２に記載のように、今回の計算値と実値との差の絶対値Ｚ１と、前回の計算値と実値との差の絶対値Ｚ２とを比較することで検出することができ、「Ｚ１＜Ｚ２」ではなく「Ｚ１≧Ｚ２」となったら、その『』内の事象が発生したとして、収束したと判定すれば良い。
【００１５】
そして、このような請求項２の方法によれば、２つの絶対値Ｚ１，Ｚ２を求める処理と、その両絶対値Ｚ１，Ｚ２を大小比較する処理とを行うだけで、なまし計算の収束を判定することができ、延いては、収束判定のためのプログラムを簡単なものにすることができる。
【００１６】
一方、請求項３に記載の電子制御装置は、実値に対して浮動小数点演算によりなまし計算を実施する際に、浮動小数点演算の演算誤差によりなまし計算の今回の計算値が前回の計算値よりも実値に近づかなかったことを検出して、そのことを検出した場合に、なまし計算の計算値が実値に収束したと判定するように構成されている。
【００１７】
つまり、請求項３の電子制御装置は、請求項１に記載の収束判定方法を実施している。そして、このような電子制御装置によれば、請求項１の収束判定方法について述べた効果（即ち、しきい値などの特別な値を設定しなくても、なまし計算の収束を正確に判定できる）により、設計が容易となり、延いては、低コスト化を達成することができる。また、設計変更にも柔軟に対応可能なものとなる。
【００１８】
次に、請求項４に記載の電子制御装置は、請求項３の電子制御装置において、なまし計算の今回の計算値と実値との差の絶対値Ｚ１と、前回の計算値と実値との差の絶対値Ｚ２とを比較して、「Ｚ１≧Ｚ２」となったら、なまし計算の計算値が実値に収束したと判定するように構成されている。
【００１９】
つまり、請求項４の電子制御装置は、請求項２に記載の収束判定方法を実施している。そして、このような電子制御装置によれば、請求項２の収束判定方法について述べた効果により、収束判定のための処理負荷が軽減されて他の処理の実施に余裕が生まれるため、より高度な制御処理を実施することが可能となる。
【００２０】
【発明の実施の形態】
以下、本発明が適用された実施形態の電子制御装置（以下、ＥＣＵという）について、図面を用いて説明する。
まず図１は、エンジン制御システムの概略構成を示すブロック図である。
【００２１】
本システムにおいて、車載エンジン１は、例えばガソリン噴射式の多気筒内燃機関である。
そして、車載エンジン１を制御するＥＣＵ１０は、マイクロコンピュータ（以下、マイコンという）１１を備えており、そのマイコン１１は、ＣＰＵ１２、ＲＯＭ１３、ＲＡＭ１４、ＦＰＵ（Floating Point Unit：浮動小数点演算プロセッサ）１５、及びＩ／Ｏ（入出力ポート）１６などを有している。尚、ＦＰＵ１５は、浮動小数点演算を実施し、ＣＰＵ１２は、浮動小数点演算以外の演算を実施する。
【００２２】
また、ＥＣＵ１０には、エンジン１に設けられたセンサ２から、エンジン１の運転状態を表す各種情報が入力される。例えば、センサ２は、エンジン１の吸入空気量を検出するためのエアフロメータ、冷却水温を検出するための水温センサ、スロットル開度を検出するためのスロットル開度センサなどからなる。
【００２３】
そして、ＥＣＵ１０は、上記センサ２から入力されるセンサ信号を基に、図示しないインジェクタによる燃料噴射の制御や燃料ガスのパージ制御などを実施する。
ここで、上記センサ２によって検出された実際の値（以下、実値という）は、ノイズ等を含むため、そのままでは制御に使えない。つまり、実値は変動が激しいため、この値をそのまま制御に使うと誤動作を招く虞がある。
【００２４】
そのため、ＥＣＵ１０では、センサ２によって検出された実値に対し、ＦＰＵ１５にて浮動小数点演算によるなまし計算を実施してノイズを除去し、そのなまし値（なまし計算の計算値）を制御処理に使用するようになっている。
つまり、ＥＣＵ１０では、ＣＰＵ１２により、実値を取得するための検出処理を一定時間Ｔ１毎（例えば３２ｍｓ毎）に実行すると共に、その実値に対するなまし計算を、ＦＰＵ１５により、上記検出処理と並行して、所定の一定時間毎（例えば上記Ｔ１よりも短い１ｍｓ毎）に実行するようになっており、そのなまし計算の計算値であるなまし値を、ＣＰＵ１２によるエンジン制御用の処理で使用するようになっている。
【００２５】
尚、ＦＰＵ１５によって演算される浮動小数点型データは、例えばＩＥＥＥ７５４規格に従い構成され、その内訳として、１ビットの符号部と、８ビットの指数部と、２３ビットの仮数部とからなる。そして、このような合計４バイトの（単精度の）浮動小数点型データの場合、７桁の分解能（０．００００００１の分解能）を持つ。
【００２６】
そこで次に、ＥＣＵ１０のＦＰＵ１５で実行されるなまし計算のための処理（なまし計算処理）について、図２のフローチャートを用い説明する。
図２に示すように、ＦＰＵ１５がなまし計算処理の実行を開始すると、まずステップ（以下単に「Ｓ」と記す）１１０にて、前述の検出処理によって取得されている実値NewValを読み出し、その実値NewValに対して、下記の式１で表されるなまし計算を行う。
【００２７】
Average(n)_Temp＝NewVal＋（Average(n-1)−NewVal）×SmRate…式１
尚、この式１は、「従来技術」の欄で述べたなまし計算の計算式と同じものであり、本式１においては、Average(n)_Tempが、今回のなまし値（今回の計算値）であり、Average(n-1)が、前回のなまし値（前回の計算値）であり、SmRateが、なまし率（但し０＜SmRate＜１）である。
【００２８】
次に、Ｓ１２０にて、今回の計算値Average(n)_Tempと収束目標値である実値NewValとの差の絶対値NNDiff（Ｚ１に相当）を求めると共に、前回の計算値Average(n-1)と実値NewValとの差の絶対値BNDiff（Ｚ２に相当）を求める。
次に、Ｓ１３０にて、上記Ｓ１２０で求めたNNDiffとBNDiffとを大小比較して、「NNDiff≧BNDiff」であるか否かを判定し、「NNDiff≧BNDiff」でなければ（つまり、「NNDiff＜BNDiff」であれば）、今回の計算値Average(n)_Tempが前回の計算値Average(n-1)よりも実値NewValに近づいているということであるため、なまし値が未だ実値NewValに収束していないと判定して、Ｓ１４０に進む。
【００２９】
そして、このＳ１４０にて、今回求めたAverage(n)_Tempを、次回のＳ１１０でAverage(n-1)として扱われるAverage(n)として設定した後、本なまし計算処理を終了する。尚、Average(n)は、今回の本なまし計算処理での最終計算結果であり、エンジン制御用の処理に使用される値（制御値）である。
【００３０】
一方、上記Ｓ１３０にて、「NNDiff≧BNDiff」であると判定したならば（Ｓ１３０：ＹＥＳ）、今回の計算値Average(n)_Tempが前回の計算値Average(n-1)よりも実値NewValに近づかなかったということであるため、なまし値が実値NewValに収束したと判定して、Ｓ１５０に進む。
【００３１】
そして、このＳ１５０にて、収束目標値である実値NewValをAverage(n)として設定した後、本なまし計算処理を終了する。
よって、その後は、実値NewValの値が更新されない限り、上記Ｓ１１０で算出されるAverage(n)_Tempの値がその実値NewValの値に固定されることとなり、延いては、Ｓ１５０で設定されるAverage(n)の値も、その実値NewValの値に固定されることとなる。
【００３２】
つまり、なまし計算は、数学的に考えると、Average(n-1)とNewValとの分点を求めることに等しく、計算結果であるAverage(n)_Tempは、本来ならば、必ず目標値である実値NewValに近づいていくはずであるが、収束に近い状態では、浮動小数点演算の演算誤差により、Average(n)_TempがAverage(n-1)よりも実値NewValに近づかないという事象が起こる。
【００３３】
よって、NNDiffとBNDiffとを大小比較した場合、収束していない場合には、「NNDiff＜BNDiff」の関係が成り立つが、収束に近い状態では、「NNDiff＞BNDiff」か「NNDiff＝BNDiff」となる。そこで、本実施形態では、その状態となったことを検知した場合に（Ｓ１３０：ＹＥＳ）、収束したと判定するようにしているのである。
【００３４】
このような本実施形態によれば、しきい値やオフセットといった特別な値を設定しなくても、浮動小数点演算によるなまし計算の収束を正確に判定することができる。そして更に、様々なアプリケーションに使用されるなまし計算の各々について、全く同じロジックで収束を判定することができる。
【００３５】
また、このようなことから、本実施形態のＥＣＵ１０によれば、設計が容易なものとなり、延いては、低コスト化を達成することができる。また更に、設計変更にも柔軟に対応することができる。
以上、本発明の一実施形態について説明したが、本発明は、種々の形態を採り得ることは言うまでもない。
【００３６】
例えば、 上記実施形態のＥＣＵ１０は、車両のエンジンを制御するものであったが、本発明は、エンジン以外の制御対象を制御するＥＣＵに対しても、全く同様に適用することができる。
また、浮動小数点演算で用いられるデータは、単精度のデータに限るものではなく、合計６４ビットの倍精度のデータであっても良い。
【図面の簡単な説明】
【図１】  実施形態のエンジン制御システム及びＥＣＵの構成を示すブロック図である。
【図２】  ＥＣＵのＦＰＵで実行されるなまし計算処理を表すフローチャートである。
【符号の説明】
１…エンジン、２…センサ、１０…電子制御装置（ＥＣＵ）、１１…マイコン、１２…ＣＰＵ、１３…ＲＯＭ、１４…ＲＡＭ、１５…ＦＰＵ、１６…Ｉ／Ｏ
【図１】
0003690365.tif 000002
【図２】
0003690365.tif 000003