(57)【特許請求の範囲】
【請求項１】
半導体装置は、
第１カウンタを有し、前記半導体装置の外部機器の時刻と時刻同期する第１タイマと、
第２カウンタを有する第２タイマと、
ＣＰＵを有し、前記第１カウンタのカウント値と前記第２カウンタのカウント値とを比較し、比較結果に基づいて前記第２タイマの動作不良を検出する制御装置と、
を備え、
前記第１タイマはネットワークの時刻同期プロトコル（ＰＴＰ）により時刻同期を行い、前記第１カウンタのカウント値を前記外部機器の時刻に合わせるよう構成され、
前記制御装置は、前記時刻同期に基づいて前記第１タイマが生成する割り込みにより、前記第１カウンタのカウンタ値および前記第２カウンタのカウンタ値を読み出し、前記読み出したカウンタ値に基づいて、前記第１カウンタと前記第２カウンタとのカウンタ差異を求め、前記カウンタ差異が所定値よりも大きい場合、前記第２タイマを動作不良と判定するよう構成される。
【請求項２】
請求項１の半導体装置において、
前記第１タイマは前記第１カウンタが所定の値に一致した場合に前記割り込みを生成し、
前記第２カウンタは前記割り込みに基づいて計数を開始し、前記割り込みの次の割り込みに基づいて計数を停止するよう構成される。
【請求項３】
請求項１の半導体装置において、
さらに、Ｉ／Ｏポートを備え、
前記第１タイマは前記第１カウンタのカウント値に基づいてパルス幅変調信号を生成し、
前記Ｉ／Ｏポートは前記パルス幅変調信号を前記半導体装置の外部に出力し、
前記第１タイマは前記外部機器からの同期コマンドを受信し、前記外部機器との時刻差異を更新した場合に前記割り込みを生成するよう構成される。
【請求項４】
請求項１の半導体装置において、
前記外部機器の時刻は、１または複数の中で最も精度のよいクロックを有する機器の時刻が前記ＰＴＰにより選択されるよう構成される。
【請求項５】
請求項１の半導体装置において、
前記所定値は一定の誤差を含む。
【請求項６】
請求項５の半導体装置において、
前記所定値は前記第２タイマの発振源となる発振子の精度と前記ＣＰＵの割り込み処理サイクルに基づいて設定されるよう構成される。
【請求項７】
請求項１の半導体装置において、
前記第２カウンタがオーバフローする場合は、前記読み出される第２カウンタのカウンタ値にオーバフロー値が加算されるよう構成される。
【請求項８】
請求項１の半導体装置において、
前記第２タイマは複数のカウンタを備え、該カウンタをカスケード接続してカウンタを構成し、オーバフロー値を大きくするよう構成される。
【請求項９】
半導体装置は、
第１カウンタおよびパルス出力タイマを有し、前記半導体装置の外部機器の時刻と時刻同期する第１タイマと、
第２カウンタ、第３カウンタおよび第４カウンタを有する第２タイマと、
前記パルス出力タイマで生成される第１パルスを出力する第１Ｉ／Ｏポートと、
前記第２カウンタの計数に基づいて生成される第２パルスを出力する第２Ｉ／Ｏポートと、
前記第１Ｉ／Ｏポートから出力される前記第１パルスを入力する第３Ｉ／Ｏポートと、
前記第２Ｉ／Ｏポートから出力される前記第２パルスを入力する第４Ｉ／Ｏポートと、
ＣＰＵを含む制御装置と、
を備え、
前記第３カウンタは前記第３Ｉ／Ｏポートから入力される前記第１パルスのパルス幅を計数し、
前記第４カウンタは前記第４Ｉ／Ｏポートから入力される前記第２パルスのパルス幅を計数し、
前記制御装置は前記第３カウンタのカウント値と前記第４カウンタのカウント値とを比較し、比較結果に基づいて前記第２タイマの動作不良を検出するよう構成される。
【請求項１０】
請求項９の半導体装置において、
前記第１タイマはネットワークの時刻同期プロトコル（ＰＴＰ）により時刻同期を行い、前記第１カウンタが示す時刻を前記外部機器の時刻に合わせるよう構成される。
【請求項１１】
請求項１０の半導体装置において、
前記パルス出力タイマは、前記第１カウンタのカウンタ値が所定値になる毎に同期して、前記第１パルスを生成し、
前記第２タイマは、前記第１カウンタのカウンタ値が所定値になる毎に同期して、前記第２パルスを生成し、
前記制御装置は、前記第１タイマが生成する第１割り込みにより前記第３カウンタのカウンタ値を読み出し、前記第２タイマが生成する第２割り込みにより前記第４カウンタのカウンタ値を読み出し、前記読み出したカウンタ値に基づいて、前記第３カウンタと前記第４カウンタとのカウンタ差異を求め、前記カウンタ差異が所定値よりも大きい場合、前記第２タイマを動作不良と判定するよう構成される。
【請求項１２】
請求項１１の半導体装置において、
前記第１タイマは前記パルス出力タイマのパルスが立ち上がる場合に前記第１割り込みを生成し、
前記第２タイマは前記第２カウンタのカウント値が所定の値と一致する場合に前記第２割り込みを生成するよう構成される。
【請求項１３】
請求項１０の半導体装置において、
前記外部機器の時刻は、１または複数の中で最も精度のよいクロックを有する機器の時刻が前記ＰＴＰにより選択されるよう構成される。
【請求項１４】
請求項１１の半導体装置において、
前記所定値は一定の誤差を含む。
【請求項１５】
請求項１４の半導体装置において、
前記所定値は前記第２タイマの発振源となる発振子の精度と前記ＰＴＰによる時刻同期の誤差に基づいて設定されるよう構成される。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は半導体装置に関し、例えばタイマを内蔵する半導体装置に適用可能である。
【背景技術】
【０００２】
家電製品、ＡＶ機器、携帯電話、自動車、及び産業機械等の機器には、マイクロコントローラが組み込まれている。マイクロコントローラは、メモリに記憶されているプログラムにしたがって処理を行うことで、それぞれの機器の制御を行う半導体装置である。これらの機器に組み込まれるマイクロコントローラを含む部品は、用途に応じた信頼性が要求される。そのため、マイクロコントローラは、例えば、制御対象であるセンサやアクチュエータ等の診断を行ってこれらの故障を検出するだけでなく、マイクロコントローラ自身の故障も検出する必要がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１３／２０９７８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本開示の課題は半導体装置に内蔵するタイマの効率的な故障診断技術を提供することである。
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００５】
本開示のうち、代表的なものの概要を簡単に説明すれば、下記のとおりである。
すなわち、半導体装置は、第１カウンタを有し、半導体装置の外部機器の時刻と時刻同期する第１タイマと、第２カウンタを有する第２タイマと、ＣＰＵを有し、第１カウンタのカウント値と第２カウンタのカウント値とを比較し、比較結果に基づいて第２タイマの動作不良を検出する制御装置と、を備える。
【発明の効果】
【０００６】
上記半導体装置によれば、内蔵タイマを効率的に診断することができる。
【図面の簡単な説明】
【０００７】
【図１】実施例１に係るマイクロコントローラを説明するためのブロック図
【図２】図１のＥＰＴＰＣを説明するためのブロック図
【図３Ａ】時刻同期を説明するための図
【図３Ｂ】ＥＰＴＰＣカウンタとＭＴＵカウンタの関係を説明するためのタイミング図
【図４】タイマのカウンタ故障診断時の定常処理の動作を説明するためのフローチャート
【図５Ａ】タイマのカウンタ故障診断時の時刻一致イベント割り込み処理の動作を説明するためのフローチャート
【図５Ｂ】タイマのカウンタ故障診断時のオーバフロー割り込み処理の動作を説明するためのフローチャート
【図６】実施例２に係る機能安全対応の産業モータシステムを説明するためのブロック図
【図７】複数台の産業モータシステムを説明するためのブロック図
【図８】機能安全対応の産業モータシステムでの論理構成を説明するためのブロック図
【図９】タイマのＰＷＭ波形生成時に係るカウンタ故障診断時の定常処理の動作を説明するためのフローチャート
【図１０Ａ】タイマのＰＷＭ波形生成時に係るカウンタ故障診断時のＰＴＰコマンド受信割り込み処理の動作を説明するためのフローチャート
【図１０Ｂ】タイマのＰＷＭ波形生成時に係るカウンタ故障診断時のコンペアマッチ割り込み処理の動作を説明するためのフローチャート
【図１１】タイマのＰＷＭ波形生成時のカウンタ動作を説明するためのタイミング図
【図１２】実施例３に係る産業モータシステムを説明するためのブロック図
【図１３】ＰＷＭ波形比較時の概要動作を説明するためのタイミング図
【図１４】ＰＷＭ波形比較時の定常処理の動作を説明するためのフローチャート
【図１５Ａ】ＰＷＭ波形比較時の立ち上がりエッジ割り込み処理の動作を説明するためのフローチャート
【図１５Ｂ】ＰＷＭ波形比較時のコンペアマッチ割り込み処理の動作を説明するためのフローチャート
【図１６】実施例４に係る３２ビットカウンタの動作を説明するためのタミング図
【発明を実施するための形態】
【０００８】
以下、実施形態および実施例について、図面を用いて説明する。ただし、以下の説明において、同一構成要素には同一符号を付し繰り返しの説明を省略することがある。
【０００９】
産業機器や自動車製品の機能安全対応の機器に搭載するマイクロコントローラでは、ＣＰＵや内蔵メモリのみでなく、多機能タイマ、割り込みコントローラ、ＡＤ変換等の周辺モジュールに発生する故障の検出が必須である。特に多機能タイマはカウンタの回路規模が大きく、故障が発生しやすい。また、オーバフロー、閏時間対応等で設計が複雑となる。故障には永久に復帰できないハードエラーと一時的で復帰可能なソフトエラーがあり、例えば、マイクロコントローラに搭載するＭＴＵ(Multi-Function Timer Pulse Unit)は他の周辺モジュールに比較しソフトエラーの発生確率が高く、多機能タイマの効率のよい故障診断が課題である。
【００１０】
本願発明者は内蔵タイマ診断について下記の方法を検討した。
（１）検証プログラムによる診断
設計時に使用した検証用プログラムを応用し、開始、カウントアップ、停止等の基本動作を確認する。
（２）別の内蔵タイマを使用した診断
検証対象の内蔵タイマとは別の内蔵タイマを検証用に動作させ、カウンタの差異を比較する。
【００１１】
しかし、上記（１）の方法では、論理的なオン・オフや単一の動作の確認のみで、カウンタ等の定量的な値、ＰＷＭ（Pulse Width Modulation）波形生成等の組み合わせ動作は確認できない。上記（２）の方法では、検証対象の内蔵タイマと別の内蔵タイマとのカウント動作の基になる発振子は共通である場合、ともに誤動作すると故障を検出できない可能性が高い。また、上記（１）、（２）の場合、ユーザプログラムを一時的に停止し診断する必要があり、ユーザプログラムの処理効率が低下する。
【００１２】
実施形態では、特定の時間間隔で同期Ｅｔｈｅｒコントローラが多機能タイマのカウンタを動作・停止させ、同期Ｅｔｈｅｒで時刻合わせしたカウンタと比較することで、多機能タイマの故障を診断する。
実施形態によれば、外部の時刻を使用するので、多機能タイマの故障検出率が高くなる。また、時刻同期シーケンスと並列に多機能タイマの故障診断をするこができ、ユーザプログラを一時的に停止する必要がなくなる。
【実施例１】
【００１３】
実施例１に係るマイクロコントローラについて図１を用いて説明する。図１は実施例に係るマイクロコントローラの構成を示すブロック図である。実施例１に係るマイクロコントローラ１０は、リードオンリメモリ（ＲＯＭ）１１と、ランダムアクセスメモリ（ＲＡＭ）１２と、中央処理装置（ＣＰＵ）１３と、を備える。また、マイクロコントローラ１０は、ＩＥＥＥ１５８８コントローラ（以後、ＥＰＴＰＣ）１４と、多機能タイマ（ＭＴＵ）１５と、ＩＣＵ（Interrupt Controller Unit）１６と、ＥＬＣ（Event Link Controller）１７と、Ｉ／Ｏポート１８と、を備える。マイクロコントローラ１０は１つの半導体チップ（半導体基板）で形成される半導体装置である。ＲＯＭ１１およびＣＰＵ１３を制御装置ともいう。なお、制御装置にはＲＡＭ１２やＩＣＵ１６を含んでもよい。ＭＴＵ１５の故障診断にＩＥＥＥ１５８８規格（参考文献１）の時刻同期プロトコル（以後、ＰＴＰ（Precision Time Protocol））を使用する。
［参考文献１］IEEE1588-2008  Ver2.0 （IEEE1588同期Ether規格）。
【００１４】
ＲＯＭ１１はＭＴＵ１５の故障を検出するプログラムを格納する。ＲＯＭ１１は例えばフラッシュメモリ等の不揮発性メモリで構成される。ＲＡＭ１２はプログラム実行時のワークデータを格納する。ＲＡＭ１１は例えばＳＲＡＭ等の揮発性メモリで構成される。ＣＰＵ１３はＲＯＭ１２から読み出したプログラムに従い、機器の制御演算や通信処理等のユーザアプリケーションの処理に加え、ＭＴＵ１５の故障を検出する処理（故障判定）や復帰処理をする。ＥＰＴＰＣ１４はＥｔｈｅｒの回線を使用しＰＴＰにより外部の機器（時刻配信元）２と時刻同期をする。ＭＴＵ１５は複数のチャネルを備え、それぞれのチャネルはカウントアップやカウントダウンによる計数動作に加え、ＰＷＭ波形を生成し出力する機能やインプットキャプチャ機能を用いて産業モータを制御する機能等の複数機能を持つ多機能タイマである。ＩＣＵ１６はＥＰＴＰＣ１４とＭＴＵ１５からの割り込み要求をＣＰＵ１３に通知する。ＥＬＣ１７はＥＰＴＰＣ１４のカウンタが特定の時刻になる毎に、ＭＴＵ１５の動作を開始するようにイベント信号の接続をすることで、ソフトウェアの介在による遅延を低減する。
【００１５】
次に、ＥＰＴＰＣ１４について図２を用いて説明する。図２は図１のＥＰＴＰＣとその関連ハードウェアの構成を示すブロック図である。
【００１６】
ＥＰＴＰＣ１４は、第０チャネルＰＴＰプロトコル処理部（ＣＨ０）１４１、第１チャネルＰＴＰプロトコル処理部（ＣＨ１）１４２、パケット中継部１４３、およびクロック（時刻）補正部１４４で構成する。第０チャネルＰＴＰプロトコル処理部（ＣＨ０）１４１および第１チャネルＰＴＰプロトコル処理部（ＣＨ１）１４２はＰＴＰのフレーム送受信やコマンドシーケンス等のプロトコル処理をする。パケット中継部１４３は第０チャネルＰＴＰプロトコル処理部１４１および第１チャネルＰＴＰプロトコル処理部（ＣＨ１）１４２で処理されたＥｔｈｅｒフレーム（以後、フレーム）の中継や補正処理をする。クロック（時刻）補正部１４４は、ＥＰＴＰＣ１４のカウンタとなるローカルクロックカウンタ１４４１を備え、時刻配信元に合わせた時刻の補正、特定の時刻でＩＣＵ１６を介してＣＰＵ１３に割り込みを通知する等の機能を持つ。
【００１７】
通常ＥＰＴＰＣ１４は、第０チャネルＥＴＨＥＲＣ（Ethernet Controller）（ＣＨ０）２１および第１チャネルＥＴＨＥＲＣ（ＣＨ１）２２と、第０チャネルＥＤＭＡＣ（DMA Controller for the Ethernet Controller）（ＣＨ０）２３および第１チャネルＥＤＭＡＣ（ＣＨ１）２４と、ＰＴＰＥＤＭＡＣ２５と、を組み合わせて使用する。第０チャネルＥＴＨＥＲＣ（ＣＨ０）２１および第１チャネルＥＴＨＥＲＣ（ＣＨ１）２２はＭＡＣ層に相当する処理をする。第０チャネルＥＤＭＡＣ（ＣＨ０）２３および第１チャネルＥＤＭＡＣ（ＣＨ１）２４は標準フレームを効率的に処理し管理する、CPUとのインタフェースである。ＰＴＰＥＤＭＡＣ２５はＰＴＰのフレームを処理する。そして、アナログ信号への変換を行う物理層（ＰＨＹ）（不図示）とＥｔｈｅｒコネクタ（一般的にはＲＪ−４５）７経由でＥｔｈｅｒケーブル５にフレームを入出力する。また、ＥＰＴＰＣ１４は、ＭＴＵ１５、Ｉ／Ｏポート１８にＥＬＣ１７を介して接続しており、ＰＴＰで同期した時刻でのＭＴＵ１５のタイマカウンタの計数開始や後述するパルス出力機能（パルス出力タイマ機能）を有する。図２には２チャネルの第０チャネルＰＴＰプロトコル処理部（ＣＨ０）１４１および第１チャネルＰＴＰプロトコル処理部（ＣＨ１）１４２、第０チャネルＥＴＨＥＲＣ（ＣＨ０）２１および第１チャネルＥＴＨＥＲＣ（ＣＨ１）２２、第０チャネルＥＤＭＡＣ（ＣＨ０）２３および第１チャネルＥＤＭＡＣ（ＣＨ１）２４を搭載する場合を示すが、１チャネルでもよい。
【００１８】
次に、ＭＴＵ１５の故障診断の構成について図３Ａおよび図３Ｂを用いて説明する。図３Ａは機能安全対応機器と時刻配信元である外部機器との時刻同期を示す図である。図３ＢはＥＰＴＰＣカウンタとＭＴＵカウンタの関係を示すタイミング図である。
【００１９】
図３Ａ、３Ｂの故障診断の構成は、マイクロコントローラ１０を搭載した機能安全対応機器１上で、ＰＴＰにより、時刻配信元である外部機器２と時刻同期をするとともに、ＭＴＵ１５でカウンタの計数をする場合である。
（１１）機能安全対応機器１のマイクロコントローラ１０は故障検出の時間間隔をＰＴＰの時刻一致イベントの間隔として設定する。
（１２）マイクロコントローラ１０はＰＴＰにより一定の時刻合わせのコマンド間隔（ここでは１秒としている）で時刻配信元である外部機器２との時刻同期を開始する。ＰＴＰの時刻合わせのコマンドはＳｙｎｃ、Ｆｏｌｌｏｗ＿Ｕｐ、Ｄｅｌａｙ＿Ｒｅｑ、Ｄｅｌａｙ＿Ｒｅｓｐ等である。
（１３）マイクロコントローラ１０はＥＰＴＰＣ１４のローカルクロックカウンタ１４４１のｔ（１）でＭＴＵ１５のカウンタのカウントアップを開始する。
（１４）マイクロコントローラ１０は、上記（１１）で設定したＰＴＰの時刻一致イベント毎（ｔ（２）、ｔ（４）、・・・、ｔ（２ｎ））に、同期したＥＰＴＰＣカウンタとＭＴＵカウンタの進みの度合いを比較する。
（１５）マイクロコントローラ１０は、上記（１４）でカウンタの差異の絶対値が、あらかじめ定義した閾値（thresh）の範囲を超えていれば、故障として検出する。また、閾値範囲内であれば、上記（１４）の時刻同期毎の比較を継続する。
【００２０】
図３Ｂの破線はＥＰＴＰＣカウンタとＭＴＵカウンタとに差異がない場合（カウンタ差異＝０）であり、実線はＭＴＵカウンタがＥＰＴＰＣカウンタより進んでいる場合（カウンタ差異がある場合）である。図３Ｂでは、ｔ（２）のカウンタ差異（Ｄ２）、ｔ（４）のカウンタ差異（Ｄ（４））、・・・、ｔ（Ｎ−２）のカウンタ差異（Ｄ（Ｎ−２））は、いずれも閾値範囲内であるが、ｔ（Ｎ）のカウンタ値（Ｄ（Ｎ））は閾値を外れ故障が検出される。
【００２１】
次に、タイマカウンタの故障診断のソフトウェアによる動作フローについて図４、５Ａ、５Ｂを用いて説明する。図４はタイマカウンタの故障診断時の定常処理の動作を示すフローチャートである。図５Ａはタイマカウンタの故障診断時の時刻一致イベント割り込み処理の動作を示すフローチャートである。図５Ｂはタイマカウンタの故障診断時のオーバフロー割り込み処理の動作を示すフローチャートである。ここで、割り込みはＥＰＴＰＣ１４からの時刻一致イベントとＭＴＵ１５からのオーバフロー割り込みを使用する。時刻一致イベント割り込みは、ＥＰＴＰＣ１４のローカルクロックカウンタ１４４１が特定の設定した値に一致した場合に、割り込みが発生するとともにＭＴＵ１５のタイマカウンタの計数を開始する。ＭＴＵ１５のオーバフロー割り込みは、ＭＴＵ１５のタイマカウンタ（例えば１６ビットカウンタ）の値がオーバフローした場合に発生する。
【００２２】
＜定常処理＞
ステップＳ１１：ＣＰＵ１３は、ユーザアプリケーション起動後、タイマ故障診断のソフトウェアを開始する。そして、ＭＴＵ１５のプリスケーラ（ＭＴＵ１５への供給クロックとＭＴＵ１５のタイマカウンタの出力の周波数比）、カウント動作モード（フリーラン、コンペアマッチ、ＰＷＭ波形出力等）、割り込みの設定、ＭＴＵカウンタの初期化（mtu_count ← 0）等をする。
【００２３】
ステップＳ１２：ＣＰＵ１３は、ＥＰＴＰＣ１４の同期モード、時刻一致イベント、時刻一致イベントの発生時刻の設定等をする。
【００２４】
ステップＳ１３：ＣＰＵ１３は、ＥＰＴＰＣ１４の時刻一致イベントをＭＴＵ１５の開始要因に接続するようにＥＬＣ１７を設定する。
【００２５】
ステップＳ１４：ＣＰＵ１３は、ＭＴＵ１５からのオーバフロー割り込みとＥＰＴＰＣ１４からの時刻一致イベント割り込みをＣＰＵ１３に通知するようにＩＣＵ１６を設定する。また、時刻一致イベントフラグを初期化する（ptp_flag←false）。
【００２６】
ステップＳ１５：ＣＰＵ１３は故障検出の判定に使用するＭＴＵカウンタ（mtu_count）とＥＰＴＰＣカウンタ（ptp_count）との差異の絶対値の上限値を閾値として設定する。閾値（thresh）は発振子によるＭＴＵ１５のタイマカウンタの誤差、割り込み処理による遅延、ＰＴＰのプロトコル動作上の誤差等を考慮して設定する。閾値の一例は後述の式（２）で示す。ここで、ＭＴＵカウンタ（mtu_count）およびＥＰＴＰＣカウンタ（ptp_count）は故障検出の判定に使用するソフトウェア上のものであって、それぞれハードウェアのＭＴＵ１５のタイマカウンタおよびＥＰＴＰＣ１４のローカルクロックカウンタ１４４１ではない。
【００２７】
ステップＳ１６：ＣＰＵ１３は、ＥＰＴＰＣ１４を使用し、ＰＴＰにより時刻配信元の外部機器２と時刻同期を開始する。ここで、時刻配信元の外部機器２は１または複数の中で最も精度のよいクロックを持つ機器がＰＴＰにより選択される。
【００２８】
ステップＳ１７：ＣＰＵ１３は時刻一致イベントの発生有無を確認する。発生有無は時刻一致イベントフラグ（ptp_flag）で判定する。ＹＥＳ（時刻一致イベントの発生）の場合（ptp_flag＝true）はステップＳ１８の処理に移り、ＮＯの場合はステップＳ１Ｂの処理に移る。なお、時刻一致イベントフラグ（ptp_flag）は後述する割り込み処理のステップＳ２８で設定される。
【００２９】
ステップＳ１８：ＣＰＵ１３はカウンタ差異の絶対値が閾値を超えているかどうかを確認する。カウンタ差異はＭＴＵカウンタ（mtu_count）からＥＰＴＰＣカウンタ（ptp_count）にＭＴＵ１５の動作周波数（ｆｍｔｕ）とＥＰＴＰＣ１４の動作周波数（ｆｐｔｐ）の比で重み付けをしたものの差分とする。  
カウンタ差異＝|mtu_count−(ｆｍｔｕ/ｆｐｔｐ)ptp_count|
カウンタ差異が閾値を超えていれば（ＹＥＳの場合）、ＣＰＵ１３は故障として検出し、エラー終了する。カウンタ差異が閾値を越えてなければ（ＮＯの場合）、ステップＳ１９の処理に移る。
【００３０】
ステップＳ１９：ＣＰＵ１３は時刻一致イベントフラグをクリアする（ptp_flag←false）。
【００３１】
ステップＳ１Ａ：ＣＰＵ１３はＭＴＵカウンタをクリアする（mtu_count←0）。
【００３２】
ステップＳ１Ｂ：ＣＰＵ１３はユーザアプリケーションが終了しているかどうかを判定する。ユーザアプリケーションが終了していれば（ＹＥＳの場合）、処理を終了する。終了していなければ（ＮＯの場合）、ステップＳ１７に戻り処理を継続する。
【００３３】
＜割り込み処理＞
時刻一致イベント割り込みの処理について以下説明する。
ステップＳ２１：ＣＰＵ１３は、ＥＰＴＰＣ１４からの時刻一致イベント割り込みが発生した場合（ｔ（０）、ｔ（１）、ｔ（３）、ｔ（４）、・・・、ｔ（Ｎ−１）、Ｔ（Ｎ））、時刻一致イベントの割り込み回数を示す割り込みカウンタを１増やし更新する（Ｎ←Ｎ＋１）。
【００３４】
ステップＳ２２：ＣＰＵ１３は、奇数回目の割り込み（ｔ（１）、ｔ（３）、・・・、ｔ（２ｎ−１））であるかどうかを判定する。判定は割り込みカウンタ（Ｎ）を参照することで行う。奇数回目の割り込みである場合（ＹＥＳの場合）、ステップＳ２３の処理に移る。偶数回目の割り込みである場合（ＮＯの場合）、ステップＳ２５の処理に移る。
【００３５】
ステップＳ２３：ＭＴＵ１５のタイマカウンタはカウントアップ動作を開始する。ここで、ＭＴＵ１５のタイマカウンタのカウントアップはＥＬＣ１７によるイベント接続で開始するので、ＣＰＵ１３によるソフトウェア処理は不要であるが、動作の説明上記載する。なお、ＥＬＣ１７を用いない場合はＣＰＵ１３によるソフトウェア処理が必要になる。
【００３６】
ステップＳ２４：ＣＰＵ１３はＥＰＴＰＣ１４のローカルクロックカウンタ１４４１のカウンタ値（ＬＣＣＶ）を読み出し、ＥＰＴＰＣカウンタの開始値として設定する（ptp_start←LCCV）。その後、ステップＳ２９の処理に移る。
【００３７】
ステップＳ２５：ＣＰＵ１３はＭＴＵ１５のタイマカウンタのカウントアップ動作を終了させる。
【００３８】
ステップＳ２６：ＣＰＵ１３はＭＴＵ１５のタイマカウンタのカウンタ値（ＴＣＮＴ）を読み出し、ＭＴＵカウンタを更新する。更新値は現在のＭＴＵカウンタにＭＴＵ１５のタイマカウンタのカウンタ値を加えた値となる（mtu_count←mtu_count+TCNT）。ＭＴＵカウンタはステップＳ３１のＭＴＵ１５のオーバフロー割り込みで更新されている場合もある。
【００３９】
ステップＳ２７：ＣＰＵ１３はＥＰＴＰＣ１４のローカルクロックカウンタ１４４１のカウンタ値を読み出し、ＥＰＴＰＣカウンタを更新する。更新値はＥＰＴＰＣ１４のローカルクロックカウンタ１４４１のカウンタ値からステップＳ２４で設定したＥＰＴＰＣカウンタの開始値を減じた値となる（ptp_count←LCCV-ptp_start）。
【００４０】
ステップＳ２８：ＣＰＵ１３は時刻一致イベントフラグを設定する（ptp_flag←true）。
【００４１】
ステップＳ２９：ＣＰＵ１３は次の時刻一致イベントを発生させる時刻をＥＰＴＰＣ１４に設定する。なお、時刻は前回と同じ時間間隔となる時刻でもよく、時間間隔を変更してもよい。
【００４２】
次に、オーバフロー割り込みについて以下説明する。
ステップＳ３１：ＣＰＵ１３は、ＭＴＵ１５からのオーバフロー割り込みが発生した場合、現在のＭＴＵカウンタにオーバフロー値（１６ビットカウンタの場合、２１６＝６５，５３６）を加えた値にＭＴＵカウンタを更新する（mtu_count←mtu_count+オーバフロー値）。
【００４３】
＜閾値の一例＞
閾値（thresh）の一例を示す。閾値を発振子によるＭＴＵ１５のタイマカウンタの誤差に起因するthreshｏｓｃ、ＰＴＰのプロトコル動作上の誤差に起因するthreshｐｔｐ、割り込み処理に起因するthreshｉｎｔ、ＣＰＵ１３のパイプラインやバス状態による処理の揺らぎthreashｆｌｕに分離すると式（１）となる。
thresh＝threshｏｓｃ＋threshｐｔｐ＋threshｉｎｔ＋threshｆｌｕ・・・（１）
ここで、温度特性等の他の寄与は前記の寄与に比較し十分小さいものとして無視している。
【００４４】
ＭＴＵ１５の動作周波数をｆｍｔｕ、ＭＴＵ１５に供給する発振子の精度をｘｏｓｃ、時刻一致イベント間隔をｔｐ１とすると、発振子によるＭＴＵ１５のタイマカウンタの誤差に起因するthreshｏｓｃは、ＭＴＵカウンタのカウント数で式（１−１）となる。
threshｏｓｃ＝ｆｍｔｕ＊ｘｏｓｃ＊ｔｐ１     ・・・（１−１）
例えば、ｆｃｐｕ＝１２０ＭＨｚ、ＭＴＵ１５をプリスケーラで１６分周しｆｍｔｕ＝ｆｃｐｕ／１６＝７．５ＭＨｚ、ｘｏｓｃ＝１００ｐｐｍ、ｔｐ１＝１００ｍｓとすると、threshｏｓｃ＝７５サイクルとなる。
【００４５】
ＰＴＰのプロトコル動作上の誤差は、ＭＴＵ１５と同様にＥＰＴＰＣ１４に供給する発振子の誤差、時刻合わせのコマンド間隔、Ｅｔｈｅｒｎｅｔ上のバス状況によるコマンド遅延等がある。マイクロコントローラ１０に組み込んだ場合には、プロトコル動作のハードウェアによる実行とクロック（時刻）補正部１４４の時刻配信元である外部機器２に合わせた時刻の補正により、時間で１μｓ〜１００ｎｓまで誤差の低減が可能となる。その場合、ＭＴＵカウンタのカウント数で１０サイクル〜１サイクルであり、threshｐｔｐ＜threshｏｓｃとなる。
【００４６】
ＣＰＵ１３の動作周波数をｆｃｐｕ、割り込み処理の発生回数をｘｉｎｔ、割り込み処理のサイクル数をｎｉｎｔとすると、割り込み処理に起因するthreshｉｎｔは、ＭＴＵカウンタのカウント数で式（１−２）となる。
threshｉｎｔ＝（ｆｍｔｕ／ｆｃｐｕ）＊（ｘｉｎｔ*ｎｉｎｔ） ・・・（１−２）
ここで、時刻一致イベント割り込みとオーバフロー割り込みの処理は、近似的にＣＰＵ１３の動作周波数で同じサイクル数としている。
【００４７】
ｆｃｐｕ＝１２０ＭＨｚ、ｆｍｔｕ＝ｆｃｐｕ／１６＝７．５ＭＨｚとする。割り込み処理は、割り込み応答と復帰時間も加え、割り込み応答時間を１０サイクル、割り込み復帰時間を１０サイクル、割り込み処理を平均的に８０サイクルとして、ｎｉｎｔ＝１００サイクルとする。１６ビットカウンタのオーバフローが８．７ｍｓ（＝６５，５３６／７．５＊１０６ｓ）毎に発生することから、オーバフロー割り込みを１１回（＝１００／８．７）とすると時刻一致イベント割り込みの２回を加え、ｘｉｎｔ＝１３回となり、threshｉｎｔ＝８１サイクルとなる。
【００４８】
threshｆｌｕはマイクロコントローラ１０のＣＰＵ１３の処理の揺らぎの上限値でありthreshｉｎｔよりは小さいとして、threshｆｌｕ＜threshｉｎｔとする。
【００４９】
threshｏｓｃは誤差の上限値であるのに対し、threshｉｎｔは割り込み処理の平均的な値である。threshｉｎｔの寄与がthreshｏｓｃの寄与に比較し大きいが、故障検出としては、ワースト値として適用する。上記より式（１）を式（２）に近似する。
thresh＝threshｏｓｃ＋threshｐｔｐ＋threshｉｎｔ＋threshｆｌｕ
＜threshｏｓｃ＋threshｏｓｃ＋threshｉｎｔ＋threshｉｎｔ
＝（ｆｍｔｕ／ｆｃｐｕ）＊（２*ｆｃｐｕ＊ｘｏｓｃ＊ｔｐ１＋２＊ｘｉｎｔ＊ｎｉｎｔ)・・・（２）
上記の数値を式（２）に適用するとthresh＝３１２サイクルとなる。
【００５０】
実施例１は、時刻配信元である外部機器２に時刻を合わせたＥＰＴＰＣ１４（第１タイマ）のローカルクロックカウンタ（第１カウンタ）１４４１によりＭＴＵ１５（第２タイマ）のタイマカウンタ（第２カウンタ）を診断する。
【００５１】
実施例１によれば、ＰＴＰにより外部の複数の時刻をタイマの故障診断に使用できるので、診断時の共通の発振子異常による誤動作がなく、また、精度のよい時刻を基にしたタイマの故障診断をすることができる。また、ＰＴＰの時刻同期動作と並列にタイマの故障診断ができるので、ユーザプログラムを停止しタイマの故障診断をした場合に比較し、ユーザプログラムの処理効率の低下を低減することができる。
【実施例２】
【００５２】
機能安全対応の産業機器にマイクロコントローラを適用する場合について図６を用いて説明する。図６は実施例２に係る産業モータ制御システムの構成を示すブロック図である。
【００５３】
マイクロコントローラ１０Ａは機能安全対応機器１Ａ上に実装され、機能安全対応機器１Ａを制御し、産業モータ３を制御し、Ｅｔｈｅｒケーブル５と接続される他の産業機器４（ロボット、ＡＣサーボ、工作機等）とネットワークにより通信をする。なお、機能安全規格（ＩＥＣ６１５０８（参考文献２）等）では準拠の水準に応じて相互監視が必要であり、マイクロコントローラを２個（マイクロコントローラ１０Ａとマイクロコントローラ２０Ａとを）実装する場合もある。
［参考文献２］IEC61508 Part7（機能安全規格）
機能安全対応にはメモリ管理ユニット（ＭＭＵ）やメモリプロテクションユニット（ＭＰＵ）によりＲＯＭ１１とＲＡＭ１２上の安全データを配置する領域と非安全データを配置する領域を分離し保護する必要がある。そのため、マイクロコントローラ１０Ａは、実施例１のマイクロコントローラ１０の構成に加え、図示しないメモリ管理ユニット（ＭＭＵ）またはメモリプロテクションユニット（ＭＰＵ）を搭載する。マイクロコントローラ１０Ａと産業モータ３はモータドライバ６経由で接続する。そして、ＭＴＵ１５が生成し、Ｉ／Ｏポート１８から出力するＰＷＭ波形によりモータドライバ６を制御することで、産業モータ３を制御する。
【００５４】
図６の機能安全対応機器を、複数台の産業モータシステムに組み込んだ場合について図７を用いて説明する。図７は複数台の産業モータシステムの構成を示すブロック図である。時刻配信元であるマスタＡ（２Ａ）にＰＴＰにより複数台の機能安全機器であるスレーブＢ１（１Ａ１）、スレーブＢ２（１Ａ２）、・・・、スレーブＢＮ−１（１ＡＮ−１）が時刻同期し、特定の時刻ＡでＮ台（Ｎ＝２、３、・・・）の産業モータ３Ａ、３Ａ１、３Ａ２、・・・、３ＡＮ−１を同時に動作開始し、各機能安全機器に搭載されるＭＴＵ１５の診断も行う。
【００５５】
図８は機能安全対応機器に適用した場合の論理構成を示す図である。実施例１の図２ではＥＰＴＰＣ関連のハードウェアが２チャネルの場合を示したが、ここでは１チャネルの構成で説明する。
【００５６】
通信アプリケーション、制御アプリケーションは安全データと非安全データを取り扱い、処理内容、バス、配置するメモリをハードウェア的に互いに分離する。そこで、ソフトウェアは安全対応と非安全で固有のものを作成し使用する。また、時刻同期とタイマ診断の機能を持つアプリケーション（以後、同期・タイマ診断アプリ）は安全データを取り扱い、非安全データを取り扱う時刻同期アプリも搭載する。
【００５７】
通信アプリケーションは産業用Ｅｔｈｅｒの通信アプリケーションで、代表的な産業用Ｅｔｈｅｒ規格としてＥｔｈｅｒＮｅｔ／ＩＰ、ＰＲＯＦＩＮＥＴ、ＥｔｈｅｒＣＡＴ等がある。制御アプリケーションはＡＣサーボやロボットに組み込まれた産業用モータを制御する。ＴＣＰ、ＵＤＰ／ＩＰは論理的な通信接続管理、ＴＣＰまたはＵＤＰのパケット送受信処理、接続機器情報の管理等をする。また、ＰＴＰではＵＤＰのパケットまたはフレームのみを取り扱うので、ＵＤＰ／ＩＰのみを実装したミドルウェア、またはミドルウェアの実装なしでもよい。ＥｔｈｅｒドライバはＥＴＨＥＲＣ２１とＥＤＭＡＣ２３を使用しフレームの送受信処理、Ｅｔｈｅｒケーブル５の接続検出等をする。ＥＰＴＰＣドライバはＥＰＴＰＣ１４を使用しＰＴＰによる時刻同期をする。ＭＴＵドライバはＭＴＵ１５を使用し、ＭＴＵ１５のタイミング信号を基に産業用モータ３の制御信号であるＰＷＭ波形を生成する。そして、Ｉ／Ｏポート１８経由でＰＷＭ波形を出力する。ＥＴＨＥＲＣ２１とＥＤＭＡＣ２３は実施例１で説明済みなので省略する。
【００５８】
本応用例の同期・タイマ診断アプリで、ＭＴＵ１５の動作モードとしてＰＷＭモード１を使用した場合の動作フローについて図９、１０Ａ、１０Ｂ、１１を用いて説明する。図９はタイマのPWM波形生成時に係るカウンタ故障診断時の定常処理の動作フローチャートである。図１０ＡはタイマのPWM波形生成時に係るカウンタ故障診断時のＰＴＰコマンド受信割り込み処理の動作フローチャートである。図１０ＢはタイマのPWM波形生成時に係るカウンタ故障診断時のコンペアマッチ割り込み処理の動作フローチャートである。図１１はタイマのPWM波形生成時のＭＴＵのタイマカウンタの動作を示すタイミング図である。ここで、割り込みはＥＰＴＰＣ１４からのＰＴＰコマンド受信とＭＴＵ１５からのコンペアマッチ割り込みを使用する。ＰＴＰコマンド受信割り込みは、ＥＰＴＰＣ１４が時刻配信元からＰＴＰのＳyｎｃコマンドを受信し、時刻配信元との時刻差異（offsetFromMaster）を更新した場合に発生する。ＭＴＵ１５のコンペアマッチ割り込みは、図１１に示すようにＭＴＵ１５のＰＷＭを生成するタイマカウンタがＰＷＭ波形の周期でクリアされる場合に発生する。
【００５９】
＜定常処理＞
ステップＳ４１：ＣＰＵ１３はユーザアプリケーション起動後、同期・タイマ診断アプリを開始する。そして、ＣＰＵ１３は、ＭＴＵ１５のプリスケーラの設定、カウント動作モード（ＰＷＭ動作モード１）の設定、ＰＷＭの周期の設定、割り込みの設定、およびＭＴＵカウンタの初期化（mtu_count ← 0）等をする。
【００６０】
ステップＳ４２：ＣＰＵ１３はＥＰＴＰＣ１４の同期モード、ＰＴＰコマンド受信割り込みの設定等をする。
【００６１】
ステップＳ４３：ＣＰＵ１３はＭＴＵ１５からのコンペアマッチ割り込みとＥＰＴＰＣ１４からのＰＴＰコマンド受信割り込みをＣＰＵ１３に通知するようにＩＣＵ１６を設定する。また、ＣＰＵ１３はＰＴＰコマンド受信フラグを初期化する（ptp_flag←false）。
【００６２】
ステップＳ４４：ＣＰＵ１３は故障検出の判定に使用するＭＴＵカウンタ（mtu_count）とＥＰＴＰＣカウンタ（ptp_count）差異の絶対値の上限値を閾値として設定する。閾値（thresh）は発振子によるＭＴＵ１５のカウンタの誤差、割り込み処理による遅延、ＰＴＰのプロトコル動作上の誤差等を考慮して設定する。閾値の一例は後述の式（４）で示す。
【００６３】
ステップＳ４５：ＣＰＵ１３はＥＰＴＰＣ１４を使用し、ＰＴＰにより時刻配信元である外部機器２Ａの時刻と時刻同期を開始する。ここで、時刻配信元は１または複数の中で最も精度のよいクロックを持つ機器がＰＴＰにより選択される。
【００６４】
ステップＳ４６：ＣＰＵ１３はＥＰＴＰＣ１４のローカルクロックカウンタ１４４１のカウント値を読み出し、ＥＰＴＰＣカウンタの開始値として設定する（ptp_start←LCCV）。
【００６５】
ステップＳ４７：ＣＰＵ１３はＭＴＵ１５のＰＷＭ波形の出力の開始を指示する。また、実施例１のステップＳ２３で説明したように、ＥＬＣ１７によるイベント接続でＭＴＵ１５のＰＷＭ波形の出力開始をすることもできる。ここで、ＭＴＵ１５の動作について図１１を用いて説明する。ＭＴＵ１５のタイマカウンタはカウントアップし、カウント値（ＴＣＮＴ）がＴＧＲＤになると、Ｉ／Ｏポート１８の出力をＬｏｗからＨｉｇｈに反転する。カウントアップを続け、カウント値がＴＧＲＣになると、Ｉ／Ｏポート１８の出力をＨｉｇｈからＬｏｗに反転し、コンペマッチ割り込みをＣＰＵ１３に通知する。この動作を繰り返すことにより、ＰＷＭ波形をＩ／Ｏポート１８から出力する。図１１では、周期が４００μｓ、パルス幅が２００μｓ、デューティが５０％のＰＷＭ波形が示されている。
【００６６】
ステップＳ４８：ＣＰＵ１３はＰＴＰコマンド受信の発生有無を確認する。発生有無はＰＴＰコマンド受信フラグ（ptp_flag）で判定する。ＰＴＰコマンド受信が発生している合（ＹＥＳの場合）、ステップＳ４９の処理に移る。ＰＴＰコマンド受信が発生していない場合（ＮＯの場合）、ステップＳ４Ｃの処理に移る。
【００６７】
ステップＳ４９：ＣＰＵ１３は、カウンタ差異の絶対値が閾値を超えているかどうかを確認する。カウンタ差異はＭＴＵカウンタ（mtu_count）からＥＰＴＰＣカウンタ（ptp_count）にＭＴＵの動作周波数（ｆｍｔｕ）とＥＰＴＰＣの動作周波数（ｆｐｔｐ）の比で重み付けをしたものの差分とする。
カウンタ差異＝|mtu_count−(ｆｍｔｕ／ｆｐｔｐ)ptp_count|
カウンタ差異が閾値を超えている場合（ＹＥＳの場合）、故障として検出し、エラー終了する。カウンタ差異が閾値を超えていない場合（ＮＯの場合）、ステップＳ４Ａの処理に移る。
【００６８】
ステップＳ４Ａ：ＣＰＵ１３はＰＴＰコマンド受信フラグをクリアする（ptp_flag←false）。
【００６９】
ステップＳ４Ｂ：ＣＰＵ１３はＭＴＵカウンタをクリアする（mtu_count←0）。
【００７０】
ステップＳ４Ｃ：ＣＰＵ１３はユーザアプリケーションが終了しているかを判定する。ユーザアプリケーションが終了している場合（ＹＥＳの場合）、処理を終了する。終了していない場合（ＮＯの場合）、ステップＳ４８に戻り処理を継続する。
【００７１】
＜割り込み処理＞
ＰＴＰコマンド受信割り込みについて以下説明する。
ステップＳ５１：ＣＰＵ１３は、ＥＰＴＰＣ１４からのＰＴＰコマンド受信割り込みが発生した場合、ＥＰＴＰＣ１４のローカルクロックカウンタ１４４１のカウンタ値を読み出し、ＥＰＴＰＣカウンタを更新する。更新値はＥＰＴＰＣ１４のローカルクロックカウンタ１４４１のカウンタ値（ＬＣＣＶ）から、前回のＰＴＰコマンド受信割り込み、または、定常処理にて設定したＥＰＴＰＣカウンタの開始値を減じた値となる（ptp_count←LCCV-ptp_start）。
【００７２】
ステップＳ５２：ＣＰＵ１３はＭＴＵ１５のカウンタのカウンタ値（ＴＣＮＴ）を読み出し、ＭＴＵカウンタを更新する。更新値は現在のＭＴＵカウンタにＭＴＵ１５のカウンタのカウンタ値（ＴＣＮＴ）を加えた値となる（mtu_count←mtu_count+TCNT）。
【００７３】
ステップＳ５３：ＣＰＵ１３はＥＰＴＰＣ１４のローカルクロックカウンタ１４４１のカウンタ値を読み出し、ＥＰＴＰＣカウンタの開始値として設定する（ptp_start←LCCV）。
【００７４】
ステップＳ５４：ＣＰＵ１３はＰＴＰコマンド受信フラグを設定する（ptp_flag←true）。
【００７５】
次に、コンペアマッチ割り込みについて以下説明する。
ステップＳ６１：ＣＰＵ１３は、ＭＴＵ１５からのコンペアマッチ割り込みが発生した場合、現在のＭＴＵカウンタにＰＷＭ波形の周期に相当するカウンタ値（ＰＷＭＰ）を加えた値にＭＴＵカウンタを更新する（mtu_count←mtu_count+PWMP）。
【００７６】
＜閾値の一例＞
閾値（thresh）の一例を示す。実施例１と同様に、閾値を発振子によるＭＴＵ１５のカウンタの誤差に起因するthreshｏｓｃ、ＰＴＰのプロトコル動作上の誤差に起因するthreshｐｔｐ、割り込み処理に起因するthreshｉｎｔ、ＣＰＵ１３のパイプラインやバス状態による処理の揺らぎthreshｆｌｕに分離すると式（３）となる。
thresh＝threshｏｓｃ＋threshｐｔｐ＋threshｉｎｔ＋threshｆｌｕ  ・・・（３）
ＣＰＵ１３の動作周波数をｆｃｐｕ、ＭＴＵ１５の動作周波数をｆｍｔｕ＝ｆｃｐｕ／１６、ＭＴＵ１５に供給する発振子の精度をｘｏｓｃ、ＰＴＰコマンド受信間隔をｔｐ２とすると、発振子によるＭＴＵ１５のカウンタの誤差に起因するthreshｏｓｃは、ＭＴＵカウンタのカウント数で式（３−１）となる。
threshｏｓｃ＝ｆｍｔｕ＊ｘｏｓｃ＊ｔｐ２  ・・・（３−１）
ｆｃｐｕ＝１２０ＭＨｚ、ｆｍｔｕ＝(ｆｃｐｕ／１６)＝７．５ＭＨｚ、ｘｏｓｃ＝１００ｐｐｍ、ｔｐ２＝１ｓとすると、threshｏｓｃ＝７５０サイクルとなる。
【００７７】
ＰＴＰのプロトコル動作上の誤差は、実施例１と同様にthreshｐｔｐ＜threshｏｓｃで近似する。
【００７８】
ＣＰＵ１３の動作周波数をｆｃｐｕ、割り込み処理の発生回数をｙｉｎｔ、割り込み処理のサイクル数をｎｉｎｔとすると、割り込み処理に起因するthreshｉｎｔは、ＭＴＵカウンタのカウント数で式（３−２）となる。
threshｉｎｔ＝(ｆｍｔｕ／ｆｃｐｕ)＊(ｙｉｎｔ＊ｎｉｎｔ)   ・・・（３−２）
ここで、ＰＴＰコマンド受信割り込みとコンペアマッチ割り込みの処理は、近似的にＣＰＵ１３の動作周波数で同じサイクル数とした。
【００７９】
ｆｃｐｕ＝１２０ＭＨｚ、ｆｍｔｕ＝(ｆｃｐｕ／１６)＝７．５ＭＨｚとする。割り込み処理は、割り込み応答と復帰時間も加え、割り込み応答時間を１０サイクル、割り込み復帰時間を１０サイクル、割り込み処理を平均的に８０サイクルとして、ｎｉｎｔ＝１００サイクルとする。ｙｉｎｔは、１６ビットカウンタのコンペアマッチ割り込みが４００μｓ毎に発生することから、ｙｉｎｔ＝２，５００回とすると、threshｉｎｔ＝１５，６２５サイクルとなる。
【００８０】
上記より、threshｉｎｔ≫threshｏｓｃ＞threshｐｔｐであり、実施例１と同様にthreshｆｌｕはマイクロコントローラ１０ＡのＣＰＵ１３の処理の揺らぎの上限値でありthreshｉｎｔよりは小さいとして、式（３）を式（４）で近似する。
ｔｈｒｅｓｈ  ？  threshｉｎｔ＋threshｆｌｕ
＜threshｉｎｔ＋threshｉｎｔ
＝２＊(ｆｍｔｕ／ｆｃｐｕ)＊(ｙｉｎｔ＊ｎｉｎｔ)  ・・・（４）
上記の数値を式（４）に適用するとthresh＝３１，２５０サイクルとなる。
【００８１】
実施例２は、ＭＴＵ１５のタイマカウンタを用いてＰＷＭ波形を出力して産業用モータを制御し、これに並行してＥＰＴＰＣ１４のローカルクロックカウンタ１４４１を用いてＭＴＵ１５のタイマカウンタを診断する。
【００８２】
実施例２によれば、タイマのＰＷＭ波形生成時のカウンタ動作の故障診断をすることができる。また、産業モータ制御機器と機能安全機器（ＩＥＣ６１５０８規格準拠等）に適用することができる。
【実施例３】
【００８３】
図１２は実施例３に係る産業モータ制御システムの構成を示すブロック図である。図１３はＰＷＭ波形比較時のＥＰＴＰＣのパルス出力タイマおよびＭＴＵのタイマカウンタの動作を示すタイミング図である。
【００８４】
２種のタイマ（ＥＰＴＰＣ１４、ＭＴＵ１５）を基に生成した第１パルスと第２パルスを第１ポート（ＰＯＲＴ１）１８＿１と第２ポート（ＰＯＲＴ２）１８＿２から出力し、それぞれ、モータドライバ６Ｂ１、６Ｂ２経由で第１産業モータ３Ｂ１と第２産業モータ３Ｂ２に接続する。また、マイクロコントローラ１０Ｂの外部に配置した接続回路８経由で、第１パルスと第２パルスを分岐し、他の汎用ポートである第３ポート（ＰＯＲＴ３）１８＿３と第４ポート（ＰＯＲＴ４）１８＿４に、それぞれ、第１パルスと第２パルスを入力する。そして、パルス幅を測定し、比較することでタイマの故障を検出する。分岐でなく、外部から操作可能な物理的なスイッチを設置することで、モータ制御時は第１産業モータ３Ｂ１と第２産業モータ３Ｂ２にＰＷＭ波形を出力し、診断時は第３ポート１８＿３と第４ポート１８＿４にＰＷＭ波形を入力してもよい。ここで、第１ポート１８＿１、第２ポート１８＿２、第３ポート１８＿３、第４ポート１８＿４はＩ／Ｏポート１８の一部を構成するＩ／Ｏポートである。
【００８５】
第１パルスはＥＰＴＰＣ１４のパルス出力タイマの立ち上がりエッジをトグル出力させることでＰＷＭ波形を生成する。第２パルスはＭＴＵ１５のチャネル０（ＭＴＵ０）のＰＷＭ波形生成機能（ＰＷＭモード１）により生成し、ＥＰＴＰＣ１４の時刻一致イベントで第１パルスと同期して出力を開始する。
【００８６】
なお、相互監視でマイクロコントローラを２個搭載する場合、ＰＷＭ波形の出力とＰＷＭ波形の入力（及び比較）は個々のマイクロコントローラで独立に行うこと、または、ＰＷＭ波形の出力とＰＷＭ波形の入力（及び比較）を２重化して行ってもよい。
【００８７】
本応用例の動作フローについて図１４、１５Ａ、１５Ｂを用いて説明する。図１４はＰＷＭ波形比較時の定常処理の動作フローチャートである。図１５ＡはＰＷＭ波形比較時の立ち上がりエッジ割り込み処理の動作フローチャートである。図１５ＢはＰＷＭ波形比較時のコンペアマッチ割り込み処理の動作フローチャートである。割り込みはＥＰＴＰＣ１４からのパルス出力の立ち上がりエッジとＭＴＵ０からのコンペアマッチ割り込みを使用する。ＥＰＴＰＣ１４のパルス出力の立ち上がりエッジ割り込みは、図１３に示すようにＥＰＴＰＣ１４のパルス出力タイマから出力する波形がＬｏｗからＨｉｇｈに変化する立ち上がりで発生する。ＭＴＵ０のコンペアマッチ割り込みは、図１３に示すようにＭＴＵ０のＰＷＭを生成するタイマカウンタがＰＷＭ波形の周期でクリアされる場合に発生する。
【００８８】
＜定常処理＞
ステップＳ７１：ＣＰＵ１３はＥＰＴＰＣ１４のパルス出力タイマとＭＴＵ０のカウンタを特定の時刻（ＴＳとする）で同期開始する。同期開始はＥＬＣ１７のイベント信号の接続により行う。
【００８９】
ステップＳ７２：ＣＰＵ１３はＥＰＴＰＣ１４のパルス出力をＥＬＣ１７によりＩ／Ｏポート１８（第１ポート１８＿１）の出力に接続する。そして、ポート出力はＥＰＴＰＣパルスのトグル出力とする。
【００９０】
ステップＳ７３：ＣＰＵ１３はＥＰＴＰＣ１４のパルス出力タイマのタイマスタート時刻を同期開始時刻（TMSTTR←TS）、周期を２００μｓ（TMCYCR←200,000）、パルス幅を１００μｓ（TMPLSR←100,000）に設定する。
【００９１】
ステップＳ７４：ＣＰＵ１３はＭＴＵ０の動作モードをＰＷＭモード１に設定する。そして、ＭＴＵ０への供給クロック周波数を１２０ＭＨｚ（PCLKA←120MHz）、プリスケーラをＰＣＬＫＡ／１６、ＬｏｗからＨｉｇｈに反転するカウンタ比較値を２００μｓ（TGRD←0x5DC）、ＨｉｇｈからＬｏｗに反転するカウンタ比較値を４００μｓ（TGRC←0xBB8）に設定する。また、開始直後にＬｏｗからＨｉｇｈに反転するように開始時のカウンタ値をＬｏｗからＨｉｇｈに反転するカウンタ比較値の１カウント小さい値を設定する（TCNT←0x5DB(=TGRD-1））。
【００９２】
ステップＳ７５：ＣＰＵ１３はＥＰＴＰＣ１４のパルス出力の立ち上がりエッジ割り込みとＭＴＵ０のＨｉｇｈからＬｏｗに反転するカウンタでのコンペアマッチ割り込みを通知するようにＩＣＵ１６を設定する。また、ＥＰＴＰＣ１４のパルス出力の立ち上がりエッジ割り込みフラグとＭＴＵ０のコンペアマッチ割り込みフラグを初期化する（ptp_flag←false、mtu0_flag←false）。
【００９３】
ステップＳ７６：入力パルスのパルス幅測定用にＰＷＭ出力とは別チャネルを使用し、第１パルスのパルス幅測定にはチャネル１（ＭＴＵ１）、第２パルスのパルス幅測定にはチャネル２（ＭＴＵ２）を割り当てる。そして、ＣＰＵ１３はＭＴＵ１への供給クロック周波数を１２０ＭＨｚ（PCLKA←120MHz）、プリスケーラをＰＣＬＫＡ／１、動作モードを外部パルス幅測定機能とし、Ｈｉｇｈパルス幅を測定するように設定する。ＭＴＵ２も同様に設定する。
【００９４】
ステップＳ７７：ＣＰＵ１３は故障検出の判定に使用するパルス幅差異の絶対値の上限値を閾値として設定する。閾値（thresh）は発振子によるＭＴＵ１５のカウンタの誤差、ＰＴＰのプロトコル動作上の誤差等を考慮して設定する。閾値の一例は後述の式（６）で示す。
【００９５】
ステップＳ７８：ＣＰＵ１３はＥＰＴＰＣ１４を使用し、ＰＴＰにより外部の他の機器と時刻同期を開始する。ここで、時刻配信元は１または複数の中で最も精度のよいクロックを持つ機器がＰＴＰにより選択される。
【００９６】
ステップＳ７９：ＥＰＴＰＣ１４のローカルクロックカウンタ１４４１のカウンタ値がステップＳ７３で設定したＴＳになると、ＥＰＴＰＣ１４が生成した第１パルスとＭＴＵ１５が生成した第２パルスを、それぞれ、第１ポート１８＿１と第２ポート１８＿２から出力する。なお、このステップは以下のようにハードウェアが行う。
【００９７】
まず、ＥＰＴＰＣ１４のパルス出力タイマを用いたＰＷＭ波形出力動作について図１３を用いて説明する。ＥＰＴＰＣ１４のパルス出力タイマのタイマスタート時刻（Ｔｓ）に同期してパルス出力タイマはＬｏｗからＨｉｇｈに立ち上がって、周期が２００μｓ、パルス幅が１００μｓのパルスを出力する。パルス出力タイマの立ち上がりで、第１パルスがＬｏｗからＨｉｇｈに立ち上がり第１ポート１８＿１の出力が開始される。次のパルス出力タイマの立ち上がりで、第１パルスはＨｉｇｈからＬｏｗに反転し、パルス出力の立ち上がりエッジ割り込みが発生する。この動作を繰り返すことにより、第１パルスのＰＷＭ波形を第１ポート１８＿１から出力する。このＰＷＭ波形は周期が４００μｓ、パルス幅が２００μｓ、デューティが５０％である。
【００９８】
次に、ＭＴＵ０のタイマカウンタを用いたＰＷＭ波形出力動作について図１３を用いて説明する。ＭＴＵ０のタイマカウンタはカウントアップし、カウント値（ＴＣＮＴ０）がＴＧＲＤになると、第２ポート１８＿２の出力をＬｏｗからＨｉｇｈに反転する。このタイミングはＴｓと同期されている。カウントアップを続け、カウント値がＴＧＲＣになると、第２ポート１８＿２の出力をＨｉｇｈからＬｏｗに反転し、コンペアマッチ割り込みが発生する。この動作を繰り返すことにより、第２パルスのＰＷＭ波形を第２ポート１８＿２から出力する。このＰＷＭ波形は周期が４００μｓ、パルス幅が２００μｓ、デューティが５０％である。
【００９９】
ステップＳ７Ａ：第１ポート１８＿１から出力した第１パルスを第３ポート１８＿３に入力し、第２ポート１８＿２から出力した第２パルスを第４ポート１８＿４に入力する。なお、このステップも以下のようにハードウェアが行う。
【０１００】
まず、ＭＴＵ１のタイマカウンタを用いた第１パルスのパルス幅の測定について図１３を説明する。第３ポート１８＿３に入力される第１パルスの立ち上がりでＭＴＵ１のタイマカウンタの計数を開始し、第１パルスの立下りで計数を終了する。このときのタイマカウンタのカウント値（ＴＣＮＴ１）に基づいてＨｉｇｈパルス幅を測定する。
【０１０１】
次に、ＭＴＵ２のタイマカウンタを用いた第２パルスのパルス幅の測定について図１３を説明する。第４ポート１８＿４に入力される第２パルスの立ち上がりでＭＴＵ２のタイマカウンタの計数を開始し、第２パルスの立下りで計数を終了する。このときのタイマカウンタのカウント値（ＴＣＮＴ２）に基づいてＨｉｇｈパルス幅を測定する。
【０１０２】
ステップＳ７Ｂ：ＣＰＵ１３はパルス幅の取得が完了したかどうかを判定する。判定はＥＰＴＰＣ１４のパルス出力の立ち上がりエッジ割り込みフラグ（ptp_flag）とＭＴＵ１５のコンペアマッチ割り込みフラグ（mtu_flag）がともに設定されていることで行う。パルス幅の取得が完了している場合（ＹＥＳの場合）はステップＳ７Ｃの処理に移り、パルス幅の取得が完了していない場合（ＮＯの場合）はステップＳ７Ｅの処理に移る。
【０１０３】
ステップＳ７Ｃ：ＣＰＵ１３はパルス幅の差異の絶対値が閾値を超えているかどうかを確認する。
パルス幅差異＝|mtu1_count - mtu2_count|
パルス幅差異が閾値を超えていれば、故障として検出し、エラー終了する。
【０１０４】
ステップＳ７Ｄ：ＣＰＵ１３は、ステップＳ７Ｃでパルス幅差異が閾値を越えてなければ、ＥＰＴＰＣ１４のパルス出力の立ち上がりエッジ割り込みフラグとＭＴＵ１５のコンペアマッチ割り込みフラグをクリアする（ptp_flag←false, mtu_flag←false）
ステップＳ７Ｅ：ＣＰＵ１３はユーザアプリケーションが終了しているかを判定する。ユーザアプリケーションが終了していれば、処理を終了する。終了していなければ、ステップＳ７Ｂに戻り処理を継続する。
【０１０５】
＜割り込み処理＞
上述したように、ＭＴＵ１のタイマカウンタは第３ポート１８＿３から入力した第1パルスのＨｉｇｈ期間にカウントアップ動作をし、Ｌｏｗ期間はカウントアップ動作を停止する。また、ＭＴＵ２のタイマカウンタは第４ポート１８＿４から入力した第２パルスのＨｉｇｈ期間にカウントアップ動作をし、Ｌｏｗ期間はカウントアップ動作を停止する。
【０１０６】
パルス出力の立ち上がりエッジ割り込みについて以下説明する。
ステップＳ８１：ＣＰＵ１３はＥＰＴＰＣ１４のパルス出力の立ち上がりエッジ割り込みが発生した場合、ＭＴＵ１のタイマカウンタのカウント値（ＴＣＮＴ１）を読み出し、第１パルスのパルス幅として取得する（mtu1_count←TCNT1）。
【０１０７】
ステップＳ８２：ＣＰＵ１３はＭＴＵ１のタイマカウンタをクリアする（TCNT1←0）。
【０１０８】
ステップＳ８３：ＣＰＵ１３はＥＰＴＰＣ１４のパルス出力の立ち上がりエッジ割り込みフラグを設定する（ptp_flag←true）。
【０１０９】
コンペアマッチマッチ割り込みについて以下説明する。
ステップＳ９１：ＣＰＵ１３は、ＭＴＵ０のＨｉｇｈからＬｏｗに反転するカウンタでのコンペアマッチ割り込みが発生した場合、ＭＴＵ２のタイマカウンタのカウンタ値（ＴＣＮＴ２）を読み出し、第２パルスのパルス幅として取得する（mtu2_count←TCNT2）。
【０１１０】
ステップＳ９２：ＣＰＵ１３はＭＴＵ２のタイマカウンタをクリアする（TCNT2←0）。
【０１１１】
ステップＳ９３：ＣＰＵ１３はＭＴＵ０のＨｉｇｈからＬｏｗに反転するカウンタでのコンペアマッチ割り込みフラグを設定する（mtu0_flag←true）。
【０１１２】
＜閾値の一例＞
閾値（thresh）の一例を示す。閾値を発振子によるＭＴＵカウンタの誤差に起因するthreshｏｓｃ、ＰＴＰのプロトコル動作上の誤差に起因するthreshｐｔｐに加え、マイクロコントローラ外部の接続回路を経由するパルスの伝搬遅延threshｐｐｇに分離すると式（５）となる。
thresh＝threshｏｓｃ＋threshｐｔｐ ＋threshｐｐｇ  ・・・（５）
なお、本応用例ではパルス幅の取得に使用するタイマカウンタはハードウェアで開始と停止することから割り込み処理での遅延の影響はない。
【０１１３】
threshｏｓｃは立ち上がりエッジ割り込み間隔をｔｐ３とすると、実施例２と同様に式（５−１）となり、ｆｃｐｕ＝１２０ＭＨｚ、ｆｍｔｕ＝ｆｃｐｕ＝１２０ＭＨｚ、ｘｏｓｃ＝１００ｐｐｍ、ｔｐ３＝４００μｓとすると、threshｏｓｃ＝５サイクルとなる。
threshｏｓｃ＝ｆｍｔｕ＊ｘｏｓｃ＊ｔｐ３   ・・・（５−１）
ＰＴＰのプロトコル動作上の誤差は、実施例１と同様に時間で１μｓ〜１００ｎｓまで誤差の低減が可能で、MTUカウンタのカウント数でthreshｐｔｐ＝８〜８０サイクルとなる。
【０１１４】
パルスの伝搬遅延は、高速を３．０ｘ１０８ｍ／ｓ、パルスが伝搬する導体の比誘電率を１０、配線距離を１０ｃｍとすると、１０ｎｓ以下となりthreshｐｐｇ＜threshｏｓｃで近似する。
【０１１５】
上記より、式（５）を式（６）で近似する。
ｔｈｒｅｓｈ  ？  threshｏｓｃ＋threshｐｔｐ＋threshｐｐｇ
＜２＊threshｏｓｃ＋threshｐｔｐ・・・（６）
上記の数値を式（６）に適用するとthresh１００サイクルとなる。
【０１１６】
実施例３は、ローカルクロックカウンタ（第１カウンタ）の所定値でＥＰＴＰＣ１４（第１タイマ）のパルス出力タイマで生成するＰＷＭを第１のＩ／Ｏポートから出力し、第３のＩ／Ｏポートから入力してＭＴＵ１５（第２タイマ）のタイマカウンタ(第３カウンタ)でパルス幅を測定する。ローカルクロックカウンタ（第１カウンタ）の所定値でＭＴＵ１５（第２タイマ）のタイマカウンタ(第２カウンタ)で生成されるＰＷＭを第２のＩ／Ｏポートから出力し、第４のＩ／Ｏポートから入力してＭＴＵ１５（第２タイマ）のタイマカウンタ(第４カウンタ)でパルス幅を測定する。これにより、ユーザプログラムを停止することなく、タイマによるＰＷＭ波形生成と出力の機能の診断をすることができる。
【実施例４】
【０１１７】
実施例１のＭＴＵ１５は複数のチャネルを備えるので、２つのチャネルの１６ビットカウンタをカスケード接続して３２ビットカウンタとして使用する。３２ビットカウンタでは、オーバフローは実動作での発生はない。
【０１１８】
図１６は実施例４に係る３２ビットカウンタの動作を示すタイミング図である。実施例４に係る３２ビットカウンタはＭＴＵ１５のチャネル１（ＭＴＵ１）のカウンタを上位１６ビット、ＭＴＵ１５のチャネル２（ＭＴＵ２）のカウンタを下位１６ビットとして構成される。ＭＴＵ２のカウンタがオーバフローする毎に、ＭＴＵ１のカウンタがカウントアップされ、ＭＴＵ２のカウンタはクリアされ０からカウントアップを再開することで、３２ビットのカウンタとして動作する。
【０１１９】
構成と動作は、ＭＴＵ１５のＭＴＵ１のカウンタとＭＴ２のカウンタを使用し、カスケード接続による３２ビットの動作設定が必要となることおよび実質的にオーバフロー割り込みがなくなること以外は実施例１と同様なので省略する。カスケード接続するカウンタはチャネル１とチャネル２のカウンタに限定されるものではない。
【０１２０】
＜閾値＞
閾値（thresh）の一例は実施例１と同様に式（７）と近似する。
thresh ？  (ｆｍｔｕ／ｆｃｐｕ)＊(２＊ｆｃｐｕ＊ｘｏｓｃ＊ｔｐ１＋２＊ｘｉｎｔ＊ｎｉｎｔ)   ・・・（７）
ここで、ＣＰＵ１３の動作周波数をｆｃｐｕ、ＭＴＵ１５の動作周波数をｆｍｔｕ＝ｆｃｐｕ／１６、ＭＴＵ１５に供給する発振子の精度をｘｏｓｃ、時刻一致イベント間隔をｔｐ１、割り込み処理の発生回数をｘｉｎｔ、割り込み処理のサイクル数をｎｉｎｔとした。
【０１２１】
ＭＴＵ１５のオーバフロー割り込みがなくなるので、割り込み処理の発生回数であるｘｉｎｔが実施例１に比較し１３回から時刻一致イベント割り込みの２回に減少する。ｆｃｐｕ＝１２０ＭＨｚ、ｆｍｔｕ＝(ｆｃｐｕ／１６)＝７．５ＭＨｚ、ｘｏｓｃ＝１００ｐｐｍ、ｔｐ１＝１００ｍｓ、ｘｉｎｔ＝２、ｎｉｎｔ＝１００とすると、thresh＝１７５サイクルとなる。
【０１２２】
実施例４は１６ビットカウンタを２つカスケード接続して３２ビットカウンタを構成する。これによれば、割り込み発生回数を少なくすることで、実施例１に比較し精度のよいタイマの診断をすることができる。また、タイマを３２ビットカウンタとして使用した場合のタイマの診断をすることができる。
【０１２３】
以上、本発明者によってなされた発明を実施形態および実施例に基づき具体的に説明したが、本発明は、上記実施形態および実施例に限定されるものではなく、種々変更可能であることはいうまでもない。
【符号の説明】
【０１２４】
１・・・機能安全対応機器
２・・・外部機器
３・・・産業モータ
４・・・産業機器
５・・・Ｅｔｈｅｒケーブル
６・・・モータドライバ
７・・・Ｅｔｈｅｒコネクタ
８・・・接続回路
１０・・・マイクロコントローラ
１１・・・ＲＯＭ
１２・・・ＲＡＭ
１３・・・ＣＰＵ
１４・・・ＥＰＴＰＣ
１４１・・・第０チャネルＰＴＰプロトコル処理部（ＣＨ０）
１４２・・・第１チャネルＰＴＰプロトコル処理部（ＣＨ１）
１４３・・・パケット中継部
１４４・・・クロック（時刻）補正部
１４４１・・・ローカルクロックカウンタ
１５・・・ＭＴＵ
１６・・・ＩＣＵ
１７・・・ＥＬＣ
１８・・・Ｉ／Ｏポート
１８＿１・・・第１ポート
１８＿２・・・第２ポート
１８＿３・・・第３ポート
１８＿４・・・第４ポート
２１・・・第０チャネルＥＴＨＥＲＣ（ＣＨ０）
２２・・・第１チャネルＥＴＨＥＲＣ（ＣＨ１）
２３・・・第０チャネルＥＤＭＡＣ（ＣＨ０）
２４・・・第１チャネルＥＤＭＡＣ（ＣＨ１）
２５・・・ＰＴＰＥＤＭＡＣ
２６・・・ＣＰＵインタフェース
【図１】
0006587566.tif 000002
【図２】
0006587566.tif 000003
【図３Ａ】
0006587566.tif 000004
【図３Ｂ】
0006587566.tif 000005
【図４】
0006587566.tif 000006
【図５Ａ】
0006587566.tif 000007
【図５Ｂ】
0006587566.tif 000008
【図６】
0006587566.tif 000009
【図７】
0006587566.tif 000010
【図８】
0006587566.tif 000011
【図９】
0006587566.tif 000012
【図１０Ａ】
0006587566.tif 000013
【図１０Ｂ】
0006587566.tif 000014
【図１１】
0006587566.tif 000015
【図１２】
0006587566.tif 000016
【図１３】
0006587566.tif 000017
【図１４】
0006587566.tif 000018
【図１５Ａ】
0006587566.tif 000019
【図１５Ｂ】
0006587566.tif 000020
【図１６】
0006587566.tif 000021