(57)【要約】【課題】ＣＰＵ負荷が大きくなった場合にタスク抜けを抑制する電子制御装置を提供すること。【解決手段】演算装置１１がプログラムを実行して内燃機関３００を制御する電子制御装置１００であって、前記演算装置の負荷レベルを監視する負荷レベル監視手段４２と、前記負荷レベルが閾値以上となった場合、変速機の変速比を小さくするシフトアップ手段４３と、を有することを特徴とする。【選択図】図２
2013160133.tif 000002
【特許請求の範囲】
【請求項１】
演算装置がプログラムを実行して内燃機関を制御する電子制御装置であって、
前記演算装置の負荷レベルを監視する負荷レベル監視手段と、
前記負荷レベルが閾値以上となった場合、変速機の変速比を小さくするシフトアップ手段と、
を有することを特徴とする電子制御装置。
【請求項２】
前記演算装置は、クランク角センサによる所定角毎のクランク角センサ割込みにより予め定められたタスクを起床し、カムポジションセンサによるカムセンサ割込みにより気筒判別しており、
車両要求トルクを検出する車両要求トルク検出手段と、
前記負荷レベルが閾値以上であり、かつ、前記車両要求トルクが閾値以上の場合、前記クランク角センサ割込みを禁止する割込み禁止手段と、
前記割込み禁止手段がクランク角センサ割込みを禁止した場合、クランク角センサ割込みにより起床されていた前記タスクを、カムセンサ割込みを契機に起床させるタスク制御手段と、を有し、
前記負荷レベルが閾値以上であるが、前記車両要求トルクが閾値以上でない場合にのみ、前記シフトアップ手段が変速機の変速比を小さくする、
ことを特徴とする請求項１記載の電子制御装置。
【請求項３】
車速とアクセル開度の二次元マップに対し変速機をシフトアップさせるシフトアップ線が変速比毎に定められ、次の変速比にシフトアップするためのシフトアップ線が２つ登録されたシフト判定マップを有し、
前記負荷レベルが閾値以上であり、かつ、前記車両要求トルクが閾値以上の場合、
前記車両要求トルク検出手段は、シフトアップするか否かの判定の際に参照するシフトアップ線を、２つのシフトアップ線のうち車速及びアクセル開度に対しシフトアップしにくい方のシフトアップ線に切り替える、
ことを特徴とする請求項２記載の電子制御装置。
【請求項４】
エンジン回転速度に基づき求められた、エンジンが前記所定角、回転するための回転時間を計測する時間計測手段を有し、
前記タスク制御手段は、前記時間計測手段が前記回転時間を計測する毎に、前記ＮＥセンサ割込みにより起床していたタスクを起床させる、
ことを特徴とする請求項２又は３記載の電子制御装置。
【請求項５】
前記タスク制御手段は、前記時間計測手段が前記回転時間を計測する毎に、クランク角を記録しておき、
前記カムセンサ割込みが発生する毎に、記録してあるクランク角に基づき現在のクランク角を決定し、
前記タスク制御手段は、現在のクランク角に基づき前記ＮＥセンサ割込みにより起床していたタスクを起床させる、
ことを特徴とする請求項４記載の電子制御装置。
【請求項６】
演算装置がプログラムを実行して内燃機関を制御する電子制御装置の制御方法であって、
負荷レベル監視手段が、前記演算装置の負荷レベルを監視するステップと、
前記負荷レベルが閾値以上となった場合、シフトアップ手段が、変速機の変速比を小さくするステップと、
を有することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置がプログラムを実行して内燃機関を制御する電子制御装置に関する。
【背景技術】
【０００２】
多くの車載装置が電子制御により駆動されるようになってきた。例えば、車両のエンジンでは、燃料噴射量、燃料噴射タイミング、点火タイミング等がマイコンにより電子制御されている。しかしながら、車両が高速で走行するほど制御に必要な演算周期が短くなる傾向があるため、マイコンの特にＣＰＵの負荷が増大することが知られている。最も大きい負荷に対応できるような高機能のマイコン（ＣＰＵ）を搭載することが考えられるが、コスト増などの理由により現実的には困難である。
【０００３】
そこで、例えば、ＣＰＵの処理負荷が高い場合に制御の処理を間引くことが考えられている（例えば、特許文献１参照。）。特許文献１には、周期的に繰り返される処理の周回時間に対応づけてＣＰＵの処理負荷を計測し、処理負荷に基づいて処理の間引き回数を学習することにより、動的に処理の間引き頻度を変更する処理装置が開示されている。
【０００４】
また、処理そのものを間引くのでなく、ＣＰＵの演算量を低減することでＣＰＵの負荷を低減する技術が考えられている（例えば、特許文献２参照。）。特許文献２には、従来、マイコンが行っていた減算処理を、マイコン外部の入力処理回路にて行うことで処理負荷を低減するマイコンが開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−３４７８８２号公報
【特許文献２】特開２０１１−９９３７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に記載された処理装置では、ＣＰＵが高負荷になると間引きされる処理が多くなることに変わりはなく、設計どおりの制御が実行されないおそれがある。
【０００７】
図１（ａ）は、エンジン回転数とＣＰＵ使用率の関係の一例を示す図である。エンジン回転数が大きくなるほどほぼ一様にＣＰＵ使用率が増大している。また、図１（ｂ）はエンジン回転数とタスク抜け率の関係の一例を示す図である。エンジン回転数が約4000rpm以上でタスク抜け率が急激に大きくなっている。
【０００８】
したがって、特許文献１のように処理の間引き回数を学習した場合でも、エンジン回転数が大きい領域ではタスク抜け（処理抜け）が発生してしまう。
【０００９】
また、特許文献２のように外部の回路で一部の演算を行っても、大幅な負荷低減を達成することはできない。また、大きく負荷低減しようと外部の回路を増やすと、処理の柔軟性が損なわれる。また、外部の回路を利用すると処理手順が変わるため、制御の適合などの付随する処理が増大してしまう。
【００１０】
本発明は、上記課題に鑑み、ＣＰＵ負荷が大きくなった場合にタスク抜けを抑制する電子制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、演算装置がプログラムを実行して内燃機関を制御する電子制御装置であって、前記演算装置の負荷レベルを監視する負荷レベル監視手段と、前記負荷レベルが閾値以上となった場合、変速機の変速比を小さくするシフトアップ手段と、を有することを特徴とする。
【発明の効果】
【００１２】
ＣＰＵ負荷が大きくなった場合にタスク抜けを抑制する電子制御装置を提供することができる。
【図面の簡単な説明】
【００１３】
【図１】エンジン回転数とＣＰＵ使用率の関係の一例を示す図である。
【図２】エンジン制御の概略的な特徴を説明する図の一例である。
【図３】エンジン及びエンジンＥＣＵの概略構成図の一例である。
【図４】ＮＥセンサ信号とカムセンサ信号を説明する図の一例である。
【図５】従来のタスクの実行手順を説明する図の一例である。
【図６】エンジンＥＣＵの機能ブロック図の一例である。
【図７】エンジンＥＣＵの動作手順を示すフローチャート図の一例である。
【図８】エンジンＥＣＵの機能ブロック図の一例である（実施例２）。
【図９】車線速マップの一例を示す図である。
【図１０】ＮＥセンサ割込みの禁止等を説明する図の一例である。
【図１１】エンジンＥＣＵの動作手順示すフローチャート図の一例である（実施例２）。
【発明を実施するための形態】
【００１４】
以下、本発明を実施するための形態について図面を参照しながら説明する。
【実施例１】
【００１５】
図２は、本実施形態のエンジン制御の概略的な特徴を説明する図の一例である。エンジンＥＣＵ（Electronic  Control  Unit）はＣＰＵ使用率を監視している。図２において説明したように、ＣＰＵ使用率はエンジン回転数が大きいほど大きくなるので、ＣＰＵ使用率を低減するにはエンジン回転数を下げることが有効になる。そこで、本実施例のエンジンＥＣＵは第1の特徴として、以下のように制御する。
（１）ＣＰＵ使用率が閾値以上の場合、シフトアップすることでエンジン回転数を低下させる。
【００１６】
シフトアップすると変速機の変速比が小さくなるので、車速は一定のままでもエンジン回転数が減少する。しかしながら、エンジン回転数が小さくなるとエンジン出力も低下してしまう。そこで、本実施例のエンジンＥＣＵは第２の特徴として、以下のように制御する。
（２）ＣＰＵ使用率が閾値以上の場合でも、車両要求トルクが閾値以上の場合には、ＮＥセンサ割込みを禁止し、カムポジションセンサによるカムセンサ信号に基づく代替制御を行う。ＮＥセンサ割込みが３０ＣＡ（クランクアングル）毎に生じるのに対し、カムポジションセンサの信号割込み（以下、カムセンサ割込みという）は例えば６０ＣＡ〜１８０ＣＡ間隔で生じるため割込み間隔が大きい。このため、ＮＥセンサ割込みの頻度と比べてカムセンサ割込みは、１／３以下の頻度になる。したがって、コンテキストスイッチなどに割かれる割込み処理が不要になりＣＰＵ使用率を大きく低減でき、タスク抜けも大きく低減できる。
【００１７】
〔構成例〕
図３は、エンジン及びエンジンＥＣＵの概略構成図の一例を示す。図示するエンジン３００は、ピストンの往復運動を回転運動に変換するレシプロエンジンである。図では気筒が１つだが通常のエンジンは直列又はＶ時方向に複数の気筒を有し、各気筒のコネクティングロッドが１つのクランクシャフトに接続されている。本実施形態では気筒数は例えば４つである。
【００１８】
気筒内には、コネクティングロッド２７と連結されたピストン２６が収容され、気筒の内周面とピストンによって燃焼室が形成される。燃焼室には、燃料を噴射するインジェクタ２５、燃焼室で空気と燃料との混合気に点火するイグナイタ２２とが設けられている。燃焼室には、吸気バルブ２３で仕切られた吸入空気を供給する吸気通路と、燃焼後の排気が排出される排気バルブ２４で仕切られた排気通路が連結されている。
【００１９】
クランクシャフト２８の一端にはクランクシャフトタイミングロータ２９が同軸に固定されており、クランクシャフトタイミングロータ２９の外縁に対向してクランクポジションセンサ（以下、ＮＥセンサという）３４が配置されている。ＮＥセンサの原理はどのようなものでもよいが、例えば、クランクシャフトタイミングロータ２９の円周に等間隔（例えば１０度毎）に突起部を設けておき、クランクシャフト２８の回転に連動して突起部が移動することで生じる、突起部とＮＥセンサのエアギャップの変化を利用する。ＮＥセンサはコイルを有しておりエアギャップの変化により起電力を検出し、起電力の周期的な変化からクランクシャフトの回転角を検出する。
【００２０】
間隔を１０度にした場合、円周に合計３６個の突起ができるが、クランクシャフトタイミングロータ２９の突起部は一箇所（２歯）が欠損している。ＮＥセンサはこれよりクランクシャフト２８の基準角度（クランクシャフトが１回転したこと）を検出できるようになっている。クランクシャフトタイミングロータ２９は欠損部が第１気筒と第４気筒の上死点に一致するように取り付けられている。第２気筒と第３気筒はこの時、下死点に位置する。
【００２１】
吸気バルブ２３と排気バルブ２４はバルブスプリングで燃焼室を閉塞する状態に付勢されている。吸気バルブ２３と排気バルブ２４の端部（バルブリフター）はカム３２と接しており、このカム３３が不図示のカムシャフトタイミングギアと同軸に固定されている。なお、それぞれの気筒の吸気バルブ側のカムはカムシャフトにより連結されており、排気バルブ側のカムは別のカムシャフトにより連結されている。吸気側と排気側のカムシャフトタイミングベルト、及び、クランクシャフト２８と共に回転するクランクシャフトタイミングギアには、無端状のタイミングベルトが掛け回されている。したがって、クランクシャフト２８が回転することでタイミングベルトが回転し、カムシャフトタイミングギアが回転する。カムシャフトタイミングギアが回転することで、ピストン２６が決まった位置に来た時にカム３２が吸気バルブ２３を、カム３３が排気バルブ２４をそれぞれ押し出す。
【００２２】
吸気バルブ側のカムシャフトタイミングギアにはタイミングロータ３１が固定され、タイミングロータ３１の突起部に対向してカムポジションセンサ３４が配置される。カムポジションセンサ３４は、突起部とのエアギャップの変化により生じる磁束の変化を検出して、突起部の接近及び離間を検出する。カムポジションセンサ３４は、クランクシャフトが７２０度回転する間に３６０度回転する。よって、カムポジションセンサ３４の検出信号は０〜７２０ＣＡの値をとる。
【００２３】
タイミングロータ３１は、回転方向に凹部と凸部を有している。第１凸部は、第1気筒の上死点を基準に回転方向に６０ＣＡに相当する凸部である。第１凹部は、１８０ＣＡに相当する凹部である。第２凸部は、１８０ＣＡに相当する凸部である。第２凹部は、６０ＣＡに相当する凹部である。第３凸部は、１２０ＣＡに相当する凸部である。第３凹部は、１２０ＣＡに相当する凹部である。カムセンサ信号はこの凸部と凹部を検出する信号であり、ＮＥセンサ２１が検出する１０ＣＡ毎のＮＥセンサ信号により気筒判別が行われる。
【００２４】
エンジンＥＣＵ１００は、主に、マイコン、電源回路、センサやアクチュエータとのインタフェースを有する。図ではマイコン部分を示している。エンジンＥＣＵ１００のマイコンは、バスに接続されたＣＰＵ１１、ＲＡＭ１２、ＲＯＭ１３、ＩＮＴＣ１４、及び、Ｉ／Ｏ１５を有している。ＣＰＵ１１はシングルコアでもマルチコアでもよい。ＲＯＭ１３はフラッシュメモリなどの不揮発メモリであり、ＣＰＵ１１が実行するプログラムやマップ、制御用のパラメータ等を記憶している。ＣＰＵ１１はＲＡＭ１２を作業メモリにしてＲＯＭ１３に記憶されたプログラムを実行する。
【００２５】
Ｉ／Ｏ１５には、上記のＮＥセンサ２１、カムポジションセンサ３４、及び、不図示のセンサやアクチュエータが接続されている。Ｉ／ＯはＮＥセンサ２１及びカムポジションセンサ３４の割込みを検出して不図示の割込みレジスタのフラグをＯＮに設定する。
【００２６】
ＩＮＴＣ１４は、割込みレジスタを監視して、ＮＥセンサ割込み、カムセンサ割込み、タイマ割込みなどを、優先順位に基づき調停してＣＰＵ１１に通知する。これによりＣＰＵ１１は、ＩＳＲ（Interrupt  Service  Routine）や割込みハンドラなどを実行し、割込みに応じたタスクを起床させる。この後、後述するＯＳの例えばスケジューラがタスクの優先度に基づきＣＰＵ１１に割りあてるタスクをスケジューリングする。
【００２７】
なお、エンジンＥＣＵ１００は、ＡＤコントローラやＣＡＮコントローラ等の一般的な回路を有しているが図示を省略した。また、エンジンＥＣＵ１００にはアクセル開度センサ１６と車速センサ１７が接続されているが、この他、エンジンＥＣＵにはインテークマニホールドセンサ、エアフローセンサ等、種々のセンサが接続されている。
【００２８】
〔ＮＥセンサ信号、カムセンサ信号の例〕
図４は、ＮＥセンサ信号とカムセンサ信号を説明する図の一例である。ＮＥセンサ２１は、１０ＣＡ毎に立ち上がりエッジ又は立ち下がりエッジをマイコンに出力する。マイコンのＩ／Ｏはこれを予め定められた回数（３回）カウントする毎に、ＩＮＴＣに割込みする。したがって、図示するように３０ＣＡ毎にＮＥセンサ割込みが発生する。
【００２９】
カムセンサ信号は、タイミングロータ３１の凸部がカムポジションセンサ３４に接近すると立ち上がり、凹部が接近すると立ち下がる。カムポジションセンサ３４は立ち上がりエッジ及び立ち下がりエッジをマイコンに出力する。したがって、図３のタイミングロータ３１の形状では、カムポジションセンサ３４が１回転する（７２０ＣＡ）間に６回のカムセンサ割込みが発生する。
【００３０】
従来からエンジンＥＣＵ１００は、ＮＥセンサ信号によりクランクシャフトタイミングロータ２９の欠歯位置を検出すると気筒判別を行っていた。上記のとおり、クランクシャフトタイミングロータ２９の欠歯位置が第１気筒と第４気筒の上死点であるが、それだけではどちらが燃料行程でどちらが吸気工程か不明である。このため、エンジンＥＣＵ１００は、クランクシャフトタイミングロータ２９の欠歯位置が検出された直後のカムセンサ信号を監視して、Ｈｉｇｈであれば第１気筒の燃焼行程、第４気筒の吸気行程であると判定する。Ｌｏｗであれば、第４気筒の燃焼行程、第１気筒の吸気行程であると判定する。１つの気筒の工程が定まれば、残りの３つの気筒の工程も定まる。
【００３１】
そして、エンジンＥＣＵ１００のタスクの１つは、燃焼工程の上死点を点火タイミング（例えばＢＴＤＣ５〜ＴＤＣ０）に決定する。また、ＮＥセンサ割込みを契機に燃料噴射量を演算し、ＮＥセンサ割込みをカウントすることでクランク角を算出し、例えば圧縮行程の後半で燃料噴射を行う（図４の斜線部）。このように、気筒判別以外はＮＥセンサ割込みを利用してタスクを実行していた。なお、燃料噴射量は、エンジン回転数とインテークマニホールド負圧によりマップや関数などから基本量が決定され、基本量がスロットル開度、水温、吸気温、バッテリ電圧等により補正されることで決定される。また、減速時や高車速時はカットされる。
【００３２】
〔従来のタスク実行について〕
図５は、従来のタスクの実行手順を説明する図の一例である。エンジンＥＣＵ１００は複数のタスクを時分割して処理するマルチタスク処理が可能になっている。エンジンＥＣＵ１００はｎ個のタスクを実行するものであり、それぞれ予め決まった方法で起床される。例えば、タスク１〜１０はＮＥセンサ割込みにより起床され、タスクｎ-1、タスクｎはハード的又はソフト的なタイマ割込みにより起床される。
【００３３】
これらの割込みにより例えばＩＳＲがＣＰＵ１１により実行され、ＩＳＲがスケジューラをシステムコールすることでタスクを起床させている。スケジューラ４１はタスクの優先度に応じてタスクを実行キューに登録する。スケジューラ４１は優先度順にタスクをＣＰＵ１１に割りあてる。ＮＥセンサ割込みにより起床されるタスク１〜３は、タイマ割込みで起床されるタスクよりも優先度が高いことが多い。
【００３４】
タスク１は例えば、燃料噴射量を決定するタスクであり、タスク２は例えば燃料噴射タイミングを決定するタスクであり、タスク３は点火タイミングを決定するタスクであり、タスク４はエンジン回転数を算出するタスクであり、タスク５はクランク角を算出するタスクである。一方、タスクn-1やタスクｎは、水温の監視やバッテリの監視など、急には変動しない物理量の検出や、必要であれば検出値に基づくアクチュエータの制御を行うタスクである。
【００３５】
タスク１〜ｎが以下のように起床されるとして説明する。なお、タイマ割込みにより起床されるタスクは全てが同じ時間に起床されるわけではなく、タスク毎に起床タイミングは決まっている。
ＮＥセンサ割込み毎：タスク１〜１０
タイマ割込み：タスク１１〜ｎ
エンジン回転数が増大するとＮＥセンサ割込みの頻度が大きくなるので、優先度の高いタスクが多く起床される。この場合、スケジューラ４１は例えばタイマ割込みで起床された優先度の低いタスクよりも、タスク１〜３のような優先度の高いタスクを優先してＣＰＵ１１に割りあてる。すると、１周期前のタイマ割込みで起床したタスクが実行されず、次の周期のタイマ割込みで同種の（同じタスクＩＤの）タスクが起床される状況が生じる。この場合、スケジューラ４１は、１周期前のタイマ割込みで起床したタスクをＣＰＵ１１に割り当てることなく破棄する。または、１周期前のタイマ割込みで起床したタスクが実行されていないので、新たに起床しない。これがタスク抜け（処理抜け）である。なお、スケジューラ４１はタスク抜けしたタスクＩＤと数をカウントしている。
【００３６】
タスク抜けは、ＮＥセンサ割込みにより起床される高優先のタスク間ではほとんど生じないため、走行に大きな影響を与えることはない。しかし、優先度の低いタスクでも、タスク抜けが多くなるとエンジン制御の的確性が低下し、快適走行が困難になったり燃費低下をもたらすおそれがある。タスク抜けは図１にて説明したように、エンジン３００が高回転になるほど生じやすくなる。
【００３７】
ここで、ＣＰＵ使用率の算出について説明する。スケジューラ４１がＣＰＵ１１にタスクを割りあてる場合、割りあてた時間を計測している。また、スケジューラ４１は実行キューにタスクが登録されていない場合、ＣＰＵにアイドルタスクと呼ばれるタスクを割りあてる。アイドルタスクはＮＯＰ（Ｎｏｎ  Ｏｐｅｒａｔｉｏｎ）など、具体的な処理を行わないタスクである。したがって、ＣＰＵ１１は、タスク１〜ｎ又はアイドルタスクを実行しており、タスク１〜ｎを実行する時間が長いほどＣＰＵ使用率が高いことになる。そこで、使用率監視部４２は、単位時間に対しタスク１〜ｎを実行した時間の比をＣＰＵ使用率として算出する。
ＣＰＵ使用率＝  （タスク１〜ｎの実行時間／単位時間）×１００
ＣＰＵ使用率＝  １００−（アイドルタスク／単位時間）×１００
【００３８】
図６は、本実施例のエンジンＥＣＵ１００の機能ブロック図の一例を示す。エンジンＥＣＵ１００は、使用率監視部４２及びシフトアップ部４３を有する。エンジンＥＣＵ１００には変速機が接続されている。変速機５０は、例えば、ＡＴ（オートマチックトランスミッション）又はＣＶＴ（Continuously  Variable  Transmission）である。シフトアップ部４３は、変速機５０の変速比を制御する。例えば、前進６速のＡＴの場合、２から３、３から４、４から５、５から６にシフトアップすること、及び、３から２、４から３、５から４、６から５にシフトダウンすることができる。
【００３９】
ＡＴ車では、複数の遊星歯車機構の組み合わせを油圧で切り替えることで変速比を制御している。また、ＣＶＴ車の場合、入力側（エンジン側）と出力側（ドライブシャフト側）の２つのプーリーに金属ベルトが巻き掛けられている。ＣＶＴでは、２つのプーリーの径を変化させることで、エンジン回転数と車輪側の回転速比を無段階に変えることができる。よって、ＣＶＴの場合、シフトアップ部４３は、入力側のプーリーの径を大きくすることで、ＡＴ車のシフトアップと同等の効果を得られる。
【００４０】
ＡＴ車の場合、エンジンＥＣＵ１００は省燃費が達成されるように、アクセルペダルの踏み込み量と車速から決定した要求トルクに基づき変速線マップを参照してシフトアップ及びシフトダウンを行っている。ＣＶＴ車の場合も同様に、エンジンＥＣＵ１００はアクセルペダルの踏み込み量と車速から決定した要求トルクを最も効率よく得られるエンジン回転速度と変速比に制御することで、燃費向上を可能にしている。
【００４１】
本実施例のシフトアップ部４３は、例えばアクセル開度と車速が必ずしも最適な変速比にならなくても、シフトアップすることで変速比を小さくし、車速をほぼ一定に保ったままエンジン回転数を小さくする。これによって、一時的に燃費が低下するというデメリットが生じても、タスク抜けが低減するので的確なエンジン制御が行われるというデメリットよりも大きなメリットが得られる。
【００４２】
図７は、エンジンＥＣＵ１００の動作手順を示すフローチャート図の一例である。この手順は所定時間毎に繰り返し実行される。使用率監視部４２は、サイクル時間毎にＣＰＵ使用率を算出している（Ｓ１０）。
【００４３】
使用率監視部４２は、例えば、過去の数回のサイクル全てにおいてＣＰＵ使用率が閾値より大きいか否かを判定する（Ｓ２０）。平均を算出してもよいし、１回のＣＰＵ使用率に基づき判定してもよい。また、閾値は、開発者等が、例えばタスク抜けが生じ始めるＣＰＵ使用率を実験的に求めておくことで予め定めておくことができる。本実施例では例えば６０〜８０％程度である。
【００４４】
ＣＰＵ使用率が閾値より大きい場合（Ｓ２０のＹｅｓ）、シフトアップ部４３は変速機５０をシフトアップさせる（Ｓ３０）。これによりエンジン回転数を下げることができる。すでに変速比が６速になっていた場合は、変速できないので、この場合の制御は実施例２にて説明する。
【００４５】
ＣＰＵ使用率が閾値より大きくない場合（Ｓ２０のＮｏ）、シフトアップ部４３はアクセル開度と車速に応じて最適な変速比にシフトダウンさせる（Ｓ４０）。すなわち、ステップＳ３０でシフトアップした場合でも、ＣＰＵ使用率が低下したら元の最適な変速比に戻すことができる。
【００４６】
以上説明したように、本実施例のエンジンＥＣＵ１００は、ＣＰＵ負荷率が大きい場合、シフトアップすることでエンジン回転数を下げるので、ＮＥセンサ割込みを少なくしてＣＰＵ使用率を下げることができる。したがってタスク抜けを抑制することができる。
【実施例２】
【００４７】
本実施例では、車両要求トルクが大きい場合、カムセンサ割込みによりタスクを実行するエンジンＥＣＵ１００について説明する。運転者が例えば加速しているような場合、シフトアップしてしまうと車両のトルクが低下して加速度が低下してしまう。本実施例では、出力要求トルクが大きい場合にエンジン回転数を下げないので、運転者のドライバビリティを低下させることを防止できる。また、ＮＥセンサ割込みに比べ頻度が少ないカムセンサ割込みに基づきタスクを実行するので、エンジン回転数が低下しなくてもタスク抜けを生じにくくすることができる。
【００４８】
図８は、本実施例のエンジンＥＣＵ１００の機能ブロック図の一例である。エンジンＥＣＵ１００は、使用率監視部４２、要求トルク決定部４４、シフトアップ部４３、ＮＥ割込み禁止部４５、タスク制御部４６、及び、スケジューラ４１を有している。また、要求トルク決定部４４及びシフトアップ部４３は車線速マップ４７を参照可能になっている。
【００４９】
要求トルク決定部４４は、運転者の操作等から車両要求トルクを決定する。具体的にはアクセル開度と車速に基づきマップ等を参照して決定する。エンジン回転数などにより補正してもよい。また、要求トルク決定部４４は、決定した車両要求トルクと閾値を比較してシフトアップ可能か否かを判定する。ＮＥ割込み禁止部４５は、要求トルク決定部４４がシフトアップ可能でないと判定した場合、ＮＥセンサ割込みを禁止する。タスク制御部４６は、ＮＥ割込み禁止状態においてタスクの起床を制御する。
【００５０】
図９は、車線速マップ４７の一例を示す図である。図９では車速とアクセル開度に対し、シフトアップ線とシフトダウン線が示されている。シフトアップ線とシフトダウン線は、「１から２、２から１」、「２から３、３から２」、「３から４、４から３」、「４から５、５から４」、「５から６、６から５」のように変速比毎に予め定められている。シフトアップ線とシフトダウン線は、変速比が短時間に変わらないようにヒステレシスが設けられる。
【００５１】
車両要求トルクが大きいためシフトアップしないこと（シフトアップを禁止すること）は、エンジンＥＣＵ１００がシフトアップしにくいシフトアップ線を使用すること、と換言することができる。図では、５から６のシフトアップ線が２つ示されている。一方のシフトアップ線Ｓ１は車両要求トルクが閾値未満の場合のシフトアップ線であり（以下、通常のシフトアップ線Ｓ１という）、他方は車両要求トルクが閾値以上の場合のシフトアップ線Ｓ２である（以下、高トルク時のシフトアップ線Ｓ２という）。
【００５２】
要求トルク決定部４４は、車両要求トルクと閾値を比較して、車線速マップ４７のシフトアップ線を切り替える。通常のシフトアップ線Ｓ１よりも、高トルク時のシフトアップ線Ｓ２は、より高速側に移動している。このため、実際の車速が大きくならないと、車速とアクセル開度で定まる車両状況（車速とアクセル開度で定まる車線速マップ上の点）が高トルク時のシフトアップ線Ｓ２を超えることはできない。また、同様に、アクセル開度が大きいほど、車両状況が高トルク時のシフトアップ線Ｓ２から離れるので、運転者の加速意志が強い場合（アクセルペダルの踏み込みが大きい場合）は、高トルク時のシフトアップ線Ｓ２を超えにくくなる。このため、車両要求トルクが閾値以上の場合、エンジンＥＣＵ１００が変速機５０をシフトアップする可能性が極めて小さくなり、シフトアップすることを防止できる。
【００５３】
なお、図では高トルク時において「６から５」にシフトダウンするシフトダウン線が図示されていないが、高トルク時の「６から５」へのシフトダウン線も予め設定されている。また、「１から２、２から１」、「２から３、３から２」、「３から４、４から３」、「４から５、５から４」のシフトアップ線とシフトダウン線についても、高トルク時のシフトアップ線とシフトダウン線が、予め設定されている。したがって、車両要求トルクと比較される閾値も、現在の変速比に応じて予め複数、用意しておくことが好適である。
【００５４】
図１０（ａ）はＮＥ割込み禁止部４５によるＮＥセンサ割込みの禁止を説明する図の一例である。ＮＥセンサ割込みが発生した場合、Ｉ／Ｏ１５はＮＥ割込みレジスタ６１のフラグをＯＮにする。ＮＥ割込みレジスタ６１には割込みを禁止するためのマスクレジスタ６２が対に配置されている。ＩＮＴＣ１４は、常態ではマスクレジスタ６２をＯＮに設定しているので、ＮＥ割込みレジスタ６１のフラグがＯＮになると、ＡＮＤ回路６５を介して割込み要求を受け付ける。ＮＥ割込み禁止部４５はマスクレジスタ６２をＯＦＦに設定することで、ＮＥ割込みレジスタ６１のフラグがＯＮになっても、割込み要求がＩＮＴＣ１４に入力されないように設定する。
【００５５】
一方、カム割込みレジスタ６３にもマスクレジスタ６４が配置されているが、カム割込みレジスタ６３のマスクレジスタ６４はＯＮのままである。したがって、ＩＮＴＣ１４にはカム割込みレジスタ６３からの割込み要求のみが入力される。この他の割込みについては省略している。
【００５６】
ＮＥ割込み禁止部４５は、上死点や気筒判別のため、０ＣＡになったタイミングで、ＮＥセンサ割込みを禁止する。この時、カムセンサ割込みも発生するので、後述のタスク制御部４６は、最初のカムセンサ割込みが発生した時、第１気筒が上死点であり、燃焼工程であると判定できる。
【００５７】
また、ＮＥ割込み禁止部４５は、ＮＥセンサ割込みを禁止するとＮＥ割込み禁止フラグ４７をＯＮに設定する。これにより、ＮＥセンサ割込みが禁止されていることをＯＳ、ＩＳＲ４９、タスクなどが検出できる。
【００５８】
ＩＮＴＣ１４はカムセンサ割込みの割込み要求を受け付けると、ＣＰＵ１１にＩＳＲ４９を実行させる。ＩＳＲ４９はＮＥ割込み禁止フラグ４７を参照して、ＮＥセンサ割込み禁止が禁止されているか否かを判定する。ＮＥセンサ割込み禁止が禁止されていない場合、ＩＳＲ４９は、例えば、気筒判別のためのタスクを起床するなど、従来と同様の処理を行う。
【００５９】
ＮＥセンサ割込みが禁止されている場合、ＩＳＲ４９は、タスク制御部４６を起床する。タスク制御部４６は、ＮＥセンサ割込みが禁止されている間に、ＮＥセンサ割込みで起床されるタスクの起床を制御する。上記のように、好適なエンジン制御には、各気筒の上死点の検出など、エンジンＥＣＵ１００がＮＥセンサ信号を利用することが好ましい。そこで、ＮＥセンサ信号を代替するため、タスク制御部４６はタイマカウント部５１に３０ＣＡ時間を計測させる。タスク制御部４６は、カムセンサ割込みの直後にタイマカウント部５１に時間の計測を開始させ、タイマカウント部５１が計測する時間が３０ＣＡになると、タスク１〜１０を起床させる。タスク１〜１０はＮＥセンサ割込みにより起床されていたタスクである。
【００６０】
この時、タスク制御部４６は現在のＣＡを計測してＣＡ記録テーブル４８に書き込み、現在のＣＡをタスクに通知するか、タスクが参照可能となるように提供する。以降、タスク制御部４６は、タイマカウント部５１が計測する時間が３０ＣＡになる毎にタスク１〜１０を起床させ、ＣＡ記録テーブル４８の現在のＣＡを更新する。なお、タイマカウント部５１は割込みによるコンテキストスイッチなどの負荷が生じにくいようにソフト的なカウント部である。
【００６１】
ここで、３０ＣＡの時間はエンジン回転数によって異なる。このため、タスク制御部４６は、直前に所定のタスクが計測したエンジン回転数に基づき３０ＣＡに相当する時間をタイマカウント部５１に設定する。例えば、エンジン回転数が９００ｒｐｍだった場合、３０ＣＡは５．６ミリ秒程度である。
【００６２】
この後、エンジン回転数が変化してもよいように、タスク制御部４６はカムセンサ割込みが６回（タイミングロータ３１が１回転する）生じるまでの時間を計測して、３０ＣＡを再計算する。タスク１〜１０のうち、クランク角やエンジン回転数を算出する必要があるタスクは現在のＣＡを利用してタスクを実行する。
【００６３】
タスク１１〜ｎはタイマ割込みにより起床されているが、タイマ割込みによる起床は禁止されていないので、ＮＥセンサ割込み禁止後もタスク１１〜ｎは、タイマ割込みにより起床される。スケジューラ４１は、タスクの優先度にしたがって実行キューにタスクを登録するので、ＮＥセンサ割込みが禁止される前と同様に、実行キューにはタスク１〜ｎが登録される。しかし、ＮＥセンサ割込みが発生していないので（カムセンサ割込みの数は１／３以下なので）、コンテキストスイッチが発生しにくく、ＣＰＵ使用率は上昇しにくいので、タスク抜けを抑制することができる。
【００６４】
カムセンサ割込みにより起床されるタスクは、例えば、以下のようになる。タスク１〜１０は、燃料噴射や点火以外に、燃料噴射量の計算やエンジン回転数を計算するが説明は省略している。また、下記では、３０ＣＡ毎に機械的にタスク１〜１０を起床させているが、タスク制御部４６はＣＡに基づき必要なタスクのみを起床させればよい。ＣＡ毎に起床すべきタスクはテーブルなどにＣＡと対応づけて登録されている。
（１）０ＣＡ  ：カムセンサ割込み発生  →  タスク１〜１０  起床
ＮＥ割込み禁止フラグ４７がＯＮになって最初のカムセンサ割込み時が０ＣＡであるので、第１気筒の点火タイミングであることが分かる。その他の気筒の工程も検出される。
【００６５】
なお、タスク制御部４６は、ＣＡ記録テーブル４８にＣＡを記録する（０ＣＡ）。
【００６６】
３０ＣＡ  ：タスク１〜１０  起床
タスク制御部４６は、ＣＡ記録テーブル４８にＣＡを記録する（３０ＣＡ）。
（２）６０ＣＡ  ：カムセンサ割込み発生  →  タスク１〜１０  起床
タスク制御部４６は、ＣＡ記録テーブル４８を参照して、直前のＣＡを確認する。直前のＣＡが３０ＣＡなので、今回のカムセンサ割込みが６０ＣＡであると判定し、ＣＡ記録テーブル４８にＣＡを記録する（６０Ａ）。
【００６７】
９０ＣＡ  ：タスク１〜１０  起床
１２０ＣＡ：タスク１〜１０  起床
１５０ＣＡ：タスク１〜１０  起床
このタイミングで起床されたタスクは第３気筒に燃料を噴射する。
【００６８】
１８０ＣＡ：タスク１〜１０  起床
このタイミングで起床されたタスクは第３気筒を点火する。
【００６９】
２１０ＣＡ：タスク１〜１０  起床
ＣＡ９０〜２１０の間、タスク制御部４６は、ＣＡ記録テーブル４８を３０ＣＡ毎に更新する（２１０ＣＡ）。
（３）２４０ＣＡ：カムセンサ割込み発生  →  タスク１〜１０  起床
タスク制御部４６は、ＣＡ記録テーブル４８を参照して、直前のＣＡを確認する。直前のＣＡが２１０ＣＡなので、今回のカムセンサ割込みが２４０ＣＡであると判定し、ＣＡ記録テーブル４８にＣＡを記録する（２４０Ａ）。
【００７０】
２７０ＣＡ：タスク１〜１０  起床
３００ＣＡ：タスク１〜１０  起床
３３０ＣＡ：タスク１〜１０  起床
このタイミングで起床されたタスクは第４気筒に燃料を噴射する。
【００７１】
３６０ＣＡ：タスク１〜１０  起床
このタイミングで起床されたタスクは第４気筒を点火する。
【００７２】
３９０ＣＡ：タスク１〜１０  起床
ＣＡ２７０〜３９０の間、タスク制御部４６は、ＣＡ記録テーブル４８を３０ＣＡ毎に更新する（３９０ＣＡ）。
（４）４２０ＣＡ：カムセンサ割込み発生  →  タスク１〜１０  起床
タスク制御部４６は、ＣＡ記録テーブル４８を参照して、直前のＣＡを確認する。直前のＣＡが３９０ＣＡなので、今回のカムセンサ割込みが４２０ＣＡであると判定し、ＣＡ記録テーブル４８にＣＡを記録する（４２０Ａ）。
【００７３】
４５０ＣＡ：タスク１〜１０  起床
（５）４８０ＣＡ：カムセンサ割込み発生  →  タスク１〜１０  起床
タスク制御部４６は、ＣＡ記録テーブル４８を参照して、直前のＣＡを確認する。直前のＣＡが４２０ＣＡなので、今回のカムセンサ割込みが４８０ＣＡであると判定し、ＣＡ記録テーブル４８にＣＡを記録する（４８０Ａ）。
【００７４】
５１０ＣＡ：タスク１〜１０  起床
このタイミングで起床されたタスクは第２気筒に燃料を噴射する。
【００７５】
５４０ＣＡ：タスク１〜１０  起床
このタイミングで起床されたタスクは第２気筒を点火する。
【００７６】
５７０ＣＡ：タスク１〜１０  起床
ＣＡ５１０〜５７０の間、タスク制御部４６は、ＣＡ記録テーブル４８を３０ＣＡ毎に更新する（５７０ＣＡ）。
（６）６００ＣＡ：カムセンサ割込み発生  →  タスク１〜１０  起床
タスク制御部４６は、ＣＡ記録テーブル４８を参照して、直前のＣＡを確認する。直前のＣＡが５７０ＣＡなので、今回のカムセンサ割込みが６００ＣＡであると判定し、ＣＡ記録テーブル４８にＣＡを記録する（６００Ａ）。
【００７７】
６３０ＣＡ：タスク１〜１０  起床
６６０ＣＡ：タスク１〜１０  起床
６９０ＣＡ：タスク１〜１０  起床
このタイミングで起床されたタスクは第１気筒に燃料を噴射する。
【００７８】
７２０ＣＡ：タスク１〜１０  起床
以上の6回の割込みでタイミングロータ３１が1回転するので、タスク制御部４６は次回のカムセンサ割込みから同様の処理を繰り返す。
【００７９】
図１１は、本実施例のエンジンＥＣＵ１００の動作手順の一例を示す図である。使用率監視部４２は、サイクル時間毎にＣＰＵ使用率を算出している（Ｓ１０）。
【００８０】
使用率監視部４２は、例えば、過去の数回のサイクル全てにおいてＣＰＵ使用率が閾値より大きいか否かを判定する（Ｓ２０）。
【００８１】
ＣＰＵ使用率が閾値より大きくない場合（Ｓ２０のＮｏ）、シフトアップ部４３はアクセル開度と車速に応じて最適な変速比にシフトダウンさせる（Ｓ４０）。すなわち、ステップＳ３０でシフトアップした場合でも、ＣＰＵ使用率が低下したら元の最適な変速比に戻すことができる。
【００８２】
ＣＰＵ使用率が閾値より大きい場合（Ｓ２０のＹｅｓ）、要求トルク決定部４４は車両要求トルクが閾値以上か否かを判定する（Ｓ２２）。この閾値は運転者の加速の意志が検出される程度の要求トルクである。要求トルクでなくアクセル開度を閾値と比較してもよい。
【００８３】
車両要求トルクが閾値以上でない場合（Ｓ２２のＮｏ）、要求トルク決定部４４は車線速マップ４７を高トルク時のシフトアップ線に切り替えない。また、すでに車線速マップ４７を高トルク時のシフトアップ線に切り替えていた場合、元のシフトアップ線に戻す。
【００８４】
そして、シフトアップ部４３は変速機５０をシフトアップさせる（Ｓ３０）。これによりエンジン回転数を下げることができる。
【００８５】
車両要求トルクが閾値以上の場合（Ｓ２２のＹｅｓ）、要求トルク決定部４４は車線速マップ４７を高トルク時の高トルク時のシフトアップ線に切り替える（Ｓ２４）。これにより、車両要求トルクが大きい場合にシフトアップされることを抑制できる。
【００８６】
また、ＮＥ割込み禁止部４５がＮＥセンサ割込みを禁止する（Ｓ５０）。
【００８７】
そして、タスク制御部４６がカムセンサ割込みに基づくタスク制御を開始する（Ｓ６０）。こうすることで、車両要求トルクが大きい場合には、エンジン回転数を下げることなく割込みの頻度を減らすことでＣＰＵ使用率を低減でき、タスク抜けを低減できる。例えば、すでに変速比が６速になっている場合でも、タスク抜けを低減できる。
【００８８】
以上説明したように、本実施例のエンジンＥＣＵ１００はシフトアップが困難な場合、カムセンサ信号を利用してエンジン制御を行うので、ドライバビリティに影響を与えることなくＣＰＵ使用率を低減できる。したがって、タスク抜けも低減でき、燃費向上などの最適制御を継続的に行える。
【符号の説明】
【００８９】
１１    ＣＰＵ
２１    ＮＥセンサ
２８    クランクシャフト
３１    タイミングロータ
３２，３３  カム
３４    カムポジションセンサ
４１    スケジューラ
４２    使用率監視部
４３    シフトアップ部
４４    要求トルク決定部
４５    ＮＥ割込み禁止部
４６    タスク制御部
１００  エンジンＥＣＵ
【図１】
2013160133.tif 000003
【図２】
2013160133.tif 000004
【図３】
2013160133.tif 000005
【図４】
2013160133.tif 000006
【図５】
2013160133.tif 000007
【図６】
2013160133.tif 000008
【図７】
2013160133.tif 000009
【図８】
2013160133.tif 000010
【図９】
2013160133.tif 000011
【図１０】
2013160133.tif 000012
【図１１】
2013160133.tif 000013