特許第5746090号(P5746090)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ トヨタ自動車株式会社の特許一覧 ▶ 富士通テン株式会社の特許一覧

特許5746090シリアル通信装置、シリアル通信システム、シリアル通信方法
<>
  • 特許5746090-シリアル通信装置、シリアル通信システム、シリアル通信方法 図000002
  • 特許5746090-シリアル通信装置、シリアル通信システム、シリアル通信方法 図000003
  • 特許5746090-シリアル通信装置、シリアル通信システム、シリアル通信方法 図000004
  • 特許5746090-シリアル通信装置、シリアル通信システム、シリアル通信方法 図000005
  • 特許5746090-シリアル通信装置、シリアル通信システム、シリアル通信方法 図000006
  • 特許5746090-シリアル通信装置、シリアル通信システム、シリアル通信方法 図000007
  • 特許5746090-シリアル通信装置、シリアル通信システム、シリアル通信方法 図000008
  • 特許5746090-シリアル通信装置、シリアル通信システム、シリアル通信方法 図000009
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5746090
(24)【登録日】2015年5月15日
(45)【発行日】2015年7月8日
(54)【発明の名称】シリアル通信装置、シリアル通信システム、シリアル通信方法
(51)【国際特許分類】
   H04L 7/04 20060101AFI20150618BHJP
   H04L 25/40 20060101ALI20150618BHJP
【FI】
   H04L7/04 A
   H04L25/40 Z
