(第1実施形態)
以下に本開示の第1実施形態を図面とともに説明する。
図1に示すように、本実施形態のインバータ1は、図示しないバッテリの直流出力電圧をU相、V相およびW相の三相交流電圧Vu,Vv,Vwに変換し、この三相交流電圧Vu,Vv,Vwによってモータ2を駆動する。
インバータ1は、モータ駆動回路3と、温度センサ4と、マイクロコンピュータ5(以下、マイコン5)とを備える。
モータ駆動回路3は、絶縁ゲート型バイポーラトランジスタ(以下、IGBT)からなる6個のスイッチング素子を備えた周知の三相ブリッジ回路であり、U相、V相およびW相の三相交流電圧をモータ2へ出力する。IGBTは、Insulated Gate Bipolar Transistorの略である。
温度センサ4は、モータ駆動回路3における二箇所の温度を検出し、検出結果を示す通信フレームをマイコン5へ出力する。以下、温度センサ4が温度を検出する上記の二箇所のうちの一方を第1検出箇所といい、他方を第2検出箇所という。
通信フレームは、図2に示すように、ハイヘッダ領域HD_Hと、ローヘッダ領域HD_Lと、パルス幅変調領域PWMとを備える。
温度センサ4は、通信フレームとして、最初にハイヘッダ領域HD_Hを出力し、次にローヘッダ領域HD_Lを出力し、最後にパルス幅変調領域PWMを出力する。
ハイヘッダ領域HD_Hは、信号レベルが常時ハイレベルとなっている。ローヘッダ領域HD_Lは、信号レベルが常時ローレベルとなっている。
パルス幅変調領域PWMは、第1検出箇所の温度をパルス幅によって示す複数の温度検出領域P1と、第2検出箇所の温度をパルス幅によって示す複数の温度検出領域P2とを備える。温度センサ4は、パルス幅変調領域PWMとして、複数の温度検出領域P1と複数の温度検出領域P2とを交互に出力する。本実施形態では、パルス幅変調領域PWMは、28個の温度検出領域P1と、28個の温度検出領域P2とを備える。
温度センサ4は、温度検出領域P1,P2として、最初にハイレベルの信号を出力し、次にローレベルの信号を出力し、最後にハイレベルを信号出力する。温度センサ4は、第1検出箇所で検出した温度が高い程、温度検出領域P1においてローレベルの信号を出力している時間T1を長くする。同様に、温度センサ4は、第2検出箇所で検出した温度が高い程、温度検出領域P2においてローレベルの信号を出力している時間T2を長くする。
マイコン5は、ローヘッダ領域HD_Lを出力している時間Thと上記の時間T1との比を算出し、この比に基づいて、第1検出箇所の温度を算出する。同様に、マイコン5は、上記の時間Thと上記の時間T2との比を算出し、この比に基づいて、第2検出箇所の温度を算出する。
マイコン5は、図1に示すように、U相、V相およびW相のそれぞれに対応したパルス幅変調信号Su,Sv,Swをモータ駆動回路3へ出力する。これにより、マイコン5は、パルス幅変調信号Su,Sv,Swのデューティ比に応じて三相ブリッジ回路の各スイッチング素子をスイッチング動作させてモータ駆動回路3を制御する。
マイコン5は、CPU11、ROM12、RAM13および汎用タイマモジュール14を備える。マイコン5の各種機能は、CPU11が非遷移的実体的記録媒体に格納されたプログラムを実行することにより実現される。この例では、ROM12が、プログラムを格納した非遷移的実体的記録媒体に該当する。また、このプログラムの実行により、プログラムに対応する方法が実行される。なお、CPU11が実行する機能の一部または全部を、一つあるいは複数のIC等によりハードウェア的に構成してもよい。また、インバータ1を構成するマイクロコンピュータの数は1つでも複数でもよい。
汎用タイマモジュール14は、時刻生成モジュール21、入力モジュール22、データ転送モジュール23および計算用サブコアモジュール24,25を備える。
時刻生成モジュール21は、内部クロックに従って予め設定されたクロック周期が経過する毎にインクリメントする基準タイマBaseTimerを備え、基準タイマBaseTimerの値を出力する。
入力モジュール22は、温度センサ4から通信フレームが入力され、時刻生成モジュール21から基準タイマBaseTimerの値が入力される。入力モジュール22は、入力される通信フレームの立ち上りエッジおよび立ち下りエッジが発生した時刻を検出する。
入力モジュール22は、前回エッジ時刻を示す前回エッジ時刻情報を記憶する内部汎用レジスタReg0と、今回エッジ時刻を示す今回エッジ時刻情報を記憶する内部汎用レジスタReg1と、NEWレジスタNewSignalと、オーバーフローレジスタRegOverとを備える。
今回エッジ時刻は、入力モジュール22が立ち上りエッジまたは立ち下りエッジを検出した最新の時刻を示す。前回エッジ時刻は、入力モジュール22が立ち上りエッジまたは立ち下りエッジを検出した時刻のうち、今回エッジ時刻に対して直近の時刻を示す。
NEWレジスタNewSignalは、入力モジュール22が立ち上りエッジまたは立ち下りエッジを検出した場合に「1」に設定される。また、NEWレジスタNewSignalは、計算用サブコアモジュール24,25がNEWレジスタNewSignalを確認した場合に「0」に設定される。
オーバーフローレジスタRegOverは、内部汎用レジスタReg0,Reg1が上書きされる前に、内部汎用レジスタReg0,Reg1が計算用サブコアモジュール24,25により読み出されなかった場合に「1」に設定される。また、オーバーフローレジスタRegOverは、内部汎用レジスタReg0,Reg1が上書きされる前に内部汎用レジスタReg0,Reg1により読み出された場合に「0」に設定される。
データ転送モジュール23は、入力モジュール22と計算用サブコアモジュール24との間でデータを伝送する第1伝送経路と、入力モジュール22と計算用サブコアモジュール25との間でデータを伝送する第2伝送経路を備える。そしてデータ転送モジュール23は、第1伝送経路でデータを伝送する第1伝送状態と、第2伝送経路でデータを伝送する第2伝送状態との何れかの状態に切り替わる。
計算用サブコアモジュール24,25は、データ転送モジュール23を介して入力モジュール22から入力されたデータを用いて、上記の時間Th、時間T1および時間T2を算出する。
計算用サブコアモジュール24,25は、メモリ41と、レジスタR1,R2,R3,R4とを備える。
メモリ41は、状態番号state、内部状態proc_state、現在エッジ時刻time_stamp、前回エッジ時刻edge_startおよび最終計算時間last_calcを記憶する。
また、メモリ41には、状態遷移カウンタcycle_cntおよび処理回数カウンタpn_cnt等が設けられている。状態遷移カウンタcycle_cntは、計算用サブコアモジュール24,25が上記の時間T1および時間T2を算出した回数を示す。処理回数カウンタpn_cntは、計算用サブコアモジュール24,25が後述のエッジ検出処理を行った回数を示す。
レジスタR1には、計算用サブコアモジュール24,25が故障中であるか否かを示す情報が格納される。レジスタR2には、上記の時間Thを示す情報が格納される。レジスタR3には、上記の時間T1を示す情報が格納される。レジスタR4には、上記の時間T2を示す情報が格納される。
計算用サブコアモジュール24,25は、マイコン5に電源が投入されてマイコン5のCPU11が動作を開始した直後には、図3に示すように、初期化が行われていない非初期化状態C0になっている。そして、非初期化状態C0になっている計算用サブコアモジュール24,25は、CPU11からの起動命令に従って起動すると、まず、自身の初期化を行う。初期化が完了すると、計算用サブコアモジュール24,25は、図2および図3に示すように、通信フレームのハイヘッダ領域HD_Hを検出するまで待機するハイヘッダ待機状態C1へ移行する。なお、初期化が完了すると、レジスタR1には、故障中であることを示す情報が格納されるとともに、レジスタR2,R3,R4には、0を示す情報が格納される。
次に、ハイヘッダ待機状態C1になっている計算用サブコアモジュール24,25は、ハイヘッダ領域HD_Hを検出すると、通信フレームのローヘッダ領域HD_Lを検出するまで待機するローヘッダ待機状態C2へ移行する。
そして、ローヘッダ待機状態C2になっている計算用サブコアモジュール24,25は、通信フレームの立ち下りエッジを検出すると、通信フレームのローヘッダ領域HD_Lの継続時間を検出するローヘッダ検出状態C3へ移行する。一方、ローヘッダ待機状態C2になっている計算用サブコアモジュール24,25は、通信フレームの立ち上りエッジを検出すると、ハイヘッダ待機状態C1へ移行する。
ローヘッダ検出状態C3になっている計算用サブコアモジュール24,25は、通信フレームの立ち下りエッジを検出した時点を起点としてローレベルが継続している時間を計測する。そして、計算用サブコアモジュール24,25は、通信フレームの立ち上りエッジを検出すると、ローヘッダ領域HD_Lの継続時間の計測結果を示す情報をレジスタR2に格納し、状態遷移カウンタcycle_cntをリセット(すなわち、0に設定)して、第1PWM待機状態C4へ移行する。但し、ローヘッダ検出状態C3になっている計算用サブコアモジュール24,25は、通信フレームの立ち上りエッジを検出した時点でのローヘッダ領域HD_Lの継続時間が予め設定された最少継続時間未満である場合に、故障中であることを示す情報をレジスタR1に格納して、ハイヘッダ待機状態C1へ移行する。また、ローヘッダ検出状態C3になっている計算用サブコアモジュール24,25は、ローヘッダ領域HD_Lの継続時間が予め設定された最大継続時間を超えている場合に、故障中であることを示す情報をレジスタR1に格納して、ハイヘッダ待機状態C1へ移行する。
第1PWM待機状態C4になっている計算用サブコアモジュール24,25は、通信フレームの立ち下りエッジを検出するまで待機し、この立ち下りエッジを検出すると、第1PWM検出状態C5へ移行する。
第1PWM検出状態C5になっている計算用サブコアモジュール24,25は、通信フレームの立ち下りエッジを検出した時点を起点としてローレベルが継続している時間を計測する。そして、計算用サブコアモジュール24,25は、通信フレームの立ち上りエッジを検出すると、温度検出領域P1の継続時間の計測結果を示す情報をレジスタR3に格納して、第2PWM待機状態C6へ移行する。
第2PWM待機状態C6になっている計算用サブコアモジュール24,25は、通信フレームの立ち下りエッジを検出するまで待機し、この立ち下りエッジを検出すると、第2PWM検出状態C7へ移行する。
第2PWM検出状態C7になっている計算用サブコアモジュール24,25は、通信フレームの立ち下りエッジを検出した時点を起点としてローレベルが継続している時間を計測する。そして、計算用サブコアモジュール24,25は、通信フレームの立ち上りエッジを検出すると、故障中でないことを示す情報をレジスタR1に格納し、温度検出領域P2の継続時間の計測結果を示す情報をレジスタR4に格納し、状態遷移カウンタcycle_cntをインクリメント(すなわち、1加算)する。さらに、計算用サブコアモジュール24,25は、状態遷移カウンタcycle_cntの値が28未満である場合に、第1PWM待機状態C4へ移行する。一方、計算用サブコアモジュール24,25は、状態遷移カウンタcycle_cntの値が28以上である場合に、ハイヘッダ待機状態C1へ移行する。
次に、計算用サブコアモジュール24,25が実行する処理の手順を説明する。
計算用サブコアモジュール24,25は、CPU11からの起動命令に従って起動すると、図4に示すように、まずS10にて、自身の初期化を行う。そして、S10の初期化が完了すると、S20にて、エッジ検出処理を実行する。
エッジ検出処理では、まず、通信フレームの立ち上りエッジまたは立ち下りエッジを検出したか否かを判断する。そしてエッジ検出処理では、通信フレームの立ち上りエッジまたは立ち下りエッジを検出した場合に、上述のように、現時点における計算用サブコアモジュール24,25の状態C1〜C7に応じて、レジスタR1〜R4に情報を格納したり、状態を移行させたりする。
そして、S20のエッジ検出処理が終了すると、S30にて、処理回数カウンタpn_cntをインクリメントする。すなわち、処理回数カウンタpn_cntは、通信フレームの立ち上りエッジまたは立ち下りエッジを検出したか否かに関わらず、エッジ検出処理が1回実行される毎に、インクリメントされる。
そして、S30の処理が終了すると、S20に移行する。すなわち、計算用サブコアモジュール24,25は、その動作中において、S20とS30の処理を繰り返し実行する。
次に、マイコン5のCPU11が実行する異常検出処理の手順を説明する。異常検出処理は、マイコン5の動作中において繰り返し実行される処理である。
この異常検出処理が実行されると、CPU11は、図5に示すように、まずS110にて、計算用サブコアモジュール24へ起動命令を出力する。これにより、計算用サブコアモジュール24が起動する。
次にS120にて、計算用サブコアモジュール24の処理回数カウンタpn_cntを読み出し、読み出した値を、RAM13に設けられた今回カウンタ値Counter1に格納する。
そしてS130にて、RAM13に設けられた前回カウンタ値OldCounter1に格納されている値が今回カウンタ値Counter1に格納されている値に等しいか否かを判断する。ここで、前回カウンタ値OldCounter1に格納されている値が今回カウンタ値Counter1に格納されている値と異なる場合には、S140にて、前回カウンタ値OldCounter1に、今回カウンタ値Counter1に格納されている値を格納し、S120に移行する。
一方、前回カウンタ値OldCounter1に格納されている値が今回カウンタ値Counter1に格納されている値に等しい場合には、S150にて、データ転送モジュール23へ経路切替命令を出力する。これにより、データ転送モジュール23は、入力モジュール22から入力されたデータを転送する経路を、計算用サブコアモジュール24から計算用サブコアモジュール25へ切り替える。すなわち、データ転送モジュール23は、入力モジュール22から入力されたデータを計算用サブコアモジュール24へ転送していた状態から、入力モジュール22から入力されたデータを計算用サブコアモジュール25へ転送する状態へ移行する。
またS160にて、計算用サブコアモジュール24のメモリ41とレジスタR1〜R4に格納されているデータをRAM13に退避させる。さらにS170にて、入力モジュール22からNEWレジスタNewSignalとオーバーフローレジスタRegOverを読み出す。そしてS180にて、状態判断処理を実行する。
ここで、S180の状態判断処理の手順を説明する。
状態判断処理が実行されると、CPU11は、図6に示すように、まずS310にて、入力モジュール22が通信フレームの立ち上りエッジまたは立ち下りエッジを検出したか否かを判断する。具体的には、NEWレジスタNewSignalが「1」に設定されている場合に、立ち上りエッジまたは立ち下りエッジを検出したと判断する。一方、NEWレジスタNewSignalが「0」に設定されている場合に、立ち上りエッジと立ち下りエッジを検出していないと判断する。以下、立ち上りエッジと立ち下りエッジをまとめて単にエッジという。
ここで、エッジを検出していないと判断した場合には、S320にて、計算用サブコアモジュール25のメモリ41とレジスタR1〜R4を書き換え、状態判断処理を終了する。具体的には、計算用サブコアモジュール25のメモリ41とレジスタR1〜R4に、RAM13に退避させている計算用サブコアモジュール24のメモリ41とレジスタR1〜R4のデータを上書きする。これにより、計算用サブコアモジュール25のメモリ41に記憶されている状態番号state、内部状態proc_state、現在エッジ時刻time_stamp、前回エッジ時刻edge_startおよび最終計算時間last_calcは、計算用サブコアモジュール24に記憶されていた内容に変更される。同様に、計算用サブコアモジュール25のレジスタR1〜R4はそれぞれ、計算用サブコアモジュール24のレジスタR1〜R4に記憶されていた内容に変更される。
一方、エッジを検出したと判断した場合には、S330にて、計算用サブコアモジュール24が故障してからエッジを1回検出したか否かを判断する。具体的には、NEWレジスタNewSignalが「1」に設定され、且つ、オーバーフローレジスタRegOverが「0」に設定されている場合に、エッジを1回検出したと判断する。
ここで、エッジを1回検出したと判断した場合には、S340にて、S320と同様にして、計算用サブコアモジュール25のメモリ41とレジスタR1〜R4を書き換える。そしてS350にて、計算用サブコアモジュール25のメモリ41の現在エッジ時刻time_stampを書き換える。具体的には、まず、入力モジュール22から内部汎用レジスタReg1を読み出す。そして、計算用サブコアモジュール25のメモリ41の現在エッジ時刻time_stampに、読み出した内部汎用レジスタReg1のデータを上書きする。
さらにS360にて、計算用サブコアモジュール25のメモリ41の状態番号stateを1加算し、状態判断処理を終了する。なお、1加算した後の状態番号stateが7を超える場合には、状態遷移カウンタcycle_cntの値に応じて、状態番号stateは、「1」または「4」に設定される。
一方、エッジを1回検出していないと判断した場合には、S370にて、計算用サブコアモジュール24が故障してからエッジを2回検出したか否かを判断する。具体的には、NEWレジスタNewSignalが「1」に設定され、且つ、オーバーフローレジスタRegOverが「1」に設定され、且つ、タイムアウトが発生していない場合に、エッジを2回検出したと判断する。なお、計算用サブコアモジュール24のメモリ41の現在エッジ時刻time_stampが示す最終エッジ時刻から予め設定されたタイムアウト判断時間が経過していない場合に、タイムアウトが発生していないと判断する。一方、最終エッジ時刻からタイムアウト判断時間が経過した場合に、タイムアウトが発生したと判断する。タイムアウト判断時間は、通信フレームにおいて温度検出領域P1または温度検出領域P2になっている時間が設定される。
ここで、エッジを2回検出したと判断した場合には、S380にて、S320と同様にして、計算用サブコアモジュール25のメモリ41とレジスタR1〜R4を書き換える。そしてS390にて、S350と同様にして、計算用サブコアモジュール25のメモリ41の現在エッジ時刻time_stampを書き換える。またS400にて、計算用サブコアモジュール25のメモリ41の前回エッジ時刻edge_startを書き換える。具体的には、まず、入力モジュール22から内部汎用レジスタReg0を読み出す。そして、計算用サブコアモジュール25のメモリ41の前回エッジ時刻edge_startに、読み出した内部汎用レジスタReg0のデータを上書きする。
さらにS410にて、計算用サブコアモジュール25のメモリ41の状態番号stateを2加算し、状態判断処理を終了する。なお、2加算した後の状態番号stateが7を超える場合には、状態遷移カウンタcycle_cntの値に応じて、状態番号stateが設定される。
一方、エッジを2回検出していないと判断した場合には、S420にて、計算用サブコアモジュール25のメモリ41の状態番号stateを「1」に設定し、状態判断処理を終了する。
そして状態判断処理が終了すると、図5に示すように、S190にて、計算用サブコアモジュール25へ起動命令を出力する。これにより、計算用サブコアモジュール25が起動する。
次にS200にて、計算用サブコアモジュール25の処理回数カウンタpn_cntを読み出し、読み出した値を、RAM13に設けられた今回カウンタ値Counter2に格納する。
そしてS210にて、RAM13に設けられた前回カウンタ値OldCounter2に格納されている値が今回カウンタ値Counter2に格納されている値に等しいか否かを判断する。ここで、前回カウンタ値OldCounter2に格納されている値が今回カウンタ値Counter2に格納されている値と異なる場合には、S220にて、前回カウンタ値OldCounter2に、今回カウンタ値Counter2に格納されている値を格納し、S200に移行する。
一方、前回カウンタ値OldCounter2に格納されている値が今回カウンタ値Counter2に格納されている値に等しい場合には、S230にて、停止処理を実行する。具体的には、計算用サブコアモジュール24,25へ停止命令を出力する。これにより、計算用サブコアモジュール24,25が停止する。そして、S230の処理が終了すると、異常検出処理を終了する。
次に、計算用サブコアモジュール24が故障してから通信フレームのエッジが1回発生するまでの間にマイコン5のCPU11が計算用サブコアモジュール24の異常を検出した場合における入力モジュール22と計算用サブコアモジュール24,25の動作を説明する。
図7に示すように、時刻t1で通信フレームの立ち上りエッジが発生すると、入力モジュール22は、矢印L1に示すように、内部汎用レジスタReg1に格納されている値を内部汎用レジスタReg0に格納する。また入力モジュール22は、時刻t1で、矢印L2に示すように、時刻生成モジュール21の基準タイマBaseTimerの値を内部汎用レジスタReg1に格納する。また入力モジュール22は、時刻t1で、NEWレジスタNewSignalを「1」に設定する。
そして時刻t2で、計算用サブコアモジュール24は、入力モジュール22からNEWレジスタNewSignalを読み出す。これにより、入力モジュール22のNEWレジスタNewSignalが「0」に設定される。また計算用サブコアモジュール24は、矢印L3に示すように、入力モジュール22から内部汎用レジスタReg1を読み出し、読み出した値を現在エッジ時刻time_stampに格納する。
また、時刻t3で通信フレームの立ち下りエッジが発生すると、入力モジュール22は、矢印L4に示すように、内部汎用レジスタReg1に格納されている値を内部汎用レジスタReg0に格納する。また入力モジュール22は、時刻t3で、矢印L5に示すように、時刻生成モジュール21の基準タイマBaseTimerの値を内部汎用レジスタReg1に格納する。また入力モジュール22は、時刻t3で、NEWレジスタNewSignalを「1」に設定する。
そして時刻t4で、計算用サブコアモジュール24は、入力モジュール22からNEWレジスタNewSignalを読み出す。これにより、入力モジュール22のNEWレジスタNewSignalが「0」に設定される。また計算用サブコアモジュール24は、矢印L6に示すように、入力モジュール22から内部汎用レジスタReg1を読み出し、読み出した値を現在エッジ時刻time_stampに格納する。
その後、時刻t5で、計算用サブコアモジュール24が故障したとする。そして、通信フレームにおける次の立ち上りエッジが発生する前の時刻t6で、マイコン5のCPU11が計算用サブコアモジュール24の異常を検出したとする。これにより、CPU11は、計算用サブコアモジュール24の現在エッジ時刻time_stampのデータを、計算用サブコアモジュール25の現在エッジ時刻time_stampに上書きし、上書き後に計算用サブコアモジュール25を起動させる。
また、時刻t7で通信フレームの立ち上りエッジが発生すると、入力モジュール22は、矢印L7に示すように、内部汎用レジスタReg1に格納されている値を内部汎用レジスタReg0に格納する。また入力モジュール22は、時刻t7で、矢印L8に示すように、時刻生成モジュール21の基準タイマBaseTimerの値を内部汎用レジスタReg1に格納する。また入力モジュール22は、時刻t7で、NEWレジスタNewSignalを「1」に設定する。
そして時刻t8で、計算用サブコアモジュール25は、入力モジュール22からNEWレジスタNewSignalを読み出す。これにより、入力モジュール22のNEWレジスタNewSignalが「0」に設定される。また計算用サブコアモジュール25は、矢印L9に示すように、入力モジュール22から内部汎用レジスタReg1を読み出し、読み出した値を現在エッジ時刻time_stampに格納する。
次に、計算用サブコアモジュール24が故障してから通信フレームのエッジが2回発生するまでの間にマイコン5のCPU11が計算用サブコアモジュール24の異常を検出した場合における入力モジュール22と計算用サブコアモジュール24,25の動作を説明する。
図8に示すように、時刻t5で計算用サブコアモジュール24が故障するまでは図7と同じであるため、時刻t5までの説明を省略する。
時刻t5で計算用サブコアモジュール24が故障した後の時刻t11で、通信フレームにおける次の立ち上りエッジが発生すると、入力モジュール22は、矢印L11に示すように、内部汎用レジスタReg1に格納されている値を内部汎用レジスタReg0に格納する。また入力モジュール22は、時刻t11で、矢印L12に示すように、時刻生成モジュール21の基準タイマBaseTimerの値を内部汎用レジスタReg1に格納する。また入力モジュール22は、時刻t11で、NEWレジスタNewSignalを「1」に設定する。
この時点で既に計算用サブコアモジュール24が故障しているため、計算用サブコアモジュール24は、入力モジュール22からNEWレジスタNewSignalを読み出すことができない。これにより、入力モジュール22のNEWレジスタNewSignalは、「1」に設定されている状態を継続する。また、計算用サブコアモジュール24は、入力モジュール22から内部汎用レジスタReg1を読み出すことができない。これにより、計算用サブコアモジュール24の現在エッジ時刻time_stampは、その値が更新されない状態を継続する。
そして、通信フレームにおける次の立ち下りエッジが発生する前の時刻t12で、マイコン5のCPU11が計算用サブコアモジュール24の異常を検出したとする。これにより、CPU11は、矢印L13に示すように、入力モジュール22から内部汎用レジスタReg1を読み出し、読み出した値を計算用サブコアモジュール25の現在エッジ時刻time_stampに格納する。これにより、入力モジュール22のNEWレジスタNewSignalは「0」に設定される。そしてCPU11は、計算用サブコアモジュール25を起動させる。
また、時刻t13で通信フレームの立ち下りエッジが発生すると、入力モジュール22は、矢印L14に示すように、内部汎用レジスタReg1に格納されている値を内部汎用レジスタReg0に格納する。また入力モジュール22は、時刻t13で、矢印L15に示すように、時刻生成モジュール21の基準タイマBaseTimerの値を内部汎用レジスタReg1に格納する。また入力モジュール22は、時刻t13で、NEWレジスタNewSignalを「1」に設定する。
そして時刻t14で、計算用サブコアモジュール25は、入力モジュール22からNEWレジスタNewSignalを読み出す。これにより、入力モジュール22のNEWレジスタNewSignalが「0」に設定される。また計算用サブコアモジュール25は、矢印L16に示すように、入力モジュール22から内部汎用レジスタReg1を読み出し、読み出した値を現在エッジ時刻time_stampに格納する。
次に、計算用サブコアモジュール24が故障してから通信フレームのエッジが3回発生するまでの間にマイコン5のCPU11が計算用サブコアモジュール24の異常を検出した場合における入力モジュール22と計算用サブコアモジュール24,25の動作を説明する。
図9に示すように、時刻t11で立ち上りエッジが発生するまでは図8と同じであるため、時刻t11までの説明を省略する。
時刻t11で立ち上りエッジが発生した後の時刻t21で、通信フレームにおける次の立ち下りエッジが発生すると、入力モジュール22は、矢印L21に示すように、内部汎用レジスタReg1に格納されている値を内部汎用レジスタReg0に格納する。また入力モジュール22は、時刻t21で、矢印L22に示すように、時刻生成モジュール21の基準タイマBaseTimerの値を内部汎用レジスタReg1に格納する。
この時点で既に計算用サブコアモジュール24が故障しているため、計算用サブコアモジュール24は、入力モジュール22からNEWレジスタNewSignalを読み出すことができない。これにより、入力モジュール22のNEWレジスタNewSignalは、「1」に設定されている状態を継続する。
また、計算用サブコアモジュール24は、入力モジュール22から内部汎用レジスタReg1を読み出すことができない。これにより、計算用サブコアモジュール24の現在エッジ時刻time_stampは、その値が更新されない状態を継続する。さらに、入力モジュール22は、内部汎用レジスタReg0,Reg1が読み出される前に、時刻t21で内部汎用レジスタReg0,Reg1を更新するため、オーバーフローレジスタRegOverを「1」に設定する。
そして、通信フレームにおける次の立ち上りエッジが発生する前の時刻t22で、マイコン5のCPU11が計算用サブコアモジュール24の異常を検出したとする。これにより、CPU11は、矢印L23に示すように、入力モジュール22から内部汎用レジスタReg1を読み出し、読み出した値を計算用サブコアモジュール25の現在エッジ時刻time_stampに格納する。なお、図9に示していないが、CPU11は、入力モジュール22から内部汎用レジスタReg0を読み出し、読み出した値を計算用サブコアモジュール25の前回エッジ時刻edge_startに格納する。これにより、入力モジュール22のNEWレジスタNewSignalとオーバーフローレジスタRegOverは「0」に設定される。そしてCPU11は、計算用サブコアモジュール25を起動させる。
また、時刻t23で通信フレームの立ち上りエッジが発生すると、入力モジュール22は、矢印L24に示すように、内部汎用レジスタReg1に格納されている値を内部汎用レジスタReg0に格納する。また入力モジュール22は、時刻t23で、矢印L25に示すように、時刻生成モジュール21の基準タイマBaseTimerの値を内部汎用レジスタReg1に格納する。また入力モジュール22は、時刻t23で、NEWレジスタNewSignalを「1」に設定する。
そして時刻t24で、計算用サブコアモジュール25は、入力モジュール22からNEWレジスタNewSignalを読み出す。これにより、入力モジュール22のNEWレジスタNewSignalが「0」に設定される。また計算用サブコアモジュール25は、矢印L26に示すように、入力モジュール22から内部汎用レジスタReg1を読み出し、読み出した値を現在エッジ時刻time_stampに格納する。
次に、計算用サブコアモジュール24が故障してから通信フレームのエッジが4回発生するまでの間にマイコン5のCPU11が計算用サブコアモジュール24の異常を検出した場合における入力モジュール22と計算用サブコアモジュール24,25の動作を説明する。
図10に示すように、時刻t21で立ち下りエッジが発生するまでは図9と同じであるため、時刻t21までの説明を省略する。
時刻t21で立ち下りエッジが発生した後の時刻t31で、通信フレームにおける次の立ち上りエッジが発生すると、入力モジュール22は、矢印L31に示すように、内部汎用レジスタReg1に格納されている値を内部汎用レジスタReg0に格納する。また入力モジュール22は、時刻t31で、矢印L32に示すように、時刻生成モジュール21の基準タイマBaseTimerの値を内部汎用レジスタReg1に格納する。
この時点で既に計算用サブコアモジュール24が故障しているため、計算用サブコアモジュール24は、入力モジュール22からNEWレジスタNewSignalを読み出すことができない。これにより、入力モジュール22のNEWレジスタNewSignalは、「1」に設定されている状態を継続する。
また、計算用サブコアモジュール24は、入力モジュール22から内部汎用レジスタReg1を読み出すことができない。これにより、計算用サブコアモジュール24の現在エッジ時刻time_stampは、その値が更新されない状態を継続し、オーバーフローレジスタRegOverは、「1」に設定されている状態を継続する。
そして、通信フレームにおける次の立ち下りエッジが発生する前の時刻t32で、マイコン5のCPU11が計算用サブコアモジュール24の異常を検出したとする。これにより、CPU11は、入力モジュール22から内部汎用レジスタReg1を読み出すことなく、計算用サブコアモジュール25を起動させる。
このように構成されたインバータ1の入力モジュール22は、入力された通信フレームにおいてハイレベルとローレベルとの間で信号レベルが変化した時刻であるエッジ時刻を検出し、直近の2つのエッジ時刻を示す今回エッジ時刻情報および前回エッジ時刻情報を記憶するように構成される。通信フレームは、ハイレベルとローレベルとの間で信号レベルが繰り返し変化して、先頭部分であるローヘッダ領域HD_Lと、ローヘッダ領域HD_Lよりも後の部分である28個の温度検出領域P1,P2とを有する。また通信フレームは、ローヘッダ領域HD_Lがローレベルの状態を継続した時間Thと、温度検出領域P1,P2がローレベルの状態を継続した時間T1,T2とによりモータ駆動回路3の温度の検出結果を示す。
計算用サブコアモジュール24は、入力モジュール22に記憶されている今回エッジ時刻情報および前回エッジ時刻情報に基づいて、時間Thおよび時間T1,T2を算出するように構成される。計算用サブコアモジュール25は、入力モジュール22に記憶されている今回エッジ時刻情報および前回エッジ時刻情報に基づいて、時間Thおよび時間T1,T2を算出するように構成される。
マイコン5のCPU11は、前回カウンタ値OldCounter1に格納されている値が今回カウンタ値Counter1に格納されている値に等しいか否かに基づいて、計算用サブコアモジュール24が故障したか否かを判断するように構成される。
CPU11は、計算用サブコアモジュール24が故障したと判断した場合に、入力モジュール22に記憶されているNEWレジスタNewSignalとオーバーフローレジスタRegOverに基づいて、計算用サブコアモジュール24が故障した時点から入力モジュール22がエッジ時刻を検出した回数(以下、エッジ検出回数)を検出するように構成される。
CPU11は、検出したエッジ検出回数に応じて予め設定されたデータ転送条件に基づいて、計算用サブコアモジュール25が時間Thおよび時間T1,T2を算出するために必要なデータ(以下、算出用データ)を、入力モジュール22および計算用サブコアモジュール24の少なくとも一方から抽出して計算用サブコアモジュール25へ転送するように構成される。
具体的には、CPU11は、検出したエッジ検出回数が0である場合には、算出用データとして、計算用サブコアモジュール24のメモリ41およびレジスタR1〜R4に記憶されているデータを計算用サブコアモジュール25へ転送する。
またCPU11は、検出したエッジ検出回数が1である場合には、算出用データとして、計算用サブコアモジュール24のメモリ41およびレジスタR1〜R4に記憶されているデータと、入力モジュール22の内部汎用レジスタReg1に記憶されているデータを計算用サブコアモジュール25へ転送する。
またCPU11は、検出したエッジ検出回数が2である場合には、算出用データとして、計算用サブコアモジュール24のメモリ41およびレジスタR1〜R4に記憶されているデータと、入力モジュール22の内部汎用レジスタReg1,Reg0に記憶されているデータを計算用サブコアモジュール25へ転送する。
すなわち、CPU11は、検出されたエッジ検出回数が入力モジュール22に記憶されているエッジ時刻情報の数(すなわち、2)を超えていない場合に、入力モジュール22に記憶されている2つのエッジ時刻情報の中から、検出されたエッジ検出回数分のエッジ時刻情報を、時刻が遅いものから優先的に抽出し、抽出したエッジ時刻情報を、算出用データの少なくとも一部として計算用サブコアモジュール25へ転送する。
そしてCPU11は、算出用データを計算用サブコアモジュール25へ転送した後に、計算用サブコアモジュール25に時間Thおよび時間T1,T2の算出を開始させるように構成される。
このようにインバータ1のマイコン5は、計算用サブコアモジュール24が故障した場合に、この故障時点からのエッジ検出回数に応じたデータ転送条件に基づいて、上記の算出用データを、入力モジュール22および計算用サブコアモジュール24の少なくとも一方から抽出して計算用サブコアモジュール25へ転送する。
これにより、計算用サブコアモジュール25は、計算用サブコアモジュール24が故障した時点から入力モジュール22が1回もエッジ時刻を検出していない場合には、計算用サブコアモジュール24が故障する直前までに記憶していたデータを用いて、計算用サブコアモジュール24が故障する直前における計算用サブコアモジュール24の状態を再現することができる。このため、計算用サブコアモジュール25は、時間Thおよび時間T1,T2の算出を即座に継続することができ、次のローヘッダ領域HD_Lが入力するまで待機する必要がなくなる。
また計算用サブコアモジュール25は、計算用サブコアモジュール24が故障した時点から入力モジュール22がエッジ時刻を検出している場合であっても、入力モジュール22が記憶しているエッジ時刻の数の範囲内(すなわち、0〜2)で、計算用サブコアモジュール24が現時点で故障していないと仮定した場合の計算用サブコアモジュール24の状態を再現することができる。計算用サブコアモジュール24は、入力モジュール22に記憶されている今回エッジ時刻情報および前回エッジ時刻情報に基づいて時間Thおよび時間T1,T2を算出するからである。このため、計算用サブコアモジュール25は、時間Thおよび時間T1,T2の算出を即座に継続することができ、次のローヘッダ領域HD_Lが入力するまで待機する必要がなくなる。
以上より、インバータ1のマイコン5は、計算用サブコアモジュール24から計算用サブコアモジュール25に切り替えた場合に次のローヘッダ領域HD_Lが入力するまで待機しなければならない事態の発生を抑制することができる。
これにより、マイコン5は、計算用サブコアモジュール24が故障してから次のローヘッダ領域HD_Lが入力するまでの間においてモータ駆動回路3の温度を検出することができないという事態の発生を抑制することができる。このため、モータ駆動回路3の温度を検出することができない状態においてモータ駆動回路3が高温になったにも関わらずインバータ1がモータ制御を継続していまい、モータ駆動回路3が破損してしまったりモータ駆動回路3が誤動作してしまったりするという事態の発生を抑制することができる。
また、計算用サブコアモジュール24,25は、通信フレームにおける信号レベルの変化に基づいて、ローヘッダ検出状態C3であるか否かと、第1PWM検出状態C5であるか否かと、第2PWM検出状態C7であるか否かを識別することができる状態番号stateを設定する。
そしてCPU11は、計算用サブコアモジュール24が故障したと判断した場合に、検出したエッジ検出回数と、計算用サブコアモジュール24の状態番号stateとに基づいて、計算用サブコアモジュール25の状態番号stateを設定するように構成される。これにより、計算用サブコアモジュール25は、計算用サブコアモジュール24が故障した場合であっても、計算用サブコアモジュール24が現時点で故障していないと仮定した場合における計算用サブコアモジュール24の状態番号stateを計算用サブコアモジュール25内において再現することができる。
以上説明した実施形態において、マイコン5は時間算出装置に相当し、入力モジュール22はエッジ時刻検出部に相当し、計算用サブコアモジュール24は第1時間算出部に相当し、計算用サブコアモジュール25は第2時間算出部に相当する。
また、S130は故障判断部としての処理に相当し、S310,S330,S370は回数検出部としての処理に相当し、S320,S340,S350,S380,S390,S400は転送部としての処理に相当し、S190は算出開始部としての処理に相当する。
また、ハイレベルは第1レベルに相当し、ローレベルは第2レベルに相当し、ローヘッダ領域HD_Lはヘッダ領域に相当し、温度検出領域P1,P2はパルス幅変調領域に相当し、時間Thは第1継続時間に相当し、時間T1,T2は第2継続時間に相当し、通信フレームはパルス幅変調信号に相当する。
また、今回エッジ時刻情報および前回エッジ時刻情報はエッジ時刻情報に相当し、S130の判断条件は故障判断条件に相当し、算出用データは算出用情報に相当する。
また、S360,S410,S420は状態設定部としての処理に相当し、ローヘッダ検出状態C3は第1算出状態に相当し、第1PWM検出状態C5および第2PWM検出状態C7は第2算出状態に相当し、状態番号stateは状態情報に相当する。
(第2実施形態)
以下に本開示の第2実施形態を図面とともに説明する。なお第2実施形態では、第1実施形態と異なる部分を説明する。共通する構成については同一の符号を付す。
第2実施形態のインバータ1は、入力モジュール22と計算用サブコアモジュール24,25と状態判断処理が変更された点が第1実施形態と異なる。
第2実施形態の入力モジュール22は、内部汎用レジスタReg0,Reg1に記憶させるデータが第1実施形態と異なる。具体的には、内部汎用レジスタReg0は、今回エッジ時刻情報を記憶する。また内部汎用レジスタReg1は、エッジが発生した回数(以下、エッジ回数)を記憶する。
第2実施形態の計算用サブコアモジュール24,25は、メモリ41に記憶されるデータが追加される点が第1実施形態と異なる。具体的には、メモリ41は、更に、前回エッジ回数GPR1_OLD、ヘッダ時間time_h、Ach時間time_aおよびBch時間time_bを記憶する。
計算用サブコアモジュール24,25は、入力モジュール22から内部汎用レジスタReg1を読み出すと、読み出した値を前回エッジ回数GPR1_OLDに格納する。
次に、第2実施形態の状態判断処理の手順を説明する。
第2実施形態の状態判断処理が実行されると、CPU11は、図11に示すように、まずS510にて、S310と同様にして、入力モジュール22が通信フレームの立ち上りエッジまたは立ち下りエッジを検出したか否かを判断する。ここで、エッジを検出していないと判断した場合には、S520にて、S320と同様にして、計算用サブコアモジュール25のメモリ41とレジスタR1〜R4を書き換え、状態判断処理を終了する。
一方、エッジを検出したと判断した場合には、S530にて、S520と同様にして、計算用サブコアモジュール25のメモリ41とレジスタR1〜R4を書き換える。
そしてS540にて、計算用サブコアモジュール25の状態番号stateを更新する。具体的には、まず、入力モジュール22から内部汎用レジスタReg1を読み出す。そして、読み出した内部汎用レジスタReg1の値から、計算用サブコアモジュール25の前回エッジ時間GPR1_OLDに格納されている値を減算した減算値を、計算用サブコアモジュール25の状態番号stateに格納されている値に加算する。さらに、この加算値を計算用サブコアモジュール25の状態番号stateに上書きする。なお、加算後の状態番号stateが7を超える場合には、状態遷移カウンタcycle_cntの値に応じて、状態番号stateは、第2PWM検出状態C7からハイヘッダ待機状態C1へ移行する経路、または、第2PWM検出状態C7から第1PWM待機状態C4へ移行する経路となるように設定される。
次にS550にて、計算用サブコアモジュール25の状態番号stateが「3」であるか否かを判断する。ここで、状態番号stateが「3」である場合には、S560にて、入力モジュール22から内部汎用レジスタReg0を読み出し、読み出した内部汎用レジスタReg0のデータを計算用サブコアモジュール25のメモリ41のヘッダ時間time_hに上書きする。これにより、次の立ち上りエッジを検出した時点で、時間Thを算出することができる。そしてS560の処理が終了すると、状態判断処理を終了する。
一方、状態番号stateが「3」でない場合には、S570にて、計算用サブコアモジュール25の状態番号stateが「5」であるか否かを判断する。ここで、状態番号stateが「5」である場合には、S580にて、入力モジュール22から内部汎用レジスタReg0を読み出し、読み出した内部汎用レジスタReg0のデータを計算用サブコアモジュール25のメモリ41のAch時間time_aに上書きする。これにより、次の立ち上りエッジを検出した時点で、時間T1を算出することができる。そしてS580の処理が終了すると、状態判断処理を終了する。
一方、状態番号stateが「5」でない場合には、S590にて、計算用サブコアモジュール25の状態番号stateが「7」であるか否かを判断する。ここで、状態番号stateが「7」である場合には、S600にて、入力モジュール22から内部汎用レジスタReg0を読み出し、読み出した内部汎用レジスタReg0のデータを計算用サブコアモジュール25のメモリ41のBch時間time_bに上書きする。これにより、次の立ち上りエッジを検出した時点で、時間T2を算出することができる。そしてS600の処理が終了すると、状態判断処理を終了する。一方、状態番号stateが「7」でない場合には、状態判断処理を終了する。
次に、計算用サブコアモジュール24が故障してから通信フレームのエッジが1回発生するまでの間にマイコン5のCPU11が計算用サブコアモジュール24の異常を検出した場合における入力モジュール22と計算用サブコアモジュール24,25の動作を説明する。
図12に示すように、時刻t41で通信フレームの立ち上りエッジが発生すると、入力モジュール22は、矢印L41に示すように、時刻生成モジュール21の基準タイマBaseTimerの値を内部汎用レジスタReg0に格納する。また入力モジュール22は、時刻t41で、内部汎用レジスタReg1をインクリメントするとともに、NEWレジスタNewSignalを「1」に設定する。
そして時刻t42で、計算用サブコアモジュール24は、入力モジュール22からNEWレジスタNewSignalを読み出す。これにより、入力モジュール22のNEWレジスタNewSignalが「0」に設定される。また計算用サブコアモジュール24は、矢印L42に示すように、入力モジュール22から内部汎用レジスタReg0を読み出し、読み出した値を現在エッジ時刻time_stampに格納する。
また、時刻t43で通信フレームの立ち下りエッジが発生すると、入力モジュール22は、矢印L43に示すように、時刻生成モジュール21の基準タイマBaseTimerの値を内部汎用レジスタReg0に格納する。また入力モジュール22は、時刻t43で、内部汎用レジスタReg1をインクリメントするとともに、NEWレジスタNewSignalを「1」に設定する。
そして時刻t44で、計算用サブコアモジュール24は、入力モジュール22からNEWレジスタNewSignalを読み出す。これにより、入力モジュール22のNEWレジスタNewSignalが「0」に設定される。また計算用サブコアモジュール24は、矢印L44に示すように、入力モジュール22から内部汎用レジスタReg0を読み出し、読み出した値を現在エッジ時刻time_stampに格納する。
その後、時刻t45で、計算用サブコアモジュール24が故障したとする。そして、通信フレームにおける次の立ち上りエッジが発生する前の時刻t46で、マイコン5のCPU11が計算用サブコアモジュール24の異常を検出したとする。これにより、CPU11は、計算用サブコアモジュール24の現在エッジ時刻time_stampのデータを、計算用サブコアモジュール25の現在エッジ時刻time_stampに上書きし、上書き後に計算用サブコアモジュール25を起動させる。
また、時刻t47で通信フレームの立ち上りエッジが発生すると、入力モジュール22は、矢印L45に示すように、時刻生成モジュール21の基準タイマBaseTimerの値を内部汎用レジスタReg0に格納する。また入力モジュール22は、時刻t47で、NEWレジスタNewSignalを「1」に設定する。
そして時刻t48で、計算用サブコアモジュール25は、入力モジュール22からNEWレジスタNewSignalを読み出す。これにより、入力モジュール22のNEWレジスタNewSignalが「0」に設定される。また計算用サブコアモジュール25は、矢印L46に示すように、入力モジュール22から内部汎用レジスタReg0を読み出し、読み出した値を現在エッジ時刻time_stampに格納する。
なお、計算用サブコアモジュール24が故障してから通信フレームのエッジが2,3,4回発生するまでの間にマイコン5のCPU11が計算用サブコアモジュール24の異常を検出した場合における計算用サブコアモジュール24,25の動作の説明は省略する。
このように構成されたインバータ1のマイコン5のCPU11は、検出されたエッジ検出回数が、入力モジュール22に記憶されているエッジ時刻情報の数(すなわち、1)以上である場合に、直近のエッジ時刻を示す今回エッジ時刻情報を、算出用データの一部として計算用サブコアモジュール25へ転送する。
これにより、計算用サブコアモジュール25は、直近のエッジ時刻を示す今回エッジ時刻情報を記憶した状態となるため、計算用サブコアモジュール25が起動した直後に、時間Th,T1,T2の算出を即座に継続することができ、次のローヘッダ領域HD_Lが入力するまで待機する必要がなくなる。但し、計算用サブコアモジュール25は、検出されたエッジ検出回数が、入力モジュール22に記憶されているエッジ時刻情報の数を超えている場合には、計算用サブコアモジュール24が故障してから計算用サブコアモジュール25が起動するまでにおける時間Th,T1,T2を算出することはできない。
以上説明した実施形態において、S510は回数検出部としての処理に相当し、S520,S530,S560,S580,S600は転送部としての処理に相当し、S540は状態設定部としての処理に相当する。
以上、本開示の一実施形態について説明したが、本開示は上記実施形態に限定されるものではなく、種々変形して実施することができる。
[変形例1]
例えば上記実施形態では、通信フレームが時間Th,T1,T2によりモータ駆動回路3の温度の検出結果を示すものを示したが、温度を検出するものに限定されるものではなく、ヘッダ領域およびパルス幅変調領域の継続時間により検出結果を示すものであればよい。
[変形例2]
上記実施形態では、入力モジュール22が直近の1つまたは2つのエッジ時刻を示すエッジ時刻情報を記憶するように構成されたものを示したが、直近の3つ以上のエッジ時刻を示すエッジ時刻情報を記憶するようにしてもよい。
[変形例3]
上記実施形態では、ローヘッダ領域HD_Lと温度検出領域P1,P2においてローレベルの状態を継続した時間を算出するものを示したが、ハイレベルの状態を継続した時間を算出するようにしてもよい。
また、上記実施形態における1つの構成要素が有する機能を複数の構成要素に分担させたり、複数の構成要素が有する機能を1つの構成要素に発揮させたりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加、置換等してもよい。なお、特許請求の範囲に記載の文言から特定される技術思想に含まれるあらゆる態様が本開示の実施形態である。
上述したマイコン5の他、当該マイコン5を構成要素とするシステム、当該マイコン5としてコンピュータを機能させるためのプログラム、このプログラムを記録した媒体、時間算出方法など、種々の形態で本開示を実現することもできる。