(57)【要約】【課題】自己診断機能による異常検出後の動作を異常内容に応じて切り替え、消費電力を低減することのできるマイクロコントローラを提供する。【解決手段】マイクロコントローラ（ＭＣＵ）２０は、ＭＣＵの複数の構成要素が正常であるか否かを自己診断する自己診断部と、ウォッチドッグタイマ（ＷＤＴ）３４と、自己診断部にて構成要素の異常が診断されるとＭＣＵの動作を切り替える異常時動作切替部とを備える。異常時動作切替部は、異常診断された構成要素の種類に応じて、ＭＣＵの動作モードを正常時よりも消費電力が少ない省電力モードに切り替えるか、或いは、ＭＣＵが実行中のプログラムを無限ループに移行させてＷＤＴを動作させる。【選択図】図１
2017004259.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを実行することにより制御対象を駆動制御するマイクロコントローラであって、
当該マイクロコントローラを構成している複数の構成要素が正常であるか否かを、構成要素毎に診断する自己診断部と、
時間を計測し、当該マイクロコントローラが前記プログラムを実行することにより周期的に発生するタイミングで計測時間がクリアされ、該計測時間が設定時間に達すると当該マイクロコントローラをリセットするウォッチドッグタイマと、
前記自己診断部にて前記構成要素の異常が診断されると、当該マイクロコントローラの動作を正常時とは異なる動作に切り替える異常時動作切替部と、
を備え、
前記異常時動作切替部は、
前記自己診断部にて異常であると診断された構成要素の種類に応じて、当該マイクロコントローラの動作モードを正常時よりも消費電力が少ない省電力モードに切り替えるか、或いは、当該マイクロコントローラが実行中のプログラムを無限ループに移行させて前記ウォッチドッグタイマの計測時間がクリアされるのを禁止する、ように構成されているマイクロコントローラ。
【請求項２】
前記自己診断部にて診断される複数の構成要素は、
異常時に前記プログラムの実行により前記制御対象を異常動作させてしまう第１の構成要素と、
異常時に前記プログラムを正常に実行できなくなる第２の構成要素と、
に分類されており、
前記異常時動作切替部は、
前記自己診断部にて異常と診断された構成要素が前記第１の構成要素である場合に、当該マイクロコントローラの動作モードを前記省電力モードに切り替え、
前記自己診断部にて異常と診断された構成要素が前記第２の構成要素である場合に、当該マイクロコントローラが実行中のプログラムを無限ループに移行させる、
ように構成されている請求項１に記載のマイクロコントローラ。
【請求項３】
前記第１の構成要素は、信号入出力系、クロック入力系、及び、割り込み入力系の構成要素の少なくとも一つを含む、請求項２に記載のマイクロコントローラ。
【請求項４】
前記第２の構成要素は、プログラムカウンタ、レジスタ、及び、メモリの構成要素の少なくとも一つを含む、請求項２又は請求項３に記載のマイクロコントローラ。
【請求項５】
前記異常時動作切替部は、
当該マイクロコントローラの動作モードを前記省電力モードに切り替えるときには、前記制御対象の駆動を停止させるように構成されている、請求項１〜請求項４の何れか１項に記載のマイクロコントローラ。
【請求項６】
前記異常時動作切替部は、
当該マイクロコントローラの動作モードを前記省電力モードに切り替えるときには、当該マイクロコントローラにより前記制御対象とは別に駆動制御される周辺回路の駆動を停止又は制限するように構成されている、請求項１〜請求項５の何れか１項に記載のマイクロコントローラ。
【請求項７】
前記異常時動作切替部は、
当該マイクロコントローラの動作モードを前記省電力モードに切り替えるときには、前記制御対象を駆動する駆動回路への電力供給を遮断するように構成されている、請求項１〜請求項６の何れか１項に記載のマイクロコントローラ。
【請求項８】
前記異常時動作切替部は、
当該マイクロコントローラの動作モードを前記省電力モードに切り替えると、当該マイクロコントローラが外部操作によって再起動されるまで前記省電力モードを保持するように構成されている、請求項１〜請求項７の何れか１項に記載のマイクロコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自己診断機能を有するマイクロコントローラに関する。
【背景技術】
【０００２】
一般に、マイクロコントローラは、自己診断機能により異常を検出すると、実行中のプログラムを無限ループに移行させることで、他のプログラムを実行しないように構成されている（例えば、非特許文献１参照）。
【０００３】
また、マイクロコントローラには、通常、ウォッチドッグタイマが設けられており、マイクロコントローラが正常動作しているときには、ウォッチドッグタイマを定期的にリセットするようにされている。
【０００４】
ウォッチドッグタイマは、時間を計時し、計時時間が所定の監視時間に達するまでの間にリセットされないと（つまり計時時間が監視時間に達すると）、マイクロコントローラの動作が異常であると判断して、マイクロコントローラをリセット（再起動）させる。
【０００５】
このため、自己診断機能によって、マイクロコントローラが実行するプログラムが無限ループに入ると、ウォッチドッグタイマがリセットされなくなるので、ウォッチドッグタイマがマイクロコントローラを再起動させることになる。
【０００６】
そして、その再起動によってマイクロコントローラが正常状態に復帰すれば、制御を継続して実行することができるようになる。
なお、このようにマイクロコントローラが実行中のプログラムを無限ループに移行させて、ウォッチドッグタイマの機能によりマイクロコントローラを再起動させることは、特許文献１に記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−４４３２４号公報
【非特許文献】
【０００８】
【非特許文献１】32-BIT MICROCONTROLLER FM3ファミリ アプリケーションノート（IEC60730 Class B 準拠 セルフテストライブラリ アプリケーションノート）、  ［平成２７年４月２８日検索］インターネット（ＵＲＬ：https://www.spansion.com/fjdocuments/jp/aplnote/ja-pdf/MB9BF506R-AN706-00037-2v0-J.pdf）
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかし、自己診断機能によって異常を検出した際、マイクロコントローラのプログラムが必ず無限ループに移行させると、マイクロコントローラや周辺回路（ウォッチドッグタイマ等）には、電力を供給し続けるという問題があった。
【００１０】
特に、バッテリから電力供給を受けて動作するマイクロコントローラの場合、無限ループに入りウォッチドッグタイマによる再起動によって正常復帰できないときには、自己診断−再起動が繰り返されるため、バッテリが過放電されてしまうという問題がある。
【００１１】
本発明は、こうした問題に鑑みなされたものであり、自己診断機能による異常検出後の動作を異常内容に応じて切り替え、消費電力を低減することのできるマイクロコントローラを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明のマイクロコントローラは、自己診断部と、ウォッチドッグタイマと、異常時動作切替部と、を備える。
ここで、自己診断部は、マイクロコントローラを構成している複数の構成要素が正常であるか否かを、構成要素毎に診断する。
【００１３】
また、ウォッチドッグタイマは、時間を計測し、マイクロコントローラがプログラムを実行することにより周期的に発生するタイミングで計測時間がクリアされ、その計測時間が設定時間に達するとマイクロコントローラをリセットする。
【００１４】
そして、異常時動作切替部は、自己診断部にて構成要素の異常が診断されると、異常診断された構成要素の種類に応じて、マイクロコントローラの動作を、正常時とは異なる動作に切り替える。
【００１５】
具体的には、異常時動作切替部は、異常診断された構成要素の種類に応じて、マイクロコントローラの動作モードを正常時よりも消費電力が少ない省電力モードに切り替えるか、或いは、マイクロコントローラが実行中のプログラムを無限ループに移行させる。
【００１６】
このため、異常時動作切替部が、マイクロコントローラが実行中のプログラムを無限ループに移行させたときには、ウォッチドッグタイマの計測時間がクリアされなくなって、その計測時間が設定時間に達したときにマイクロコントローラがリセットされることになる。
【００１７】
また、異常時動作切替部が、マイクロコントローラの動作モードを省電力モードに切り替えた際には、マイクロコントローラによる消費電力が低減される。
従って、本発明のマイクロコントローラによれば、自己診断機能による異常検出後の動作を、検出した異常内容に応じて、無限ループプログラムの実行と、省電力モードへの移行と、の何れかに切り換えることができる。
【００１８】
そして、自己診断機能による異常検出時にマイクロコントローラが省電力モードへ移行した際には、マイクロコントローラによる消費電力が減少するので、マイクロコントローラの省電力化を図ることができる。
【００１９】
このため、マイクロコントローラが、バッテリからの電力供給により動作するものである場合には、バッテリからの放電を抑制して、バッテリが過放電状態となる確率を低減することができる。
【００２０】
ところで、自己診断部にて診断される複数の構成要素は、異常時にプログラムの実行により制御対象を異常動作させてしまう第１の構成要素と、異常時にプログラムを正常に実行できなくなる第２の構成要素とに分類されていてもよい。
【００２１】
また、この場合、異常時動作切替部は、第１の構成要素の異常診断時には、マイクロコントローラの動作モードを省電力モードに切り替え、第２の構成要素の異常診断時には、マイクロコントローラが実行中のプログラムを無限ループに移行させる、ように構成されていてもよい。
【００２２】
そして、異常時動作切替部をこのように構成した場合、第１の構成要素の異常診断時には、マイクロコントローラを省電力モードに移行させて、マイクロコントローラでの消費電力を抑えることができると共に、プログラムの実行を制限することができる。このため、マイクロコントローラがプログラムを実行することにより制御対象が異常動作するのを防止できる。
【００２３】
また、第２の構成要素の異常診断時には、マイクロコントローラが実行中のプログラムを無限ループへ移行させることで、プログラムを正常に実行できなくなって、制御対象が誤制御されるのを防止することができる。また、この場合、ウォッチドッグタイマによりマイクロコントローラをリセットさせて、正常状態への自動復帰を図ることもできる。
【００２４】
なお、第１の構成要素としては、マイクロコントローラの信号入出力系、クロック入力系、及び、割り込み入力系の少なくとも一つを含むようにしてもよい。また、第２の構成要素としては、プログラムカウンタ、レジスタ、及び、メモリの少なくとも一つを含むようにしてもよい。
【００２５】
次に、異常時動作切替部は、マイクロコントローラの動作モードを省電力モードに切り替えるときには、制御対象の駆動を停止させるように構成されていてもよい。
この場合、マイクロコントローラが省電力モードとなって、プログラムの実行を制限されているときに、制御対象が駆動回路を介して駆動されるのを防止できる。
【００２６】
また、異常時動作切替部は、マイクロコントローラの動作モードを省電力モードに切り替えるときには、当該マイクロコントローラにより制御対象とは別に駆動制御される周辺回路の駆動を停止又は制限するように構成されていてもよい。
【００２７】
この場合、マイクロコントローラ自体の動作によって生じる消費電力だけでなく、周辺回路による消費電力をも低減することができるので、周辺回路を含むマイクロコントローラ全体を省電力化することができる。
【００２８】
また、異常時動作切替部は、マイクロコントローラの動作モードを省電力モードに切り替えるときには、制御対象を駆動する駆動回路への電力供給を遮断するように構成されていてもよい。
【００２９】
この場合、マイクロコントローラが省電力モードとなって、プログラムの実行を制限されているときに、駆動回路にて電力が消費されるのを防止できる。
また、異常時動作切替部は、マイクロコントローラの動作モードを省電力モードに切り替えると、外部操作によってマイクロコントローラが再起動されるまで省電力モードを保持するように構成されていてもよい。
【００３０】
つまり、マイクロコントローラは、通常、省電力モードにあるときにはウェイクアップ回路により定期的に起動されて各種信号入力を確認するように構成されるが、こうしたウェイクアップ機能をなくすのである。
【００３１】
この場合、マイクロコントローラの省電力モードからの復帰は、マイクロコントローラへの電源供給が一旦遮断され、その後、使用者の操作によってマイクロコントローラへの電源供給が再開されて、マイクロコンピュータが再起動したときに制限されることになる。
【００３２】
この結果、制御対象が誤制御されて異常動作するのをより良好に防止することができる。また、ウェイクアップ機能による電力消費を抑制することもできる。
【図面の簡単な説明】
【００３３】
【図１】実施形態の制御回路の構成を表すブロック図である。
【図２】制御回路内のマイクロコントローラにて実行される起動時診断処理を表すフローチャートである。
【図３】同じくマイクロコントローラにて実行される制御処理を表すフローチャートである。
【発明を実施するための形態】
【００３４】
以下に本発明の実施形態を図面と共に説明する。
図１に示すように、本実施形態の制御回路１０は、電動工具、電動作業機等の電気機器に、充放電可能なバッテリ２と共に搭載されて、その動力源であるモータ（本実施形態ではブラシレスモータ）４を駆動制御するためのものである。
【００３５】
制御回路１０は、モータ４の各相巻線へ通電することによりモータ４を駆動するモータ駆動部１２、その駆動時にモータ４に流れる電流を検出する電流検出部１８、及び、ＭＣＵ（Micro Control Unit）２０を備える。
【００３６】
ＭＣＵ２０は、本発明のマイクロコントローラに相当するものであり、モータ４に設けられた回転センサ５及び電流検出部１８からの検出信号に基づき、モータ４が操作部６からの指令に応じた回転状態となるよう、モータ駆動部１２を介してモータ４を制御する。
【００３７】
また、制御回路１０には、バッテリ２から電力供給を受けて、ＭＵＣ２０等の内部回路を駆動するための電源電圧（直流定電圧）を生成するレギュレータ部１６が備えられている。
【００３８】
モータ駆動部１２は、所謂インバータ回路であり、レギュレータ部１６にて生成された電源電圧が、電源供給部１４を介して供給される。
従って、モータ駆動部１２は、電源供給部１４から電源電圧が供給されているときに、バッテリ２からモータ４への通電経路を形成できるようになり、電源供給部１４から電源電圧が供給されていないときには、バッテリ２からモータ４への通電経路が遮断される。
【００３９】
このため、電源供給部１４からモータ駆動部１２に電源電圧が供給されていないときには、モータ駆動部１２は動作停止状態となり、ＭＣＵ２０からモータ駆動部１２にモータ４駆動用の信号が入力されても、モータ４が通電により駆動されることはない。
【００４０】
次に、ＭＣＵ２０は、一般的なマイクロコントローラと同様、プログラムカウンタ（以下、ＰＣという）２２、レジスタ２４、ＲＯＭ２６、ＲＡＭ２８、及び、内部クロック生成部３０を備えている。
【００４１】
また、ＭＣＵ２０には、外部クロック生成部３２、及び、ウォッチドッグタイマ（以下、ＷＤＴという）３４、が接続されている。
外部クロック生成部３２は、内部クロック生成部３０とは異なる発振器を備え、内部クロック生成部３０とは別に、独立してクロック信号を生成するものである。
【００４２】
そして、ＭＣＵ２０は、内部クロック生成部３０及び外部クロック生成部３２の何れかで生成されたクロック信号に同期して動作する。また、ＭＣＵ２０は、各クロック生成部３０、３２からのクロック信号をカウントすることで得られる経過時間のずれが正常範囲内にあるか否かを判断することで、自身の動作クロックが正常であるか否かを判定（診断）する。
【００４３】
また、ＷＤＴ３４は、ＭＣＵ２０から定期的に出力される信号によりリセットされる計時用タイマであり、その計時時間が予め設定された監視時間に達すると、ＭＣＵ２０が異常動作していると判断して、ＭＣＵ２０をリセット（再起動）させるものである。
【００４４】
また、制御回路１０には、モータ４の駆動時に電気機器周囲（例えば、電動工具や電動作業機による作業対象物）を照らしたり、電気機器の状態（例えば、バッテリ残量等）を表示したりするための照明部８が設けられている。そして、ＭＣＵ２０は、この照明部８の点灯状態等も制御する。
【００４５】
このように構成された本実施形態の制御回路１０においては、ＭＣＵ２０がＲＯＭ２６に記憶されたプログラムを実行することにより、操作部６からの指令（操作量）に応じてモータ４を駆動制御すると共に、必要に応じて照明部８の点灯状態を制御する。
【００４６】
また、ＭＣＵ２０は、レギュレータ部１６から電源電圧が供給される（パワーオンリセット）か、ＷＤＴ３４等によりリセットされることにより起動するが、起動直後には、図２に示す起動時診断処理を実行することにより、ＭＣＵ２０各部の自己診断を行う。
【００４７】
そして、その自己診断の結果、異常を検出すると、実行中のプログラムを無限ループに移行させるか、制御回路１０の動作モードを通常の動作モードから省電力モードに切り換える。
【００４８】
以下、このようにＭＣＵ２０にて実行される起動時診断処理、及び、起動時診断処理にて異常が検出されなかったときにＭＣＵ２０にて実行されるモータ４の制御処理、について説明する。
【００４９】
図２に示すように、ＭＣＵ２０の起動時に実行される起動時診断処理においては、まず、Ｓ１１０（Ｓはステップを表す）にて、ＰＣ２２が正常であるか否かを診断する。この診断は、例えば、所定のサブルーチンにジャンプして、アドレスを取得し、その取得したアドレスが正しいか否かをチェックすることにより行われる。
【００５０】
次に、Ｓ１２０では、Ｓ１１０にてＰＣ２２が正常であると診断されたか否かを判断する。そして、ＰＣ２２が正常であると診断されていれば、Ｓ１３０に移行し、ＰＣ２２が正常であると診断されていなければ、Ｓ３００の無限ループに移行する。
【００５１】
なお、ＭＣＵ２０がＳ３００の無限ループに入ると、ＭＣＵ２０からＷＤＴ３４に信号が出力されなくなり、ＷＤＴ３４による計時時間が所定の監視時間に達したタイミングでＭＣＵ２０がリセットされて、再起動されることになる。
【００５２】
Ｓ１３０では、レジスタ２４内の汎用レジスタが正常であるか否かを診断する。この診断には、例えば、チェッカーボード法が使用され、汎用レジスタに、所定パターンのデータ、及び、そのパターンを反転させた反転パターンのデータを、順次書き込み、読み出すことにより行われる。
【００５３】
つまり、Ｓ１３０では、各ビット値が反転したパターンデータ毎に、汎用レジスタから読み出したデータが、書き込んだデータと一致しているか否かを判断することにより、汎用レジスタが正常であるか否かを判断する。
【００５４】
次に、Ｓ１４０では、Ｓ１３０にて汎用レジスタが正常であると診断されたか否かを判断する。そして、汎用レジスタが正常であると診断されていれば、Ｓ１５０に移行し、汎用レジスタが正常であると診断されていなければ、Ｓ３００の無限ループに移行する。
【００５５】
Ｓ１５０では、ＲＡＭ２８を構成している揮発性メモリが正常であるか否かを診断する。この診断には、例えば、汎用レジスタの診断と同様、チェッカーボード法が使用され、揮発性メモリに各ビットの値が反転した２種類のデータ（例えば、「０ｘ５５」と「０ｘＡＡ」）を順次書き込み、読み出すことにより行われる。
【００５６】
つまり、Ｓ１５０では、上記２種類のデータ毎に、揮発性メモリから読み出したデータが、書き込んだデータと一致しているか否かを判断することにより、揮発性メモリが正常であるか否かを判断する。
【００５７】
次に、Ｓ１６０では、Ｓ１５０にて揮発性メモリが正常であると診断されたか否かを判断する。そして、揮発性メモリが正常であると診断されていれば、Ｓ１７０に移行し、揮発性メモリが正常であると診断されていなければ、Ｓ３００の無限ループに移行する。
【００５８】
Ｓ１７０では、上記一連の処理にて、プログラムカウンタ、汎用レジスタ、揮発性メモリが正常であると診断されているので、これら各部を初期設定する初期設定処理を実行し、Ｓ１８０に移行する。
【００５９】
Ｓ１８０では、ＲＯＭ２６を構成する不揮発性メモリが正常であるか否かを診断する。この診断は、例えば、不揮発性メモリに記憶されているデータのＣＲＣコードを計算し、その計算結果と、予め不揮発性メモリに記憶されているＣＲＣコードとを比較することにより行われる。
【００６０】
つまり、Ｓ１８０では、計算したＣＲＣコードと不揮発性メモリに記憶されているＣＲＣコードを比較し、これらが一致しているときに、不揮発性メモリは正常であると判断する。
【００６１】
次に、Ｓ１９０では、Ｓ１８０にて不揮発性メモリが正常であると診断されたか否かを判断する。そして、不揮発性メモリは正常であると診断されていれば、Ｓ２００に移行し、不揮発性メモリは正常であると診断されていなければ、Ｓ３００の無限ループに移行する。
【００６２】
Ｓ２００では、ＭＣＵ２０においてアナログ信号をＡＤ変換して取り込むのに用いられるＡＤポートが、正常であるか否かを診断し、Ｓ２１０に移行する。
Ｓ２００での診断は、例えば、ＡＤポートに設けられたＡＤ変換モジュールを実際に動作させ、その動作によって得られるＡＤ変換値を読み込むことにより行われ、Ｓ２１０では、そのＡＤ変換値に基づき、ＡＤポートが正常であるか否かを判断する。
【００６３】
Ｓ２１０では、ＡＤ変換値が所定の正常範囲内にあれば、ＡＤポートは正常であると判断して、Ｓ２５０に移行し、ＡＤ変換値が正常範囲内になければ、ＡＤポートは正常ではないと判断して、Ｓ２２０に移行する。
【００６４】
ＡＤポートが正常でない場合（つまり、ＡＤポートの異常時）には、ＡＤポートからモータ制御のためのパラメータ（例えば、バッテリ電圧、モータ温度等）を正常に読み込むことができず、モータ制御を正常に実施することができない。
【００６５】
このため、Ｓ２２０では、モータ駆動部１２への制御信号の出力を停止する。また、続くＳ２３０では、電源供給部１４からモータ駆動部１２へのモータ駆動用電源の供給を停止させることで、モータ４の駆動を停止させ、更に続くＳ２４０では、ＭＣＵ２０の動作モードを省電力モードに設定する。
【００６６】
省電力モードは、ＭＣＵ２０の動作（モータ制御処理の実行）を停止させて、消費電力を低減するモードであり、例えば、動作クロックを停止させるスリープモード、動作クロックは停止させずにＷＤＴ３４を周期的にクリアさせるアイドルモード等が知られている。
【００６７】
そして、本実施形態では、こうした従来から知られている省電力モードの一つを、異常診断時に移行する省電力モードとして利用する。
なお、省電力モードからの復帰条件は、使用者が操作部６を操作することにより、ＭＣＵ２０が再起動されたとき、に設定されており、ＭＣＵ２０は、ＷＤＴ３４からの出力では省電力モードから復帰できない。
【００６８】
つまり、レギュレータ部１６は、操作部６が操作（オン）されると、ＭＣＵ２０への電源供給を開始する。すると、ＭＣＵ２０が起動し、プログラムを実行する。また、ＭＣＵ２０は、起動後、レギュレータ部１６がＭＣＵ２０への電源供給を継続するように、レギュレータ部１６に信号を出す。そして、その後、操作部６の操作が停止（オフ）され、規定時間が経過すると、その信号の出力を停止して、レギュレータ部１６からＭＣＵ２０への電源供給を遮断させ、ＭＣＵ２０自身の動作を停止させる。
【００６９】
そして、本実施形態では、ＭＣＵ２０が省電力モードに移行すると、レギュレータ部１６からの電源供給が停止し、その後操作部６が操作されてレギュレータ部１０からの電源供給が再開され、ＭＣＵ２０が再起動するまで、通常の動作モードに復帰できないようにされている。
【００７０】
次に、Ｓ２５０では、ＭＣＵ２０においてデータを入出力するのに用いられるＩＯポートが、正常であるか否かを診断する。この診断は、例えば、出力端子のレベルを設定し、入力端子による読み出し値が期待値と一致しているか否かを判断することにより行われる。
【００７１】
Ｓ２６０では、Ｓ２５０での診断の結果、読み出し値が期待値と一致していて、ＩＯポートが正常であると診断されたか否かを判断する。そして、ＩＯポートが正常であると診断されていればＳ２７０に移行し、そうでなければ、上述したＳ２２０〜Ｓ２４０の処理を実行する。
【００７２】
次に、Ｓ２７０では、ＭＣＵ２０の動作クロックが正常であるか否かを診断する。この診断には、内部クロック生成部３０からのクロック信号と、外部クロック生成部３２からのクロック信号との、２系統のクロック信号が用いられる。そして、Ｓ２７０では、これら各クロック信号による割り込み回数等で規定時間をそれぞれ計時し、その計時時間ずれが正常範囲から外れているときに、自身の動作クロックに異常があると診断する。
【００７３】
Ｓ２８０では、Ｓ２７０での診断の結果、ＭＣＵ２０の動作クロックが正常であると診断されたか否かを判断する。そして、動作クロックが正常であると診断されていれば、起動時診断処理を終了して、図３に示すモータ４の制御処理へ移行し、そうでなければ、上述したＳ２２０〜Ｓ２４０の処理を実行する。
【００７４】
このように、起動時診断処理では、ＭＣＵ２０自身のＰＣ２２、汎用レジスタ、揮発性メモリ、不揮発性メモリ、ＡＤポート、ＩＯポート、及び、動作クロックが、正常であるか否かが自己診断される。
【００７５】
そして、これらの何れかに異常があると自己診断すると、ＭＣＵ２０は、その異常内容に応じて、実行中のプログラムを無限ループに移行させるか、或いは、自身の動作モードを省電力モードに移行させることで、図３に示すモータ４の制御処理の実行を禁止する。
【００７６】
次に、モータ４の制御処理について説明する。
図３に示すように、モータ４の制御処理が開始されると、ＭＣＵ２０は、Ｓ３１０にて所定の制御周期が経過したか否かを判断し、所定の制御周期が経過していなければ、再度Ｓ３１０の判定処理を実行することで、所定の制御周期が経過するのを待つ。
【００７７】
そして、所定の制御周期が経過すると、Ｓ３２０以降の処理を実行する。つまり、ＭＣＵ２０は、所定の制御周期で、Ｓ３２０以降の制御処理を周期的に実行する。
Ｓ３２０では、ＷＤＴ３４をクリアするＷＤＴクリア処理を実行し、続くＳ３３０にて、現在、モータ４を駆動中であるか否かを判断する。
【００７８】
Ｓ３３０にて、現在、モータ４を駆動中であると判断されると、モータ４の回転センサ５からモータ４の所定の回転角度毎に入力されるパルス信号のエッジによるエッジ割り込みを含む、各種割り込み動作を確認し、Ｓ３６０に移行する。
【００７９】
また、Ｓ３３０にて、現在、モータ４は駆動していないと判断されると、回転センサ５からのエッジ割り込みはないので、エッジ割り込み以外の割り込み動作（タイマ割り込み等）を確認し、Ｓ３６０に移行する。
【００８０】
Ｓ３６０では、Ｓ３４０又はＳ３５０の確認処理にて、各種割り込み動作は正常になされていると診断されたか否かを判断する。そして、割り込み動作が正常になされていれば、Ｓ４００以降の一連の制御処理を実行し、割り込み動作が正常になされていなければ、上述したＳ２２０〜Ｓ２４０の処理を実行する。
【００８１】
Ｓ４００以降の処理は、モータ４を駆動するための処理である。
すなわち、Ｓ４００では、操作部６に設けられた操作スイッチからの信号を確認する。また、続くＳ４１０では、操作部６の操作量、電流検出部１８にて検出される電流やバッテリ電圧、モータ４に設けられた温度センサ（図示せず）からの検出信号をＡＤ変換して取り込む。
【００８２】
そして、続くＳ４２０では、Ｓ４１０でのＡＤ変換結果に基づき、バッテリ電圧の低下、モータ４の過熱、といった異常を確認し、続くＳ４３０に移行して、モータ４を駆動制御するモータ駆動制御処理を実行する。
【００８３】
なお、モータ駆動制御処理では、異常確認処理にて異常が検出されているときには、モータ４の駆動を停止し、その後、使用者による操作部６の操作（換言すれば駆動指令の入力）が終了するまで駆動停止状態を保持する。
【００８４】
また、Ｓ４４０では、Ｓ４００以降の制御処理で得られた各種データの不揮発性メモリへの書き込み、不揮発性メモリからのデータの読み出し等を行う、メモリ操作処理を実行する。そして、その後は、Ｓ３１０に移行し、上記一連の処理を再度実行する。
【００８５】
以上説明したように、本実施形態の制御回路１０によれば、ＭＣＵ２０は、起動時診断処理において、ＰＣ２２、汎用レジスタ、揮発性メモリ、不揮発性メモリ、ＡＤポート、ＩＯポート、及び、動作クロックが正常であるか否かを自己診断する。
【００８６】
また、起動時診断処理にて異常が検出されなかったときには、ＭＣＵ２０は、モータ４の制御処理を実行するが、この制御処理実行中には、回転センサ５からのエッジ割り込みやタイマ割り込み等の各種割り込み動作が正常であるか否かを自己診断する。
【００８７】
そして、ＭＣＵ２０は、これらの自己診断により異常があると診断すると、その診断内容に応じて、実行中のプログラムを無限ループに移行させるか、或いは、自身の動作モードを省電力モードに移行させることで、モータ４の駆動制御を停止する。
【００８８】
具体的には、ＰＣ２２、汎用レジスタ、揮発性メモリ、及び、不揮発性メモリの何れか（本発明の第２の構成要素に相当）が異常である場合、ＭＣＵ２０は、無限ループに移行する。
【００８９】
これは、これら各部（第２の構成要素）に異常が生じた場合、ＭＣＵ２０は、再起動により正常復帰できる可能性はあるものの、プログラムを正常に実行できず、予期しない誤制御を実施してしまうことがあるためである。
【００９０】
そして、このようにＭＣＵ２０が実行中のプログラムが無限ループに入ると、モータ４の駆動が停止され、ＷＤＴ３４がクリアされなくなる。この結果、ＭＣＵ２０は、ＷＤＴ３４の機能により、ＷＤＴ３４による監視時間経過後にリセットされ、再起動される。
【００９１】
そして、その再起動により、異常診断された部分が正常状態に復帰しなければ、ＭＣＵ２０は、前回の起動時と同様、無限ループに入ることになるが、再起動により正常復帰して、モータ４を正常に駆動制御できるようになることもある。
【００９２】
一方、ＡＤポート、ＩＯポート、動作クロック、若しくは、割り込み（本発明の第１の構成要素に相当）に異常があると自己診断した場合、ＭＣＵ２０は、プログラム自体は実行できるものの、制御パラメータや制御タイミングに異常が生じる。
【００９３】
このため、これら各部（第１の構成要素）に異常が生じた場合、制御対象（モータ４）を正常に駆動することができない。また、これら各部に異常が生じたときには、ＷＤＴ３４等によってＭＣＵ２０をリセットしても、正常復帰し得る確率は極めて低い。
【００９４】
そこで、本実施形態では、ＭＣＵ２０が自己診断によりこれら各部の異常を検出すると、省電力モードに入るようにしている。そして、省電力モードでは、ＭＣＵ２０がスリープ状態或いはアイドル状態に入り、ＭＣＵ２０での消費電力が抑制されることから、バッテリ２の放電を抑制して、バッテリ２の残容量が低下するのを防止できる。
【００９５】
また、本実施形態では、ＭＣＵ２０が一旦省電力モードに入ると、その後は、使用者が操作部６を操作して、レギュレータ部１６からの電源供給によりＭＣＵ２０が再起動されるまで、省電力モードを保持するようにされている。
【００９６】
このため、本実施形態によれば、ＭＣＵ２０が省電力モードにあるとき、ＷＤＴ３４の機能によって、ＭＣＵ２０が定期的に起動されるようなことはなく、これによっても、バッテリ２の電力消費を抑えることができる。
【００９７】
また、ＭＣＵ２０が省電力モードにあるときに、ＷＤＴ３４の機能によってＭＣＵ２０が起動されるようにすると、制御対象であるモータ４を誤って駆動してしまうことも考えられるが、本実施形態によれば、このような問題も防止することができる。
【００９８】
また更に、本実施形態では、ＡＤポート、ＩＯポート、動作クロック、若しくは、割り込みに異常があると自己診断した場合、ＭＣＵ２０の動作モードを省電力モードに切り換えるだけでなく、モータ駆動部１２への制御信号の出力を停止させ、電源供給部１４からモータ駆動部１２への電力供給を遮断する。
【００９９】
従って、これらの異常検出時には、モータ駆動部１２を介してモータ４が誤って駆動される確率を、より低減することが可能となる。
ここで、本実施形態では、ＭＣＵ２０にて実行される処理のうち、図２の起動時診断処理におけるＳ１１０〜Ｓ２１０、Ｓ２３０、Ｓ２４０、Ｓ２７０、Ｓ２８０の処理、及び、図３の制御処理におけるＳ３３０〜Ｓ３６０の処理が、本発明の自己診断部として機能する。また、図２の起動時診断処理におけるＳ２２０、Ｓ２５０、Ｓ２６０、Ｓ２９０の処理、及び、図３の制御処理におけるＳ３７０〜Ｓ３９０の処理が、本発明の異常時動作切替部として機能する。
【０１００】
以上、本発明の一実施形態について説明したが、本発明は、上記実施形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内にて、種々の態様をとることができる。
例えば、ＭＣＵ２０は、Ｓ２２０、Ｓ２６０、Ｓ２９０、若しくは、Ｓ３９０にて、自身の動作モードを省電力モードに切り換える際には、制御対象であるモータ４とは別に駆動制御される周辺回路（例えば照明部８）の駆動を停止若しくは制限するようにしてもよい。このようにすれば、ＭＣＵ２０（延いては制御回路１０）だけでなく、その周辺回路での電力消費も抑えることができ、装置全体を良好に省電力化することができる。
【０１０１】
また、上記実施形態では、図３に示す制御処理にて、割り込みに関する自己診断を実施し、他の診断は、図２に示す起動時診断処理にて、ＭＣＵ２０の起動時に実施するものとして説明した。しかし、起動時診断処理にて実施される各部の診断についても、図３に示す制御処理にて、制御周期に影響しない範囲内で適宜実施するようにしてもよい。
【０１０２】
例えば、図３のＳ４４０の後に、ＡＤポート、ＩＯポート、及び、動作クロックの診断及び省電力モードへの移行を行う処理（図２のＳ２００〜Ｓ２８０）を実施するようにしてもよい。また、例えば、図３のメモリ操作処理にて、図２に示すメモリ診断（Ｓ１５０、Ｓ１８０）を実施するようにしてもよいし、ＰＣ診断（Ｓ１１０）、汎用レジスタ診断（Ｓ１３０）についても、図３の制御処理実行時に適宜実施するようにしてもよい。
【０１０３】
また、上記実施形態では、ＭＣＵ２０が自己診断する構成要素は、ＰＣ２２、汎用レジスタ、揮発性メモリ、不揮発性メモリ、ＡＤポート、ＩＯポート、動作クロック、及び、各種割り込みの入力系、であるものとして説明した。しかし、これらの構成要素は、一例であり、更に多くても、少なくてもよい。
【０１０４】
また、上記実施形態では、ＭＣＵ２０は、バッテリ２から電力供給を受けて動作するものとして説明したが、ＭＣＵ２０の電源は、ＡＣアダプタ等、バッテリ以外の直流電源であってもよい。
【符号の説明】
【０１０５】
２…バッテリ、４…モータ、５…回転センサ、６…操作部、８…照明部、１０…制御回路、１２…モータ駆動部、１４…電源供給部、１６…レギュレータ部、１８…電流検出部、２２…ＰＣ（プログラムカウンタ）、２４…レジスタ、２６…ＲＯＭ、２８…ＲＡＭ、３０…内部クロック生成部、３２…外部クロック生成部。
【図１】
2017004259.tif 000003
【図２】
2017004259.tif 000004
【図３】
2017004259.tif 000005