(57)【特許請求の範囲】
【請求項１】
複数のデータを含む一連のデータを繰り返し受信するシリアル通信装置であって、
送信元から受信装置が受信したデータを所定単位ずつ受信バッファに記憶し、前記受信バッファに予め定められたサイズのデータが記憶された場合、前記受信バッファから記憶手段にデータを転送するデータ転送手段と、
前記受信バッファに前記所定単位のデータが記憶された回数又は記憶されたデータ量をカウントするカウント手段と、
前記カウント手段がカウントしたカウント値を、予め定められている無通信区間の半分未満の周期で監視し、前記カウント値が変化していない場合に固着時間カウント値を増大させる監視手段と、
前記固着時間カウント値が前記無通信区間の所定の割合に相当する時間よりも大きくなった場合、前記送信元がデータを送信しない無通信区間であると判定し、前記無通信区間であると判定した後、前記受信装置が受信したデータを前記一連のデータの先頭であると特定するデータ特定手段と、を有することを特徴とするシリアル通信装置。
【請求項２】
前記無通信区間は、前記受信装置が受信したデータが前記所定単位ずつ前記受信バッファに記憶される周期よりも長い、ことを特徴とする請求項１記載のシリアル通信装置。
【請求項３】
前記データ転送手段は、前記受信バッファから前記記憶手段にデータを転送する際、ＣＰＵに割込み要求し、
前記無通信区間は、前記受信バッファに予め定められたサイズのデータが蓄積されるまでの時間、又は、前記データ転送手段が前記受信バッファから前記記憶手段にデータを転送する転送周期と同程度である、ことを特徴とする請求項１記載のシリアル通信装置。
【請求項４】
前記データ特定手段は、前記無通信区間が終了する前に前記無通信区間であることを検出する、ことを特徴とする請求項１〜３いずれか１項記載のシリアル通信装置。
【請求項５】
前記データ転送手段はＤＭＡコントローラであり、前記受信装置はＵＡＲＴである、
ことを特徴とする請求項１〜４いずれか１項記載のシリアル通信装置。
【請求項６】
前記受信装置が受信するデータは、車両のバッテリーのバッテリー情報であり、
当該シリアル通信装置は車両用電子制御ユニットである、
ことを特徴とする請求項１〜５いずれか１項記載のシリアル通信装置。
【請求項７】
受信装置と送信装置を有するシリアル通信システムであって、
前記送信装置は、一連のデータを送信する毎に無通信状態を挟み、前記一連のデータを繰り返し受信装置に送信し、
前記受信装置は、前記送信装置から受信したデータを所定単位ずつ受信バッファに記憶し、前記受信バッファに予め定められたサイズのデータが記憶された場合、前記受信バッファから記憶手段にデータを転送するデータ転送手段と、
前記受信バッファに前記所定単位のデータが記憶された回数又は記憶されたデータ量をカウントするカウント手段と、
前記カウント手段がカウントしたカウント値を、予め定められている無通信区間の半分未満の周期で監視し、前記カウント値が変化していない場合に固着時間カウント値を増大させる監視手段と、
前記固着時間カウント値が前記無通信区間の所定の割合に相当する時間よりも大きくなった場合、前記送信装置がデータを送信しない無通信区間であると判定し、無通信区間であると判定した後、前記受信装置が受信したデータを前記一連のデータの先頭のデータであると特定するデータ特定手段と、
を有することを特徴とするシリアル通信システム。
【請求項８】
複数のデータを含む一連のデータを繰り返し受信する通信装置のシリアル通信方法であって、
データ転送手段が、送信元から受信装置が受信したデータを所定単位ずつ受信バッファに記憶し、前記受信バッファに予め定められたサイズのデータが記憶された場合、前記受信バッファから記憶手段にデータを転送するステップと、
カウント手段が、前記受信バッファに前記所定単位のデータが記憶された回数又は記憶されたデータ量をカウントするステップと、
監視手段が、前記カウント手段がカウントしたカウント値を、予め定められている無通信区間の半分未満の周期で監視し、前記カウント値が変化していない場合に固着時間カウント値を増大させるステップと、
前記固着時間カウント値が前記無通信区間の所定の割合に相当する時間よりも大きくなった場合、データ特定手段が、前記送信元がデータを送信しない無通信区間であると判定し、前記無通信区間であると判定した後、前記受信装置が受信したデータを前記一連のデータの先頭であると特定するステップと、
を有することを特徴とするシリアル通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、送信側からシリアル通信でデータを受信するシリアル通信装置に関する。
【背景技術】
【０００２】
ＨＶ−ＥＣＵ（Electronic  Control  Unit）はバッテリーの状態を監視するため高頻度に電池監視ユニットとの間で通信している。通信するための通信ＩＣにはコスト削減などの理由からＵＡＲＴ（Universal  Asynchronous  Receiver  Transmitter）が使用されている。
【０００３】
図１（ａ）は従来の通信を説明する図の一例である。ＨＶ−ＥＣＵ１００と電池監視ユニット２００はそれぞれＵＡＲＴの通信が可能なＩＣ（以下、このＩＣをＵＡＲＴ５０，２０１と称す）を有している。ＵＡＲＴ５０，２０１の間は送信線、受信線及びグラウンド線で接続されており、クロック線などの同期用の線を省くことでコストダウンしている。また、ＵＡＲＴでは受信側がＡＣＫやＮＡＫを送信して受信確認することもない。ＵＡＲＴ５０，２０１は調歩同期（非同期）を採用しており、スタートビットとストップビットの間の８bit（＝１バイト）を１つのデータとしている。受信側のＵＡＲＴ５０（図ではＨＶ−ＥＣＵ）は１バイトずつデータを受信しＦＩＦＯ５１に記憶する。そして、１バイトのデータを受信する毎に受信割込みによりＨＶ−ＥＣＵ１００のＣＰＵにデータの受信を通知している。
【０００４】
ところで、バッテリーは一般に複数個のセル、電池スタック又は単電池を接続したり組み合わせた構造（以下、バッテリーに含まれるこれらの単位電池を単にセルという）を有している。しかしＵＡＲＴはデータ長が1バイトに固定されているので、電池監視ユニット２００は全てのセルの電池情報を一度にＨＶ−ＥＣＵ１００に送信することはできず、何回かに分けて送信している。１つのバッテリーの全ての電池情報を送信するために必要な送信回数は、セルの数や１つのセルの電池情報の量によって変わる。
【０００５】
ＨＶ−ＥＣＵ１００としては、全てのセルの電池情報をセルの配置のとおりに受信したこと（すなわち、受信している電池情報がどのセルの電池情報かを特定可能な状態で受信したこと）を確認したいが、上記のようにＵＡＲＴ５０は同期や受信確認を行わない。
【０００６】
そこで、電池監視ユニット２００はバッテリーの全ての電池情報を送信すると、一定期間（約Ｔミリ秒）の無通信区間を設け、次のサイクルの電池情報の送信を開始する。ＨＶ−ＥＣＵ１００は無通信区間から次の無通信区間までの電池情報の量が一定か否か又は予め設定されているデータ数か否かに基づき、全てのセルの電池情報をセルの配置のとおりに受信したことを確認している。これを繰り返し行うことで、ＨＶ−ＥＣＵ１００は常に最新の電池情報を保持することができる。
【０００７】
ＨＶ−ＥＣＵ１００は、１バイトのデータを受信する毎に受信割込みが発生することを利用して、無通信区間を検出する。すなわち、一定期間、受信割込みがない場合、次の最初の受信割込みによりバッテリーの電池情報の送信が始まることを検知している。このような、無通信区間によるデータ同士の境界の検出は従来から知られている（例えば、特許文献１参照。）。
【０００８】
しかしながら、バッテリーの性能や材質が向上したため１セル当たりの電池情報の量が急激に増大する状況が生じている。具体的には、車載されるバッテリーが従来のニッケル水素電池からリチウムイオン電池に変わった場合、ＨＶ−ＥＣＵ１００が管理すべき情報が急激に増大する。このため、メーカは、ＵＡＲＴ５０、２０１の通信速度を数十倍することで通信時間を増大せずに、電池監視ユニット２００がバッテリー全体の電池情報をＨＶ−ＥＣＵ１００に送信できるようにしている。
【０００９】
しかし、通信速度が変わっても、ＵＡＲＴ５０は１バイト毎にＣＰＵに受信割り込みするので、例えばＷミリ秒に１回（この頻度は通信速度による）生じていた受信割込み回数も数十倍になってしまう。仮に通信速度を２０倍したとすると、受信割込みの頻度は以下のようになる。なお、ＷとＴは、ＴがＷの数倍〜１０倍以上のように、Ｔ＞＞Ｗの関係にある。
従来の通信速度    Ｗミリ秒に１回の受信割込み
２０倍の通信速度  Ｗミリ秒に２０回の受信割込み
このように、単に通信速度を速くすると、受信割込み頻度の増大によりＨＶ−ＥＣＵ１００の処理負荷を増大させてしまう。
【００１０】
そこで、ＵＡＲＴ５０にＤＭＡ（Direct  Memory  Access）機能を追加することが考えられる。図１（ｂ）はＤＭＡ機能を利用したＵＡＲＴ通信を説明する図の一例である。ＨＶ−ＥＣＵ１００はＤＭＡコントローラ６０を有している。ＤＭＡコントローラ６０は、レジスタに設定されている転送サイズのデータがＤＭＡバッファ６１に記憶されると、ＤＭＡバッファ６１からＲＡＭなどにデータを転送し、ＣＰＵに受信割込みするＩＣである。開発者などは、通信速度に基づき適切な頻度（例えばＴミリ秒で１回）で受信割込みが入るように、ＤＭＡコントローラ６０に設定される転送サイズを決定する。こうすることで、ＨＶ−ＥＣＵ１００はＵＡＲＴ５０を使用したまま、単位時間あたりに多くの電池情報を受信できるし、受信割込みが増大し処理負荷が高くなることも抑制できる。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００７−１５０５８５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１２】
しかしながら、受信割込みの頻度が少なくなることでＨＶ−ＥＣＵ１００は無通信区間の検出ができなくなるという問題が生じてしまう。無通信区間が約Ｔミリ秒だとする。従来のようにＷミリ秒に１回の受信割込みが発生していた場合、ＨＶ−ＥＣＵ１００はＴ／Ｗ回（Ｔミリ秒を無通信区間とした場合）、受信割込みが生じるはずの時間内に、受信割込みがないことを検出すればよいので、時間的余裕がある状態で受信割込みがないことを確実に検知できる。
【００１３】
これに対し、受信割込みがＴミリ秒に１回だとすると、無通信区間に１回あるかどうかの受信割込みがないことを検知することは困難である。無通信区間を長くすれば、無通信区間にカウントされるべき受信割込みの回数が増えるので、無通信区間を検出できる。しかし、無通信区間を長くするとデータの転送効率が低下してしまう。
【００１４】
また、開発者等が受信割込みの頻度を多くする（例えば、従来と同じＷミリ秒間隔とする）ことも検討される。しかしながら、ＨＶ−ＥＣＵ１００は多くの処理を行うため、従来と同程度の頻度で受信割込みが生じるように設定することは好ましくない。場合によっては高性能なＣＰＵが必要になるなど新たな不都合をもたらしてしまう。
【００１５】
本発明は、上記課題に鑑み、受信割込みの頻度に影響されずにデータの区切りを検出可能なシリアル通信装置を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明は、複数のデータを含む一連のデータを繰り返し受信するシリアル通信装置であって、送信元から受信装置が受信したデータを所定単位ずつ受信バッファに記憶し、前記受信バッファに予め定められたサイズのデータが記憶された場合、前記受信バッファから記憶手段にデータを転送するデータ転送手段と、前記受信バッファに前記所定単位のデータが記憶された回数又は記憶されたデータ量をカウントするカウント手段と、前記カウント手段がカウントしたカウント値を、予め定められている無通信区間の半分未満の周期で監視し、前記カウント値が変化していない場合に固着時間カウント値を増大させる監視手段と、前記固着時間カウント値が前記無通信区間の所定の割合に相当する時間よりも大きくなった場合、前記送信元がデータを送信しない無通信区間であると判定し、前記無通信区間であると判定した後、前記受信装置が受信したデータを前記一連のデータの先頭であると特定するデータ特定手段と、を有することを特徴とする。
【発明の効果】
【００１７】
受信割込みの頻度に影響されずにデータの区切りを検出可能なシリアル通信装置を提供することができる。
【図面の簡単な説明】
【００１８】
【図１】従来の通信を説明する図の一例である。
【図２】本実施形態のＨＶ−ＥＣＵが無通信区間を検出する手順の概略を説明する図の一例である
【図３】ＨＶ−ＥＣＵのハードウェア構成図の一例である。
【図４】ＤＭＡコントローラ、ＵＡＲＴの制御情報を説明する図の一例である。
【図５】ＨＶ−ＥＣＵの機能ブロック図の一例である。
【図６】比較のために示した従来の無通信区間の検出方法を説明する図の一例である。
【図７】本実施形態の無通信区間を検出方法を説明する図の一例である。
【図８】本実施形態のＨＶ−ＥＣＵが無通信区間を検出する手順を示すフローチャート図の一例である。
【発明を実施するための形態】
【００１９】
以下、本発明を実施するための形態について図面を参照しながら説明する。
図２は、本実施形態のＨＶ−ＥＣＵ１００が無通信区間を検出する手順の概略を説明する図の一例である。本実施形態ではＤＭＡ（Direct  Memory  Access）コントローラ６０が有する受信バッファカウンタレジスタ（以下、単にカウンタレジスタ６２という）を利用することで、無通信区間を検出する。なお、本実施形態では、ＨＶ−ＥＣＵ１００と電池監視ユニット２００を有するシステムを電子監視システム４００と称する。電子監視システム４００にさらにバッテリー３００を含まれる場合がある。
【００２０】
図２（ａ）に示すように、ＨＶ−ＥＣＵ１００のＵＡＲＴ５０は電池情報２０１をＦＩＦＯ５１に受信するとＤＭＡコントローラ６０にＤＭＡ要求する。ここでは、１バイト毎にＤＭＡ要求するものとする。ＤＭＡコントローラ６０はＤＭＡ要求を検出して、ＵＡＲＴ５０から１バイトの電池情報２０１をＤＭＡバッファ６１に記憶する。ＤＭＡコントローラ６０には、例えば１６０バイトという転送サイズが設定されているので、ＤＭＡコントローラ６０は１６０バイトの電池情報２０１がＤＭＡバッファ６１に記憶されるまで、ＲＡＭへの転送を行わない。
【００２１】
図２（ｂ）に示すように、ＤＭＡコントローラ６０はカウンタレジスタ６２でＤＭＡバッファ６１にデータを格納した回数（又はデータ量でもよい）をカウントしている。したがって、１バイト受信する毎に、カウンタレジスタ６２のカウント値が１つ大きくなる。ＤＭＡバッファ６１に１６０バイトの電池情報２０１が受信されるまで、ＨＶ−ＥＣＵ１００のＣＰＵに受信割込みされない。
【００２２】
図２（ｃ）に示すように、ＨＶ−ＥＣＵ１００は、定期的にカウンタレジスタ６２のカウント値を監視する。無通信区間でなければ、カウント値はほぼ一定速度で変化する（例えば大きくなる）ので、所定期間、カウント値に変化がない場合、無通信区間であると判定できる。
【００２３】
したがって、本実施形態のＨＶ−ＥＣＵ１００は、受信割込みが発生する間隔と無通信区間が同程度の時間でも、ＤＭＡコントローラ６０のカウンタレジスタ６２のカウント値を監視することで、無通信区間を確実に検出できる。
【００２４】
なお、本実施形態ではＨＶ−ＥＣＵ１００と電池監視ユニット２００の通信を例に説明するが、図２の無通信区間の検出方法は無通信区間を挟んでデータを送信するユニットとデータを受信するＥＣＵのシステムに好適に適用できる。したがって、ＥＣＵは、ＨＶ−ＥＣＵ１００に限られるものではなく、エンジンＥＣＵ、ブレーキＥＣＵ、トランスミッションＥＣＵ、ナビＥＣＵ等、どのようなＥＣＵでもよい。よって、ユニットも電池監視ユニット２００に限られず、ＥＣＵとの組み合わせに基づき種々のユニットを採用できる。また、受信する側の装置がＥＣＵである必要はなく、電池制御ユニットが受信する場合にも、本実施形態の無通信区間の検出方法を適用できる。
【００２５】
〔構成例〕
まず、ＨＶ−ＥＣＵ１００について簡単に説明する。ＨＶ−ＥＣＵ１００は、運転者の出力要求と電池情報２０１に基づき、エンジンＥＣＵとモータＥＣＵそれぞれの出力を決定し、エンジンＥＣＵとモータＥＣＵに出力制御を要求する。ＨＶ−ＥＣＵ１００は、例えば以下のような処理を行う。
(i)アクセル開度、車速情報、シフトレバーポジション、ブレーキペダルの踏み込み状況、及び、電池情報２０１を取得する。
(ii)ＨＶ−ＥＣＵ１００は、アクセル開度と車速に対応づけて要求出力が登録されているマップを参照して、アクセル開度と車速から要求出力を決定する。そして、この要求出力に対応する駆動力がリングギヤに出力されるように、最適燃費ラインなどを参照して、エンジン出力（エンジン回転数とトルク）を決定する。
(iii)ＨＶ−ＥＣＵ１００は、要求出力とエンジン出力から、モータで補助すべきモータ出力を決定する。そして、このモータ出力が得られるモータ回転数を決定する。
(iv)  エンジン出力をエンジンＥＣＵに、モータ回転数を含むモータ出力をモータＥＣＵに送信する。このようにして、エンジンとモータを最適制御している。
【００２６】
図３は、ＨＶ−ＥＣＵ１００のハードウェア構成図の一例を示す。ＨＶ−ＥＣＵ１００は、主にマイコン１１、入力回路（アナログ）１２、入力回路（デジタル）１３、出力回路１４、及び、電源回路１５を有している。入力回路（アナログ）１２は各種のセンサのアナログ信号をＡ／Ｄ変換すると共に、マルチプレクサとして選択的にＡ／Ｄ変換後の信号をマイコン１１に出力する。また、入力回路（デジタル）１３はマルチプレクサとして選択的に各種のセンサのデジタル信号をマイコン１１に出力する。出力回路１４は、マイコン１１からの要求に応じてアクチュエータ等に制御信号を出力する。
【００２７】
マイコン１１は、メインバス２５に接続された、ＣＰＵ２１、ＲＡＭ２２、ＲＯＭ２３、ＩＮＴＣ２４、及び、ＤＭＡコントローラ６０を有し、周辺バス１９に接続されたＣＡＮコントローラ２７、ＵＡＲＴ５０、Ｉ２Ｃ２８、ＡＤＣ２９及びＤＡＣ３０を有する。メインバス２５と周辺バス１９はブリッジ２６を介して接続されている。
【００２８】
ＣＰＵ２１は、ＲＯＭ２３に記憶されたプログラムを実行することでＨＶ−ＥＣＵ１００の全体を制御する。ＲＡＭ２２は、ＣＰＵ２１がプログラムを実行する際の作業メモリであり、ＲＡＭ２２にはＵＡＲＴ５０が受信した電池情報２０１が、ＤＭＡコントローラ６０により転送される。また、ＲＯＭ２３にはＯＳ（Operating  System）、デバイスドライバ、ミドルウェアなどシステム系のプログラムが記憶されている。
【００２９】
ＩＮＴＣ２４は割込みレジスタを監視して、周辺機器（例えば、ＤＭＡコントローラ６０、ＣＡＮコントローラ２７、Ｉ２Ｃ２８、ＡＤＣ２９）からの割り込み要求を割込みの優先順位に基づき調停してＣＰＵ２１に通知する。これによりＣＰＵ２１は、例えばＩＳＲ（Interrupt  Service  Routine）を実行して、割込みした周辺機器に応じて定められているタスクを起床させる。周辺機器にはＵＡＲＴ５０も含まれるが、本実施形態ではＵＡＲＴ５０（電池監視ユニット２００と接続された）は割込み要求しない。
【００３０】
ＤＭＡコントローラ６０は、ＲＡＭ２２と周辺回路の間や、ＲＡＭ２２内で、ＣＰＵ２１を介することなくデータを移動する。ＤＭＡコントローラ６０については後述する。
【００３１】
ブリッジ２６は、メインバス２５と周辺バス１９の間の周波数の違いを吸収し、メインバス２５に接続された回路と周辺バス１９に接続された回路とを通信可能に接続する。また、メインバス２５または周辺バス１９に接続された回路から他方のバスに複数の接続要求がある場合に接続要求を調停する。
【００３２】
ＣＡＮコントローラ２７は、ＣＡＮバス１６に接続された他のＥＣＵと通信するための通信回路である。ＣＡＮコントローラ２７はＣＡＮバス１６を流れるＣＡＮフレームのうち、予め設定されているＩＤのＣＡＮフレームを選択的に受信してＣＰＵ２１に通知する。ＣＰＵ２１からデータの送信要求の通知を受けた場合、自身のＩＤを付与してＣＡＮバス１６に送信する。
【００３３】
ＡＤＣ（Ａ／Ｄコントーラ）２９は、入力回路（アナログ）１２を介さずに接続されたセンサのアナログ信号をデジタル信号に変換してＣＰＵ２１に通知する。ＤＡＣ（Ｄ／Ａコントローラ）３０は、ＣＰＵ２１に要求されたデータをアナログデータに変換してアクチュエータ等に出力する。
【００３４】
＜電池監視ユニット＞
電池監視ユニット２００は、バッテリー３００の状態を監視する装置であり、バッテリー３００が有する全てのセルの電池情報２０１を定期的にバッテリー３００から取得して記憶している。セルは単位電池の一例であり、電池スタックまたは単電池と呼ばれる場合もある。
【００３５】
セルの状態は、セルに流れる電流値、セルの電圧値、セルの温度などにより特定される。本実施形態ではこれらを電池情報２０１と称している。ＨＶ−ＥＣＵ１００は、電池情報２０１を、バッテリー３００の各セルの充放電を制御するために使用する。例えば、電池情報２０１により、各セルのＳＯＣ（Ｓｔａｔｅ  Ｏｆ  Ｃｈａｒｇｅ）を推定したり、劣化状態を推定したり、また、過充電や過放電を判定しそれを抑制する制御を行う。
【００３６】
＜ＤＭＣコントローラ＞
ＤＭＡコントローラ６０は、各種のレジスタに設定される制御情報にて動作が制御される。以下、制御情報が設定されるレジスタをコントロールレジスタという。
【００３７】
図４（ａ）は、ＤＭＡコントローラ６０の制御情報を説明する図の一例である。
・転送デバイスは、ＤＭＡコントローラ６０が複数の周辺機器のデータ転送を制御する場合に、周辺機器を特定するための識別番号である。本実施形態では電池監視ユニット２００が接続されているＵＡＲＴ５０の識別番号となる。
・転送元アドレスは、ＤＭＡコントローラ６０がデータをＲＡＭ２２に転送する際の転送元のアドレスである。本実施形態では電池監視ユニット２００が接続されているＵＡＲＴ５０のアドレスである。周辺機器を識別情報で識別するポートマップドＩ／Ｏの場合、ＵＡＲＴ５０の識別情報（アルファベットや数値）であり、周辺機器をＲＡＭ２２と同じアドレス空間で識別するメモリマップドＩ／Ｏはアドレスとなる。
・転送先アドレスは、ＵＡＲＴ５０が受信したデータをＤＭＡコントローラ６０が転送する際のデータの転送先のアドレスである。ＣＰＵ２１はＲＡＭ２２を作業メモリにするので、転送先アドレスはＲＡＭ２２の所定領域となる。
・アドレッシングモードには、転送先アドレスのオプション設定として、常に同じアドレスを指定するモード、ＲＡＭ２２に書き込まれたデータ量に応じてアドレスを大きくしていくモードを指定できる。本実施形態では、コンスタントアドレス（常に同じアドレスを指定する）となっている。
・エレメントサイズはデータの１単位である。ＲＡＭ２２に転送可能な最小のデータサイズである。
・転送サイズは、ＤＭＡバッファ６１に蓄積するデータのサイズである。本実施形態では例えば１６０バイトであるので、ＤＭＡバッファ６１に１６０バイトのデータが蓄積されるとＤＭＡコントローラ６０はデータをＲＡＭ２２に転送する。
【００３８】
以上の制御情報は、マイコン１１の起動時にＣＰＵ２１がＤＭＡコントローラ６０のコントロールレジスタ６３に設定する。制御情報の設定後、ＤＭＡコントローラ６０は制御情報に従い、ＵＡＲＴ５０が受信したデータをＲＡＭ２２に転送する。ＤＭＡコントローラ６０はＲＡＭ２２にデータを書き込むと、ＩＮＴＣ２４に受信割込み要求を通知するので、ＣＰＵ２１はＲＡＭ２２のデータを読み出すことができる。
【００３９】
なお、ＵＡＲＴ５０はデータの送信も可能である。データの送信時、ＣＰＵ２１はＲＡＭ２２に書き込んだデータの転送をＤＭＡコントローラ６０に要求する。ＤＭＡコントローラ６０はＲＡＭ２２からデータを読み出し、ＵＡＲＴ５０に設定する。
【００４０】
図４（ｂ）はＵＡＲＴ５０の制御情報を説明する図の一例である。
・受信閾値は、ＵＡＲＴ５０がＤＭＡコントローラ６０にＤＭＡ要求するデータサイズである。ＵＡＲＴ５０は受信したデータを１バイト単位で、受信順にＦＩＦＯ５１に記憶する。そして、ＵＡＲＴ５０は受信閾値で設定された数のデータをＦＩＦＯ５１に記憶した時点でＤＭＡコントローラ６０にＤＭＡ要求する。受信閾値の最小値は１、最大値はＦＩＦＯ５１の数である。
【００４１】
本実施形態では、受信閾値がカウンタレジスタ６２のカウント値に影響する。すなわち、転送サイズのデータがＤＭＡバッファ６１に蓄積されるまでに、転送サイズ／受信閾値の数だけ、ＵＡＲＴ５０からＤＭＡバッファ６１に転送が発生する。カウンタレジスタ６２はＵＡＲＴ５０からＤＭＡバッファ６１への転送の数をカウントするので、転送サイズが同じなら受信閾値が小さいほどカウンタレジスタ６２の最大値が大きくなる。
受信閾値１：カウンタレジスタ６２の最大値１６０
受信閾値２：カウンタレジスタ６２の最大値８０
受信閾値８：カウンタレジスタ６２の最大値２０
したがって、少なくとも受信閾値は転送サイズ未満である必要がある。また、後述するポーリングの周期Ｘミリ秒の間に、カウンタレジスタ６２の値が変化するように受信閾値を設定する必要がある。しかし、いずれの条件も、ＦＩＦＯ５１の容量やＵＡＲＴ５０の通信速度から自然に満たされる場合が多く、必要であれば、受信閾値を小さくすればよい。
【００４２】
・モードにはＵＡＲＴ５０がＤＭＡコントローラ６０にＤＭＡ要求するか、直接、ＩＮＴＣ２４に受信割り込みするか、を指定する情報が設定される。本実施形態では、ＤＭＡコントローラ６０にＤＭＡ要求するモード（＝１）が設定される。
【００４３】
〔機能について〕
図５は、ＨＶ−ＥＣＵ１００の機能ブロック図の一例である。すでに説明したように、ＵＡＲＴ５０は電池監視ユニット２００から受信した１バイトのデータをＦＩＦＯ５１に記憶する。ＵＡＲＴ５０は１バイトのデータを受信する毎にＤＭＡコントローラ６０にＤＭＡ要求する。
【００４４】
ＤＭＡコントローラ６０はＤＭＡバッファ６１、コントロールレジスタ６３、及び、カウンタレジスタ６２を有している。ＤＭＡコントローラ６０は、ＵＡＲＴ５０のＤＭＡ要求に基づきＦＩＦＯ５１からデータを１バイトずつＤＭＡバッファ６１に記憶する。その際、ＤＭＡコントローラ６０はカウンタレジスタ６２のカウント値を１つ大きくする。そして、カウンタレジスタ６２のカウント値がコントロールレジスタ６３の転送サイズ（例えば１６０バイト）と一致すると、ＤＭＡバッファ６１の１６０バイトのデータをＲＡＭ２２に転送する。ＤＭＡコントローラ６０はＩＮＴＣ２７に割込み要求すると共に、カウンタレジスタ６２の値を初期化（ゼロに）する。なお、回数ではなくデータ量（バイト数）をカウントしても同様の処理が可能である。
【００４５】
ＨＶ−ＥＣＵ１００は、さらにＣＰＵ２１がプログラムを実行してハードウェアと協働することで実現される、ＤＭＡ設定部３１、カウント値監視部３２、固着時間計測部３３、無通信区間判定部３４、及び、バッテリー監視部３５を有している。ＤＭＡ設定部３１は、図４（ａ）の制御情報をコントロールレジスタ６３に設定する。設定内容は例えばプログラムに記述されている。
【００４６】
カウント値監視部３２は、カウンタレジスタ６２のカウント値を定期的又は周期的に監視する。そして、カウント値が前回値と同じ場合、固着時間計測部３３に固着時間カウント値をカウントアップさせ、前回値と異なった場合、固着時間カウント値をクリアさせる。
【００４７】
無通信区間判定部３４は、固着時間カウント値が予め定められた閾値（Ｎ回）を超えると、無通信区間であると判定する。カウント値の監視サイクルがほぼ定期的であれば、固着時間カウント値は固着時間と同等の情報を有している。
【００４８】
無通信区間と判定した場合、無通信区間判定部３４は無通信区間検出結果をバッテリー監視部３５に通知する。バッテリー監視部３５は、無通信区間検出結果を取得すると、その後、最初にＤＭＡコントローラ６０が受信割込みを発生させた時にＲＡＭ２２から読み出したデータがバッテリー３００全体の電池情報２０１の先頭のデータであることを特定する。そして、バッテリー監視部３５は、電池情報２０１に基づきバッテリー３００の各セルのＳＯＣ等を算出し、上記の充放電制御等を行う。
【００４９】
〔従来の無通信区間の検出方法〕
図６（ａ）は、比較のために示した従来の無通信区間の検出方法を説明する図の一例である。従来のＵＡＲＴ５０は１バイトのデータを受信する毎にＣＰＵ２１に受信割り込みしている。通信速度（ボーレート〔ｂｐｓ〕）を適宜設定することでスタートビットとストップビットを除いた１バイトのデータの送信に約Ｗミリ秒かかる（図では１バイト／１ミリ秒としている）。
ａ１．したがって、図示するようにＷ秒ごとに１バイトのデータが受信され、Ｔミリ秒の間にＴ／Ｗ回の受信割込みが発生する。
ａ２．ＨＶ−ＥＣＵ１００は無通信区間を検出するため、受信割込みの回数をカウントする。受信割込みで所定のタスクが呼び出される毎に、回数を１つ大きくするなどして受信割込みの回数をカウントする。
ａ３．また、受信割込みの有無に関係なく、所定のタスクが定期的に受信割込みのカウント値を参照し、前回値と比較する。Ｔミリ秒という無通信区間はＨＶ−ＥＣＵ１００にとって既知であるので、例えば、Ｔミリ秒よりも若干短い時間（Ｔミリ秒の４０〜９０％位）、カウント値に更新がないことから、無通信区間であることを検出できる。
ａ４．無通信区間が検出されれば、ＨＶ−ＥＣＵ１００は次回の最初の受信割込みが電池情報２０１の先頭であることを検出できる。そこから各セルのデータを受信し、次の無通信区間までがバッテリー全体の電池情報２０１であることが分かる。
【００５０】
図６（ｂ）は、電池情報２０１の量が増大した場合に、従来の手法で無通信区間を検出する際の不都合を説明する図の一例である。図６（ｂ）では、電池情報２０１の増大に対応するため通信速度を図６（ａ）に対し約２０倍に大きくしている（図のＷミリ秒の間隔に２０個のデータがある。）。
【００５１】
また、図６（ｂ）では受信割込みでＣＰＵ２１の処理負荷を増大させないため、ＤＭＡコントローラ６０が１６０バイト毎に、ＤＭＡバッファ６１からＲＡＭ２２にデータ転送を行っている。このため、受信割込みの頻度は約Ｔミリ秒に１回である。
【００５２】
ｂ１．図６（ｂ）の通信状態では、受信割込みの回数のカウント値がＴミリ秒に１回しか増えない。図示するように、Ｔミリ秒の無通信区間の後、さらにＴミリ秒が経過すると受信割込みが発生する。
ｂ２．受信割り込みはＴミリ秒に１回なので、ＨＶ−ＥＣＵ１００は、Ｔミリ秒の間は、無通信区間のためにカウント値が増えないのか、ＵＡＲＴ５０がデータを受信しているがＴミリ秒が経過していないためカウント値が増えないのかを判断できない。
【００５３】
また、無通信区間があるため生じない受信割込みは１回に過ぎない。この１回のカウントがないことを検出することは不可能ではないが、ノイズやＣＰＵ２１の処理負荷が高い状態などの理由で、ＤＭＡコントローラ６０が発生させた受信割込みが検出されなかったり、カウントミスが発生した場合に、データの先頭を誤検知してしまう。
【００５４】
ｂ３．また、仮に、ＨＶ−ＥＣＵ１００が、受信割込みの間隔が想定値（Ｔミリ秒）より長くなったことから（受信割込みが１回ないことから）、次の最初の受信割込みからデータの先頭を特定することも検討される。しかし、電池監視ユニット２００がデータの先頭以外で若干の無通信区間を生じさせた場合などもあるため、この方法では先頭のデータを確実に特定できるとは言えない。
【００５５】
〔本実施形態の無通信区間の検出方法〕
図７は、本実施形態の無通信区間を検出方法を説明する図の一例である。通信条件は図６（ｂ）と同様であり、ＨＶ−ＥＣＵ１００はＷミリ秒で従来の２０倍のデータを受信し、ＤＭＡコントローラ６０がＴミリ秒に１回（例えば１６０バイトの電池情報２０１を受信すると）、受信割込みを発生させる。
【００５６】
ｃ１．本実施形態では、ＵＡＲＴ５０の受信閾値が１バイトなので、ＤＭＡコントローラ６０のカウンタレジスタ６２のカウント値は、ＵＡＲＴ５０が１バイト受信する毎に１つ増大していく。
ｃ２．無通信区間では、カウント値は増えないので、例えばゼロのままである。カウント値が変化しない状態を固着という。
ｃ３．固着時間計測部３３は固着時間を計測するので、無通信区間判定部３４は固着時間が閾値を超えた場合に、固着していると判定することができる。
【００５７】
したがって、電池情報２０１の先頭の１バイトをＵＡＲＴ５０が受信する前に、ＨＶ−ＥＣＵ１００は無通信区間を検出できる。無通信区間の後の最初の受信割込みが生じた時に、ＤＭＡバッファ６１からＲＡＭ２２に転送される１６０バイトのデータが電池情報２０１の先頭のデータである。
【００５８】
なお、図７（ｂ）に示すように、ＤＭＡコントローラ６０は、カウンタレジスタ６２のカウント値が減少して例えばゼロになった時に、転送サイズのデータがＤＭＡバッファ６１に格納されたことを検出する場合がある。この場合、無通信区間では、カウント値が１６０バイト一定になるが、カウント値監視部３２は同様にカウント値が変化ないことを検出して、固着時間計測部３３が固着時間を計測できる。
【００５９】
なお、これまでの例では、無通信区間＝受信割込み間隔＝Ｔミリ秒とした。しかし、無通信区間と受信割込み間隔に、無通信区間に割込み回数が１，２回しかない関係が成立すれば、本実施形態の無通信区間の検出方法を適用できる。すなわち、受信割込み間隔は、例えば無通信区間の５０％〜１００％程度であることが想定される。
【００６０】
〔動作手順〕
図８は、本実施形態のＨＶ−ＥＣＵ１００が無通信区間を検出する手順を示すフローチャート図の一例である。図８の手順は、ＣＰＵ２１がＤＭＡコントローラ６０のコントロールレジスタ６３に制御情報を設定した後、繰り返し実行される。
【００６１】
電池監視ユニット２００が電池情報２０１の送信を行うことで、ＨＶ−ＥＣＵ１００のＵＡＲＴ５０は次々とデータを受信する。ＤＭＡコントローラ６０は、ＦＩＦＯ５１からＤＭＡバッファ６１にデータを格納し、カウンタレジスタ６２のカウント値を更新していく。
【００６２】
カウント値監視部３２は、カウント値を定期的にポーリングする（Ｓ１０）。ポーリング間隔をＸミリ秒とすると、Ｘミリ秒は無通信区間の半分未満であること、すなわち、無通信区間に少なくとも２〜３回、カウント値を参照できる時間であることが好ましい。一方、Ｘは短い方が、カウント値が固着していることを確認する回数が増えるので好ましいが、余り短くするとＣＰＵ２１の処理負荷が増大する。例えば、Ｘ＝Ｔ／４ミリ秒とした場合、無通信区間に３〜４回、カウント値を参照できる。このように、Ｘは無通信区間の長さやＣＰＵ２１の処理負荷を考慮して適宜、設定できる。
【００６３】
次に、カウント値監視部３２は最後に参照して記録してあるカウント値（以下、前回値という）と、Ｓ１０で読み出したカウント値（以下、今回値という）が同じか否かを判定する（Ｓ２０）。
【００６４】
前回値と今回値が同じでない場合（Ｓ２０のＮｏ）、カウント値は固着していないのでカウント値監視部３２はカウンタレジスタ６２の監視を繰り返す。なお、カウント値監視部３２は今回値で前回値を更新する。また、固着時間計測部３３に固着時間カウント値をクリアさせる。
【００６５】
前回値と今回値が同じ場合（Ｓ２０のＹｅｓ）、カウント値が固着している可能性があるので、カウント値監視部３２は固着時間計測部３３に固着時間カウント値のカウントアップ要求を通知する（Ｓ３０）。これにより、固着時間計測部３３は固着時間カウント値をカウントアップできる。
【００６６】
次に、無通信区間判定部３４は固着時間カウント値がＮ回以上か否かを判定する（Ｓ４０）。Ｎ回は固着していると確定するための閾値であり、無通信区間の例えば４０％〜９０％に相当する回数である。Ｎの下限値としては、カウント値監視部３２が最低２回、固着していることを検出できるように２以上とすることが好ましい。上限値としては、Ｘ＝Ｔ／４ミリ秒とした場合、４以下である。よって、無通信区間がＴミリ秒、Ｘ＝Ｔ／４ミリ秒の場合、例えばＮ＝３（Ｘ＝Ｔ／４として無通信区間の７５％）とすることができる。このように、ＮはＸや無通信区間の長さに応じて適宜設定できる。
【００６７】
固着時間カウント値がＮ回以上でない場合（Ｓ４０のＮｏ）、カウント値監視部３２はポーリングを繰り返す。したがって、カウント値が固着している場合、固着時間カウント値は１つずつ大きくなる。
【００６８】
固着時間カウント値がＮ回以上の場合（Ｓ４０のＹｅｓ）、無通信区間判定部３４は無通信区間であると判定する（Ｓ５０）。無通信区間判定部３４は、無通信区間判定結果をバッテリー監視部３５に通知するので、バッテリー監視部３５は次の受信割込みでＲＡＭ２２から読み出したデータが電池情報２０１の先頭であるとしてバッテリー３００の監視処理を行う。
【００６９】
以上説明したように、本実施形態のＨＶ−ＥＣＵ１００は、ＤＭＡバッファ６１に蓄積されるデータの数のカウント値を監視することで、無通信区間を確実に検出できる。また、無通信区間を長くする必要がないので電池情報の送信効率が低下することがなく、受信割込みの頻度を増大する必要もないのでＣＰＵ２１の処理負荷が増大することもない。
【００７０】
バッテリー全体の電池情報２０１の量は、バッテリー３００の種類などによって変更される可能性がある。しかし、無通信区間が検出されてから次の無通信区間が検出されるまでがバッテリー全体の電池情報２０１なので、バッテリー３００の種類などが変わっても、無通信区間の判定方法を変える必要がない。
【００７１】
また、従来と同様に、ＵＡＲＴ５０を使用して通信できる。すなわち、ＨＶ−ＥＣＵ１００のＵＡＲＴ５０と電池監視ユニット２００のＵＡＲＴ５０の間を同期線で接続して、ハンドシェーク（接続確立）を行う必要がなく、コスト増となることもない。
【００７２】
なお、ＵＡＲＴはEIA232で規定された通信規格であり、例えば、EIA232に従った通信規格であるＲＳ２３２Ｃの通信にも、本実施形態の無通信区間の検出方法を適用できる。また、同期用のクロック線を有するＵＳＡＲＴ（Universal  Synchronous  Asynchronous  Receiver  Transmitter）、Ｉ２Ｃ（Inter-Integrated  Circuit）、ＳＰＩ（Serial  Peripheral  Interface）等に適用することを妨げるものではない。
【符号の説明】
【００７３】
３１            ＤＭＡ設定部
３２            カウント値監視部
３３            固着時間計測部
３４            無通信区間判定部
３５            バッテリー監視部
５０，２０１    ＵＡＲＴ
６０            ＤＭＡコントローラ
６１            ＤＭＡバッファ  
６２            カウンタレジスタ
１００          ＨＶ−ＥＣＵ
２００          電池監視ユニット
２０２          電池情報
３００          バッテリー
【図１】
0005746090.tif 000002
【図２】
0005746090.tif 000003
【図３】
0005746090.tif 000004
【図４】
0005746090.tif 000005
【図５】
0005746090.tif 000006
【図６】
0005746090.tif 000007
【図７】
0005746090.tif 000008
【図８】
0005746090.tif 000009