(57)【要約】【課題】簡素な構成で乱数性の高い乱数を発生する。【解決手段】  マスター（例えばモータ制御マイコン３２）は、スレーブ（例えばバッテリ制御マイコン１２）に対し、データ通信により所定の処理を要求する。マスターは、その処理要求に対するスレーブからの応答を受信するよりも前に、カウント部の動作を開始させて所定周期でカウント値を増加（又は減少）させる。マスターは、処理要求に対するスレーブからの応答の受信開始後、所定の少なくとも１つの取得タイミングでカウント部のカウント値を取得して、その取得した少なくとも１つのカウント値を用いて乱数を生成する。【選択図】図１
2014123284.tif 000002
【特許請求の範囲】
【請求項１】
処理要求対象に対して所定の処理を要求する処理要求部と、
前記要求に対する前記処理要求対象からの応答を受信する受信部と、
所定周期でカウント値を増加又は減少させるカウント動作を行うカウント部であって、少なくとも前記応答を受信する前から前記カウント動作を開始するカウント部と、
前記応答の受信開始後、所定の少なくとも１つの取得タイミングで前記カウント部のカウント値を取得してその取得した少なくとも１つのカウント値を用いて乱数を生成する乱数生成部と、
を備えることを特徴とする乱数発生装置。
【請求項２】
請求項１に記載の乱数発生装置であって、
前記少なくとも１つの取得タイミングのうちの１つは、前記応答の受信が完了したタイミングである
ことを特徴とする乱数発生装置。
【請求項３】
請求項１又は請求項２に記載の乱数発生装置であって、
前記取得タイミングは複数設定されており、
前記乱数生成部は、複数の前記取得タイミング毎にその取得タイミングでの前記カウント部のカウント値を取得し、その取得した複数のカウント値を用いて乱数を生成する
ことを特徴とする乱数発生装置。
【請求項４】
請求項３に記載の乱数発生装置であって、
前記乱数生成部は、前記複数のカウント値のうち少なくとも２つ以上を用いた所定の乱数生成規則に従って１つの乱数を生成する
ことを特徴とする乱数発生装置。
【請求項５】
請求項３又は請求項４記載の乱数発生装置であって、
前記複数の取得タイミングは、前記応答の受信が開始されてから完了するまでの受信期間中にそれぞれ設定されている
ことを特徴とする乱数発生装置。
【請求項６】
請求項１〜請求項５の何れか１項に記載の乱数発生装置であって、
前記処理要求部は、所定の送信データを送信することにより前記処理の要求を行い、
前記受信部は、前記送信データに対する前記処理要求対象からの前記応答である所定ビット数の受信データを受信し、
前記少なくとも１つの取得タイミングは、前記受信データの受信開始後、その受信データを構成する各ビットのデータの各受信タイミングのうち前記取得タイミング毎に予め決められたタイミングである
ことを特徴とする乱数発生装置。
【請求項７】
請求項１〜請求項６の何れか１項に記載の乱数発生装置であって、
当該乱数発生装置は、所定の機能を有する電気機器に搭載され、
前記処理要求対象は、前記電気機器と接続して使用される接続機器である
ことを特徴とする乱数発生装置。
【請求項８】
請求項１〜請求項６の何れか１項に記載の乱数発生装置であって、
当該乱数発生装置は、所定の機能を有する電気機器に搭載され、
前記処理要求対象は、前記電気機器内に設けられている
ことを特徴とする乱数発生装置。
【請求項９】
請求項１〜請求項８の何れか１項に記載の乱数発生装置であって、
ＣＰＵを有するマイクロコンピュータを備え、
当該乱数発生装置が備える前記各部は、前記ＣＰＵが所定のプログラムを実行することにより実現される
ことを特徴とする乱数発生装置。
【請求項１０】
請求項１〜請求項６の何れか１項に記載の乱数発生装置であって、
ＣＰＵを有するマイクロコンピュータを備え、
当該乱数発生装置が備える前記各部は、前記ＣＰＵが所定のプログラムを実行することにより実現され、
前記処理要求対象は、前記マイクロコンピュータ内において前記ＣＰＵと通信を行うペリフェラルである
ことを特徴とする乱数発生装置。
【請求項１１】
請求項１０に記載の乱数発生装置であって、
前記ペリフェラルは、記憶内容を書き換え可能なメモリであり、
前記処理要求部は、前記メモリの記憶内容に関する所定の処理を要求し、
前記少なくとも１つの取得タイミングのうちの１つは、前記メモリにおいて前記要求された処理が完了した場合に前記メモリから前記応答として出力される信号を受信したタイミングを基準に設定される
ことを特徴とする乱数発生装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乱数を発生する乱数発生装置に関する。
【背景技術】
【０００２】
バッテリから電源供給を受けて動作する電動機器（電動工具、電動作業機等）や、バッテリへの充電を行う充電器では、正規のバッテリではない不正なバッテリが装着されると、機器が故障したりバッテリが異常発熱したりすることがある。
【０００３】
そこで、この種の機器では、バッテリが装着された際、乱数を用いて、装着されたバッテリが適正品であるか否かを判定（認証）することが知られている（例えば、特許文献１参照）。
【０００４】
特許文献１では、Ａ／Ｄ変換器で得られるＡ／Ｄ変換値のノイズビット（下位ビット）を乱数として発生させ、その乱数を用いてバッテリの認証を行うことが提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第７９４１８６５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載の乱数発生方法は、Ａ／Ｄ変換器において電源電圧の変動によって生じる特性変化を利用するものである。そのため、安定化電源から安定した電源供給を受けて動作するマイクロコンピュータ単体では、乱数性の高い乱数を発生するのが難しいという問題がある。
【０００７】
これに対し、マイクロコンピュータにＡ／Ｄ変換器を外付けし、そのＡ／Ｄ変換器の電源をマイクロコンピュータの電源とは異なる不安定なものにすれば、マイクロコンピュータの演算処理にて乱数を発生させることはできる。
【０００８】
しかし、このようにすると、乱数発生装置としての構成が複雑になり、コストアップを招くという問題がある。
本発明は、こうした問題に鑑みなされたものであり、簡素な構成で乱数性の高い乱数を発生することができる乱数発生装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するためになされた本発明の乱数発生装置は、処理要求対象に対して所定の処理を要求する処理要求部と、その要求に対する処理要求対象からの応答を受信する受信部と、所定周期でカウント値を増加又は減少させるカウント動作を行うカウント部であって、少なくとも上記応答を受信する前からカウント動作を開始するカウント部と、上記応答の受信開始後、所定の少なくとも１つの取得タイミングでカウント部のカウント値を取得してその取得した少なくとも１つのカウント値を用いて乱数を生成する乱数生成部とを備えることを特徴とする。
【００１０】
このように構成された本発明の乱数発生装置では、カウント部によるカウント動作の開始後、処理要求部による処理要求に対して受信部が処理要求対象から応答を受信するまでの間に、時間的な不確定要素（乱数要素）が生じる。即ち、処理要求部からの処理要求に対して処理要求対象から応答を受信するまでの時間がたとえ設計上あるいは理論上予め規定されているとしても、実際には、処理要求部と処理要求対象との間における情報等の伝達経路の状態や、処理要求対象における処理時間の変動などによって、予め規定された時間からずれる可能性がある。そのずれは乱数要素となり、カウント部のカウント値のばらつき（乱数性の高いばらつき）として現れる。そこで、そのカウント値を乱数として用いることができる。
【００１１】
したがって、本発明の乱数発生装置によれば、簡素な構成で乱数性の高い乱数を発生することができる。
本発明の乱数発生装置において、上記少なくとも１つの取得タイミングのうちの１つは、処理要求対象からの応答の受信が完了したタイミングにしてもよい。応答受信の完了まで待つことで、受信完了よりも前のタイミングに比べてより乱数性を高めることができる。
【００１２】
本発明の乱数発生装置において、取得タイミングは複数設定してもよく、その場合、乱数生成部は、その複数の取得タイミング毎にその取得タイミングでのカウント部のカウント値を取得し、その取得した複数のカウント値を用いて乱数を生成するようにしてもよい。
【００１３】
このように、複数の取得タイミングで取得した複数のカウント値を用いて乱数を生成することで、乱数生成の自由度が増す。例えば、複数の乱数が必要な場合にはその必要数のカウント値を取得してそれぞれを乱数とすることができる。また例えば、複数取得したカウント値のうち任意の１又は複数のカウント値を乱数として生成することもできる。
【００１４】
複数の取得タイミングでカウント値を取得する構成の場合、乱数生成部は、複数のカウント値のうち少なくとも２つ以上を用いた所定の乱数生成規則に従って１つの乱数を生成するようにしてもよい。このように、２つ以上のカウント値を用いて１つの乱数を生成することで、生成可能な乱数の幅（例えば桁数や乱数性など）を広げることができる。
【００１５】
複数の取得タイミングでカウント値を取得する構成の場合、その複数の取得タイミングは、処理要求対象からの応答の受信が開始されてから完了するまでの受信期間中にそれぞれ設定されたものであるとよい。応答受信中に必要な数のカウント値を取得することで、複数のカウント値を迅速に取得でき、短時間で多数の乱数を生成することができる。
【００１６】
本発明の乱数発生装置において、処理要求部は、所定の送信データを送信することにより処理の要求を行い、受信部は、送信データに対する処理要求対象からの応答である所定ビット数の受信データを受信し、上記少なくとも１つの取得タイミングは、受信データの受信開始後、その受信データを構成する各ビットのデータの各受信タイミングのうち取得タイミング毎に予め決められたタイミングであるとよい。
【００１７】
つまり、受信データの受信開始後、その受信データを１ビットずつ受信する過程においてその１ビットずつの各受信タイミングのいずれか（予め決められたタイミング）を取得タイミングとするのである。各ビットの受信タイミングは、例えばそのビットの受信開始時、受信完了時、又は受信中の任意のタイミングのいずれでもよい。取得タイミングをこのように各ビットの受信タイミングに基づいて定めることで、カウント値をより確実に取得でき、延いては必要な乱数を確実に生成することができる。
【００１８】
本発明の乱数発生装置と処理要求対象との関係は、様々なケースが考えられる。例えば、乱数発生装置は、所定の機能を有する電気機器に搭載され、処理要求対象は、その電気機器と接続して使用される接続機器であるケースが考えられる。
【００１９】
この場合、乱数発生装置が、自身が搭載れている電気機器とは別の接続機器に対して処理を要求し、その接続機器から応答を受信することになる。そのため、乱数要素がより高くなり、乱数性のより優れた乱数を生成することが可能となる。また、例えば電気機器と接続機器とが相互に通信を行うように構成されている場合には、その通信を利用して乱数を生成することができるため、より簡素且つ低コストで乱数を生成することができる。
【００２０】
本発明の乱数発生装置と処理要求対象との関係として、例えば、乱数発生装置は所定の機能を有する電気機器に搭載され、処理要求対象はその電気機器内に設けられているというケースも考えられる。
【００２１】
この場合、電気機器内で乱数の生成が完結する。そのため、電気機器が単独で使用される場合であっても、簡素な構成で乱数性の高い乱数を生成することができる。
本発明の乱数発生装置は、ソフトウェアにより実現されるものであってもよい。即ち、ＣＰＵを有するマイクロコンピュータにおいて、当該乱数発生装置が備える上記各部は、ＣＰＵが所定のプログラムを実行することにより実現されるものであるとよい。このように、ＣＰＵを乱数発生装置として機能させることで、乱数発生装置をより簡易的に構成することができる。
【００２２】
マイクロコンピュータにおいてＣＰＵが所定のプログラムを実行することで本発明の乱数発生装置が実現される構成の場合、処理要求対象は、マイクロコンピュータ内においてＣＰＵと通信を行うペリフェラルであってもよい。一般に、マイクロコンピュータ内においては、ＣＰＵは各種のペリフェラルと通信を行う。そのＣＰＵとペリフェラルとの通信においても、両者間の通信経路の状態や両者の動作状態、性能等によって時間的な不確定要素（乱数要素）が発生する可能性がある。
【００２３】
そこで、その各種ペリフェラルとの通信を利用して、例えばＣＰＵがあるペリフェラルに対して処理を要求し、その要求に対して要求対象のペリフェラルから応答を受信した場合に、その応答に基づいてカウント値を取得し、乱数を生成する。したがって、本発明の乱数発生装置によっても、簡素な構成で乱数性の高い乱数を発生することができる。
【００２４】
上記のようにＣＰＵとペリフェラルとの通信に基づいて乱数を生成する場合、ペリフェラルとして、例えば記憶内容を書き換え可能なメモリとすることができる。この場合、処理要求部は、前記メモリの記憶内容に関する所定の処理を要求する。そして、上記少なくとも１つの取得タイミングのうちの１つは、メモリにおいて処理要求部から要求された処理が完了した場合にメモリから応答として出力される信号を受信したタイミングを基準に設定するとよい。
【００２５】
マイクロコンピュータ内において、ＣＰＵがメモリに所定の処理を要求した場合の応答時間は、マイクロコンピュータの使用環境や使用状態等によって変動し、その変動が不確定要素（乱数要素）となる。そのため、乱数生成のためのペリフェラルとしてメモリを用いるとより好適である。
【図面の簡単な説明】
【００２６】
【図１】第１実施形態のバッテリパック及び電動工具の概略構成を表す説明図。
【図２】第１実施形態の乱数生成方法を説明するための説明図。
【図３】第１実施形態のマスター側ループカウンタ処理を表すフローチャート。
【図４】第１実施形態のマスター側乱数生成処理を表すフローチャート。
【図５】第１実施形態のスレーブ側受信応答処理を表すフローチャート。
【図６】第２実施形態のバッテリパック及びアダプタの概略構成を表す説明図。
【図７】第３実施形態のモータ制御マイコンの概略構成を表すブロック図。
【図８】第３実施形態の乱数生成方法を説明するための説明図。
【図９】第３実施形態の乱数生成処理を表すフローチャート。
【図１０】第４実施形態の乱数生成方法を説明するための説明図。
【図１１】第４実施形態のマスター側乱数生成処理を表すフローチャート。
【図１２】他の実施形態のバッテリパック及び充電器の概略構成を表す説明図。
【発明を実施するための形態】
【００２７】
以下に、本発明の好適な実施形態を図面に基づいて説明する。なお、本発明は、下記の実施形態に示された具体的手段や構造等に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の形態を採り得る。また、下記の実施形態の構成の一部を、課題を解決できる限りにおいて省略した態様も本発明の実施形態であり、下記の複数の実施形態を適宜組み合わせて構成される態様も本発明の実施形態である。
【００２８】
［第１実施形態］
１．電動工具及びバッテリパックの構成
本実施形態の乱数発生装置は、バッテリパック１を装着することにより動作する電動工具３の一機能として実現される。バッテリパック１は、電動工具３に着脱可能に構成されている。電動工具３は、バッテリパック１が装着されたとき、バッテリパック１が正規のものか否かを乱数を用いて判定（認証）し、正規のものであると判定した場合に、バッテリパック１からの供給電力による動作を開始する。なお、バッテリパック１は、充電器７（本実施形態では図示及び説明を省略。後述の図１２参照。）によって内部のバッテリ１０を充電できるよう構成されている。
【００２９】
図１に示すように、バッテリパック１は、電動工具３やその他の各種電気機器（図示略）に着脱可能であってこれら電動工具３等の電源として用いられるものである。バッテリパック１は、バッテリ１０と、監視ＩＣ１１と、バッテリ制御マイコン１２と、レギュレータ１３と、電流検出回路１４と、温度検出回路１５と、正極側端子２１と、負極側端子２２と、共通通信端子２３と、放電制御通信端子２４と、充電制御通信端子２５とを備えている。
【００３０】
バッテリ１０は、複数（本実施形態では４個）のバッテリセル２６，２７，２８，２９が直列接続されて構成されている。バッテリ１０の正極（最も高電位側のバッテリセル２６の正極）は、正極側端子２１に接続されており、バッテリ１０の負極（最も低電位側のバッテリセル２９の負極）は、電流検出回路１４を介して負極側端子２２に接続されている。バッテリ１０は、繰り返し充電可能な二次電池（例えばリチウムイオン二次電池）である。
【００３１】
監視ＩＣ１１は、バッテリ１０の電圧や各バッテリセル２６〜２９の電圧（セル電圧）を検出してバッテリ制御マイコン１２へ出力する機能、各バッテリセル２６〜２９のセル電圧をそれぞれ監視して何れか一つでもセル電圧が過電圧状態となったらその旨の信号（過電圧信号）をバッテリ制御マイコン１２へ出力する機能などを備えた、バッテリ１０監視用の集積回路（ＩＣ）である。
【００３２】
レギュレータ１３は、バッテリ１０の電圧を降圧して所定電圧値の制御電圧を生成する電源回路である。監視ＩＣ１１やバッテリ制御マイコン１２はこの制御電圧により動作する。
【００３３】
電流検出回路１４は、負極側端子２２からバッテリ１０の負極に至る通電経路上に設けられ、この通電経路を流れる電流、即ちバッテリ１０に充電される充電電流およびバッテリ１０から放電される放電電流を検出する。
【００３４】
温度検出回路１５は、バッテリ１０の近傍に設けられた温度検出素子（図示略。例えばサーミスタ。）からの検出信号に基づいてバッテリ１０の温度を検出し、その検出結果をバッテリ制御マイコン１２へ出力する。
【００３５】
バッテリ制御マイコン１２は、監視ＩＣ１１からバッテリ１０の電圧や各セル２６〜２９のセル電圧を取得してそれら各電圧を監視する機能、監視ＩＣ１１から過電圧信号が入力された場合に所定の保護動作を行う機能、バッテリ１０の残容量を算出する残容量算出機能、バッテリ１０の温度が所定の上限値を超えた場合に所定の保護動作を行う機能、及び電動工具３のモータ制御マイコン３２とのデータ通信機能等を含む、各種の機能を備えたマイクロコンピュータである。
【００３６】
バッテリ制御マイコン１２が備える上記各機能を含む各種機能は、主に、ＣＰＵ１６がフラッシュメモリ１７に記憶されている各種プログラムを実行することにより実現される。
【００３７】
なお、バッテリ制御マイコン１２の機能は、マイクロコンピュータにより構成することは必須ではなく、各種ロジック回路等からなるＩＣにて構成するなど、種々の形態で実現できる。後述するモータ制御マイコン３２、アダプタ制御マイコン５１（図６参照）及び充電制御マイコン７３（図１２参照）についても同様である。
【００３８】
バッテリ制御マイコン１２は、共通通信端子２３、放電制御通信端子２４及び充電制御通信端子２５に接続されており、これら各通信端子２３〜２５を介して、バッテリパック１に接続される各種電気機器との間でデータ通信可能である。バッテリパック１が電動工具３に装着されているときは、バッテリパック１の共通通信端子２３が電動工具３の共通通信端子４３と接続され、バッテリパック１の放電制御通信端子２４が電動工具３の放電制御通信端子４４と接続される。
【００３９】
バッテリ制御マイコン１２は、電動工具３のモータ制御マイコン３２から共通通信端子２３を介してデータを受信すると、その受信したデータに応じた各種処理を行う。その受信したデータに対して何らかの応答が必要な場合は、バッテリ制御マイコン１２は応答データを共通通信端子２３を介して電動工具３のモータ制御マイコン３２へ送信する。
【００４０】
バッテリ制御マイコン１２は、電動工具３に装着されて電動工具へバッテリ１０の電力を供給しているときに、バッテリ１０からの放電電流が過電流状態になったり、バッテリ１０の温度が上限値を超えると、その旨を示す異常信号（例えばＬｏｗレベルの信号）を放電制御通信端子２４を介して電動工具３へ出力する。充電制御通信端子２５は、バッテリパック１と充電器７との間のデータ通信に用いられる。
【００４１】
電動工具３は、図１に示すように、モータ３１と、モータ制御マイコン３２と、レギュレータ３３と、トリガスイッチ３４と、駆動用スイッチング素子３５と、正極側端子４１と、負極側端子４２と、共通通信端子４３と、放電制御通信端子４４とを備えている。
【００４２】
正極側端子４１は、トリガスイッチ３４を介してモータ３１の一端に接続されている。負極側端子４２は、駆動用スイッチング素子３５を介してモータ３１の他端に接続されている。本実施形態のモータ３１は、ブラシ付き直流モータである。
【００４３】
レギュレータ３３は、電動工具３にバッテリパック１が装着されたときにバッテリ１０から供給される電圧を降圧して所定電圧値の制御電圧を生成する電源回路である。モータ制御マイコン３２はこの制御電圧により動作する。
【００４４】
トリガスイッチ３４は、電動工具３に設けられた図示しないトリガを使用者が操作することによりオン・オフされる。即ち、使用者がトリガを引くとオンし、使用者がトリガを離すとオフされる。トリガスイッチ３４のオン・オフの情報は、モータ制御マイコン３２にも入力される。
【００４５】
モータ制御マイコン３２は、ＣＰＵ３６がフラッシュメモリ３７に記憶されている各種プログラムを実行することにより各種機能を実現する。モータ制御マイコン３２は、ＣＰＵ３６やフラッシュメモリ３７のほか、ＲＡＭ３８、Ａ／Ｄ変換器３９及びＩ／Ｏインターフェース４０（何れも図１では図示略。後述する図７参照。）も備えている。
【００４６】
モータ制御マイコン３２は、トリガスイッチ３４がオンされると、駆動用スイッチング素子３５をオンさせることで、バッテリパック１からモータ３１への通電を開始させ、これによりモータ３１を動作させる。トリガスイッチ３４がオフされると、モータ制御マイコン３２は、駆動用スイッチング素子３５をオフさせることで、モータ３１への通電を停止させる。なお、駆動用スイッチング素子３５は、本実施形態ではＮチャネル型ＭＯＳＦＥＴであるが、これはあくまでも一例である。
【００４７】
モータ制御マイコン３２によりモータ３１への通電が行われている間（即ちバッテリ１０からの放電中）に、バッテリパック１から放電制御通信端子４４を介して異常信号が入力されると、駆動用スイッチング素子３５が強制的にオフされ、モータ３１への通電が強制的に停止される。
【００４８】
モータ制御マイコン３２は、上述したモータ３１の通電制御に加え、バッテリパック１が正規のものか否かを認証するバッテリパック認証機能を有する。モータ制御マイコン３２は、バッテリパック認証機能によりバッテリパック１が正規のものであると判定した場合に、トリガスイッチ３４の操作状態に基づくモータ３１への通電を行う。
【００４９】
モータ制御マイコン３２によるバッテリ認証は、おおよそ次のように行われる。モータ制御マイコン３２は、乱数を発生させ、その乱数に所定の暗号化データを付加した認証用データをバッテリパック１のバッテリ制御マイコン１２へ送信する。バッテリ制御マイコン１２は、モータ制御マイコン３２から認証用データを受信すると、その認証用データを元に回答データを生成し、モータ制御マイコン３２へ送信する。モータ制御マイコン３２は、バッテリ制御マイコン１２から回答データを受信すると、その回答データに基づき、バッテリパック１の認証を行う。なお、乱数を用いたバッテリパック認証機能のより具体的な処理については、例えば、特開２０１１−１３５７４０号公報等に詳しく説明されており、本発明の主要部でもないので、ここでは説明を省略する。
【００５０】
２．乱数生成方法の説明
次に、電動工具３のモータ制御マイコン３２が上記バッテリパック認証の際に発生（生成）する乱数の生成方法について説明する。本実施形態では、モータ制御マイコン３２のＣＰＵ３６が、バッテリ制御マイコン１２のＣＰＵ１６とデータ通信を行うことで、乱数を生成する。
【００５１】
具体的には、モータ制御マイコン３２のＣＰＵ３６がマスターとなってバッテリ制御マイコン１２へ予め決められた乱数生成用のデータを送信する。その送信データに対し、上記データ通信におけるスレーブとしてのバッテリ制御マイコン１２のＣＰＵ１６は、所定の応答データをモータ制御マイコン３２へ送信する。
【００５２】
マスターとしてのモータ制御マイコン３２は、バッテリ制御マイコン１２へデータを送信する一方、ループカウンタの変数を制御周期で常時インクリメントさせておく。本実施形態のループカウンタは、ＣＰＵ３６が所定のループカウンタプログラムを実行することにより実現される１バイトのソフトウェアカウンタである。そのため、ループカウンタの変数は、制御周期で０から２５５まで順次インクリメントされる。変数がオーバーフローすると（つまり２５５の次は）、再び０からインクリメントされる。
【００５３】
マスターとしてのモータ制御マイコン３２のＣＰＵ３６は、バッテリ制御マイコン１２から応答データを受信すると、その応答データの受信中における所定の取得タイミングでループカウンタのカウント値Ｋを取得する。ＣＰＵ３６は、その取得したカウント値Ｋを乱数として保持（例えばＲＡＭに記憶）する。
【００５４】
なお、以下の説明では、乱数生成用の所定のデータを送信して乱数を生成する側（本例ではモータ制御マイコン３２のＣＰＵ３６）を単にマスターともいい、そのマスターからの送信データに対して所定の応答データを返す側（本例ではバッテリ制御マイコン１２のＣＰＵ１６）を単にスレーブともいう。
【００５５】
図２には、時刻ｔ１でマスターから送信データの送信が開始され、その送信データに対して時刻ｔ１０でスレーブからの応答データの受信が開始される例が示されている。図２の例について具体的に説明する。マスターは、時刻ｔ１で送信データを送信する一方、その送信よりも先にループカウンタの動作を開始させておく。
【００５６】
マスターでは、送信データに対するスレーブからの応答データの受信が時刻ｔ１０で開始される。スレーブからの応答データは、予め決められたフォーマットのデータであり、本実施形態では例えば全体として５バイトの情報量からなるデータである。
【００５７】
マスターにおける、応答データ受信時のループカウンタカウント値Ｋの取得タイミングは、本実施形態では１バイト受信完了毎に設定されている。つまり、応答データを１バイト受信する毎にそのときのループカウンタのカウント値Ｋを取得する。
【００５８】
具体的には、時刻ｔ１０で応答データの受信開始後、１バイトのデータの受信が完了した時刻ｔ１１で、ループカウンタのカウント値Ｋ１を取得し、そのカウント値Ｋ１を乱数データとして保持する。その後再び１バイトのデータの受信が完了すると（時刻ｔ１２）、その時刻ｔ１２でのループカウンタのカウント値Ｋ２を取得し、そのカウント値Ｋ２を乱数データとして保持する。その後も同様に、１バイトのデータを受信完了する時刻ｔ１３，ｔ１４，ｔ１５で、それぞれその時刻でのループカウンタのカウント値Ｋ３，Ｋ４，Ｋ５を順次取得して乱数として保持する。なお、５つ目の取得タイミングである時刻ｔ１５は、本実施形態では応答データの受信が完了するタイミングでもある。
【００５９】
マスターは、最終的には、取得した各カウント値Ｋ１〜Ｋ５を用いた所定の乱数生成規則に従って１つの乱数を生成する。具体的には、図２に示すように、１バイト（２進数表示で８桁）のカウント値をＫ１〜Ｋ５の順で順次右方向に並べる（先に取得したカウント値ＫのＬＳＢの右側に次のカウント値ＫをＭＳＢから順に並べる）ことで、全体として２進数４０桁の乱数を生成する。より具体的には、最初に取得したカウント値Ｋ１のＬＳＢである”ａ０”の右側に、２回目に取得したカウント値Ｋ２をそのＭＳＢである”ｂ７”から順に並べる。そのカウント値Ｋ２のＬＳＢである”ｂ０”の右側に、３回目に取得したカウント値Ｋ３をそのＭＳＢである”ｃ７”から順に並べる。同じ要領で５回目のカウント値Ｋ５まで順次並べることで、１つの乱数を生成する。
【００６０】
このように、本実施形態では、ループカウンタのビット数（１バイト）よりもビット数の大きい乱数（４０ビット）を生成するよう構成されている。そのため、ループカウンタのカウント値を必要回数（本例では５回）取得するよう構成されている。
【００６１】
そのため、例えば必要な乱数が例えばｎバイトならば、ループカウンタのカウント値Ｋをｎ回取得してそれらｎ個のカウント値を用いてｎバイトの１つの乱数を生成するようにするとよい。ｎ個よりも多くのカウント値Ｋを取得して、その中から適宜選択、演算等して、必要なｎビットの乱数を生成するようにしてもよい。必要な乱数がループカウンタのビット数以下ならば、ループカウンタのカウント値Ｋを１つ取得してそのカウント値Ｋをそのまま（或いは必要ビット数）用いて乱数として生成すればよい。また例えば、ループカウンタのビット数以下の乱数が個別に複数必要な場合は、その必要数分のカウント値Ｋを取得してそれぞれを乱数として保持すればよい。また例えば、ループカウンタのビット数よりも大きいビット数の乱数が個別に複数必要な場合は、１つの乱数を生成するために必要なカウント値Ｋの数に、生成すべき乱数の数を乗じた数のカウント値Ｋを取得して、必要な乱数を生成すればよい。いずれの場合においても、具体的にどのタイミングでカウント値Ｋを取得するかについては、カウント値Ｋの必要数や応答データの受信タイミング（受信期間）等に基づいて適宜決めればよい。
【００６２】
マスターからの送信データに対するスレーブからの応答データの受信タイミングは、理論上・設計上は予め規定されている。しかし実際には、マスターとスレーブの両者間におけるデータ通信経路の状態や、マスター及びスレーブ双方でのデータ処理時間の変動などによって、応答データの受信タイミングは予め規定された時間からずれる可能性がある。そのずれは乱数要素となり、ループカウンタのカウント値Ｋのばらつき（乱数性の高いばらつき）として現れる。そこで、そのカウント値Ｋを乱数として用いることができるのである。
【００６３】
データ送信からカウント値Ｋの取得までの時間が長くなるほど、乱数性も高くなっていく。そのため、仮に１つの乱数が必要な場合、乱数性の高さを優先するならば、受信完了タイミング（時刻ｔ１５）でカウント値Ｋを取得するのが好ましい。
【００６４】
なお、単に乱数性の高さだけを考慮するなら、受信完了タイミングよりもさらに後のタイミングの方がよいのだが、受信完了タイミングを過ぎると、どのタイミングで取得するかを決める契機付けが別途必要になり、また乱数が生成されるまでの時間も長くなる。
【００６５】
そのため、高い乱数性を備えつつ、適切なタイミングで迅速に乱数を生成するためには、応答データの受信期間中のうち特に受信完了タイミングに近いタイミングでカウント値Ｋを取得するのが望ましい。
【００６６】
３．乱数生成のために実行されるマスター及びスレーブの処理の説明
図２を用いて説明した上記乱数生成方法を実現するためにマスター及びスレーブにおいて実行される各種処理について、図３〜図５の各フローチャートを用いて説明する。
【００６７】
まず、マスターとしての電動工具３側におけるモータ制御マイコン３２のＣＰＵ３６が実行するマスター側ループカウンタ処理について、図３を用いて説明する。マスターとしてのＣＰＵ３６は、モータ制御マイコン３２に電源が投入されて動作を開始すると、図３のマスター側ループカウンタ処理のプログラムをフラッシュメモリ３７から読み込んで実行する。
【００６８】
マスターは、図３のマスター側ループカウンタ処理を開始すると、Ｓ１０で、ループカウンタのカウント値Ｋを１つインクリメントする。マスターは、動作中は常時このＳ１０の処理を制御周期で繰り返し実行する。そのため、マスターが動作中は、ループカウンタのカウント値Ｋが常に制御周期でインクリメントされている。
【００６９】
次に、マスターが実行するマスター側乱数生成処理について、図４を用いて説明する。マスターは、動作開始後、例えばバッテリパック１が接続された直後の認証タイミングや、バッテリパック１が接続されている期間中の所定の認証タイミングなどの、乱数が必要となるタイミングが到来すると、図４のマスター側乱数生成処理のプログラムをフラッシュメモリ３７から読み込んで実行する。
【００７０】
マスターは、図４のマスター側乱数生成処理を開始すると、Ｓ１１０で、送信完了フラグがセット中か否か判断する。この送信完了フラグは、後述するＳ１４０でセットされるフラグである。送信完了フラグがセットされていればＳ１５０に進むが、送信完了フラグがセットされていない場合はＳ１２０に進む。
【００７１】
Ｓ１２０では、スレーブに対して乱数生成用の所定のデータを送信する。Ｓ１３０では、送信すべき全てのデータの送信が完了したか否か判断する。全データの送信が完了していない場合は、Ｓ１１０に戻って、データ送信を継続する。全データの送信が完了した場合は、Ｓ１４０で送信完了フラグをセットして、Ｓ１１０に戻る。
【００７２】
Ｓ１１０で、送信フラグがセットされていることによってＳ１５０へ進むと、スレーブからデータを受信したか否か、より具体的には、スレーブから応答データを１バイト受信完了したか否かを判断する。応答データを１バイト受信するまではＳ１１０に戻るが、１バイト受信すると、Ｓ１６０に進む。
【００７３】
Ｓ１６０では、現在のループカウンタのカウント値Ｋを取得し、その取得したカウント値Ｋを乱数として保持する。Ｓ１７０では、必要分の乱数を生成済みか否か判断する。本実施形態の場合、１つの乱数を生成するためにカウント値Ｋが計５つ必要である。そのため、本実施形態においては、Ｓ１７０の判断処理は、５つのカウント値Ｋを取得・保持したか否かを判断する処理である。必要分の乱数がまだ生成されていない場合はＳ１１０に戻る。その場合、Ｓ１５０で再び新たに１バイトの応答データの受信を待ち、１バイト受信したらＳ１６０に進んでそのときのカウント値Ｋを取得・保持することになる。
【００７４】
Ｓ１７０で、必要分の乱数を生成したと判断した場合は、Ｓ１８０で送信完了フラグをクリアして、このマスター側乱数生成処理を終了する。
次に、スレーブが実行するスレーブ側受信応答処理について、図５を用いて説明する。スレーブは、動作開始後、図５のスレーブ側受信応答処理のプログラムをフラッシュメモリ１７から読み込んで繰り返し実行する。
【００７５】
スレーブは、図５のスレーブ側受信応答処理を開始すると、Ｓ２１０で、返信中フラグがセット中か否か判断する。この返信中フラグは、後述するＳ２４０でセットされるフラグである。返信中フラグがセットされていればＳ２５０に進むが、返信中フラグがセットされていない場合はＳ２２０に進む。
【００７６】
Ｓ２２０では、マスターから乱数生成用の所定のデータを受信したか否か判断する。乱数生成用の所定のデータを受信しない間はＳ２１０に戻るが、乱数生成用の所定のデータを受信した場合は、Ｓ２３０に進む。
【００７７】
Ｓ２３０では、乱数生成用のデータの仕様として規定されている数（ビット数）のデータが受信完了したか否か判断する。規定仕様数のデータの受信がまだ完了していない場合は、Ｓ２１０に戻って、データの受信を継続する。規定仕様数のデータの受信が完了した場合は、Ｓ２４０で返信中フラグをセットして、Ｓ２１０に戻る。
【００７８】
返信中フラグがセットされたことにより、Ｓ２１０からＳ２５０に進むと、スレーブは、マスターに対して所定の応答データを返信する。Ｓ２６０では、応答データを全て返信完了したか否か判断する。応答データを全て返信完了していない場合は、Ｓ２１０に戻って返信を継続する。応答データを全て返信完了した場合は、Ｓ２７０で、返信中フラグをクリアして、このスレーブ側受信応答処理を終了する。
【００７９】
４．第１実施形態の効果等
以上説明したように、本実施形態では、マスターは、乱数が必要な場合、スレーブへ所定のデータを送信すると共に、別途、ループカウンタを動作させておく。スレーブは、マスターから所定のデータを受信すると、マスターへ応答データを返信する。マスターは、応答データの受信期間中の所定の取得タイミングで必要数分のカウント値Ｋ（本例ではＫ１〜Ｋ５）を順次取得し、これら複数のカウント値Ｋを用いて必要な乱数を生成する。
【００８０】
マスターが送信データを送信してから応答データを受信するまでの間には時間的な不確定要素（乱数要素）が生じるため、応答データ受信中に取得されるカウント値Ｋは高い乱数性を有している。そのため、マスターは、簡素な構成ながら乱数性の高い乱数を発生することができる。
【００８１】
また、マスターがループカウンタのカウント値Ｋを取得するタイミングのうち少なくとも１つは、スレーブからの応答データの受信が完了したタイミング（図２の時刻ｔ１５）である。取得タイミングを遅らせれば遅らせるほど、得られるカウント値Ｋの乱数性は高くなるため、応答データ受信の完了時にカウント値Ｋを取得することで、より乱数性の高い乱数を生成することができる。
【００８２】
また、マスターは、複数の取得タイミングでカウント値Ｋを取得し、その取得した複数のカウント値Ｋを用いて乱数を生成する。図２では、５つのカウント値Ｋから１つの乱数を生成する例を示したが、既述の通り、カウント値Ｋをいくつ取得するかについては、必要な乱数の数や大きさ（ビット数等）に応じて適宜決めることができる。このように、複数の取得タイミングで取得した複数のカウント値Ｋを用いて一又は複数の乱数を生成することで、乱数生成の自由度が高まり、所望の数や大きさの乱数を容易且つ適切に生成することができる。特に、複数のカウント値Ｋを用いて１つの乱数を生成することで、生成可能な乱数の幅（例えば桁数や乱数性など）を広げることができる。
【００８３】
また、マスターは、複数のカウント値Ｋを取得するにあたり、各カウント値Ｋをいずれも応答データの受信期間中（図２の時刻ｔ１０〜ｔ１５の間）に取得するようにしている。しかも、各取得タイミングは、応答データの受信ビット数（本例では１バイト毎）を基準としている。このように応答データ受信中に必要な数のカウント値Ｋを受信ビット数に基づいて取得することで、複数のカウント値Ｋを迅速且つ確実に取得でき、延いては所望の乱数を迅速且つ確実に生成することができる。
【００８４】
また、本実施形態では、電動工具３がマスターとして動作し、電動工具３とは別体であって電動工具３に装着されて使用されるバッテリパック１がスレーブとして動作するよう構成されている。つまり、別個独立して構成された２つの機器間のデータ通信を利用して乱数の生成が行われる。そのため、より簡素且つ低コストで、乱数性の高い乱数を生成することができる。
【００８５】
なお、本実施形態において、電動工具３は本発明の電気機器の一例に相当し、バッテリパック１は本発明の接続機器の一例に相当し、電動工具３のＣＰＵ３６（マスター）は本発明の処理要求部、受信部、カウント部及び乱数生成部の一例に相当し、バッテリパック１のＣＰＵ１６（スレーブ）は本発明の処理要求対象の一例に相当する。
【００８６】
また、図３のマスター側ループカウンタ処理は本発明のカウント部が実行する処理の一例に相当する。また、図４のマスター側乱数生成処理において、Ｓ１２０の処理は本発明の処理要求部が実行する処理の一例に相当し、Ｓ１５０の処理は本発明の受信部が実行する処理の一例に相当し、Ｓ１６０〜Ｓ１７０の処理は本発明の乱数生成部が実行する処理の一例に相当する。
【００８７】
［第２実施形態］
次に、本発明の第２実施形態について説明する。本実施形態の乱数発生装置は、バッテリパック１の一機能として実現される。バッテリパック１は、自身で生成した乱数を、アダプタ５による認証の際に用いる。即ち、アダプタ５からの認証要求に対して回答データを応答する際に、自身で生成した乱数を付加して応答する。
【００８８】
図６に示すように、バッテリパック１は、アダプタ５に着脱可能であって、アダプタ５の電源としても用いられる。バッテリパック１のハードウェア構成は第１実施形態と同じである。そのため、図６において、バッテリパック１の各部には図１と同じ符号を付している。
【００８９】
アダプタ５は、バッテリパック１に装着されているときに、バッテリパック１のバッテリ制御マイコン１２が蓄積している各種情報を読み出して、その情報に応じて、アダプタに備えられている機能の制御を行う。アダプタ５の機能の一例として、アダプタ５に備えられているＬＥＤライト（図示略）の電流制御がある。アダプタ５は、各種定格電圧のバッテリパックに装着される。そのため、アダプタ５は、バッテリパック１のバッテリパック制御マイコン１２に蓄積されている電圧情報を読み出して、ＬＥＤライトに流す電流が一定になるように制御する。この機能は、アダプタ制御マイコン５１によって実現される。アダプタ５の構成や機能自体は本発明の本質ではないため、アダプタ５のより詳細な説明は省略する。
【００９０】
バッテリ制御マイコン１２のＣＰＵ１６と監視ＩＣ１１との各種データ通信の１つに、ＣＰＵ１６が監視ＩＣ１１からバッテリ情報（バッテリ１０の電圧や各バッテリセル２６〜２９のセル電圧、バッテリ温度など）を取得するためのデータ通信がある。具体的には、バッテリ制御マイコン１２のＣＰＵ１６が、監視ＩＣ１１に対してバッテリ情報を要求するための所定の要求データを送信する。監視ＩＣ１１は、その要求データを受信すると、その要求データに従い、要求されたバッテリ情報を含む応答データを返信する。バッテリ制御マイコン１２のＣＰＵ１６は、監視ＩＣ１１からの応答データを受信することで、所望のバッテリ情報を取得することができる。
【００９１】
バッテリ制御マイコン１２のＣＰＵ１６は、上記のバッテリ情報取得のためのデータ通信を利用して、乱数の生成を行う。つまり、本実施形態では、バッテリパック１において、バッテリ制御マイコン１２のＣＰＵ１６がマスターとして動作し、監視ＩＣ１１がスレーブとして動作することで、マスター側で乱数が生成される。
【００９２】
マスターは、第１実施形態と同様、乱数生成のために図３のマスター側ループカウンタ処理及び図４のマスター側乱数生成処理を実行する。ただし、マスターが送信する送信データは、乱数生成用のデータではなく、上述した、バッテリ情報を取得する際に通常送信される送信データである。スレーブは、第１実施形態と同様、図５のスレーブ側受信応答処理を実行することで、マスターからの乱数生成用の送信データに対して応答データを返信する。
【００９３】
このように、本実施形態では、バッテリパック１内において、マスターとしてのバッテリ制御マイコン１２のＣＰＵ１６が、スレーブとしての監視ＩＣ１１とのデータ通信を用いて、乱数を生成する。そのため、本実施形態のバッテリパック１は、当該バッテリパック１単体で、簡素な構成ながら乱数性の高い乱数を生成することができる。
【００９４】
なお、本実施形態では、バッテリパック１内にマスターとスレーブが構成されてバッテリパック１単独で乱数の生成が実現される構成を示したが、アダプタ５のアダプタ制御マイコン５１内のＣＰＵ（図示略）がマスター、バッテリパック１内のバッテリ制御マイコン１２のＣＰＵ１６がスレーブとなって（或いはその逆の構成として）、マスターとスレーブ双方のデータ通信によりマスターが乱数を生成する構成としてもよい。なお、本実施形態においては、バッテリパック１が本発明の電気機器の一例に相当する。
【００９５】
［第３実施形態］
次に、本発明の第３実施形態について説明する。本実施形態では、図１に示した第１実施形態のバッテリパック１及び電動工具３の接続構成を用いて説明する。本実施形態の乱数発生装置は、電動工具３の一機能として実現される。ただし、第１実施形態では、電動工具３側をマスター、バッテリパック１側をスレーブとして、双方のデータ通信によってマスター側で乱数が生成される例を示したが、本実施形態では、モータ制御マイコン３２内のデータ通信によって乱数が生成される。
【００９６】
モータ制御マイコン３２は、より詳しくは、図７に示すように、ＣＰＵ３６、フラッシュメモリ３７、ＲＡＭ３８、Ａ／Ｄ変換器３９及びＩ／Ｏインターフェース４０などを備え、これらがバスを介して接続されている。ＣＰＵ３６は、モータ制御マイコン３２内における、フラッシュメモリ３７、ＲＡＭ３８、Ａ／Ｄ変換器３９及びＩ／Ｏインターフェース４０などの各種ペリフェラル（周辺装置）との間で、適宜データ通信を行う。
【００９７】
ＣＰＵ３６と各種ペリフェラルとのデータ通信においても、両者間のデータ伝送路の状態や両者それぞれにおけるデータ処理時間の変動などによって、データ通信にかかる時間は予め規定された時間からずれる可能性がある。そのずれは乱数要素となる。本実施形態では、ＣＰＵ３６が、自身とペリフェラルとの間のデータ通信において生じる乱数要素を用いて乱数を生成する。
【００９８】
乱数生成のためにＣＰＵ３６がデータ通信を行う通信対象のペリフェラルは、本実施形態ではフラッシュメモリ３７である。ＣＰＵ３６は、様々なタイミングで、フラッシュメモリ３７にアクセスして、記憶内容の読み出し、書き込み、消去などの様々な処理を指示する。フラッシュメモリ３７は、ＣＰＵ３６から各種指示を受けると、その指示に従って処理を実行する。フラッシュメモリ３７における処理実行中も、適宜、ＣＰＵ３６はフラッシュメモリ３７にアクセスして、処理状況を確認したり、必要なデータを送信したりする。そして、フラッシュメモリ３７において指示された処理が完了すると、ＣＰＵ３６からフラッシュメモリ３７へのアクセスも完了する。
【００９９】
ＣＰＵ３６がフラッシュメモリ３７に対して各種処理を指示してから、その指示した処理が完了してＣＰＵ３６からフラッシュメモリ３７へのアクセスが完了するまでの時間は、上述した各種要因によって変動し、乱数要素を有する。特に、各種処理のうちフラッシュメモリ３７の記憶内容を消去する処理は、データの読み込みや書き込みなどの他の処理に比べて、ＣＰＵ３６からのアクセス時間がより大きく変動し、乱数性が相対的に最も高い。
【０１００】
そこで本実施形態では、ＣＰＵ３６は、乱数を生成する際、フラッシュメモリ３７に所定のデータの消去を要求する。即ち、図８に例示するように、ＣＰＵ３６は、乱数生成が必要となった所定のタイミング（時刻ｔ１）で、フラッシュメモリ３７へ処理（即ちデータ消去）を要求する。なお、ＣＰＵ３６がループカウンタを常時動作させていることは第１実施形態と同じである。
【０１０１】
ＣＰＵ３６は、フラッシュメモリ３７への処理要求後、適宜フラッシュメモリ３７にアクセスしながらデータ消去を進める。時刻ｔ２で、フラッシュメモリ３７においてデータ消去が終了してＣＰＵ３６へ完了応答が送信されることにより、ＣＰＵ３６からフラッシュメモリ３７へのアクセスが完了すると、その時刻ｔ２でのループカウンタのカウント値Ｋ１を取得して、乱数とする。
【０１０２】
本実施形態においてモータ制御マイコン３２のＣＰＵ３６が実行する乱数生成処理を、図９のフローチャートを用いて説明する。なお、ＣＰＵ３６は、図９の乱数生成処理と並行して、第１実施形態と同様、図３のマスター側ループカウンタ処理も実行して、ループカウンタのカウント動作を継続実施する。
【０１０３】
モータ制御マイコン３２のＣＰＵ３６は、図９に示す乱数生成処理を開始すると、Ｓ３１０で、フラッシュメモリ３７へ所定のデータの消去を指示する。Ｓ３２０では、消去が完了したか否かを判断し、消去が完了するまではこのＳ３２０の判断処理を繰り返す。
【０１０４】
フラッシュメモリ３７からの完了応答によりデータ消去の完了（アクセス完了）を判断すると、Ｓ３３０で、現在のループカウンタのカウント値Ｋを取得し、その取得したカウント値Ｋを乱数として保持する。
【０１０５】
なお、第１実施形態のように所望の乱数を生成するために１バイトの乱数が複数必要な場合は、ＣＰＵ３６がフラッシュメモリ３７に対してデータ消去指示を必要回数行えばよい。或いは、フラッシュメモリ３７へのアクセス開始からアクセス完了までの間に複数回カウント値Ｋを取得して、その複数回分のカウント値Ｋを用いて所望の乱数を生成するようにしてもよい。
【０１０６】
以上説明したように、本実施形態では、電動工具３のモータ制御マイコン３２内において、ＣＰＵ３６がペリフェラルとのデータ通信を利用して乱数を生成する。特に本実施形態では、乱数生成用のペリフェラルとしてフラッシュメモリ３７を採用し、フラッシュメモリ３７に対してデータ消去を指示した場合のアクセス時間が有する乱数要素を利用して乱数を生成するようにしている。そのため、本実施形態においても、簡素な構成で乱数性の高い乱数を発生することができる。
【０１０７】
なお、乱数生成のためにＣＰＵ３６がフラッシュメモリ３７に対して要求する処理は、データ消去に限らず、例えばデータ読み出しやデータ書き込みなどの他の処理でもよい。また、乱数生成のためにＣＰＵ３６が処理を要求する要求対象のペリフェラルは、フラッシュメモリ３７以外の他のペリフェラルでもよい。
【０１０８】
また、ＣＰＵ３６がペリフェラルに対して複数回の処理要求を行う場合、要求する各回の処理内容は、必ずしも同じ内容とする必要はなく、異なる内容としてもよい。例えば、１回目はデータ消去要求、２回目はデータ書き込み要求、３回目はデータ読み込み要求、というように、異なる処理を要求するようにしてもよい。
【０１０９】
［第４実施形態］
次に、本発明の第４実施形態について説明する。本実施形態でも、図１に示した第１実施形態のバッテリパック１及び電動工具３の接続構成を用いて説明する。本実施形態の乱数発生装置も、電動工具３の一機能として実現される。ただし、第１実施形態では、図２に示したように、マスターがスレーブからの応答データを１バイト受信する毎にループカウンタのカウント値Ｋを取得したのに対し、本実施形態では、マスターが、スレーブからの応答データの受信電圧レベルの変動に基づいてカウント値Ｋを取得する。
【０１１０】
即ち、スレーブからの応答データは、電気的には、Ｈｉｇｈレベル（以下「Ｈレベル」という）とＬｏｗレベル（以下「Ｌレベル」という）の２つの電圧レベルの変化として受信される。そこで、マスターは、その受信電圧レベルの変化を監視し、受信電圧レベルのＨレベルからＬレベルへの変化（以下「Ｈ→Ｌエッジ変化」という）をカウントする。そして、そのカウント値が偶数となる毎に、その偶数となったときのループカウンタのカウント値Ｋを取得する。
【０１１１】
具体的には、図１０に例示するように、マスターは、時刻ｔ１０での応答データの受信開始後、応答データのＨ→Ｌエッジ変化を検出してその回数をカウントしていく。時刻ｔ１１で２回目のＨ→Ｌエッジ変化が発生すると、その時刻ｔ１１でのループカウンタのカウント値Ｋ１１を取得・保持する。その後、時刻ｔ１２で４回目のＨ→Ｌエッジ変化が発生すると、その時刻ｔ１２でのループカウンタのカウント値Ｋ１２を取得・保持する。
【０１１２】
同様にして、６回目のＨ→Ｌエッジ変化が発生した時刻ｔ１３でループカウンタのカウント値Ｋ１３を取得・保持し、８回目のＨ→Ｌエッジ変化が発生した時刻ｔ１４でループカウンタのカウント値Ｋ１４を取得・保持し、１０回目のＨ→Ｌエッジ変化が発生した時刻ｔ１５でループカウンタのカウント値Ｋ１５を取得・保持する。マスターは、取得した計５つのカウント値Ｋ１１〜Ｋ１５を用いて、第１実施形態と同じ要領で１つの乱数を生成する。即ち、各カウント値Ｋ１１〜Ｋ１５を組み合わせて１つ又は複数の乱数を生成してもよいし、各カウント値Ｋ１１〜Ｋ１５をそれぞれ単独で乱数としてもよい。
【０１１３】
本実施形態においてモータ制御マイコン３２のＣＰＵ３６が実行するマスター側乱数生成処理を、図１１のフローチャートを用いて説明する。モータ制御マイコン３２のＣＰＵ３６は、図１１に示すマスター側乱数生成処理を開始すると、Ｓ４１０で、送信完了フラグがセット中か否か判断する。送信完了フラグがセットされていればＳ４５０に進むが、送信完了フラグがセットされていない場合はＳ４２０に進み、スレーブに対して乱数生成用の所定のデータを送信する。Ｓ４２０〜Ｓ４４０の処理は、第１実施形態における図４のＳ１２０〜Ｓ１４０の処理と同じであり、スレーブへのデータ送信が完了すると送信完了フラグがセットされる（Ｓ４４０）。
【０１１４】
Ｓ４１０で、送信フラグがセットされていることによってＳ４５０へ進むと、応答データの受信電圧レベルのＨ→Ｌエッジ変化を検出したか否かを判断する。Ｈ→Ｌエッジ変化を検出しない場合はＳ４１０に戻るが、Ｈ→Ｌエッジ変化を検出した場合は、Ｓ４６０に進む。
【０１１５】
Ｓ４６０では、応答データ受信開始時からのＨ→Ｌエッジ変化の検出回数が偶数回目であるか否かを判断する。偶数回目でない場合はＳ４１０に戻るが、偶数回目である場合は、Ｓ４７０に進み、現在のループカウンタのカウント値Ｋを取得して、その取得したカウント値Ｋを乱数として保持する。Ｓ４８０では、図４のＳ１７０と同様、必要分の乱数を生成済みか否か判断する。必要分の乱数がまだ生成されていない場合はＳ４１０に戻る。Ｓ４８０で、必要分の乱数を生成したと判断した場合は、Ｓ４９０で送信完了フラグをクリアして、このマスター側乱数生成処理を終了する。
【０１１６】
このように、本実施形態では、マスターは、スレーブからの応答データのＨ→Ｌエッジ変化が偶数回発生する毎にそのときのカウント値Ｋを取得して乱数を生成する。そのため、応答データを予め決められたデータとするのではなく、応答時のスレーブ側の状態等に応じて変動するようなデータとすれば、応答データ自体にも乱数要素が生じることになる。つまり、マスターがスレーブにデータを送信してから応答データを受信するまでの応答時間の乱数要素に加えて、応答データ自体の変動（不確定性）に起因する乱数要素も加わる。
【０１１７】
そのため、本実施形態のマスターは、第１，第２実施形態に比べてより乱数性の高い乱数を発生することができる。
なお、乱数要素を含む応答データとしては、例えば、バッテリ１０の電圧や各バッテリセル２６〜２９のセル電圧などを示すデータが考えられる。また、上記のように応答データのＨ→Ｌエッジ変化が偶数回発生する毎にカウント値Ｋを取得することはあくまでも一例であり、奇数回発生する毎であってもよいし、Ｈ→Ｌエッジ変化が所定回数発生する毎であってもよい。また、Ｈ→Ｌエッジ変化の発生回数ではなく、逆に応答データがＬレベルからＨレベルへ変化するタイミングを検出してその検出回数に基づいてカウント値Ｋを取得するようにしてもよい。応答データの電圧レベル変化に基づいてカウント値Ｋの取得タイミングを適切に設定することができる限り、その具体的な取得タイミングの設定方法は種々考えられる。
【０１１８】
［他の実施形態］
（１）上記第１，第２実施形態では、マスターから乱数生成用の特定のデータを送信し、それに対してスレーブが応答することで乱数を発生させるようにしているが、マスターから送信するデータは、必ずしも乱数生成用の特定のデータである必要はない。送信したデータに対してスレーブから応答が返ってくるような送信データである限り、種々の送信データを送信して乱数を発生させることができる。
【０１１９】
マスターからの送信データに対してスレーブが送信する応答データの内容や形式（フォーマット）等についても、上記例に限定されるものではない。マスターにおいてスレーブからの応答データに基づいて必要数のカウント値Ｋを適切なタイミングで取得できる限り、スレーブはあらゆる内容・フォーマットの応答データを送信することができる。
【０１２０】
（２）スレーブからの応答データの受信中にマスターがどのタイミングでループカウンタのカウント値Ｋを取得するかについては適宜決めることができる。例えば、上記各実施形態の例以外に、受信開始時に取得してもよいし、受信完了後の所定のタイミング（例えば受信完了から所定時間経過後）に取得してもよい。
【０１２１】
カウント値Ｋが複数必要な場合についても、複数のカウント値Ｋをそれぞれどのタイミングで、どのような時間間隔で取得するかについては適宜決めることができる。例えば、第１実施形態では、１つの送信データに対して返ってくる１つの応答データ全体の中で複数回（上記例では１バイト受信毎）に分けて必要数のカウント値Ｋを取得するようにしたが、１つの応答データの受信中に必要数のカウント値Ｋを全て取得する必要は必ずしもない。送信データを複数回送信してそれらに対する応答データを複数回受信することで、全体として必要数のカウント値Ｋを取得してもよい。例えば、１つの応答データからは１つのカウント値Ｋのみ取得するようにし、複数のカウント値Ｋが必要ならばその複数分の送信データを送信して応答データが返ってくる毎に逐次カウント値Ｋを取得するようにしてもよい。
【０１２２】
上述した各実施形態におけるカウント値Ｋの取得タイミングは、あくまでも一例にすぎない。スレーブからの応答データに基づいて取得タイミングを決めてカウント値Ｋを取得することができる限り、どの取得タイミングで取得してもよいし、１つの乱数を発生させるためにいくつの応答データを用いるかについても適宜決めることができる。
【０１２３】
（３）ループカウンタのビット数（上記例では１バイト）よりもビット数の大きい乱数を発生させる方法として、上記実施形態では、１バイトのループカウンタのカウント値Ｋを必要数取得してそれらを組み合わせて１つの乱数を生成する方法を示したが、これもあくまでも一例である。例えば、発生させるべき乱数のビット数と同じ或いはそれ以上のビット数をカウント可能なカウンタを用いるようにしてもよい。
【０１２４】
あるビット数の乱数を発生させるために、どのようなビット数のカウンタを用いるか、またカウント値Ｋをいくつ用いるか、複数のカウント値Ｋから１つの乱数を発生させる場合に複数のカウント値Ｋをどのように組み合わせるか、などについては適宜決めることができる。
【０１２５】
（４）上記実施形態では、ループカウンタを、ＣＰＵによるソフトウェアタイマとして構成したが、これはあくまでも一例である。例えばハードウェアタイマによってループカウンタを構成してもよく、ループカウンタの具体的構成は特に限定されるものではない。
【０１２６】
（５）スレーブから送信される応答データ自体は、デジタルデータであることは必須ではなく、アナログ信号であってもよい。スレーブから送信される応答データがアナログ信号である場合、例えばそのアナログ信号をマスター側のマイコン内でＡＤ変換し、そのＡＤ変換後の応答データをマスターが処理するようにしてもよい。
【０１２７】
（６）ループカウンタの動作開始タイミングは、必ずしもＣＰＵの動作開始時である必要はなく、例えば、ＣＰＵ動作開始からデータ送信を開始するまでの間の所定のタイミングでもよいし、データ送信中の所定のタイミングでもよいし、データ送信完了から所定時間後などでもよい。ただし、より優れた乱数性を有する乱数を発生させるためには、スレーブからの応答データを受信開始するタイミングに対してより早めがよく、より好ましくは、データ送信開始時以前がよい。
【０１２８】
また、ループカウンタを常時動作させておくことは必須ではない。例えば、必要なとき（即ち乱数生成が必要となったとき）にカウント動作を開始させ、必要な乱数が生成された後は動作を停止させるというように、必要に応じて動作・非動作を切り替えるようにしてもよい。
【０１２９】
（７）上記実施形態では、電動工具３にバッテリパック１が装着された例（図１参照）や、アダプタ５にバッテリパック１が装着された例（図６参照）を示したが、これら機器の組み合わせはあくまでも一例である。
【０１３０】
例えば、図１２に示すように、充電器７にバッテリパック１が装着される例においても本発明を適用できる。図１２において、バッテリパック１は図１と同じである。充電器７は、バッテリパック１のバッテリ１０を充電するための機器である。
【０１３１】
図１２に示す充電器７は、整流回路７１と、充電用スイッチング電源回路７２と、充電制御マイコン７３と、制御用電源回路７４と、正極側端子８１と、負極側端子８２と、共通通信端子８３と、充電制御通信端子８５と、を備えている。
【０１３２】
整流回路７１は、商用電源等の交流（ＡＣ）電源から供給される交流電圧を整流するものであり、その整流出力は、充電用スイッチング電源回路７２及び制御用電源回路７４に出力される。充電用スイッチング電源回路７２は、整流回路７１からの出力に基づいてバッテリ１０への直流の充電電力を生成するスイッチング電源回路であり、充電制御マイコン７３により駆動制御される。制御用電源回路７４は、整流回路７１からの出力に基づいて所定の制御電圧を生成するスイッチング電源回路である。この制御用電源回路７４により生成された制御電圧は、充電制御マイコン７３の動作用電源となる。
【０１３３】
充電制御マイコン７３は、バッテリパック１内のバッテリ制御マイコン１２と同様、ＣＰＵ７６やフラッシュメモリ７７等を備えたマイクロコンピュータにて構成されている。充電制御マイコン７３は、充電制御の開始後、バッテリパック１のバッテリ制御マイコン１２から充電制御通信端子８５を介して充電完了信号を受信すると、充電制御を停止する。また、充電制御マイコン７３は、共通通信端子８３を介してバッテリパック１のバッテリ制御マイコン１２とデータ通信可能に構成されている。
【０１３４】
このような構成を基本としつつ、充電制御マイコン７３は、更に、バッテリパック１が正規のものか否かを認証するバッテリパック認証機能を有する。充電制御マイコン７３は、バッテリパック認証機能によりバッテリパック１が正規のものであると判定した場合に、バッテリ１０の充電制御を行う。
【０１３５】
充電制御マイコン７３によるバッテリパック認証機能は、第１実施形態の電動工具３によるバッテリパック認証機能と同じである。即ち、充電制御マイコン７３のＣＰＵ７６がマスター、バッテリ制御マイコン１２のＣＰＵ１６がスレーブとなり、マスター−スレーブ間で第１実施形態と同様のデータ通信を行って、乱数を生成する。そして、その生成した乱数を用いてバッテリパックの認証を行う。
【０１３６】
このように、充電器７とバッテリパック１の組み合わせにおいても、充電器７側がマスター、バッテリパック１側がスレーブとなって、第１実施形態と同様にマスター側で乱数の生成を行うことができる。上述した各種機器の組み合わせ以外でも、本発明の適用は可能である。
【０１３７】
（８）上記各実施形態では、マスターの機能をＣＰＵがソフトウェア処理によって実現する構成を示したが、マスターの機能をソフトウェア処理で実現することは必須ではない。マスターの機能の一部又は全てをハードウェアにより実現してもよい。
【０１３８】
（９）第３実施形態では、単一機器内でのデータ通信により乱数を生成する例として、バッテリパック１内におけるバッテリ制御マイコン１２と監視ＩＣ１１とのデータ通信を示したが、これはあくまでも一例である。バッテリパック１以外の他の機器においても、その機器内でのデータ通信を用いて乱数を生成することができる。
【０１３９】
（１０）複数のカウント値Ｋを組み合わせて１つの乱数を生成する際の乱数生成規則は、上記実施形態の例以外にも種々考えられる。例えば、第１実施形態とは逆に、取得したカウント値ＫをＭＳＢ側に並べていくようにしてもよい。また、例えば、複数のカウント値Ｋを用いた所定の演算を行うことで１つの乱数を生成するようにしてもよい。
【符号の説明】
【０１４０】
１…バッテリパック、３…電動工具、５…アダプタ、７…充電器、１０…バッテリ、１１…監視ＩＣ、１２…バッテリ制御マイコン、１３，３３，５２…レギュレータ、１４…電流検出回路、１５…温度検出回路、１６，３６，７６…ＣＰＵ、１７，３７，７７…フラッシュメモリ、２１，４１，６１，８１…正極側端子、２２，４２，６２，８２…負極側端子、２３，４３，６３，８３…共通通信端子、２４，４４…放電制御通信端子、２５，８５…充電制御通信端子、２６〜２９…バッテリセル、３１…モータ、３２…モータ制御マイコン、３４…トリガスイッチ、３５…駆動用スイッチング素子、３８…ＲＡＭ、３９…Ａ／Ｄ変換器、４０…Ｉ／Ｏインターフェース、５１…アダプタ制御マイコン、７１…整流回路、７２…充電用スイッチング電源回路、７３…充電制御マイコン、７４…制御用電源回路。
【図１】
2014123284.tif 000003
【図２】
2014123284.tif 000004
【図３】
2014123284.tif 000005
【図４】
2014123284.tif 000006
【図５】
2014123284.tif 000007
【図６】
2014123284.tif 000008
【図７】
2014123284.tif 000009
【図８】
2014123284.tif 000010
【図９】
2014123284.tif 000011
【図１０】
2014123284.tif 000012
【図１１】
2014123284.tif 000013
【図１２】
2014123284.tif 000014