【請求項の数】8
【全頁数】15
(21)【出願番号】特願2012-106770(P2012-106770)
(22)【出願日】2012年5月8日
(65)【公開番号】特開2013-236220(P2013-236220A)
(43)【公開日】2013年11月21日
【審査請求日】2013年5月16日
(73)【特許権者】
【識別番号】000003207
【氏名又は名称】トヨタ自動車株式会社
(73)【特許権者】
【識別番号】000237592
【氏名又は名称】富士通テン株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】和田 竜一
(72)【発明者】
【氏名】安藤 裕子
(72)【発明者】
【氏名】芳賀 良平
【審査官】 阿部 弘
(56)【参考文献】
【文献】 特開2004−295701(JP,A)
【文献】 特開2008−167303(JP,A)
【文献】 特開平04−070947(JP,A)
【文献】 特開昭63−158933(JP,A)
【文献】 特開2007−150585(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 7
H04L 25
(57)【特許請求の範囲】
【請求項1】
複数のデータを含む一連のデータを繰り返し受信するシリアル通信装置であって、
送信元から受信装置が受信したデータを所定単位ずつ受信バッファに記憶し、前記受信バッファに予め定められたサイズのデータが記憶された場合、前記受信バッファから記憶手段にデータを転送するデータ転送手段と、
前記受信バッファに前記所定単位のデータが記憶された回数又は記憶されたデータ量をカウントするカウント手段と、
前記カウント手段がカウントしたカウント値を、予め定められている無通信区間の半分未満の周期で監視し、前記カウント値が変化していない場合に固着時間カウント値を増大させる監視手段と、
前記固着時間カウント値前記無通信区間の所定の割合に相当する時間よりも大きくなった場合、前記送信元がデータを送信しない無通信区間であると判定し、前記無通信区間であると判定した後、前記受信装置が受信したデータを前記一連のデータの先頭であると特定するデータ特定手段と、を有することを特徴とするシリアル通信装置。
【請求項2】
前記無通信区間は、前記受信装置が受信したデータが前記所定単位ずつ前記受信バッファに記憶される周期よりも長い、ことを特徴とする請求項1記載のシリアル通信装置。
【請求項3】
前記データ転送手段は、前記受信バッファから前記記憶手段にデータを転送する際、CPUに割込み要求し、
前記無通信区間は、前記受信バッファに予め定められたサイズのデータが蓄積されるまでの時間、又は、前記データ転送手段が前記受信バッファから前記記憶手段にデータを転送する転送周期と同程度である、ことを特徴とする請求項1記載のシリアル通信装置。
【請求項4】
前記データ特定手段は、前記無通信区間が終了する前に前記無通信区間であることを検出する、ことを特徴とする請求項1〜3いずれか1項記載のシリアル通信装置。
【請求項5】
前記データ転送手段はDMAコントローラであり、前記受信装置はUARTである、
ことを特徴とする請求項1〜4いずれか1項記載のシリアル通信装置。
【請求項6】
前記受信装置が受信するデータは、車両のバッテリーのバッテリー情報であり、
当該シリアル通信装置は車両用電子制御ユニットである、
ことを特徴とする請求項1〜5いずれか1項記載のシリアル通信装置。
【請求項7】
受信装置と送信装置を有するシリアル通信システムであって、
前記送信装置は、一連のデータを送信する毎に無通信状態を挟み、前記一連のデータを繰り返し受信装置に送信し、
前記受信装置は、前記送信装置から受信したデータを所定単位ずつ受信バッファに記憶し、前記受信バッファに予め定められたサイズのデータが記憶された場合、前記受信バッファから記憶手段にデータを転送するデータ転送手段と、
前記受信バッファに前記所定単位のデータが記憶された回数又は記憶されたデータ量をカウントするカウント手段と、
前記カウント手段がカウントしたカウント値を、予め定められている無通信区間の半分未満の周期で監視し、前記カウント値が変化していない場合に固着時間カウント値を増大させる監視手段と、
前記固着時間カウント値前記無通信区間の所定の割合に相当する時間よりも大きくなった場合、前記送信装置がデータを送信しない無通信区間であると判定し、無通信区間であると判定した後、前記受信装置が受信したデータを前記一連のデータの先頭のデータであると特定するデータ特定手段と、
を有することを特徴とするシリアル通信システム。
【請求項8】
複数のデータを含む一連のデータを繰り返し受信する通信装置のシリアル通信方法であって、
データ転送手段が、送信元から受信装置が受信したデータを所定単位ずつ受信バッファに記憶し、前記受信バッファに予め定められたサイズのデータが記憶された場合、前記受信バッファから記憶手段にデータを転送するステップと、
カウント手段が、前記受信バッファに前記所定単位のデータが記憶された回数又は記憶されたデータ量をカウントするステップと、
監視手段が、前記カウント手段がカウントしたカウント値を、予め定められている無通信区間の半分未満の周期で監視し、前記カウント値が変化していない場合に固着時間カウント値を増大させるステップと、
前記固着時間カウント値前記無通信区間の所定の割合に相当する時間よりも大きくなった場合、データ特定手段が、前記送信元がデータを送信しない無通信区間であると判定し、前記無通信区間であると判定した後、前記受信装置が受信したデータを前記一連のデータの先頭であると特定するステップと、
を有することを特徴とするシリアル通信方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、送信側からシリアル通信でデータを受信するシリアル通信装置に関する。
【背景技術】
【0002】
HV−ECU(Electronic Control Unit)はバッテリーの状態を監視するため高頻度に電池監視ユニットとの間で通信している。通信するための通信ICにはコスト削減などの理由からUART(Universal Asynchronous Receiver Transmitter)が使用されている。
【0003】
図1(a)は従来の通信を説明する図の一例である。HV−ECU100と電池監視ユニット200はそれぞれUARTの通信が可能なIC(以下、このICをUART50,201と称す)を有している。UART50,201の間は送信線、受信線及びグラウンド線で接続されており、クロック線などの同期用の線を省くことでコストダウンしている。また、UARTでは受信側がACKやNAKを送信して受信確認することもない。UART50,201は調歩同期(非同期)を採用しており、スタートビットとストップビットの間の8bit(=1バイト)を1つのデータとしている。受信側のUART50(図ではHV−ECU)は1バイトずつデータを受信しFIFO51に記憶する。そして、1バイトのデータを受信する毎に受信割込みによりHV−ECU100のCPUにデータの受信を通知している。
【0004】
ところで、バッテリーは一般に複数個のセル、電池スタック又は単電池を接続したり組み合わせた構造(以下、バッテリーに含まれるこれらの単位電池を単にセルという)を有している。しかしUARTはデータ長が1バイトに固定されているので、電池監視ユニット200は全てのセルの電池情報を一度にHV−ECU100に送信することはできず、何回かに分けて送信している。1つのバッテリーの全ての電池情報を送信するために必要な送信回数は、セルの数や1つのセルの電池情報の量によって変わる。
【0005】
HV−ECU100としては、全てのセルの電池情報をセルの配置のとおりに受信したこと(すなわち、受信している電池情報がどのセルの電池情報かを特定可能な状態で受信したこと)を確認したいが、上記のようにUART50は同期や受信確認を行わない。
【0006】
そこで、電池監視ユニット200はバッテリーの全ての電池情報を送信すると、一定期間(約Tミリ秒)の無通信区間を設け、次のサイクルの電池情報の送信を開始する。HV−ECU100は無通信区間から次の無通信区間までの電池情報の量が一定か否か又は予め設定されているデータ数か否かに基づき、全てのセルの電池情報をセルの配置のとおりに受信したことを確認している。これを繰り返し行うことで、HV−ECU100は常に最新の電池情報を保持することができる。
【0007】
HV−ECU100は、1バイトのデータを受信する毎に受信割込みが発生することを利用して、無通信区間を検出する。すなわち、一定期間、受信割込みがない場合、次の最初の受信割込みによりバッテリーの電池情報の送信が始まることを検知している。このような、無通信区間によるデータ同士の境界の検出は従来から知られている(例えば、特許文献1参照。)。
【0008】
しかしながら、バッテリーの性能や材質が向上したため1セル当たりの電池情報の量が急激に増大する状況が生じている。具体的には、車載されるバッテリーが従来のニッケル水素電池からリチウムイオン電池に変わった場合、HV−ECU100が管理すべき情報が急激に増大する。このため、メーカは、UART50、201の通信速度を数十倍することで通信時間を増大せずに、電池監視ユニット200がバッテリー全体の電池情報をHV−ECU100に送信できるようにしている。
【0009】
しかし、通信速度が変わっても、UART50は1バイト毎にCPUに受信割り込みするので、例えばWミリ秒に1回(この頻度は通信速度による)生じていた受信割込み回数も数十倍になってしまう。仮に通信速度を20倍したとすると、受信割込みの頻度は以下のようになる。なお、WとTは、TがWの数倍〜10倍以上のように、T>>Wの関係にある。
従来の通信速度 Wミリ秒に1回の受信割込み
20倍の通信速度 Wミリ秒に20回の受信割込み
このように、単に通信速度を速くすると、受信割込み頻度の増大によりHV−ECU100の処理負荷を増大させてしまう。
【0010】
そこで、UART50にDMA(Direct Memory Access)機能を追加することが考えられる。図1(b)はDMA機能を利用したUART通信を説明する図の一例である。HV−ECU100はDMAコントローラ60を有している。DMAコントローラ60は、レジスタに設定されている転送サイズのデータがDMAバッファ61に記憶されると、DMAバッファ61からRAMなどにデータを転送し、CPUに受信割込みするICである。開発者などは、通信速度に基づき適切な頻度(例えばTミリ秒で1回)で受信割込みが入るように、DMAコントローラ60に設定される転送サイズを決定する。こうすることで、HV−ECU100はUART50を使用したまま、単位時間あたりに多くの電池情報を受信できるし、受信割込みが増大し処理負荷が高くなることも抑制できる。
【先行技術文献】
【特許文献】
【0011】
【特許文献1】特開2007−150585号公報
【発明の概要】
【発明が解決しようとする課題】
【0012】
しかしながら、受信割込みの頻度が少なくなることでHV−ECU100は無通信区間の検出ができなくなるという問題が生じてしまう。無通信区間が約Tミリ秒だとする。従来のようにWミリ秒に1回の受信割込みが発生していた場合、HV−ECU100はT/W回(Tミリ秒を無通信区間とした場合)、受信割込みが生じるはずの時間内に、受信割込みがないことを検出すればよいので、時間的余裕がある状態で受信割込みがないことを確実に検知できる。
【0013】
これに対し、受信割込みがTミリ秒に1回だとすると、無通信区間に1回あるかどうかの受信割込みがないことを検知することは困難である。無通信区間を長くすれば、無通信区間にカウントされるべき受信割込みの回数が増えるので、無通信区間を検出できる。しかし、無通信区間を長くするとデータの転送効率が低下してしまう。
【0014】
また、開発者等が受信割込みの頻度を多くする(例えば、従来と同じWミリ秒間隔とする)ことも検討される。しかしながら、HV−ECU100は多くの処理を行うため、従来と同程度の頻度で受信割込みが生じるように設定することは好ましくない。場合によっては高性能なCPUが必要になるなど新たな不都合をもたらしてしまう。
【0015】
本発明は、上記課題に鑑み、受信割込みの頻度に影響されずにデータの区切りを検出可能なシリアル通信装置を提供することを目的とする。
【課題を解決するための手段】
【0016】
本発明は、複数のデータを含む一連のデータを繰り返し受信するシリアル通信装置であって、送信元から受信装置が受信したデータを所定単位ずつ受信バッファに記憶し、前記受信バッファに予め定められたサイズのデータが記憶された場合、前記受信バッファから記憶手段にデータを転送するデータ転送手段と、前記受信バッファに前記所定単位のデータが記憶された回数又は記憶されたデータ量をカウントするカウント手段と、前記カウント手段がカウントしたカウント値を、予め定められている無通信区間の半分未満の周期で監視し、前記カウント値が変化していない場合に固着時間カウント値を増大させる監視手段と、前記固着時間カウント値前記無通信区間の所定の割合に相当する時間よりも大きくなった場合、前記送信元がデータを送信しない無通信区間であると判定し、前記無通信区間であると判定した後、前記受信装置が受信したデータを前記一連のデータの先頭であると特定するデータ特定手段と、を有することを特徴とする。
【発明の効果】
【0017】
受信割込みの頻度に影響されずにデータの区切りを検出可能なシリアル通信装置を提供することができる。
【図面の簡単な説明】
【0018】
図1】従来の通信を説明する図の一例である。
図2】本実施形態のHV−ECUが無通信区間を検出する手順の概略を説明する図の一例である
図3】HV−ECUのハードウェア構成図の一例である。
図4】DMAコントローラ、UARTの制御情報を説明する図の一例である。
図5】HV−ECUの機能ブロック図の一例である。
図6】比較のために示した従来の無通信区間の検出方法を説明する図の一例である。
図7】本実施形態の無通信区間を検出方法を説明する図の一例である。
図8】本実施形態のHV−ECUが無通信区間を検出する手順を示すフローチャート図の一例である。
【発明を実施するための形態】
【0019】
以下、本発明を実施するための形態について図面を参照しながら説明する。
図2は、本実施形態のHV−ECU100が無通信区間を検出する手順の概略を説明する図の一例である。本実施形態ではDMA(Direct Memory Access)コントローラ60が有する受信バッファカウンタレジスタ(以下、単にカウンタレジスタ62という)を利用することで、無通信区間を検出する。なお、本実施形態では、HV−ECU100と電池監視ユニット200を有するシステムを電子監視システム400と称する。電子監視システム400にさらにバッテリー300を含まれる場合がある。
【0020】
図2(a)に示すように、HV−ECU100のUART50は電池情報201をFIFO51に受信するとDMAコントローラ60にDMA要求する。ここでは、1バイト毎にDMA要求するものとする。DMAコントローラ60はDMA要求を検出して、UART50から1バイトの電池情報201をDMAバッファ61に記憶する。DMAコントローラ60には、例えば160バイトという転送サイズが設定されているので、DMAコントローラ60は160バイトの電池情報201がDMAバッファ61に記憶されるまで、RAMへの転送を行わない。
【0021】
図2(b)に示すように、DMAコントローラ60はカウンタレジスタ62でDMAバッファ61にデータを格納した回数(又はデータ量でもよい)をカウントしている。したがって、1バイト受信する毎に、カウンタレジスタ62のカウント値が1つ大きくなる。DMAバッファ61に160バイトの電池情報201が受信されるまで、HV−ECU100のCPUに受信割込みされない。
【0022】
図2(c)に示すように、HV−ECU100は、定期的にカウンタレジスタ62のカウント値を監視する。無通信区間でなければ、カウント値はほぼ一定速度で変化する(例えば大きくなる)ので、所定期間、カウント値に変化がない場合、無通信区間であると判定できる。
【0023】
したがって、本実施形態のHV−ECU100は、受信割込みが発生する間隔と無通信区間が同程度の時間でも、DMAコントローラ60のカウンタレジスタ62のカウント値を監視することで、無通信区間を確実に検出できる。
【0024】
なお、本実施形態ではHV−ECU100と電池監視ユニット200の通信を例に説明するが、図2の無通信区間の検出方法は無通信区間を挟んでデータを送信するユニットとデータを受信するECUのシステムに好適に適用できる。したがって、ECUは、HV−ECU100に限られるものではなく、エンジンECU、ブレーキECU、トランスミッションECU、ナビECU等、どのようなECUでもよい。よって、ユニットも電池監視ユニット200に限られず、ECUとの組み合わせに基づき種々のユニットを採用できる。また、受信する側の装置がECUである必要はなく、電池制御ユニットが受信する場合にも、本実施形態の無通信区間の検出方法を適用できる。
【0025】
〔構成例〕
まず、HV−ECU100について簡単に説明する。HV−ECU100は、運転者の出力要求と電池情報201に基づき、エンジンECUとモータECUそれぞれの出力を決定し、エンジンECUとモータECUに出力制御を要求する。HV−ECU100は、例えば以下のような処理を行う。
(i)アクセル開度、車速情報、シフトレバーポジション、ブレーキペダルの踏み込み状況、及び、電池情報201を取得する。
(ii)HV−ECU100は、アクセル開度と車速に対応づけて要求出力が登録されているマップを参照して、アクセル開度と車速から要求出力を決定する。そして、この要求出力に対応する駆動力がリングギヤに出力されるように、最適燃費ラインなどを参照して、エンジン出力(エンジン回転数とトルク)を決定する。
(iii)HV−ECU100は、要求出力とエンジン出力から、モータで補助すべきモータ出力を決定する。そして、このモータ出力が得られるモータ回転数を決定する。
(iv) エンジン出力をエンジンECUに、モータ回転数を含むモータ出力をモータECUに送信する。このようにして、エンジンとモータを最適制御している。
【0026】
図3は、HV−ECU100のハードウェア構成図の一例を示す。HV−ECU100は、主にマイコン11、入力回路(アナログ)12、入力回路(デジタル)13、出力回路14、及び、電源回路15を有している。入力回路(アナログ)12は各種のセンサのアナログ信号をA/D変換すると共に、マルチプレクサとして選択的にA/D変換後の信号をマイコン11に出力する。また、入力回路(デジタル)13はマルチプレクサとして選択的に各種のセンサのデジタル信号をマイコン11に出力する。出力回路14は、マイコン11からの要求に応じてアクチュエータ等に制御信号を出力する。
【0027】
マイコン11は、メインバス25に接続された、CPU21、RAM22、ROM23、INTC24、及び、DMAコントローラ60を有し、周辺バス19に接続されたCANコントローラ27、UART50、I2C28、ADC29及びDAC30を有する。メインバス25と周辺バス19はブリッジ26を介して接続されている。
【0028】
CPU21は、ROM23に記憶されたプログラムを実行することでHV−ECU100の全体を制御する。RAM22は、CPU21がプログラムを実行する際の作業メモリであり、RAM22にはUART50が受信した電池情報201が、DMAコントローラ60により転送される。また、ROM23にはOS(Operating System)、デバイスドライバ、ミドルウェアなどシステム系のプログラムが記憶されている。
【0029】
INTC24は割込みレジスタを監視して、周辺機器(例えば、DMAコントローラ60、CANコントローラ27、I2C28、ADC29)からの割り込み要求を割込みの優先順位に基づき調停してCPU21に通知する。これによりCPU21は、例えばISR(Interrupt Service Routine)を実行して、割込みした周辺機器に応じて定められているタスクを起床させる。周辺機器にはUART50も含まれるが、本実施形態ではUART50(電池監視ユニット200と接続された)は割込み要求しない。
【0030】
DMAコントローラ60は、RAM22と周辺回路の間や、RAM22内で、CPU21を介することなくデータを移動する。DMAコントローラ60については後述する。
【0031】
ブリッジ26は、メインバス25と周辺バス19の間の周波数の違いを吸収し、メインバス25に接続された回路と周辺バス19に接続された回路とを通信可能に接続する。また、メインバス25または周辺バス19に接続された回路から他方のバスに複数の接続要求がある場合に接続要求を調停する。
【0032】
CANコントローラ27は、CANバス16に接続された他のECUと通信するための通信回路である。CANコントローラ27はCANバス16を流れるCANフレームのうち、予め設定されているIDのCANフレームを選択的に受信してCPU21に通知する。CPU21からデータの送信要求の通知を受けた場合、自身のIDを付与してCANバス16に送信する。
【0033】
ADC(A/Dコントーラ)29は、入力回路(アナログ)12を介さずに接続されたセンサのアナログ信号をデジタル信号に変換してCPU21に通知する。DAC(D/Aコントローラ)30は、CPU21に要求されたデータをアナログデータに変換してアクチュエータ等に出力する。
【0034】
<電池監視ユニット>
電池監視ユニット200は、バッテリー300の状態を監視する装置であり、バッテリー300が有する全てのセルの電池情報201を定期的にバッテリー300から取得して記憶している。セルは単位電池の一例であり、電池スタックまたは単電池と呼ばれる場合もある。
【0035】
セルの状態は、セルに流れる電流値、セルの電圧値、セルの温度などにより特定される。本実施形態ではこれらを電池情報201と称している。HV−ECU100は、電池情報201を、バッテリー300の各セルの充放電を制御するために使用する。例えば、電池情報201により、各セルのSOC(State Of Charge)を推定したり、劣化状態を推定したり、また、過充電や過放電を判定しそれを抑制する制御を行う。
【0036】
<DMCコントローラ>
DMAコントローラ60は、各種のレジスタに設定される制御情報にて動作が制御される。以下、制御情報が設定されるレジスタをコントロールレジスタという。
【0037】
図4(a)は、DMAコントローラ60の制御情報を説明する図の一例である。
・転送デバイスは、DMAコントローラ60が複数の周辺機器のデータ転送を制御する場合に、周辺機器を特定するための識別番号である。本実施形態では電池監視ユニット200が接続されているUART50の識別番号となる。
・転送元アドレスは、DMAコントローラ60がデータをRAM22に転送する際の転送元のアドレスである。本実施形態では電池監視ユニット200が接続されているUART50のアドレスである。周辺機器を識別情報で識別するポートマップドI/Oの場合、UART50の識別情報(アルファベットや数値)であり、周辺機器をRAM22と同じアドレス空間で識別するメモリマップドI/Oはアドレスとなる。
・転送先アドレスは、UART50が受信したデータをDMAコントローラ60が転送する際のデータの転送先のアドレスである。CPU21はRAM22を作業メモリにするので、転送先アドレスはRAM22の所定領域となる。
・アドレッシングモードには、転送先アドレスのオプション設定として、常に同じアドレスを指定するモード、RAM22に書き込まれたデータ量に応じてアドレスを大きくしていくモードを指定できる。本実施形態では、コンスタントアドレス(常に同じアドレスを指定する)となっている。
・エレメントサイズはデータの1単位である。RAM22に転送可能な最小のデータサイズである。
・転送サイズは、DMAバッファ61に蓄積するデータのサイズである。本実施形態では例えば160バイトであるので、DMAバッファ61に160バイトのデータが蓄積されるとDMAコントローラ60はデータをRAM22に転送する。
【0038】
以上の制御情報は、マイコン11の起動時にCPU21がDMAコントローラ60のコントロールレジスタ63に設定する。制御情報の設定後、DMAコントローラ60は制御情報に従い、UART50が受信したデータをRAM22に転送する。DMAコントローラ60はRAM22にデータを書き込むと、INTC24に受信割込み要求を通知するので、CPU21はRAM22のデータを読み出すことができる。
【0039】
なお、UART50はデータの送信も可能である。データの送信時、CPU21はRAM22に書き込んだデータの転送をDMAコントローラ60に要求する。DMAコントローラ60はRAM22からデータを読み出し、UART50に設定する。
【0040】
図4(b)はUART50の制御情報を説明する図の一例である。
・受信閾値は、UART50がDMAコントローラ60にDMA要求するデータサイズである。UART50は受信したデータを1バイト単位で、受信順にFIFO51に記憶する。そして、UART50は受信閾値で設定された数のデータをFIFO51に記憶した時点でDMAコントローラ60にDMA要求する。受信閾値の最小値は1、最大値はFIFO51の数である。
【0041】
本実施形態では、受信閾値がカウンタレジスタ62のカウント値に影響する。すなわち、転送サイズのデータがDMAバッファ61に蓄積されるまでに、転送サイズ/受信閾値の数だけ、UART50からDMAバッファ61に転送が発生する。カウンタレジスタ62はUART50からDMAバッファ61への転送の数をカウントするので、転送サイズが同じなら受信閾値が小さいほどカウンタレジスタ62の最大値が大きくなる。
受信閾値1:カウンタレジスタ62の最大値160
受信閾値2:カウンタレジスタ62の最大値80
受信閾値8:カウンタレジスタ62の最大値20
したがって、少なくとも受信閾値は転送サイズ未満である必要がある。また、後述するポーリングの周期Xミリ秒の間に、カウンタレジスタ62の値が変化するように受信閾値を設定する必要がある。しかし、いずれの条件も、FIFO51の容量やUART50の通信速度から自然に満たされる場合が多く、必要であれば、受信閾値を小さくすればよい。
【0042】
・モードにはUART50がDMAコントローラ60にDMA要求するか、直接、INTC24に受信割り込みするか、を指定する情報が設定される。本実施形態では、DMAコントローラ60にDMA要求するモード(=1)が設定される。
【0043】
〔機能について〕
図5は、HV−ECU100の機能ブロック図の一例である。すでに説明したように、UART50は電池監視ユニット200から受信した1バイトのデータをFIFO51に記憶する。UART50は1バイトのデータを受信する毎にDMAコントローラ60にDMA要求する。
【0044】
DMAコントローラ60はDMAバッファ61、コントロールレジスタ63、及び、カウンタレジスタ62を有している。DMAコントローラ60は、UART50のDMA要求に基づきFIFO51からデータを1バイトずつDMAバッファ61に記憶する。その際、DMAコントローラ60はカウンタレジスタ62のカウント値を1つ大きくする。そして、カウンタレジスタ62のカウント値がコントロールレジスタ63の転送サイズ(例えば160バイト)と一致すると、DMAバッファ61の160バイトのデータをRAM22に転送する。DMAコントローラ60はINTC27に割込み要求すると共に、カウンタレジスタ62の値を初期化(ゼロに)する。なお、回数ではなくデータ量(バイト数)をカウントしても同様の処理が可能である。
【0045】
HV−ECU100は、さらにCPU21がプログラムを実行してハードウェアと協働することで実現される、DMA設定部31、カウント値監視部32、固着時間計測部33、無通信区間判定部34、及び、バッテリー監視部35を有している。DMA設定部31は、図4(a)の制御情報をコントロールレジスタ63に設定する。設定内容は例えばプログラムに記述されている。
【0046】
カウント値監視部32は、カウンタレジスタ62のカウント値を定期的又は周期的に監視する。そして、カウント値が前回値と同じ場合、固着時間計測部33に固着時間カウント値をカウントアップさせ、前回値と異なった場合、固着時間カウント値をクリアさせる。
【0047】
無通信区間判定部34は、固着時間カウント値が予め定められた閾値(N回)を超えると、無通信区間であると判定する。カウント値の監視サイクルがほぼ定期的であれば、固着時間カウント値は固着時間と同等の情報を有している。
【0048】
無通信区間と判定した場合、無通信区間判定部34は無通信区間検出結果をバッテリー監視部35に通知する。バッテリー監視部35は、無通信区間検出結果を取得すると、その後、最初にDMAコントローラ60が受信割込みを発生させた時にRAM22から読み出したデータがバッテリー300全体の電池情報201の先頭のデータであることを特定する。そして、バッテリー監視部35は、電池情報201に基づきバッテリー300の各セルのSOC等を算出し、上記の充放電制御等を行う。
【0049】
〔従来の無通信区間の検出方法〕
図6(a)は、比較のために示した従来の無通信区間の検出方法を説明する図の一例である。従来のUART50は1バイトのデータを受信する毎にCPU21に受信割り込みしている。通信速度(ボーレート〔bps〕)を適宜設定することでスタートビットとストップビットを除いた1バイトのデータの送信に約Wミリ秒かかる(図では1バイト/1ミリ秒としている)。
a1.したがって、図示するようにW秒ごとに1バイトのデータが受信され、Tミリ秒の間にT/W回の受信割込みが発生する。
a2.HV−ECU100は無通信区間を検出するため、受信割込みの回数をカウントする。受信割込みで所定のタスクが呼び出される毎に、回数を1つ大きくするなどして受信割込みの回数をカウントする。
a3.また、受信割込みの有無に関係なく、所定のタスクが定期的に受信割込みのカウント値を参照し、前回値と比較する。Tミリ秒という無通信区間はHV−ECU100にとって既知であるので、例えば、Tミリ秒よりも若干短い時間(Tミリ秒の40〜90%位)、カウント値に更新がないことから、無通信区間であることを検出できる。
a4.無通信区間が検出されれば、HV−ECU100は次回の最初の受信割込みが電池情報201の先頭であることを検出できる。そこから各セルのデータを受信し、次の無通信区間までがバッテリー全体の電池情報201であることが分かる。
【0050】
図6(b)は、電池情報201の量が増大した場合に、従来の手法で無通信区間を検出する際の不都合を説明する図の一例である。図6(b)では、電池情報201の増大に対応するため通信速度を図6(a)に対し約20倍に大きくしている(図のWミリ秒の間隔に20個のデータがある。)。
【0051】
また、図6(b)では受信割込みでCPU21の処理負荷を増大させないため、DMAコントローラ60が160バイト毎に、DMAバッファ61からRAM22にデータ転送を行っている。このため、受信割込みの頻度は約Tミリ秒に1回である。
【0052】
b1.図6(b)の通信状態では、受信割込みの回数のカウント値がTミリ秒に1回しか増えない。図示するように、Tミリ秒の無通信区間の後、さらにTミリ秒が経過すると受信割込みが発生する。
b2.受信割り込みはTミリ秒に1回なので、HV−ECU100は、Tミリ秒の間は、無通信区間のためにカウント値が増えないのか、UART50がデータを受信しているがTミリ秒が経過していないためカウント値が増えないのかを判断できない。
【0053】
また、無通信区間があるため生じない受信割込みは1回に過ぎない。この1回のカウントがないことを検出することは不可能ではないが、ノイズやCPU21の処理負荷が高い状態などの理由で、DMAコントローラ60が発生させた受信割込みが検出されなかったり、カウントミスが発生した場合に、データの先頭を誤検知してしまう。
【0054】
b3.また、仮に、HV−ECU100が、受信割込みの間隔が想定値(Tミリ秒)より長くなったことから(受信割込みが1回ないことから)、次の最初の受信割込みからデータの先頭を特定することも検討される。しかし、電池監視ユニット200がデータの先頭以外で若干の無通信区間を生じさせた場合などもあるため、この方法では先頭のデータを確実に特定できるとは言えない。
【0055】
〔本実施形態の無通信区間の検出方法〕
図7は、本実施形態の無通信区間を検出方法を説明する図の一例である。通信条件は図6(b)と同様であり、HV−ECU100はWミリ秒で従来の20倍のデータを受信し、DMAコントローラ60がTミリ秒に1回(例えば160バイトの電池情報201を受信すると)、受信割込みを発生させる。
【0056】
c1.本実施形態では、UART50の受信閾値が1バイトなので、DMAコントローラ60のカウンタレジスタ62のカウント値は、UART50が1バイト受信する毎に1つ増大していく。
c2.無通信区間では、カウント値は増えないので、例えばゼロのままである。カウント値が変化しない状態を固着という。
c3.固着時間計測部33は固着時間を計測するので、無通信区間判定部34は固着時間が閾値を超えた場合に、固着していると判定することができる。
【0057】
したがって、電池情報201の先頭の1バイトをUART50が受信する前に、HV−ECU100は無通信区間を検出できる。無通信区間の後の最初の受信割込みが生じた時に、DMAバッファ61からRAM22に転送される160バイトのデータが電池情報201の先頭のデータである。
【0058】
なお、図7(b)に示すように、DMAコントローラ60は、カウンタレジスタ62のカウント値が減少して例えばゼロになった時に、転送サイズのデータがDMAバッファ61に格納されたことを検出する場合がある。この場合、無通信区間では、カウント値が160バイト一定になるが、カウント値監視部32は同様にカウント値が変化ないことを検出して、固着時間計測部33が固着時間を計測できる。
【0059】
なお、これまでの例では、無通信区間=受信割込み間隔=Tミリ秒とした。しかし、無通信区間と受信割込み間隔に、無通信区間に割込み回数が1,2回しかない関係が成立すれば、本実施形態の無通信区間の検出方法を適用できる。すなわち、受信割込み間隔は、例えば無通信区間の50%〜100%程度であることが想定される。
【0060】
〔動作手順〕
図8は、本実施形態のHV−ECU100が無通信区間を検出する手順を示すフローチャート図の一例である。図8の手順は、CPU21がDMAコントローラ60のコントロールレジスタ63に制御情報を設定した後、繰り返し実行される。
【0061】
電池監視ユニット200が電池情報201の送信を行うことで、HV−ECU100のUART50は次々とデータを受信する。DMAコントローラ60は、FIFO51からDMAバッファ61にデータを格納し、カウンタレジスタ62のカウント値を更新していく。
【0062】
カウント値監視部32は、カウント値を定期的にポーリングする(S10)。ポーリング間隔をXミリ秒とすると、Xミリ秒は無通信区間の半分未満であること、すなわち、無通信区間に少なくとも2〜3回、カウント値を参照できる時間であることが好ましい。一方、Xは短い方が、カウント値が固着していることを確認する回数が増えるので好ましいが、余り短くするとCPU21の処理負荷が増大する。例えば、X=T/4ミリ秒とした場合、無通信区間に3〜4回、カウント値を参照できる。このように、Xは無通信区間の長さやCPU21の処理負荷を考慮して適宜、設定できる。
【0063】
次に、カウント値監視部32は最後に参照して記録してあるカウント値(以下、前回値という)と、S10で読み出したカウント値(以下、今回値という)が同じか否かを判定する(S20)。
【0064】
前回値と今回値が同じでない場合(S20のNo)、カウント値は固着していないのでカウント値監視部32はカウンタレジスタ62の監視を繰り返す。なお、カウント値監視部32は今回値で前回値を更新する。また、固着時間計測部33に固着時間カウント値をクリアさせる。
【0065】
前回値と今回値が同じ場合(S20のYes)、カウント値が固着している可能性があるので、カウント値監視部32は固着時間計測部33に固着時間カウント値のカウントアップ要求を通知する(S30)。これにより、固着時間計測部33は固着時間カウント値をカウントアップできる。
【0066】
次に、無通信区間判定部34は固着時間カウント値がN回以上か否かを判定する(S40)。N回は固着していると確定するための閾値であり、無通信区間の例えば40%〜90%に相当する回数である。Nの下限値としては、カウント値監視部32が最低2回、固着していることを検出できるように2以上とすることが好ましい。上限値としては、X=T/4ミリ秒とした場合、4以下である。よって、無通信区間がTミリ秒、X=T/4ミリ秒の場合、例えばN=3(X=T/4として無通信区間の75%)とすることができる。このように、NはXや無通信区間の長さに応じて適宜設定できる。
【0067】
固着時間カウント値がN回以上でない場合(S40のNo)、カウント値監視部32はポーリングを繰り返す。したがって、カウント値が固着している場合、固着時間カウント値は1つずつ大きくなる。
【0068】
固着時間カウント値がN回以上の場合(S40のYes)、無通信区間判定部34は無通信区間であると判定する(S50)。無通信区間判定部34は、無通信区間判定結果をバッテリー監視部35に通知するので、バッテリー監視部35は次の受信割込みでRAM22から読み出したデータが電池情報201の先頭であるとしてバッテリー300の監視処理を行う。
【0069】
以上説明したように、本実施形態のHV−ECU100は、DMAバッファ61に蓄積されるデータの数のカウント値を監視することで、無通信区間を確実に検出できる。また、無通信区間を長くする必要がないので電池情報の送信効率が低下することがなく、受信割込みの頻度を増大する必要もないのでCPU21の処理負荷が増大することもない。
【0070】
バッテリー全体の電池情報201の量は、バッテリー300の種類などによって変更される可能性がある。しかし、無通信区間が検出されてから次の無通信区間が検出されるまでがバッテリー全体の電池情報201なので、バッテリー300の種類などが変わっても、無通信区間の判定方法を変える必要がない。
【0071】
また、従来と同様に、UART50を使用して通信できる。すなわち、HV−ECU100のUART50と電池監視ユニット200のUART50の間を同期線で接続して、ハンドシェーク(接続確立)を行う必要がなく、コスト増となることもない。
【0072】
なお、UARTはEIA232で規定された通信規格であり、例えば、EIA232に従った通信規格であるRS232Cの通信にも、本実施形態の無通信区間の検出方法を適用できる。また、同期用のクロック線を有するUSART(Universal Synchronous Asynchronous Receiver Transmitter)、I2C(Inter-Integrated Circuit)、SPI(Serial Peripheral Interface)等に適用することを妨げるものではない。
【符号の説明】
【0073】
31 DMA設定部
32 カウント値監視部
33 固着時間計測部
34 無通信区間判定部
35 バッテリー監視部
50,201 UART
60 DMAコントローラ
61 DMAバッファ
62 カウンタレジスタ
100 HV−ECU
200 電池監視ユニット
202 電池情報
300 バッテリー
図1
図2
図3
図4
図5
図6
図7
図8