(57)【要約】【課題】  コンピュータのプログラム処理による車両の制御装置において、制御内容の一部変更、一部削除および追加を簡単に行えるようにする。【解決手段】  電子制御ユニットは、センサ装置により検出された運転操作量または運動状態量を用いて、プログラム処理によりアクチュエータを駆動制御する。このプログラムは、上流の演算グループの演算結果を用いた演算処理によって得た演算結果を下流の演算グループの演算処理のために渡すように複数の演算グループに分けられる。各演算グループは、さらに複数の演算ブロックに分けられ、各演算ブロックに対応したプログラムが独立して記憶される。演算プログラムの記憶位置を表すポインタ値がテーブルに記憶され、各演算プログラムはポインタ値を用いて指定される。【選択図】  図６
2006069314.tif 000002
【特許請求の範囲】
【請求項１】
車両の運転操作状態または運動状態を検出手段により検出し、検出した車両の運転操作状態または運動状態を用いて、コンピュータのプログラム処理により車両に搭載されたアクチュエータを制御する車両の制御装置において、
前記検出手段からの検出信号に基づいて前記アクチュエータの制御量を計算する計算処理プログラムを、上流の演算グループの演算結果を用いた演算処理によって得た演算結果を下流の演算グループの演算処理のために渡すように複数の演算グループに分けて演算処理を順次実行するように構成するとともに、各演算グループ内にそれぞれ独立して演算処理する複数の演算ブロックを設けて各演算グループの演算処理を実現するように構成し、かつ
前記複数の演算ブロックの演算処理をそれぞれ実行するための複数の演算プログラムをそれぞれ独立して記憶するとともに、前記複数の演算プログラムの記憶位置を表すポインタ値を前記複数の演算ブロックに対応させてそれぞれ記憶しておき、
前記計算処理プログラムの各演算ブロックの演算においては、前記ポインタ値を用いて前記演算プログラムを指定するようにしたことを特徴とする車両の制御装置。
【請求項２】
請求項１に記載した車両の制御装置において、
前記演算ブロックは、第１および第２の関数に従って演算することを可能とし、かつ前記第１および第２の関数に従った両演算結果にそれぞれ係数を乗じて加算演算して出力するように構成され、さらに
前記係数を前記ポインタ値と共に前記複数の演算ブロックに対応させて記憶しておくようにした車両の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、車両の運転操作状態または運動状態を検出手段により検出し、検出した車両の運転操作状態または運動状態を用いて、コンピュータのプログラム処理により車両に搭載されたアクチュエータを制御する車両の制御装置に関する。
【背景技術】
【０００２】
この種の装置において、例えば下記特許文献１に示されているように、運転関連情報に基づいて目標車両状態量を決定する上位指令部および下位司令部と、決定された目標車両状態量を下位司令部から受け取ってアクチュエータを駆動制御する実行部とを備えるように、コンピュータのプログラム処理に階層化を図ることは従来から知られている。
【特許文献１】特開２００３−１９１７７４号公報
【０００３】
しかし、上記特許文献１においては、プログラム処理を各階層単位で変更、削除および追加することは比較的容易に行うことができても、各階層内のプログラム処理は互いに関連し合って複雑に構成されているため、各階層内のプログラムの一部変更、一部削除および追加を行うことは難しかった。
【発明の開示】
【０００４】
本発明の目的は、コンピュータのプログラム処理による車両の制御装置において、制御内容の一部変更、一部削除および追加を簡単に行えるようにすることにある。
【０００５】
上記目的を達成するために、本発明の特徴は、車両の運転操作状態または運動状態を検出手段により検出し、検出した車両の運転操作状態または運動状態を用いて、コンピュータのプログラム処理により車両に搭載されたアクチュエータを制御する車両の制御装置において、検出手段からの検出信号に基づいてアクチュエータの制御量を計算する計算処理プログラムを、上流の演算グループの演算結果を用いた演算処理によって得た演算結果を下流の演算グループの演算処理のために渡すように複数の演算グループに分けて演算処理を順次実行するように構成するとともに、各演算グループ内にそれぞれ独立して演算処理する複数の演算ブロックを設けて各演算グループの演算処理を実現するように構成し、かつ複数の演算ブロックの演算処理をそれぞれ実行するための複数の演算プログラムをそれぞれ独立して記憶するとともに、複数の演算プログラムの記憶位置を表すポインタ値を複数の演算ブロックに対応させてそれぞれ記憶しておき、計算処理プログラムの各演算ブロックの演算においては、ポインタ値を用いて演算プログラムを指定するようにしたことにある。この場合、ポインタ値の記憶は、例えば演算ブロックに対応させてポインタ値を記憶するテーブルにより実現するようにするとよい。また、検出手段は、例えば、車両の運転操作状態または運動状態を検出するセンサ装置、スイッチなどで構成される。
【０００６】
このように構成した本発明においては、制御内容の一部を変更する場合、変更しようとする演算ブロックに対応して記憶されている演算プログラムを変更するだけでよい。制御内容の一部を削除する場合には、削除しようとする演算ブロックに対応して記憶されている演算プログラムを削除するとともに、同演算ブロックに対応したポインタ値を削除するだけでよい。また、制御内容を追加する場合には、追加しようとする演算ブロックに対応した演算プログラムを追加記憶して、同演算プログラムの記憶位置を表すポインタ値を追加しておくだけでよい。このように計算処理プログラムの全体を変更することなく、制御内容の一部変更、一部削除および追加を簡単に行えるので、車両の仕様変更を簡単に行うことができるようになる。
【０００７】
また、本発明の他の特徴は、演算ブロックが、第１および第２の関数に従って演算することを可能とし、かつ第１および第２の関数に従った両演算結果にそれぞれ係数を乗じて加算演算して出力するように構成され、さらに係数をポインタ値と共に複数の演算ブロックに対応させて記憶しておくようにしたことにある。この場合、第１の関数は入力値に対する出力値の基本的な関係を規定するメイン関数で構成され、第２の関数は前記基本的な関係を補償する補償関数で構成されるようにするとよい。
【０００８】
これによれば、演算ブロックごとに入力値に対する出力値を補償できるとともに、係数を変更することにより補償の程度を変更または修正することもできる。したがって、最終的なアクチュエータを制御するための制御量を、簡単に種々の特性に設定することができるようになる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の一実施形態に係る車両の制御装置について図面を用いて説明する。図１は、車両の基本的構成をブロック図により示している。車両は、運転操作機器１１-1，１１-2・・および被制御機器１２-1，１２-2・・からなる機構的な部分を備えている。運転操作機器１１-1，１１-2・・は、運転者によって操作されるアクセルペダル、ブレーキペダル、操舵ハンドル、シフトレバーなどの運転操作子を有する機器である。被制御機器１２-1，１２-2・・は、運転操作機器１１-1，１１-2・・の操作に応じて作動するエンジン装置、ブレーキ装置、転舵装置、変速機、サスペンション装置などである。
【００１０】
一方、このような機構的な構成に加え、車両は、運転操作量センサ１３-1，１３-2・・、運動状態量センサ１４-1，１４-2・・および電子制御ユニット１５-1，１５-2・・も備えている。運転操作量センサ１３-1，１３-2・・は、運転者による車両の運転操作量を検出するもので、例えば、アクセルペダルの踏み込み量を検出するアクセルペダルセンサ、ブレーキペダルの踏み込み量を検出するブレーキペダルセンサ、操舵ハンドルの回転角を検出する操舵角センサ、操舵ハンドルに付与される操舵トルクを検出する操舵トルクセンサ、シフトレバーのシフト位置を検出するシフト位置センサなどが挙げられる。運動状態量センサ１４-1，１４-2・・は、車両の運動状態量を検出するもので、例えば、車速を検出する車速センサ、車輪速を検出する車輪速センサ、車両の横加速度を検出する横加速度センサ、車両のヨーレートを検出するヨーレートセンサ、車高を検出する車高センサなどが上げられる。電子制御ユニット１５-1，１５-2・・は、これらの運転操作量センサ１３-1，１３-2・・および運動状態量センサ１４-1，１４-2・・によって検出された運転操作量および運動状態量に応じて、被制御機器１２-1，１２-2・・内の各種アクチュエータ１６ａ、１６ｂ・・を駆動して車両の運動状態を制御しまたは修正する。
【００１１】
これらの電子制御ユニット１５-1，１５-2・・は、それぞれＣＰＵ，ＲＯＭ，フラッシュメモリ、ＲＡＭ、タイマなどからなるマイクロコンピュータで構成されている。ＣＰＵは、運転操作量センサ１３-1，１３-2・・および運動状態量センサ１４-1，１４-2・・によって検出された運転操作量および運動状態量に基づいて、被制御機器１２-1，１２-2・・内の各種アクチュエータ１６ａ、１６ｂ・・の制御量を計算するとともに、同制御量に応じて各種アクチュエータ１６ａ、１６ｂ・・を制御する計算処理プログラムとしての図３に示す制御プログラムを所定の短時間ごとに繰り返し実行する。この制御プログラムは、図２に示すように、ＲＯＭ，フラッシュメモリなどの不揮発性メモリの制御プログラム領域に記憶されている。
【００１２】
この制御プログラムは、上流の演算グループの演算結果を用いた演算処理によって得た演算結果を下流の演算グループの演算処理のために渡すように複数の演算グループに分けて演算処理を順次実行するように構成されるとともに、各演算グループ内にそれぞれ独立して演算処理する複数の演算ブロックを設けて各演算グループの演算処理を実現するように構成されている。ここで、演算グループとは、図６の機能ブロック図に示す変数ｊにより指定される複数の演算グループＧＰ(ｊ)である。また、各グループ内の演算ブロックとは、変数ｉ，ｊにより指定される複数の演算ブロックＯＰ(ｉ，ｊ)である。
【００１３】
また、ＲＯＭ、フラッシュメモリなどの不揮発性メモリには、図２に示すように、メイン関数プログラム領域、補償関数プログラム領域および関数マップテーブルも用意されている。メイン関数プログラム領域には、複数の演算ブロックＯＰ(ｉ，ｊ)のメイン関数（第１の関数）Ｍ(ｉ，ｊ)に対応した演算処理を実行するための複数の演算プログラムがそれぞれ独立して記憶されている。補償関数プログラム領域には、複数の演算ブロックＯＰ(ｉ，ｊ)の補償関数（第２の関数）Ｈ(ｉ，ｊ)に対応した演算処理を実行するための複数の演算プログラムがそれぞれ独立して記憶されている。メイン関数Ｍ(ｉ，ｊ)は入力値に対する出力値の基本的な関係を規定する関数であり、補償関数Ｈ(ｉ，ｊ)は前記基本的な関係を補償する関数である。なお、実際の装置においては、変数ｉ(＝１〜ｍ),ｊ(＝１〜ｎ)の全ての組み合わせｍ×ｎ個に対して演算ブロックＯＰ(ｉ，ｊ)が用意されていない場合もあり、またメイン関数Ｍ(ｉ，ｊ)が用意されていても補償関数Ｈ(ｉ，ｊ)が用意されていない場合もある。
【００１４】
関数マップテーブルは、図４に示すように、複数の演算ブロックＯＰ(ｉ，ｊ)にそれぞれ対応した複数の演算プログラムの記憶位置（詳しくは、記憶位置の先頭アドレス）、すなわちメイン関数Ｍ(ｉ，ｊ)に対応した複数の演算プログラムおよび補償関数Ｈ(ｉ，ｊ)に対応した複数の演算プログラムの記憶位置を表すポインタ値を記憶している。また、これらのポインタ値に加えて、メイン関数Ｍ(ｉ，ｊ)および補償関数Ｈ(ｉ，ｊ)の各出力値を合算する際の係数ＫＲ０，ＫＲ１も、複数の演算ブロックＯＰ(ｉ，ｊ)にそれぞれ対応させて記憶されている。なお、前記のように、演算ブロックＯＰ(ｉ，ｊ)が用意されない場合には係数ＫＲ０，ＫＲ１も用意されず、またメイン関数Ｍ(ｉ，ｊ)のみが用意されて補償関数Ｈ(ｉ，ｊ)が用意されない場合には、係数ＫＲ０は「１」に設定されており、係数ＫＲ１は「０」に設定されている。
【００１５】
また、電子制御ユニット１５-1，１５-2・・の各ＲＡＭには、図５に示すように、入力バッファ領域およびブロック出力バッファ領域が用意されている。入力値バッファ領域には、演算ブロックＯＰ(ｉ，ｊ)にて演算に用いられる入力値ＩＮ(ｉ，ｊ)（ｉ＝１〜ｍ，ｊ＝１〜ｎ）が一時記憶されるようになっている。ブロック出力バッファ領域には、一つの演算グループＧＰ(ｊ)の演算ごとに、演算ブロックＯＰ(ｉ，ｊ)の演算結果ＯＵＴ（ｉ）（ｉ＝１〜ｍ）が一時記憶されるようになっている。
【００１６】
次に、上記のように構成した実施形態の動作について、図３のメインプログラムの処理に従って説明する。電子制御ユニット１５-1，１５-2・・は、メインプログラムをそれぞれ実行するものであるが、以降の説明においては、電子制御ユニット１５-1，１５-2・・のうちの一つの電子制御ユニット（以下、この一つの電子制御ユニットを電子制御ユニット１５という）についてのみ説明する。このメインプログラムの実行はステップＳ１０にて開始され、電子制御ユニット１５は、ステップＳ１１にて、運転操作量センサ１３-1，１３-2・・および運動状態量センサ１４-1，１４-2・・のうちのいずれか一つまたは複数のセンサによる検出値を入力して、入力値バッファ領域に用意されていて前記検出入力値の出力先の演算ブロックＯＰ(ｉ，ｊ)の入力値ＩＮ(ｉ，ｊ)を前記検出入力値に設定する。そして、ステップＳ１２にて変数ｉ，ｊをそれぞれ「１」に初期設定してステップＳ１３以降の処理を実行する。
【００１７】
ステップＳ１３においては、関数マップテーブル（図４）を参照し、変数ｉ，ｊによって指定される演算ブロックＯＰ(ｉ，ｊ)のメイン関数ポインタ値、補償関数ポインタ値および係数ｋ０，ｋ１を取得する。そして、ステップＳ１４にて、入力値バッファ領域（図５参照）に記憶されている入力値ＩＮ(ｉ，ｊ)を用い、前記取得したメイン関数ポインタ値および補償関数ポインタ値により指定されるメイン関数プログラムおよび補償関数プログラムを実行して、メイン関数出力値ＭＯ(ｉ，ｊ)および補償関数出力値ＨＯ(ｉ，ｊ)をそれぞれ計算する。そして、同ステップＳ１４にて、前記両出力値ＭＯ(ｉ，ｊ)，ＨＯ(ｉ，ｊ)に前記取得した係数ｋ０(ｉ，ｊ)，ｋ１(ｉ，ｊ)をそれぞれ乗算して、両乗算結果を加算することにより演算ブロックＯＰ(ｉ，ｊ)の出力値ＯＵＴ(ｉ)を下記式１のように計算する。
ＯＵＴ(ｉ)＝ｋ０(ｉ，ｊ)・ＭＯ(ｉ，ｊ)＋ｋ１(ｉ，ｊ)・ＨＯ(ｉ，ｊ)  …式１
【００１８】
そして、前記計算された演算ブロックＯＰ(ｉ，ｊ)の出力値ＯＵＴ(ｉ)は、ＲＡＭ内のブロック出力バッファ領域（図５参照）に一時的に書き込まれる。なお、前記のようにメイン関数Ｍ(ｉ，ｊ)は用意されていても、補償関数Ｈ(ｉ，ｊ)が用意されていない場合には、補償関数Ｈ(ｉ，ｊ)のための演算プログラム（補償関数プログラム）は実行されない。また、演算ブロックＯＰ(ｉ，ｊ)自体が存在していない場合には、メイン関数Ｍ(ｉ，ｊ)および補償関数Ｈ(ｉ，ｊ)のための演算プログラム（メイン関数プログラムおよび補償関数プログラム）が実行されず、出力値ＯＵＴ(ｉ)は「０」に設定される。
【００１９】
前記ステップＳ１４の処理後、ステップＳ１５にて変数ｉに「１」を加算して、ステップＳ１６にて変数ｉが所定値ｍを超えたか否かを判定する。変数ｉが所定値ｍ以下である場合には、ステップＳ１６にて「Ｎｏ」と判定してステップＳ１３に戻り、前述したステップＳ１３〜Ｓ１６の処理を繰り返し実行する。そして、変数ｉが所定値ｍを超えると、ステップＳ１６にて「Ｙｅｓ」と判定して、ステップＳ１７以降の処理を実行し始める。このステップＳ１３〜Ｓ１６からなる循環処理により、変数ｊによって指定されるグループに属する演算ブロックＯＰ(１，ｊ)〜ＯＰ(ｍ，ｊ)のブロック出力値ＯＵＴ(１)〜ＯＵＴ(ｍ)がブロック出力バッファ領域に順次書き込まれる。例えば、メインプログラムの開始直後であって変数ｊが「１」であれば、図６の機能ブロック図の最左列の演算ブロックＯＰ(１，１)〜ＯＰ(ｍ，１)による演算が実行されて、それらの各演算結果としてのブロック出力値ＯＵＴ(１)〜ＯＵＴ(ｍ)がブロック出力バッファに書き込まれる。
【００２０】
ステップＳ１７においては、前記ブロック出力値ＯＵＴ(１)〜ＯＵＴ(ｍ)を用いてグループ出力値を計算し、同計算結果が用いられる下流側の演算ブロックＯＰ（ｉ，ｊ）を指定して、前記計算結果を入力バッファ領域（図５参照）の指定された演算ブロックＯＰ（ｉ，ｊ）の入力値ＩＮ（ｉ，ｊ）として一時記憶する。例えば、演算ブロックＯＰ(１，ｊ)〜ＯＰ(ｍ，ｊ)の全ての加算値を演算ブロックＯＰ(１，ｊ＋１)〜ＯＰ(ｍ，ｊ＋１)で用いる場合、下記式２に示すように、ブロック出力値ＯＵＴ(１)〜ＯＵＴ(ｍ)を加算し、加算結果ＯＵＴ１を入力値ＩＮ（１，ｊ＋１）〜ＩＮ(ｍ，ｊ＋１)としてそれぞれ記憶する。
ＯＵＴ１＝ＯＵＴ(１)＋ＯＵＴ(２)＋・・＋ＯＵＴ(ｍ)  …式２
【００２１】
また、演算ブロックＯＰ(１，ｊ)〜ＯＰ(ｍ，ｊ)のうちの一部の演算ブロックＯＰ(１，ｊ)〜ＯＰ(ｐ，ｊ)の出力値の加算結果を、演算ブロックＯＰ(１，ｊ＋１)〜ＯＰ(ｍ，ｊ＋１)のうちの一部の演算ブロックＯＰ(１，ｊ＋１)〜ＯＰ(ｑ，ｊ＋１)に供給し、残りの演算ブロックＯＰ(ｐ＋１，ｊ)〜ＯＰ(ｍ，ｊ)の加算値を、残りの演算ブロックＯＰ(ｑ＋１，ｊ＋１)〜ＯＰ(ｍ，ｊ＋１)に供給するようにしてもよい。この場合、下記式３，４に示すように、ブロック出力値ＯＵＴ(１)〜ＯＵＴ(ｐ)を加算して加算結果ＯＵＴ１を入力値ＩＮ（１，ｊ＋１）〜ＩＮ(ｑ，ｊ＋１)としてそれぞれ記憶するとともに、ブロック出力値ＯＵＴ(ｐ＋１)〜ＯＵＴ(ｍ)を加算して加算結果ＯＵＴ２を入力値ＩＮ（ｑ＋１，ｊ＋１）〜ＩＮ(ｍ，ｊ＋１)としてそれぞれ記憶する。ただし、値ｐ，ｑは、ｍ，ｎよりもそれぞれ小さな自然数である。
ＯＵＴ１＝ＯＵＴ(１)＋ＯＵＴ(２)＋・・＋ＯＵＴ(ｐ)  …式３
ＯＵＴ２＝ＯＵＴ(ｐ＋１)＋ＯＵＴ(Ｐ＋２)＋・・＋ＯＵＴ(ｍ)  …式４
さらに、グループｊに属する演算ブロックＯＰ(１，ｊ)〜ＯＰ(ｍ，ｊ)の一部または全ての演算ブロックＯＰのブロック出力値の加算結果を、一つまたは複数のグループを超えてさらに下流のグループの演算ブロックの入力値としてもよい。
【００２２】
前記ステップＳ１７の処理後、ステップＳ１８にて変数ｊに「１」を加算するとともに、変数ｉを「１」に初期設定して、ステップＳ１９にて変数ｊが所定値ｎを超えたか否かを判定する。変数ｊが所定値ｎ以下である場合には、ステップＳ１９にて「Ｎｏ」と判定してステップＳ１３に戻り、前述したステップＳ１３〜Ｓ１６の処理を繰り返し実行するとともに、その後にステップＳ１７，Ｓ１８の処理を実行する。そして、変数ｊが所定値ｎを超えると、ステップＳ１９にて「Ｙｅｓ」と判定して、ステップＳ２０の処理を実行する。このようなステップＳ１３〜Ｓ１９からなる循環処理により、図６に示すように、変数ｊによって指定されるグループに属する演算ブロックＯＰ(１，ｊ)〜ＯＰ(ｍ，ｊ)の出力値ＯＵＴ(１)〜ＯＵＴ(ｍ)を用いてグループ出力値が計算され、同グループ出力値が用いられる下流側の演算ブロックＯＰ（ｉ，ｊ）を指定して、前記グループ出力値が入力バッファ領域（図５参照）の指定された演算ブロックＯＰ（ｉ，ｊ）の入力値ＩＮ（ｉ，ｊ）として順次一時記憶される。
【００２３】
ただし、ステップＳ１７にて、最後のグループすなわち変数ｍによって指定されるグループに属する演算ブロックＯＰ(１，ｊ)〜ＯＰ(ｍ，ｊ)のブロック出力値ＯＵＴ(１)〜ＯＵＴ(ｍ)を用いて計算されたグループ出力値は、被制御機器１２-1，１２-2・・のアクチュエータ１６ａ，１６ｂ・・に対する制御量であり、この制御量はアクチュエータ１６ａ，１６ｂ・・の制御のために別途ＲＡＭに記憶される。そして、ステップＳ１９の「Ｙｅｓ」との判定後、ステップＳ２０において、前記記憶された制御量を被制御機器１２-1，１２-2・・に出力することによりアクチュエータ１６ａ，１６ｂ・・の作動を制御して、このメインプログラムの実行を終了する。アクチュエータ１６ａ，１６ｂ・・は前記制御量に応じて作動制御され、被制御機器１２-1，１２-2・・を前記制御量に応じて作動させる。
【００２４】
上記作動説明からも理解できるように、上記実施形態によれば、電子制御ユニット１５-1，１５-2・・は、図３のメインプログラムの実行により、運転操作量センサ１３-1，１３-2・・および運動状態量センサ１４-1，１４-2・・によって検出された運転操作量および運動状態量に基づいて、被制御機器１２-1，１２-2・・内の各種アクチュエータ１６ａ、１６ｂ・・の制御量を計算して、同制御量に応じて各種アクチュエータ１６ａ、１６ｂ・・の作動を制御する。そして、このメインプログラムの実行により、電子制御ユニット１５-1，１５-2・・は、図６の機能ブロック図に示すように、上流のグループ１から下流のグループｍに向かって、グループに属する演算ブロックＯＰ(１，ｊ)〜ＯＰ(ｍ，ｊ)の演算を順次実行する。そして、各グループに属する演算ブロックＯＰ(１，ｊ)〜ＯＰ(ｍ，ｊ)の演算が終了するごとに、演算ブロックＯＰ(１，ｊ)〜ＯＰ(ｍ，ｊ)のブロック出力値ＯＵＴ(１)〜ＯＵＴ(ｍ)を用いて下流のグループに属する演算ブロックＯＰ(ｉ，ｊ)の入力値を順次計算して、最終的に各種アクチュエータ１６ａ、１６ｂ・・の制御量を計算する。
【００２５】
そして、このように各種アクチュエータ１６ａ、１６ｂ・・の制御量の計算を上流から下流に渡って複数のグループにてそれぞれ行うようにするとともに、各グループ内の演算を複数の演算ブロックＯＰ(ｉ，ｊ)にてそれぞれ行うようにしたので、制御内容の一部を変更する場合、変更しようとする演算ブロックＯＰ(ｉ，ｊ)に対応して記憶されている演算プログラム（メイン関数Ｍ(ｉ，ｊ)および補償関数Ｈ(ｉ，ｊ)にそれぞれ対応した両演算プログラムの少なくとも一方）を変更するだけでよい。また、制御内容の一部を削除する場合には、削除しようとする演算ブロックＯＰ(ｉ，ｊ)に対応して記憶されている演算プログラム（メイン関数Ｍ(ｉ，ｊ)および補償関数Ｈ(ｉ，ｊ)にそれぞれ対応した両演算プログラムの少なくとも一方）を削除するとともに、関数マップテーブル内の同演算ブロックＯＰ(ｉ，ｊ)に対応したポインタ値（メイン関数Ｍ(ｉ，ｊ)および補償関数Ｈ(ｉ，ｊ)にそれぞれ対応した両演算プログラムの少なくとも一方のポインタ値）を削除するだけでよい。また、制御内容を追加する場合には、追加しようとする演算ブロックＯＰ(ｉ，ｊ)に対応した演算プログラム（メイン関数Ｍ(ｉ，ｊ)および補償関数Ｈ(ｉ，ｊ)にそれぞれ対応した両演算プログラムの少なくとも一方）を追加記憶して、同演算プログラムの記憶位置を表すポインタ値（メイン関数Ｍ(ｉ，ｊ)および補償関数Ｈ(ｉ，ｊ)にそれぞれ対応した両演算プログラムの少なくとも一方のポインタ値）を関数マップテーブルに追加しておくだけでよい。なお、各演算ブロックＯＰ(ｉ，ｊ)の入力値ＩＮ(ｉ，ｊ)を変更する場合には、図３のステップＳ１１，Ｓ１７の処理の一部を変更する。このようにメインプログラムの全体を変更することなく、制御内容の一部変更、一部削除および追加を簡単に行えるので、車両の仕様変更を簡単に行うことができるようになる。
【００２６】
また、演算ブロックＯＰ(ｉ，ｊ)において、メイン関数Ｍ(ｉ，ｊ)および補償関数Ｈ(ｉ，ｊ)に従った両演算を可能とした。そして、メイン関数Ｍ(ｉ，ｊ)および補償関数Ｈ(ｉ，ｊ)に従った両演算結果にそれぞれ係数ｋ０，ｋ１を乗じて加算演算し、さらに係数ｋ０，ｋ１をポインタ値と共に関数マップテーブルに記憶しておくようにした。これにより、演算ブロックＯＰ(ｉ，ｊ)ごとに入力値に対する出力値を補償できるとともに、係数ｋ０，ｋ１を変更することにより補償の程度を変更または修正することもできる。したがって、最終的なアクチュエータ１６ａ、１６ｂ・・を制御するための制御量を、簡単に種々の特性に設定することができるようになる。
【００２７】
次に、上記のように構成した実施形態のより具体的な実施例について図面を用いて説明する。図７は、本発明を適用した車両の操舵装置を示している。この操舵装置は、運転者によって操作される操舵操作装置２０と、左右前輪ＦＷ１，ＦＷ２を前記運転者の操作に応じて転舵する転舵装置３０とを機械的に分離したステアバイワイヤ方式を採用している。操舵操作装置２０は、運転者によって回動操作される操作部としての操舵ハンドル２１を備えている。操舵ハンドル２１は操舵入力軸２２の上端に固定され、操舵入力軸２２はその下端にて減速機構を内蔵した反力発生用の操舵反力用電動モータ２３により回転駆動されるようになっている。
【００２８】
また、転舵装置３０は、車両の左右方向に延びて配置された転舵軸３１を備えている。この転舵軸３１の両端部には、タイロッド３２ａ，３２ｂおよびナックルアーム３３ａ，３３ｂを介して、転舵輪としての左右前輪ＦＷ１，ＦＷ２が転舵可能に接続されている。左右前輪ＦＷ１，ＦＷ２は、転舵軸３１の軸線方向の変位により左右に転舵される。転舵軸３１の外周上には、図示しないハウジングに組み付けられた第１転舵用電動モータ３４および第２転舵用電動モータ３５が設けられている。第１転舵用電動モータ３４および第２転舵用電動モータ３５の回転は、それぞれねじ送り機構３６，３７により減速されるとともに転舵軸３１の軸線方向の変位に変換される。
【００２９】
次に、操舵反力用電動モータ２３、第１転舵用電動モータ３４および第２転舵用電動モータ３５の回転を制御する電気制御装置４０について説明する。電気制御装置４０は、操舵角センサ４１、転舵角センサ４２および車速センサ４３を備えている。操舵角センサ４１は、操舵入力軸２２に組み付けられて、操舵ハンドル２１の所定回転角ごとにカウントアップまたはカウントダウンするパルスカウント値ＰＣであって、同ハンドル２１の中立位置からの回転角に応じた大きさのパルスカウント値ＰＣを出力する。転舵角センサ４２は、転舵軸４１の外周上にて図示しないハウジングに組み付けられ、転舵軸３１の基準位置からの軸線方向の変位量を検出して転舵角δとして出力する。なお、これらのパルスカウント値ＰＣおよび転舵角δは、中立位置を「０」とし、右方向の角度を正の値で、左方向の角度を負の値でそれぞれ表す。車速センサ４３は、車速Ｖを検出する。
【００３０】
また、電気制御装置３０は、操舵角センサ４１および車速センサ４３に接続された操舵反力用電子制御ユニット（以下、操舵反力用ＥＣＵという）４４と、操舵角センサ４１、転舵角センサ４２および車速センサ４３にそれぞれ接続された第１転舵用電子制御ユニット（以下、第１転舵用ＥＣＵという）４５および第２転舵用電子制御ユニット（以下、第２転舵用ＥＣＵという）４６とを備えている。これらのＥＣＵ４４〜４６は、それぞれ上記実施形態の電子制御ユニット１５-1，１５-2・・と同様に構成されている。
【００３１】
操舵反力用ＥＣＵ４４は、上記実施形態のメインプログラムと同様の形態に構成した操舵反力制御プログラムを所定の短時間ごとに繰り返し実行して、駆動回路４７を介して操舵反力用電動モータ２３を駆動制御する。第１および第２転舵用ＥＣＵ４５，４６は、上記実施形態のメインプログラムと同様の形態に構成した転舵制御プログラムを所定の短時間ごとに繰り返し実行して、駆動回路４８，４９を介して第１および第２転舵用電動モータ３４、３５を駆動制御する。駆動回路４７〜４９は、ＥＣＵ４４〜４６により制御されて、電動モータ２３，３４，３５を駆動制御する。
【００３２】
このように構成した車両の操舵装置においては、第１および第２転舵用ＥＣＵ４５，４６は、前記転舵制御プログラムの所定の短時間ごとに繰り返し実行により、操舵角センサ３１によって検出された操舵角θを用いて目標転舵角δ＊を計算する。そして、第１および第２転舵用ＥＣＵ４５，４６は、目標転舵角δ＊が転舵角センサ４２によって検出された転舵角δに等しくなるように駆動回路４８，４９を介して電動モータを駆動制御して、左右前輪ＦＷ１，ＦＷ２を目標転舵角δ＊に転舵制御する。操舵反力用ＥＣＵ４４は、前記操舵反力制御プログラムを所定の短時間ごとに繰り返し実行することにより、操舵角センサ３１によって検出された操舵角θに基づいて電動モータ２３が発生すべきモータトルクＭｔを計算する。そして、操舵反力用ＥＣＵ４４は、電動モータ２３が前記計算したモータトルクＭｔを発生するように駆動回路４７を介して電動モータ２３を制御して、操舵ハンドル２１の回動操作に対してモータトルクＭｔを対抗させる。また、ＥＣＵ４４〜４６は、車速センサ４３からの車速Ｖに応じて、前記各制御を若干量修正する。
【００３３】
このようなＥＣＵ４４〜４６によるプログラム制御は上記実施形態と同様に行われるものである。そして、本明細書では、前記ＥＣＵ４４〜４６によるプログラム制御のうち、操舵反力用ＥＣＵ４４による操舵反力制御と上記実施形態の制御とを対応させて説明しておく。
【００３４】
操舵反力用ＥＣＵ４４によって実行される操舵反力プログラムは、上記実施形態の図３のメインプログラムと同様に構成されている。そして、この操舵反力プログラムにおいては、図９にその機能ブロック図で示すように、図３のメインプログラムの所定値ｍ，ｎは「３」および「４」に設定されている。すなわち、演算グループ数は４個に設定され、グループ内の演算ブロック数は「３」に設定されている。そして、第１グループにおいては演算ブロック数は１個であり、第２グループにおいては演算ブロック数は２個であり、第３グループにおいては演算ブロック数は３個であり、第４グループでは演算ブロック数は１個である。したがって、関数マップテーブルにおいては、図８に示すように、演算ブロックＯＰ(２，１)、ＯＰ(３，１)、ＯＰ(３，２)、ＯＰ(２，４)、ＯＰ(３，４)に関しては、メイン関数ポインタ値、補償関数ポインタ値および係数ｋ０，ｋ１が定義されていない。
【００３５】
また、補償関数Ｈ(ｉ，ｊ)に関しては、演算ブロックＯＰ(１，２)のみで用いられ、他の演算ブロックＯＰ(１，１)、ＯＰ(２，２)、ＯＰ(１，３)、ＯＰ(２，３)、ＯＰ(３，３) 、ＯＰ(１，４)では用いられない。したがって、演算ブロックＯＰ(１，２)に関してはメイン関数ポインタ値、補償関数ポインタ値および係数ｋ０，ｋ１が定義されているが、他の演算ブロックＯＰ(１，１)、ＯＰ(２，２)、ＯＰ(１，３)、ＯＰ(２，３)、ＯＰ(３，３) 、ＯＰ(１，４)に関しては、補償関数ポインタ値は定義されず、係数ｋ０は「１」に設定されているとともに、係数ｋ１は「０」に設定されている。なお、ポインタ値の定義されていないメイン関数Ｍ(ｉ，ｊ)および補償関数Ｈ(ｉ，ｊ)を実行するための演算プログラムも用意されていない。
【００３６】
次に、上記図３のメインプログラムの各ステップの処理に対応させて、操舵反力制御プログラムによる処理について説明する。図３のステップＳ１１においては、操舵角センサ４１からパルスカウント値ＰＣを入力して、入力値バッファ領域に用意されていて前記検出入力値の出力先である演算ブロックＯＰ(１，１)の入力値ＩＮ(１，１)を前記パルスカウント値ＰＣに設定する。そして、ステップＳ１２の処理により変数ｉ，ｊをそれぞれ「１」に初期設定した後、ステップＳ１３にて、関数マップテーブル（図８）を参照し、変数ｉ，ｊによって指定される演算ブロックＯＰ(１，１)のメイン関数ポインタ値および係数ｋ０（＝１），ｋ１（＝０）を取得する。そして、ステップＳ１４にて、入力値バッファ領域の入力値ＩＮ(１，１)を用いて、前記取得したメイン関数ポインタ値により指定されるメイン関数プログラムを実行してメイン関数出力値ＭＯ(１，１)を計算し、前記計算したメイン関数出力値ＭＯ(１，１)を演算ブロックＯＰ(１，１)のブロック出力値ＯＵＴ(１)としてＲＡＭ内のブロック出力バッファ領域に書き込む。この場合のメイン関数プログラムは、図１０(Ａ)に示すように、パルスカウント値ＰＣに対して線形変化する操舵角θを計算するための操舵角演算プログラムであるので、前記メイン関数出力値ＭＯ(１，１)として操舵角θが計算される。
【００３７】
その後、ステップＳ１５，Ｓ１６の処理により変数ｉは「２」、「３」にそれぞれ変更されるが、演算ブロックＯＰ(２，１)、ＯＰ(３，１)は定義されていないので、第１グループの演算においては、前記ブロック出力値ＯＵＴ(１)すなわち操舵角θのみが計算される。そして、ステップＳ１７において、前記ブロック出力値ＯＵＴ(１)すなわち操舵角θが、入力バッファ領域に演算ブロックＯＰ（１，２）の入力値ＩＮ（１，２）および演算ブロックＯＰ（２，２）の入力値ＩＮ（２，２）として一時記憶される。
【００３８】
そして、ステップＳ１８の処理によって変数ｉが「１」に初期設定されるとともに変数ｊが「２」に変更された状態では、ステップＳ１３にて関数マップテーブル（図８）を参照し、変数ｉ，ｊによって指定される演算ブロックＯＰ(１，２)のメイン関数ポインタ値、補償関数ポインタ値および係数ｋ０（≠１），ｋ１（≠０）を取得する。そして、ステップＳ１４にて、入力値バッファ領域の入力値ＩＮ(１，２)すなわち操舵角θを用いて、前記取得したメイン関数ポインタ値および補償関数ポインタ値により指定されるメイン関数プログラムおよび補償関数プログラムを実行してメイン関数出力値ＭＯ(１，２)および補償関数出力値ＨＯ(１，２)をそれぞれ計算するとともに、前記計算した両出力値ＭＯ(１，２)，ＨＯ(１，２)に前記取得した係数ｋ０，ｋ１をそれぞれ乗算して、両乗算結果を加算した値ｋ０・ＭＯ(１，２)＋ｋ１・ＨＯ(１，２)を演算ブロックＯＰ(１，２)のブロック出力値ＯＵＴ(１)としてＲＡＭ内のブロック出力バッファ領域に書き込む。この場合のメイン関数プログラムは、図１０(Ｂ)に示すように、操舵角θに対して指数変化するモータトルクＭｔを計算するためのばね項演算プログラムである。また、補償関数プログラムは、図１０(Ｃ)に示すように、操舵角θに対して線形変化するモータトルクＭｔを計算するための補償演算プログラムである。そして、これらが合算されるので、総合モータトルクＭｔは、図１０(Ｄ)に示すようになる。この場合、係数ｋ０，ｋ１を適宜選択することにより、操舵角θに対する総合モータトルクＭｔの変化特性を種々に設定できる。
【００３９】
次に、ステップＳ１５，Ｓ１６の処理により、変数ｊを「２」に保ったまま変数ｉが「２」に変更されて、ステップＳ１３，Ｓ１４の処理が実行される。ステップＳ１３においては、関数マップテーブル（図８）を参照し、変数ｉ，ｊによって指定される演算ブロックＯＰ(２，２)のメイン関数ポインタ値および係数ｋ０（＝１），ｋ１（＝０）を取得する。ステップＳ１４においては、入力値バッファ領域の入力値ＩＮ(２，２)すなわち操舵角θを用いて、前記取得したメイン関数ポインタ値により指定されるメイン関数プログラムを実行してメイン関数出力値ＭＯ(２，２)を計算し、前記計算したメイン関数出力値ＭＯ(２，２)を演算ブロックＯＰ(２，２)のブロック出力値ＯＵＴ(２)としてＲＡＭ内のブロック出力バッファ領域に書き込む。この場合のメイン関数プログラムは、操舵角θを操舵速度dθ/dtに変換するための微分演算を実行するための操舵角演算プログラムであるので、前記メイン関数出力値ＭＯ(２，２)として操舵速角dθ/dtが計算される。
【００４０】
その後、ステップＳ１５，Ｓ１６の処理により変数ｉは「３」に変更されるが、演算ブロックＯＰ(３，２)は定義されていないので、第２グループの演算においては、前記ブロック出力値ＯＵＴ(１)およびＯＵＴ(２)としてモータトルクＭｔおよび操舵速度dθ/dtが計算されることになる。そして、ステップＳ１７において、前記出力値ＯＵＴ(１)すなわち操舵角θが入力バッファ領域に演算ブロックＯＰ（１，３）の入力値ＩＮ（１，３）として一時記憶されるとともに、前記ブロック出力値ＯＵＴ(２)すなわち操舵速度dθ/dtが入力バッファ領域の演算ブロックＯＰ（２，３），ＯＰ（３，３）の入力値ＩＮ（２，３），ＩＮ（３，３）として一時記憶される。
【００４１】
そして、ステップＳ１８の処理によって変数ｉが「１」に初期設定されるとともに変数ｊが「３」に変更された状態では、ステップＳ１３にて関数マップテーブル（図８）を参照し、変数ｉ，ｊによって指定される演算ブロックＯＰ(１，３)のメイン関数ポインタ値および係数ｋ０（＝１），ｋ１（＝０）を取得する。ステップＳ１４においては、入力値バッファ領域の入力値ＩＮ(１，３)すなわちモータトルクＭｔを用いて、前記取得したメイン関数ポインタ値により指定されるメイン関数プログラムを実行してメイン関数出力値ＭＯ(１，３)を計算し、前記計算したメイン関数出力値ＭＯ(１，３)を演算ブロックＯＰ(１，３)のブロック出力値ＯＵＴ(１)としてＲＡＭ内のブロック出力バッファ領域に書き込む。この場合のメイン関数プログラムは、図１０(Ｅ)に示すように、車速Ｖが増加するとモータトルクＭｔの絶対値｜Ｍｔ｜の上限を制限する演算を実行するための車速制限演算プログラムであるので、前記メイン関数出力値ＭＯ(３，１)として車速Ｖによって制限された新たなモータトルクＭｔが計算される。この場合、車速Ｖは車速センサ４３によって検出された車速を利用する。
【００４２】
次に、ステップＳ１５，Ｓ１６の処理により、変数ｊを「３」に保ったまま変数ｉが「２」に変更されて、ステップＳ１３，Ｓ１４の処理が実行される。ステップＳ１３においては、関数マップテーブル（図８）を参照し、変数ｉ，ｊによって指定される演算ブロックＯＰ(２，３)のメイン関数ポインタ値および係数ｋ０（＝１），ｋ１（＝０）を取得する。ステップＳ１４においては、入力値バッファ領域の入力値ＩＮ(２，３)すなわち操舵速度dθ/dtを用いて、前記取得したメイン関数ポインタ値により指定されるメイン関数プログラムを実行してメイン関数出力値ＭＯ(２，３)を計算し、前記計算したメイン関数出力値ＭＯ(２，３)を演算ブロックＯＰ(２，３)のブロック出力値ＯＵＴ(２)としてＲＡＭ内のブロック出力バッファ領域に書き込む。この場合のメイン関数プログラムは、図１０(Ｆ)に示すように、操舵速度dθ/dtの絶対値｜dθ/dt｜の小さな範囲内で、操舵速度dθ/dtに対して線形変化するモータトルクＭｔを計算するための粘性項演算プログラムであるので、前記メイン関数出力値ＭＯ(３，２)として操舵速度dθ/dtによって決定されるモータトルクＭｔの粘性に伴う成分が計算される。
【００４３】
さらに、ステップＳ１５，Ｓ１６の処理により、変数ｊを「３」に保ったまま変数ｉが「３」に変更されて、ステップＳ１３，Ｓ１４の処理が実行される。ステップＳ１３においては、関数マップテーブル（図８）を参照し、変数ｉ，ｊによって指定される演算ブロックＯＰ(３，３)のメイン関数ポインタ値および係数ｋ０（＝１），ｋ１（＝０）を取得する。ステップＳ１４においては、入力値バッファ領域の入力値ＩＮ(３，３)すなわち操舵速度dθ/dtを用いて、前記取得したメイン関数ポインタ値により指定されるメイン関数プログラムを実行してメイン関数出力値ＭＯ(３，３)を計算し、前記計算したメイン関数出力値ＭＯ(３，３)を演算ブロックＯＰ(３，３)のブロック出力値ＯＵＴ(３)としてＲＡＭ内のブロック出力バッファ領域に書き込む。この場合のメイン関数プログラムは、図１０(Ｇ)に示すように、操舵速度dθ/dtの絶対値｜dθ/dt｜の小さな範囲内で、操舵速度dθ/dtに対して線形変化するモータトルクＭｔを計算するための摩擦項演算プログラムであるので、前記メイン関数出力値ＭＯ(３，２)として操舵速度dθ/dtによって決定されるモータトルクＭｔの摩擦に伴う成分が計算される。
【００４４】
そして、ステップＳ１７において、前記出力値ＯＵＴ(１)〜ＯＵＴ(３)が合算されて、その合算値であるモータトルクＭｔが入力バッファ領域に演算ブロックＯＰ（１，４）の入力値ＩＮ（１，４）として一時記憶される。
【００４５】
そして、ステップＳ１８の処理によって変数ｉが「１」に初期設定されるとともに変数ｊが「４」に変更された状態では、ステップＳ１３にて関数マップテーブル（図８）を参照し、変数ｉ，ｊによって指定される演算ブロックＯＰ(１，４)のメイン関数ポインタ値および係数ｋ０（＝１），ｋ１（＝０）を取得する。ステップＳ１４においては、入力値バッファ領域の入力値ＩＮ(１，４)すなわちモータトルクＭｔを用いて、前記取得したメイン関数ポインタ値により指定されるメイン関数プログラムを実行してメイン関数出力値ＭＯ(１，４)を計算し、前記計算したメイン関数出力値ＭＯ(１，４)を演算ブロックＯＰ(１，４)のブロック出力値ＯＵＴ(１)としてＲＡＭ内のブロック出力バッファ領域に書き込む。この場合のメイン関数プログラムは、図１０(Ｈ)に示すように、モータトルクＭｔに対して上限および下限を設定するトルク制限演算プログラムであるので、前記メイン関数出力値ＭＯ(４，１)としてモータトルクＭｔ自体によって制限された新たなモータトルクＭｔが計算される。
【００４６】
その後、ステップＳ１５，Ｓ１６の処理により変数ｉは「２」、「３」に順次変更されるが、演算ブロックＯＰ(２，４)、ＯＰ(３，４)は定義されていないので、第４グループの演算においては、前記ブロック出力値ＯＵＴ(１)のみがモータトルクＭｔとして計算される。そして、この場合には、出力されるモータトルクＭｔとしてＲＡＭに別途記憶される。そして、ステップＳ２０の処理により、操舵反力用ＥＣＵ４４は、電動モータ２３が前記ＲＡＭに別途記憶したモータトルクＭｔを発生するように、駆動回路４７を介して電動モータ２３を制御する。その結果、操舵ハンドル２１の回動操作に対して前記計算したモータトルクＭｔが対抗するようになり、同操舵ハンドル２１の回動操作に対して操舵角θおよび車速Ｖに応じた反力が付与されるようになる。
【００４７】
さらに、本発明の実施にあたっては、上記実施形態及び実施例に限定されるものではなく、本発明の目的を逸脱しない限りにおいて種々の変更が可能である。
【００４８】
例えば、上記実施形態においては、車両の運転操作状態および運動状態をそれぞれ表す運転操作量および運動状態量を運転操作量センサ１３-1，１３-2…および運動状態量センサ１４-1，１４-2…でそれぞれ検出して、同検出した運転操作量および運動状態量をコンピュータによるプログラム処理に利用するようにした。しかし、これに代え、または加えて、車両の運転操作状態および運動状態をスイッチにより検出して、同スイッチにより検出した車両の運転操作状態および運動状態をコンピュータによるプログラム処理に利用するようにしてもよい。
【図面の簡単な説明】
【００４９】
【図１】本発明の一実施形態に係る車両の全体概略図である。
【図２】図１の電子制御ユニット内の不揮発性メモリに記憶されているプログラムおよび関数マップテーブルを説明するためのメモリマップである。
【図３】前記電子制御ユニットに記憶されかつ実行されるメインプログラムのフローチャートである。
【図４】前記関数マップテーブルのメモリマップである。
【図５】図１の電子制御ユニット内のＲＡＭに設けたバッファ領域を説明するためのメモリマップである。
【図６】前記メインプログラムによって実行される電子制御ユニットの機能ブロック図である。
【図７】上記実施形態のより具体的な実施例に係り、本発明を適用した車両の操舵装置の全体概略図である。
【図８】図７の操舵反力用電子制御ユニット内の不揮発性メモリに記憶されている関数マップテーブルを説明するためのメモリマップである。
【図９】前記車両の操舵装置に係り、図３のメインプログラムによって実行される操舵反力用電子制御ユニットの機能ブロック図である。
【図１０】(Ａ)〜(Ｈ)は、前記車両の操舵装置に係り、演算ブロックにて実行される各演算プログラムによって実現される関数特性を示すグラフである。
【符号の説明】
【００５０】
１１-1，１１-2…運転操作機器、１２-1，１２-2…被制御機器、１３-1，１３-2…運転操作量センサ、１４-1，１４-2…運動状態量センサ、１５，１５-1，１５-2…電子制御ユニット、１６ａ，１６ｂ…アクチュエータ、ＦＷ１，ＦＷ２…前輪、２０…操舵操作装置、２１…操舵ハンドル、２３…操舵反力用電動モータ、４１…操舵角センサ、４３…車速センサ、４４…操舵反力用電子制御ユニット。
【図１】
2006069314.tif 000003
【図２】
2006069314.tif 000004
【図３】
2006069314.tif 000005
【図４】
2006069314.tif 000006
【図５】
2006069314.tif 000007
【図６】
2006069314.tif 000008
【図７】
2006069314.tif 000009
【図８】
2006069314.tif 000010
【図９】
2006069314.tif 000011
【図１０】
2006069314.tif 000012