(57)【要約】【課題】制御対象に異常が検出された際に、それが、コントローラ内のＤＭＡ転送の遅延や転送漏れに起因する誤検出であるかを早期に判断し得るコントローラを提供する。【解決手段】ＲＡＭ（１３）と、前記ＲＡＭに対するＤＭＡ転送を制御するＤＭＡ部（１２）とを備えたコントローラである。前記ＲＡＭは、所定期間内に行われたＤＭＡ転送について、転送の遅延時間と、転送漏れの回数との少なくとも一方を直接的または間接的に表す転送状況データを記憶する。【選択図】図１
2020160986.tif 000002
【特許請求の範囲】
【請求項１】
ＲＡＭ（１３）と、
前記ＲＡＭに対するＤＭＡ転送を制御するＤＭＡ部（１２）と、
を備え、
前記ＲＡＭは、所定期間内に行われたＤＭＡ転送について、転送の遅延時間と、転送漏れの回数との少なくとも一方を直接的または間接的に表す転送状況データを記憶する、コントローラ。
【請求項２】
前記ＤＭＡ部は、前記ＤＭＡ転送を所定の周期で実施するものであり、
前記所定の周期と同じ長さのリセット周期をカウントするとリセットされるカウンタをさらに備え、
前記ＲＡＭは、前記転送の遅延時間として、前記ＤＭＡ転送が完了した時点の前記カウンタのカウント値を記憶する請求項１に記載のコントローラ。
【請求項３】
前記カウンタは、前記ＤＭＡ転送の完了する時点に対応してリセット周期に達してリセットされる遅延カウンタ（１６ｂ）であり、
前記遅延カウンタは、前記リセット周期に相当する所定値にコンペアマッチしたときに、当該遅延カウンタのカウンタ値を前記ＲＡＭへＤＭＡ転送することを要求する、請求項２に記載のコントローラ。
【請求項４】
前記転送状況データが、所定期間内に行われたＤＭＡ転送のうち、転送の遅延時間が所定の閾値を超えるＤＭＡ転送の割合を表す高負荷率を含む、請求項１〜３のいずれか一項に記載のコントローラ。
【請求項５】
前記転送漏れの回数が、所定期間内に実行可能なＤＭＡ転送の回数と、前記所定期間内に実行されたＤＭＡ転送の回数との比較から求められる、請求項１〜４のいずれか一項に記載のコントローラ。
【請求項６】
書き込み可能なＲＯＭ（１４）をさらに備え、
前記ＲＡＭの転送状況データの少なくとも一部を読み出して、前記ＲＯＭに記憶する、請求項１〜５のいずれか一項に記載のコントローラ。
【請求項７】
制御対象からセンサ信号を入力し、ＡＤ変換してセンサデータを生成するＡＤ変換部（１５）をさらに備え、
前記ＤＭＡ部が、前記ＡＤ変換部から前記ＲＡＭへ、前記センサデータをＤＭＡ転送し、
前記センサデータに基づいて前記制御対象の異常が検出された場合、前記ＲＡＭから、前記転送状況データの少なくとも一部に加えて、前記センサデータの少なくとも一部を読み出して、前記ＲＯＭに記憶する、請求項６に記載のコントローラ。
【請求項８】
請求項７に記載のコントローラ（１）の制御対象の異常を判断する診断プログラムであって、
前記センサデータに基づいて制御対象の異常が検出された場合、
コンピュータのプロセッサに、
前記コントローラのＲＯＭから読み出されたデータを入力するステップと、
前記転送状況データを所定の閾値と対比することにより、前記制御対象の異常が、前記ＤＭＡ転送によるセンサデータの不備に起因するか否かを判断するステップとを実行させる、診断プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この明細書における開示は、コントローラとその診断プログラムに関する。
【背景技術】
【０００２】
マイクロコントローラにおいて、複数のメモリ間のデータ転送を、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）によって行うことが従来知られている。マイクロコントローラは、マイクロコンピュータとも呼ばれる。ＤＭＡによるデータ転送は、マイクロコントローラ内で、ＣＰＵの動作とは独立して行われるので、高速なデータ転送を実現できる。
【０００３】
ＤＭＡを利用するマイクロコントローラは、自動車等において、エンジン制御装置やエアバッグ制御装置等の様々な箇所に用いられている。このような装置において、マイクロコントローラ内に、動作情報データを所定期間分だけ蓄積しておくことも従来知られている。蓄積された動作情報データは、制御対象に何らかの異常が検出された場合に、故障箇所を特定するために用いられる。
【０００４】
しかし、ＤＭＡのデータ転送遅れが生じた場合に、マイクロコントローラの制御対象に異常が生じていないにも関わらず、異常が誤検出されることがある。これは、本来メモリに転送されるべきであったデータが、ＤＭＡのデータ転送遅れによって転送されていなかったことなどの転送エラーが原因となる場合がある。
【０００５】
なお、例えば特許文献１は、パリティエラーや応答時間オーバー等の転送エラーが生じていないかをチェックする手段を備えたＤＭＡコントローラを開示している。しかし、特許文献１には、転送エラーをどのように検出するかについての具体的な開示はない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平８−２０２６３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本開示は、制御対象に異常が検出された際に、コントローラ内のＤＭＡ転送の遅延や転送漏れなどの転送エラーに起因する誤検出であるかを早期に判断できるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
本発明の第１の側面は、ＲＡＭ（１３）と、前記ＲＡＭに対するＤＭＡ転送を制御するＤＭＡ部（１２）とを備えたコントローラである。前記ＲＡＭは、所定期間内に行われたＤＭＡ転送について、転送の遅延時間と、転送漏れの回数との少なくとも一方を直接的または間接的に表す転送状況データを記憶する。
【０００９】
本発明の第２の側面は、コントローラ（１）の制御対象の異常を判断する診断プログラムである。この診断プログラムは、センサデータに基づいて制御対象の異常が検出された場合、コンピュータのプロセッサに、コントローラのＲＯＭから読み出されたデータを入力するステップと、転送状況データを所定の閾値と対比することにより、制御対象の異常が、ＤＭＡ転送によるセンサデータの不備に起因するか否かを判断するステップとを実行させる。
【００１０】
この明細書における開示された複数の態様は、それぞれの目的を達成するために、互いに異なる技術的手段を採用する。請求の範囲およびこの項に記載した括弧内の符号は、後述する実施形態の部分との対応関係を例示的に示すものであって、技術的範囲を限定することを意図するものではない。この明細書に開示される目的、特徴、および効果は、後続の詳細な説明、および添付の図面を参照することによってより明確になる。
【図面の簡単な説明】
【００１１】
【図１】図１は、本発明の一実施形態に係るエンジン制御装置の概略構成を示すブロック図である。
【図２】図２は、図１のＲＡＭとＲＯＭに記憶されるデータの一例を示す模式図である。
【図３】図３は、ＤＭＡ転送の基本動作を示すタイミング図である。
【図４】図４は、ＤＭＡ転送に遅延が生じた場合のタイミング図である。
【図５】図５は、ＤＭＡ転送に転送漏れが生じた場合のタイミング図である。
【図６Ａ】図６Ａは、転送漏れが無い場合にＲＡＭに格納されるデータの模式図である。
【図６Ｂ】図６Ｂは、転送漏れが生じた場合にＲＡＭに格納されるデータの模式図である。
【図７】図７は、遅延計測期間の終了後の処理フローを示すフローチャートである。
【図８】図８は、失火検出時の処理フローを示すフローチャートである。
【図９】図９は、診断ツールの処理フローを示すフローチャートである。
【発明を実施するための形態】
【００１２】
図面を参照しながら、複数の実施形態を説明する。複数の実施形態において、機能的におよび／または構造的に対応する部分および／または関連付けられる部分には同一の参照符号、または百以上の位が異なる参照符号が付される場合がある。対応する部分および／または関連付けられる部分については、他の実施形態の説明を参照することができる。
【００１３】
図１に示すように、第１実施形態に係るコントローラ１は、エンジン制御装置１０に設けられている。コントローラ１は、マイクロコンピュータまたはマイクロコントローラ等と称されることがある。エンジン制御装置１０は、コントローラ１の他に、入力回路２と、出力回路３と、外部ＩＣ４とを備えている。エンジン制御装置１０は、出力回路３から、点火モジュールや燃料噴射モジュール等のエンジン各部の動作を制御する制御信号を出力する。入力回路２は、エンジン各部の動作状況を表すセンサ信号を、エンジン各部のセンサから受け取る。センサ信号は、これらに限定されないが、例えば筒内圧センサ信号やノックセンサ信号等である。コントローラ１は、これらのセンサ信号に基づき、エンジン各部の動作を、状況に応じて制御する。外部ＩＣ４は、エンジン制御を行うために必要な他の制御回路を有する。
【００１４】
コントローラ１は、ＣＰＵ１１と、ＤＭＡ部１２と、ＲＡＭ１３と、ＲＯＭ１４と、ＡＤ変換部１５と、タイマ部１６と、通信部１７とを備えている。ＣＰＵ１１は、コントローラ１の各部の動作を制御する。ＤＭＡ部１２は、ＣＰＵ１１とは独立して動作し、コントローラ１内のメモリ間のＤＭＡ転送を制御する。なお、コントローラ１は、図１に示していない他のモジュールを含んでいても良い。
【００１５】
コントローラ１は、１つのＩＣとして構成されていても良いし、２つ以上のＩＣに各部が分散配置されていても良い。コントローラ１に含まれる各部は、ハードウエア回路として実装することができる。
【００１６】
コントローラ１は、入力回路２を介して受け取ったセンサ信号を、ＡＤ変換部１５でデジタルのセンサデータに変換し、ＲＡＭ１３に記憶する。ＲＡＭ１３は、バッファとして機能し、ある程度の期間のセンサデータを蓄積することができる。センサデータは、エンジン各部で何らかの異常が検出された場合、ＲＡＭ１３から読み出され、ＲＯＭ１４において診断ツールが参照可能な領域に格納される。これにより、異常が検出された際に、異常が発生する直前の（さらに直後の）センサデータをＲＯＭ１４から取得し、診断ツールによる解析に利用できる。
【００１７】
コントローラ１は、また、所定期間内における、ＤＭＡ転送の状況を表す転送状況データを取得し、ＲＡＭ１３に格納する。転送状況データとは、ＤＭＡ転送に遅延や転送漏れがあるか否かや、その程度を表すデータである。転送状況データの一例は、ＤＭＡ転送要求があってから実際に転送がなされるまでの遅延時間である。転送状況データの他の例は、転送漏れが所定期間内に発生した回数（すなわち転送漏れ回数）である。転送漏れとは、ＤＭＡ転送要求がなされたにも関わらず、その要求に応じたＤＭＡ転送がなされなかったことを意味する。転送状況データは、遅延時間や転送漏れ回数そのものに限定されない。転送時間や転送漏れ回数に基づいて求められる指標データも、転送状況データに含まれる。指標データは、遅延や転送漏れの程度を数値的に表すデータである。指標データの一例は、高負荷率である。高負荷率とは、所定期間内に行われたＤＭＡ転送の総回数に対して、遅延を伴って実行されたＤＭＡ転送の回数の割合である。
【００１８】
転送状況データは、エンジンに何らかの異常が検出されたときに、ＲＡＭ１３から読み出され、ＲＯＭ１４において診断ツールが参照可能な領域へ格納される。
【００１９】
ここで、図２を参照し、ＲＡＭ１３およびＲＯＭ１４に格納されるデータの一例を説明する。ＲＡＭ１３は、センサデータを格納するセンサデータバッファ１３ａと、ＤＭＡの遅延時間を格納する遅延時間バッファ１３ｂとを有する。ＲＡＭ１３は、さらに、ＤＭＡの最新の異常データを格納するための異常データ領域１３ｃを有する。センサデータバッファ１３ａは、ＡＤ変換部１５で得られたセンサデータを、順次格納する。センサデータバッファ１３ａにおいては、空き領域がなくなると、最も古いセンサデータが新たなセンサデータで上書きされる。遅延時間バッファ１３ｂにおいても、空き領域がなくなると、最も古いＤＭＡ転送遅延時間が新たなＤＭＡ転送遅延時間で上書きされる。なお、図２において、センサデータバッファ１３ａと遅延時間バッファ１３ｂは、データ格納領域を８つずつ有するが、領域数は任意である。異常データ領域１３ｃは、転送漏れ回数と、高負荷率と、ＤＭＡデータ取得時刻とを記憶する領域を有する。
【００２０】
ＲＯＭ１４は、計測周期を記憶する領域１４ａと、転送回数初期値を記憶する領域１４ｂと、故障情報データを記憶する領域１４ｃとを有する。計測周期は、タイマ部１６のカウンタ（ＡＤ変換カウンタ１６ａ、遅延カウンタ１６ｂ）のリセット周期を規定する。転送回数初期値としては、ＤＭＡ転送の遅延を計測する期間内に実行可能な転送回数を下回らない数値が設定される。転送回数初期値は、例えば、遅延計測期間の長さを計測周期の長さで除し、端数を切り捨てた整数値よりも大きな整数値とすることが好ましい。故障情報データは、エンジンに生じ得る異常のパターンごとに、異常が検出された際にＲＯＭ１４へ記憶すべきデータの種別をあらかじめ定めたものである。例えば、スパークプラグの失火が検出された場合は、失火検出に関わるセンサからのデータがＲＡＭ１３から読み出され、ＲＯＭ１４へ格納される。図２では、失火が検出された際、それらのデータに加えて、失火検出時刻、ＤＭＡ転送漏れ回数、高負荷率、およびＤＭＡデータ取得時刻が、ＲＯＭ１４へ記憶される。ここで、ＤＭＡ転送漏れ回数、高負荷率、およびＤＭＡデータ取得時刻は、ＲＡＭ１３の異常データ領域１３ｃから読み出されて、ＲＯＭ１４へ記憶される。なお、異常データ領域１３ｃのデータは、失火検出時に限定されず、様々な異常の検出時に同様に利用することができる。
【００２１】
タイマ部１６は、独立して動作する複数のカウンタを内蔵している。タイマ部１６は、少なくとも、ＡＤ変換カウンタ１６ａと、遅延カウンタ１６ｂとを有している。ＡＤ変換カウンタ１６ａは、ＡＤ変換部１５の動作を制御するためのカウンタである。遅延カウンタ１６ｂは、ＤＭＡ転送の遅延を計測するためのカウンタである。ＡＤ変換カウンタ１６ａと遅延カウンタ１６ｂは、同じ基準クロックにしたがってカウンタ値を増加させる。ＡＤ変換カウンタ１６ａおよび遅延カウンタ１６ｂのそれぞれは、一定周期でリセットされる。ＡＤ変換カウンタ１６ａおよび遅延カウンタ１６ｂは、コンペアマッチタイマ（ｃｏｍｐａｒｅ  ｍａｔｃｈ  ｔｉｍｅｒ）である。ＡＤ変換カウンタ１６ａおよび遅延カウンタ１６ｂは、カウンタ値が所定値に到達するとリセットされる。この所定値は、ＲＯＭ１４の領域１４ａに記憶されている計測周期である。この所定値として、ＡＤ変換カウンタ１６ａおよび遅延カウンタ１６ｂの両方に、同じ値が設定されている。したがって、ＡＤ変換カウンタ１６ａおよび遅延カウンタ１６ｂのリセット周期の長さは同一である。ただし、遅延カウンタ１６ｂは、ＡＤ変換カウンタ１６ａよりも、少なくともＡＤ変換部１５によるＡＤ変換処理に要する時間と、ＤＭＡ部１２によるＡＤ変換結果のＤＭＡ転送に要する時間との合計時間だけ遅れて、リセット周期に達するように、それぞれの周期の位相が設定されている。ただし、この位相の関係は、多少、前後にずれても問題はない。このように、ＡＤ変換カウンタ１６ａと遅延カウンタ１６ｂとは独立して動作し、リセット時点は一致しない。
【００２２】
ＤＭＡ部１２は、ＡＤ変換部１５等の各部のデータをＲＡＭ１３にＤＭＡ転送する。例えば、ＡＤ変換部１５からＲＡＭ１３へのＤＭＡ転送は以下のように行われる。ＡＤ変換部１５は、変換データを格納するレジスタ１５ａを有する。ＡＤ変換部１５は、タイマ１６から、ＡＤ変換カウンタ１６ａのコンペアマッチを示す信号を受け取ると、入力回路２から受け取ったセンサ信号をＡＤ変換する。ＡＤ変換によってデジタル化されたセンサ信号は、レジスタ１５ａに格納される。ＡＤ変換部１５は、ＡＤ変換が完了したとき、ＡＤ変換の完了を示す変換完了信号をＤＭＡ部１２へ送る。この変換完了信号は、ＤＭＡ転送要求信号として作用する。ＤＭＡ部１２は、変換完了信号を受けると、ＡＤ変換部１５のレジスタ１５ａに格納されているデータを読み取り、ＲＡＭ１３に書き込む。以上の一連の動作により、ＡＤ変換部１５からＲＡＭ１３へのＤＭＡ転送が行われる。さらに、ＤＭＡ部１２は、遅延カウンタ１６ｂのカウンタ値が所定値に達すると、遅延カウンタ１６ｂから、遅延カウンタ１６ｂのカウント値のＤＭＡ転送要求信号を受け取る。すると、ＤＭＡ部１２は、ＡＤ変換部１５からＲＡＭ１３へのＤＭＡ転送が完了したことを条件として、遅延カウンタ１６ｂのカウンタ値のＤＭＡ転送を実行する。具体的には、ＤＭＡ部１２は、ＤＭＡ転送を開始する時点における遅延カウンタ１６ｂのカウンタ値を読み取り、ＲＡＭ１３へ書き込む。このように、ＤＭＡ部１２は、タイマ部１６（遅延カウンタ１６ｂ）からＲＡＭ１３へのＤＭＡ転送も行う。
【００２３】
ＤＭＡ部１２は、外部ＩＣ４とＲＡＭ１３との間の通信時に、ＲＡＭ１３と通信部１７との間でＤＭＡ転送を行う。通信部１７は、送信用レジスタ１７ａと受信用レジスタ１７ｂとを備えている。外部ＩＣ４へデータを送信する場合、ＤＭＡ部１２は、ＲＡＭ１３から送信データを読み出し、ＤＭＡ転送により通信モジュール１７の送信用レジスタ１７ａへ書き込む。外部ＩＣ４のデータを受信する場合、ＤＭＡ部１２は、外部ＩＣ４から受信用レジスタ１７ｂに書き込まれたデータを読み出し、ＲＡＭ１３へＤＭＡ転送する。
【００２４】
ここで、図３〜図５を参照し、コントローラ１におけるＤＭＡ転送の遅延計測について説明する。まず、図３に基づき、ＤＭＡ転送において遅延がない場合を説明する。
【００２５】
コントローラ１は、所定のタイミングで、ＤＭＡ転送の遅延計測を開始する。遅延計測期間の開始時点と終了時点は、個別にかつ任意に設定することができる。例えば、自動車のイグニションがオンにされた時点から遅延計測を開始しても良い。あるいは、特定のイベントの開始と同期して、遅延計測を開始しても良い。また、自動車のイグニションがオフにされたときに遅延計測を終了しても良い。あるいは、特定のイベントの終了と同期して、遅延計測を終了しても良い。なお、コントローラ１における処理負荷などを考慮して、遅延計測期間は、エンジンの燃焼工程に合わせて間欠的に繰り返し設定されることが好ましい。
【００２６】
図３の最上段に、ＡＤ変換カウンタ１６ａのカウンタ値の変遷を示す。なお、図３および他の図面において、図示の簡略化のためにカウンタ値は連続的に増加するよう示されているが、実際のカウンタ値は、離散値をとる。
【００２７】
上述のように、ＡＤ変換カウンタ１６ａがコンペアマッチした時点、すなわちＡＤ変換カウンタ１６ａのリセット時点で、ＡＤ変換部１５がＡＤ変換処理を開始する。ＡＤ変換が終了すると、ＡＤ変換部１５からＤＭＡ部１２へＤＭＡ転送要求信号Ｓ１が送られる。ＤＭＡ部１２は、このＤＭＡ転送要求信号Ｓ１を受けて、ＡＤ変換部１５のレジスタ１５ａからデータを読み出し、ＲＡＭ１３へ転送する。図３において、ＡＤ変換部１５からＲＡＭ１３へのＤＭＡ転送が行われている期間をＴ１として図示している。
【００２８】
遅延カウンタ１６ｂは、遅延計測の開始時点からカウントアップを開始する。遅延カウンタ１６ｂがコンペアマッチすると、遅延カウンタ１６ｂは、ＤＭＡ部１２へＤＭＡ転送要求信号Ｓ２を出す。このＤＭＡ転送要求信号Ｓ２を受けて、ＤＭＡ部１２は、遅延カウンタ１６ｂのカウンタ値を読み出し、ＲＡＭ１３へ転送する。このカウンタ値は、ＲＡＭ１３において、遅延時間バッファ１３ｂに格納される。図３において、遅延カウンタ１６ｂからＲＡＭ１３へのＤＭＡ転送が行われている期間をＴ２として図示している。図３の例では、センサデータのＤＭＡ転送が行われた期間Ｔ１の後、遅滞なく、期間Ｔ２において、遅延カウンタ１６ｂのカウンタ値のＤＭＡ転送が行われる。したがって、遅延時間時間バッファ１３ｂに遅延時間として格納されるカウンタ値は、リセット直後の値である「０ｘ００００」となる。
【００２９】
なお、遅延計測の開始時に、ＲＯＭ１４の領域１４ｂが参照され、転送回数初期値が読み出される。図３の例では、１回の遅延計測期間内に実行されるべき、ＡＤ変換部１５からのＤＭＡ転送の回数は４回である。転送回数初期値は、これよりも大きい値として、例えば「０ｘ０００５」が設定される。ＤＭＡ部１２は、転送残回数を記憶する残回数レジスタを有する。コントローラ１は、遅延計測期間の開始時点に、残回数レジスタに転送回数初期値を設定する。ＤＭＡ部１２は、ＡＤ変換部１５からのＤＭＡ転送を１回完了する度に、残回数レジスタのレジスタ値を１ずつ減算する。遅延計測期間の終了後に、転送回数初期値とレジスタ値との差を求めることにより、実行されたＤＭＡ転送の回数を求めることができる。例えば、図３の例では、遅延計測期間の終了後のレジスタ値は「０ｘ０００１」である。したがって、図３の例では、遅延計測期間中に、ＡＤ変換部１５から、４回のＤＭＡ転送が行われたことがわかる。
【００３０】
次に、図４を参照し、ＤＭＡ転送に遅延が生じた場合について説明する。図４では、遅延計測期間内に、ＡＤ変換部１５から２回目の転送要求（Ｓ１の２個目のパルス）が出されたとき、他の転送要求に基づくＤＭＡ転送（Ｔ４）が実行されている。このＴ４のＤＭＡ転送は、例えば、コントローラ１内の他のモジュール（図１には図示せず）からのＤＭＡ転送要求に起因するものである。このため、ＡＤ変換部１５からの２回目のＤＭＡ転送要求に基づく転送（Ｔ１（２））は、Ｔ４で示されているＤＭＡ転送が終了してから実行される。さらに、その後の遅延カウンタ１６ｂからのＤＭＡ転送要求（Ｓ２の２個目のパルス）も、Ｔ４のＤＭＡ転送がまだ実行中であるため待たされる。そして、Ｔ４のＤＭＡ転送の終了後、ＡＤ変換部１５からのＤＭＡ転送（Ｔ１（２））が実行される。このＤＭＡ転送が終了した後、遅延カウンタ１６ｂからのＤＭＡ転送（Ｔ２（２））が実行される。この結果、図４の例では、遅延カウンタ１６ｂからＤＭＡ転送要求が出されてから、転送が実行されるまでに、遅延時間ｄ１が存在する。この遅延時間ｄ１の間に、遅延カウンタ１６ｂのカウンタ値はカウントアップされ続ける。したがって、図４の例では、２回目のＤＭＡ転送が実行される時点のカウンタ値である「０ｘ００１０」が、遅延時間ｄ１の長さを表す。このカウンタ値が、遅延カウンタ１６ｂからのＤＭＡ転送により、ＲＡＭ１３の遅延時間バッファ１３ｂに記憶される。
【００３１】
同様に、ＡＤ変換部１５から３回目のＤＭＡ転送要求（Ｓ１の３個目のパルス）が出されたときも、他の転送要求に基づくＤＭＡ転送（Ｔ５）が実行されている。このため、遅延カウンタ１６ｂからの３回目のＤＭＡ転送（Ｔ２（３））は、遅延時間ｄ２だけ遅れて実行される。３回目のＤＭＡ転送が実行される時点の、遅延カウンタ１６ｂのカウンタ値は「０ｘ０００８」である。このカウンタ値が、遅延カウンタ１６ｂからのＤＭＡ転送により、ＲＡＭ１３の遅延時間バッファ１３ｂに記憶される。
【００３２】
以上のように、図４の例では、遅延計測期間内に実行されるべき、ＡＤ変換部１５からの４回のＤＭＡ転送は、遅延計測期間内に全て実行されている。しかし、２回目と３回目のＤＭＡ転送が、遅れて実行されている。そして、ＲＡＭ１３の遅延時間バッファ１３ｂに、２回目と３回目のＤＭＡ転送の遅延時間が格納されている。これにより、遅延時間バッファ１３ｂのデータを解析することによって、ＤＭＡ転送に遅延が生じていたことがわかる。
【００３３】
図４の例では、３回目のＤＭＡ転送要求（Ｓ１の３個目のパルス）が出される前に、２回目のＤＭＡ転送（Ｔ１（２）およびＴ２（２））が完了している。したがって、遅延を伴っているが、要求されたＤＭＡ転送は全て実行される。しかし、先のＤＭＡ転送の実行を待っている間に、次のＤＭＡ転送要求が出されると、転送漏れが生じることがある。コントローラ１は、転送漏れの回数を検出することができる。
【００３４】
次に、図５を参照し、コントローラ１において、転送漏れの回数を検出する仕組みについて説明する。図５では、遅延計測期間内に、ＡＤ変換部１５から１回目の転送要求（Ｓ１の１個目のパルス）が出されたとき、他の転送要求に基づくＤＭＡ転送（Ｔ４）が実行されている。このため、ＡＤ変換部１５からの１回目のＤＭＡ転送要求は処理待ち状態となる。しかし、Ｔ４のＤＭＡ転送が終了する前に、ＡＤ変換部１５から２回目の転送要求（Ｓ１の２個目のパルス）が出される。この場合、１回目の転送要求は、２回目の転送要求によって上書きされてしまう。その後、Ｔ４のＤＭＡ転送が終了したときに、２回目の転送要求に基づいて、ＡＤ変換部１５からのＤＭＡ転送（Ｔ１（２））が行われる。このとき、Ｔ１（２）のＤＭＡ転送によって転送されるのは、時刻ｔ１においてＡＤ変換されたデータ（図５のＣ１）ではなく、時刻ｔ２のデータ（Ｃ２）である。したがって、図５に示した例では、ＲＡＭ１３のセンサデータバッファ１３ａにおいて、時刻ｔ１におけるＡＤ変換部１５のセンサデータ（Ｃ１）が欠落した状態となる。このように、本来取得されるべきセンサデータが欠落すると、異常が正しく検出できないことがある。また、センサデータの欠落によって、異常が無いにも関わらず、異常が誤検出されることもある。
【００３５】
また、センサデータバッファ１３ａにおいて、センサデータが転送された順に連続して格納されていく場合、次のような問題も生じ得る。特に、図６Ａに示すように、タイマ時刻（図５のｔ１〜ｔ４）に応じてセンサデータが順次格納されていく場合、データ取得時刻とデータの不一致が起こり得る。図６Ａに示す例では、タイマ時刻（ｔ１〜ｔ４）に応じてバッファ領域が割り当てられている。そして、転送漏れがないとすれば、図５のセンサデータＣ１〜Ｃ４は、転送された順にバッファ領域に格納される。しかし、図５の例のように時刻ｔ１のセンサデータ（Ｃ１）の転送漏れが生じた場合、図６Ｂに示すように、時刻ｔ１の領域に時刻ｔ２のセンサデータ（Ｃ２）が格納される。以降、時刻ｔ２の領域に時刻ｔ３のセンサデータ（Ｃ３）、時刻ｔ３の領域に時刻ｔ４のセンサデータ（Ｃ４）が、それぞれ格納される。したがって、時刻ｔ２〜ｔ４のセンサデータが、時刻ｔ１〜ｔ３に取得されたセンサデータとして処理されることとなる。この結果、データの取得時刻とセンサデータとの関係がずれてしまい、例えば失火が発生していないのに失火があったとの誤検出がなされる場合もある。
【００３６】
しかし、コントローラ１においては、転送漏れがあった場合は、ＤＭＡ部１２の残回数レジスタのレジスタ値が更新されない。このため、図５に示すように、遅延計測期間の終了後の転送残回数は「０ｘ０００２」を示している。これにより、遅延計測期間に３回しかＤＭＡ転送が実行されず、転送漏れが１回あったことがわかる。なお、転送漏れ回数は、ＲＡＭ１３の異常データ領域１３ｃに記憶される。エンジンの異常が検出された場合に、転送漏れ回数を見ることにより、その異常が、センサデータの転送漏れに起因した誤検出である、と判断することが可能となる。
【００３７】
ここで、図７を参照し、遅延計測期間の終了時の処理フローについて説明する。ここでは、ＣＰＵ１１がこの処理を行うものとして説明するが、外部の診断ツール等が行っても良い。まず、現在時刻が設定される（ステップＳ１）。現在時刻は、例えば、タイマ部１６から取得することができる。
【００３８】
次に、ＣＰＵ１１は、転送回数初期値を、ＲＯＭ１４の領域１４ｂから取得する（ステップＳ２）。次に、ＣＰＵ１１は、ＤＭＡ部１２の転送残回数レジスタから、転送残回数を取得する（ステップＳ３）。そして、ＣＰＵ１１は、ステップＳ２で取得した転送回数初期値から、ステップＳ３で取得した転送残回数を引くことにより、実行された転送回数を求める（ステップＳ４）。また、ＣＰＵ１１は、転送回数初期値から、実行された転送回数を引くことにより、転送漏れ回数を求める（ステップＳ５）。
【００３９】
次に、ＣＰＵ１１は、変数ｉに初期値０を設定する（ステップＳ６）。ＣＰＵ１１は、また、ステップＳ６において、高負荷回数を表す変数Ｔｈに初期値０を設定する。次に、ＣＰＵ１１は、遅延時間バッファ１３ｂ内の遅延時間データの１つを遅延時間Ｄｉとして選択し、遅延時間Ｄｉが所定の閾値より大きいか判断する（ステップＳ７）。この所定の閾値より遅延時間Ｄｉが大きい場合、その遅延時間Ｄｉが取得されたときにＤＭＡ部１２が高負荷状態にあったと判断される。ステップＳ７の判断結果がＹｅｓの場合、ステップＳ８へ進み、変数Ｔｈの値を１だけ増加させる。ステップＳ７の判断結果がＮｏの場合、ステップＳ９へ進み、変数ｉの値を１だけ増加させる。
【００４０】
次に、ＣＰＵ１１は、変数ｉの値が、実行された転送回数に等しいか否かを判断する（ステップＳ１０）。ステップＳ１０の判断結果がＮｏの場合、ステップＳ７へ戻る。ステップＳ１０の判断結果がＹｅｓの場合は、ステップＳ１１へ進み、高負荷率を求める。高負荷率は、ステップＳ８で求めた高負荷回数Ｔｈを、実行された転送回数で除することで求められる。次に、ＣＰＵ１１は、ＲＡＭ１３の異常データ領域１３ｃのデータ取得時刻を現在時刻に更新する（ステップＳ１２）。また、ＣＰＵ１１は、異常データ領域１３ｃのデータを、ステップＳ５で求めた転送漏れ回数と、ステップＳ１２で求めた高負荷率とで更新する（ステップＳ１３）。
【００４１】
以上のように、コントローラ１では、遅延計測期間が終了する度に、ＲＡＭ１３の異常データ領域１３ｃのデータを更新する。上述したように、異常データ領域１３ｃのデータは、異常が検出された際に、故障情報データとしてＲＯＭ１４に格納され、診断ツール等で解析される
【００４２】
ここで、図８を参照し、異常が検出された際の処理フローについて説明する。この処理は、ＣＰＵ１１によって実行される。図８においては、異常としてスパークプラグの失火が検出された場合を例示する。ただし、異常の種類は失火に限定されない。まず、ＣＰＵ１１は、タイマ部１８から現在時刻を取得し、異常の検出時刻としてＲＯＭ１４に格納する（ステップＳ２１）。次に、ＣＰＵ１１は、ＲＡＭ１３の異常データ領域１３ｃのデータを読み出し、失火検出時データとしてＲＯＭ１４に格納する（ステップＳ２２）。
【００４３】
スパークプラグの失火は、筒内圧センサやノックセンサのセンサデータに基づいて検出される。例えば、筒内圧センサのセンサデータの値が正常値ではないときに、スパークプラグの失火が発生したものと判定される。したがって、失火が検出された際に、本当にスパークプラグの失火が生じているのか、センサデータの不備に起因して失火が誤検出されているのかを、早期に判断できることが望ましい。コントローラ１によれば、ＤＭＡ転送の遅延や転送漏れの有無に基づき、センサデータの不備の有無を検証することができる。
【００４４】
上述のように、本実施形態のコントローラ１によれば、ＤＭＡ転送の遅延時間をＲＡＭ１３の遅延時間バッファ１３ａに記録する。診断ツール等によって遅延状況を解析することで、異常が検出された際に、本当の異常なのか、ＤＭＡ負荷によるセンサデータの不備が原因なのかを、早期に判別できる。
【００４５】
さらに、コントローラ１は、遅延計測期間にＤＭＡ転送に漏れがあったか否かを判断し、転送漏れ回数をＲＡＭ１３に記録する。これにより、異常が検出された際に、診断ツール等によって、本当の異常なのか、転送漏れによるセンサデータの不備が原因なのかを、早期に判別できる。
【００４６】
図９に、診断ツールの処理フローの一例を示す。診断ツールは、例えば、パーソナルコンピュータやタブレット等に実装されるソフトウエアである。したがって、図９の処理フローは、パーソナルコンピュータ等のプロセッサによって実行される。診断ツールは、まず、コントローラ１のＲＯＭ１４において、故障情報データが記憶されている領域１４ｃにアクセスし、故障情報データを読み出す（ステップＳ３１）。なお、ここでは、診断ツールがＲＯＭ１４にアクセスするものとした。しかし、ＲＯＭ１４から読み出した故障情報データを、記録媒体または通信媒体を介して、診断ツールに読み込ませても良い。
【００４７】
次に、診断ツールは、読み出した故障情報データから、ＤＭＡ転送に関する転送状況データを抽出する（ステップＳ３２）。例えば、図２の例では、転送漏れ回数および高負荷率が抽出される。ただし、ＤＭＡ転送に関する転送状況データは、転送漏れ回数および高負荷率に制限されない。例えば、失火検出時に、遅延時間バッファ１３ｂに記憶された各遅延時間も、転送状況データとしてＲＯＭ１４に格納してもよい。
【００４８】
次に、抽出した転送状況データと所定の閾値とを比較することにより、異常検出が、ＤＭＡ転送の高負荷によるセンサデータの不備に起因するものかを判断する（ステップＳ３３）。例えば、高負荷率が所定の閾値（ゼロを含む）よりも高い場合、センサデータの転送に遅れが発生していたことや、その発生の頻度を把握することができる。また、転送状況データに遅延時間データを含む場合、遅延時間と所定の閾値とを比較し、その閾値を上回った遅延時間データの数が多いほど、ＤＭＡ負荷が高かったと推定できる。また、遅延時間の閾値を上回る程度が非常に大きい遅延時間データが存在した場合も、ＤＭＡ負荷が高かったと推定できる。これらの場合、異常検出は、ＤＭＡ負荷によるセンサデータの不備が原因である可能性が高いと判断することができる。
【００４９】
また、例えば、診断ツールによって、転送漏れ回数を所定の閾値と比較し、転送漏れ回数が閾値を上回り、かつ、閾値との差が大きいほど、ＤＭＡ負荷が高かったと推定できる。この場合、異常検出は、ＤＭＡ負荷によるセンサデータの不備が原因である可能性が高いと判断することができる。
【００５０】
この明細書および図面等における開示は、例示された実施形態に制限されない。開示は、例示された実施形態と、それらに基づく当業者による変形態様を包含する。例えば、開示は、実施形態において示された部品および／または要素の組み合わせに限定されない。開示は、多様な組み合わせによって実施可能である。開示は、実施形態に追加可能な追加的な部分をもつことができる。開示は、実施形態の部品および／または要素が省略されたものを包含する。開示は、ひとつの実施形態と他の実施形態との間における部品および／または要素の置き換え、または組み合わせを包含する。開示される技術的範囲は、実施形態の記載に限定されない。開示されるいくつかの技術的範囲は、請求の範囲の記載によって示され、さらに請求の範囲の記載と均等の意味及び範囲内での全ての変更を含むものと解されるべきである。
【００５１】
例えば、上記の実施形態においては、遅延時間と転送漏れ回数との両方をＲＡＭ１３に記憶する構成を例示した。しかし、遅延時間と転送漏れ回数とのいずれか一方のみをＲＡＭ１３に記憶する構成としても良い。
【００５２】
また、上記の実施形態においては、コントローラ１は、遅延時間に基づいて高負荷率を求め、ＲＡＭ１３に記憶する。しかし、遅延時間そのものに限らず、遅延時間に基づいてＤＭＡ転送の状況を表す指標データを求め、その指標データを解析に用いるようにしても良い。このような指標データとしては、上記の高負荷率以外に、様々な指標を用いることができる。例えば、実行されたＤＭＡ転送の回数に対する、転送漏れの回数の割合を指標データとして用いても良い。あるいは、遅延計測期間内に遅延時間が閾値を上回った回数を、指標データとして用いても良い。
【００５３】
上記の実施形態においては、遅延時間がゼロ（０ｘ００００）である場合も、遅延時間をＲＡＭ１３に記憶する構成を例示した。しかし、実質的な遅延時間が生じた場合にのみ、遅延の発生時点の情報と共に、遅延時間をＲＡＭ１３に記憶する構成としても良い。この構成によれば、ＲＡＭ１３の記憶容量を有効利用できる。
また、上記の実施形態においては、遅延カウンタ１６ｂのカウント値が所定値に到達することをもって、遅延カウンタ１６ｂのカウント値のＤＭＡ転送要求信号を作成する例について説明した。しかし、遅延カウンタ１６ｂのカウント値のＤＭＡ転送要求は、ＤＭＡ部１２において、ＡＤ変換部１５からＲＡＭ１３へのＤＭＡ転送が完了したことに応じて作成されてもよい。この場合、ＡＤ変換カウンタ１６ａが遅延カウンタ１６ｂとしての役割を兼ねることも可能となり、ＤＭＡ部１２は、ＡＤ変換結果のＤＭＡ転送が完了した時点のＡＤ変換カウンタ１６ａのカウンタ値を読み出して、遅延時間データとして、ＲＡＭ１３へ転送してもよい。
【００５４】
上記の実施形態においては、自動車のエンジン制御装置のコントローラを例示した。しかし、本開示のコントローラは、自動車のエンジン制御装置に限らず、様々な制御装置に適用することができる。
【符号の説明】
【００５５】
１：コントローラ、１２：ＤＭＡ部、１３：ＲＡＭ
【図１】
2020160986.tif 000003
【図２】
2020160986.tif 000004
【図３】
2020160986.tif 000005
【図４】
2020160986.tif 000006
【図５】
2020160986.tif 000007
【図６Ａ】
2020160986.tif 000008
【図６Ｂ】
2020160986.tif 000009
【図７】
2020160986.tif 000010
【図８】
2020160986.tif 000011
【図９】
2020160986.tif 000012