(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024178669
(43)【公開日】2024-12-25
(54)【発明の名称】モータ制御装置
(51)【国際特許分類】
G06F 9/52 20060101AFI20241218BHJP
【FI】
G06F9/52 150Z
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2023096984
(22)【出願日】2023-06-13
(71)【出願人】
【識別番号】509186579
【氏名又は名称】日立Astemo株式会社
(74)【代理人】
【識別番号】110000350
【氏名又は名称】ポレール弁理士法人
(72)【発明者】
【氏名】鈴木 良和
(57)【要約】
【課題】モータ制御データの同時性を保証するとともに、マルチコア型半導体装置の処理負荷を低減可能な技術を提供することにある。
【解決手段】第1コアと第2コアとを含むマルチコア半導体装置を使用してモータの制御に必要な三相電流値を、第1コアと前記第2コアを用いて診断するモータ制御装置であって、第1コアは、三相電流値に関する第1データ群に基づいて第1算出データを算出してバッファに書き込み、第2コアは、三相電流値に関する第2データ群に基づいて第2算出データを算出し、第2コアは、第1コアがバッファに書き込んだ第1算出データを読み出して、第1算出データと第2算出データとを比較し、第1算出データと第2算出データとが閾値内かどうかを判定する診断を行う際に、第1コアがバッファに書き込んだ第1算出データを、バッファのアドレスを用いて直接参照して読み出す。
【選択図】
図7
【特許請求の範囲】
【請求項1】
第1コアと第2コアとを含むマルチコア半導体装置を使用してモータの制御に必要な三相電流値を、前記第1コアと前記第2コアを用いて診断するモータ制御装置であって、
前記第1コアは、前記三相電流値に関する第1データ群に基づいて第1算出データを算出してバッファに書き込み、
前記第2コアは、前記三相電流値に関する第2データ群に基づいて第2算出データを算出し、
前記第2コアは、前記第1コアが前記バッファに書き込んだ前記第1算出データを読み出して、前記第1算出データと前記第2算出データとを比較し、前記第1算出データと前記第2算出データとが閾値内かどうかを判定する診断を行う際に、前記第1コアが前記バッファに書き込んだ前記第1算出データを、前記バッファのアドレスを用いて直接参照して読み出す、
モータ制御装置。
【請求項2】
請求項1のモータ制御装置において、
前記第2コアが前記第1コアの算出した前記第1算出データにアクセスするタイミングが前記第1コアの前記第1算出データと前記第2コアの前記第2算出データが算出された後である場合に、今周期で算出された前記第1コアの前記第1算出データと前記第2コアの前記第2算出データを比較する、モータ制御装置。
【請求項3】
請求項1のモータ制御装置において、
前記第2コアが前記第1コアの算出した前記第1算出データにアクセスするタイミングが前記第1コアの前記第1算出データが算出される前である場合に、前記第2コアは、前周期で算出した前周期の第2算出データを退避しておき、その退避した前記前周期の第2算出データと前記第1コアの算出した前周期の前記第1算出データとを比較する、モータ制御装置。
【請求項4】
請求項1のモータ制御装置において、
前記バッファが、複数のバッファにより構成され、
前記第1コアが前記複数のバッファに前記第1算出データを保存する場合に、前記第2コアは前記第1コアが前記複数のバッファの中でどのバッファに算出したかを示すアドレスを受け取り、前記第2コアは前記アドレスを使用して、対応するバッファの前記第1算出データをアクセスする、モータ制御装置。
【請求項5】
請求項1のモータ制御装置において、
前記バッファが、複数のバッファにより構成され、
前記第1コアが前記複数のバッファに前記第1算出データを保存する場合に、前記第1コアは前記第2コアが前記複数のバッファの中でどのバッファへ参照したかを示すアドレスを受け取り、前記第1コアは前記アドレスを使用して、前記第2コアが参照中のバッファを避けて他のバッファへ前記第1算出データを算出する、モータ制御装置。
【請求項6】
請求項1のモータ制御装置において、
前記第1コアの前記第1算出データおよび前記第2コアの前記第2算出データの算出周期がわからない場合おいて、前記第1算出データの算出時に第1タイムスタンプを付与し、前記第2算出データの算出時に第2タイムスタンプを付与し、前記第1タイムスタンプと前記第2タイムスタンプの差分の絶対値が許容範囲内のときに、同時性が取れたデータとして扱う、モータ制御装置。
【請求項7】
請求項6のモータ制御装置において、
前記第1タイムスタンプと前記第2タイムスタンプの差分の絶対値が許容範囲外のときには、当該第1算出データおよび当該第2算出データを使用せず、最新の同時性が取れた第1算出データおよび第2算出データを比較する、モータ制御装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、モータ制御装置に関し、特に、マルチコア型半導体装置を用いたモータ制御装置において、モータ制御用のデータの同時性を保証可能なモータ制御装置に関する。
【背景技術】
【0002】
モータ制御では、三相電流値(Iu、Iv、Iw)等の同時性が保証されていなければならないデータが存在する。処理負荷分散の為、モータ制御にマルチコアマイコンを採用していたとすると、制御周期が異なるコア・タスク間で同データ群に対して更新と参照を行うことがある。その場合、データ群を参照するタイミングによって、一方のデータは更新された今回値、もう一方のデータは更新されていない前回値といったようにデータ群の同時性が保証できないことがあった。ここで、マルチコアマイコンとは、複数のCPU(中処理装置)コアを有する制御用マイクロプロセッサとしての半導体装置(マルチコア型半導体装置ともいう)である。
【0003】
データ群の同時性を保証する為、割込み禁止の使用を検討したところ、制御周期が速いタスクでは処理負荷が増大してしまい、タスク破綻を招きかねなかった。その為、割込み禁止を用いずにモータ制御で使用するデータ群の同時性を保証する必要があった。特許文献1によれば、割込み禁止を用いず、データ群の同時性を保証する方法が開示されている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、特許文献1では、3面のバッファ(以降、トリプルバッファという)を使って、算出・参照で同バッファに対してアクセスできないようにする為、更新フラグを用いて制御している。これを2面のバッファ(以降、ダブルバッファという)に置き換えても同様な制御ができる。しかし、更新フラグを用いると、どうしても算出・参照するバッファに対してアクセスするかという分岐処理が生じてしまう。この分岐処理が生じてしまうと、マルチコア型半導体装置の処理負荷を増やすことに繋がってしまう。
【0006】
本開示は、モータ制御用のデータ群の同時性を保証するとともに、マルチコア型半導体装置の処理負荷を低減可能な技術を提供することにある。
【課題を解決するための手段】
【0007】
本開示の一形態に係るモータ制御装置は、第1コアと第2コアとを含むマルチコア半導体装置を使用してモータの制御に必要な三相電流値を、前記第1コアと前記第2コアを用いて診断するモータ制御装置であって、
前記第1コアは、前記三相電流値に関する第1データ群に基づいて第1算出データを算出してバッファに書き込み、
前記第2コアは、前記三相電流値に関する第2データ群に基づいて第2算出データを算出し、
前記第2コアは、前記第1コアが前記バッファに書き込んだ前記第1算出データを読み出して、前記第1算出データと前記第2算出データとを比較し、前記第1算出データと前記第2算出データとが閾値内かどうかを判定する診断を行う際に、前記第1コアが前記バッファに書き込んだ前記第1算出データを、前記バッファのアドレスを用いて直接参照して読み出す。
【0008】
つまり、モータ制御で使用するモータ制御用データ群の同時性を、例えば、ダブルバッファにて確保する場合に、2面のバッファのアドレスを用いることによって、マルチコア型半導体装置の処理負荷を低減させる。このアドレスを、算出処理を行う第1コア(算出側コア)や参照処理を行う第2コア(参照側コア)に通知する。この様に、アクセス先のアドレスが予めわかっていれば、更新フラグによって生じる分岐処理も無くなる為、マルチコア型半導体装置の処理負荷を低減することができる。具体的な解決手段は下記の実施例1、実施例2、実施例3で説明する。
【発明の効果】
【0009】
本開示の適用により、モータ制御で使用するデータ群に対し、マルチコア型半導体装置の処理負荷の増大を抑えて、データ群の同時性を保証することができる。
【図面の簡単な説明】
【0010】
【
図1】実施例1に係るモータ制御装置の全体ブロック図。
【
図2】実施例1に係るモータ制御装置のコアの割り当てとモータ電流制御ブロックの関連図。
【
図3】問題点を説明するための三相電流値(Iu、Iv、Iw)の更新タイミングと参照タイミングを示したタイミングチャート。
【
図4】比較例に係るダブルバッファを使ったコア間データの同時性保証方法を示す図。
【
図5】比較例に係るフラグを用いたダブルバッファの算出側コアの処理のフローチャート図。
【
図6】比較例に係るフラグを用いたダブルバッファの参照側コアの処理のフローチャート図。
【
図7】実施例1に係るダブルバッファを使ったコア間データの同時性保証方法を示す図。
【
図8】実施例1に係るアドレス参照を用いたダブルバッファで算出側コアの処理のフローチャート図。
【
図9】実施例1に係るアドレス参照を用いたダブルバッファで参照側コアの処理のフローチャート図。
【
図10】実施例2に係るアドレス参照を用いたダブルバッファで算出側コアの処理のフローチャート図。
【
図11】実施例2に係るアドレス参照を用いたダブルバッファで参照側コアの処理のフローチャート図。
【
図12】実施例3に係るタイムスタンプを用いたダブルバッファでデータのやり取りを示した図。
【
図13】実施例3に係るタイムスタンプとアドレス参照を用いたダブルバッファで算出側コアの処理のフローチャート図。
【
図14】実施例3に係るタイムスタンプとアドレス参照を用いたダブルバッファで参照側コアの処理のフローチャート図。
【発明を実施するための形態】
【0011】
以下、実施例について、図面を参照しながら詳細に説明する。
【実施例0012】
本実施例1は異なるコアで同周期タスクの算出データを使って制御を行うことを前提とする。また、これらの算出データを使う処理ではそれぞれが同周期タスクで算出されていることをわかっている前提であるとする。
【0013】
図1は、実施例1による、モータ制御の電流制御に着目したモータ制御装置の全体ブロック図である。モータ制御装置109は、例えば、電気自動車のタイヤを駆動するモータ101を制御するモータ制御装置に利用できる。
【0014】
モータ制御装置109はモータ101の出力を制御するためのモータ電流制御部104を有しており、電流検出部103にて、三相のモータ電流値(Iu、Iv、Iw)と回転角度検出部107にて検出した回転角度θeとからdq変換した電流検出値(Id^、Iq^)を出力する。電流制御部104は、電流検出値(Id^、Iq^)と電流指令部105から出力された電流指令値(Id*、Iq*)とが一致するように電圧指令(Vd*、Vq*)を出力する。三相電圧変換部 106では、電圧指令(Vd*、Vq*)と回転角度θeとから三相のモータ印加電圧に一度変換した後、パルス幅変調(PWM)したドライブ信号によって、インバータ回路102の半導体スイッチ素子をON/OFF制御して出力電圧(Vu、Vv、Vw)を調整する。これらの処理を分散させる為にモータ制御装置109ではマルチコアマイコン108を採用している。
【0015】
ここで、マルチコアマイコン108は、例えば、複数のCPU(中処理装置)コアを有する制御用マイクロプロセッサとしての半導体装置(マルチコア型半導体装置ともいう)を利用できる。また、三相のモータ101は、よく知られている様に、U相、V相、W相の3相のコイルを有しており、モータ電流値IuはU相の電流値を示し、モータ電流値IvはV相の電流値を示し、モータ電流値IwはW相の電流値を示している。出力電圧VuはU相の電圧値を示し、出力電圧VvはV相の電圧値を示し、出力電圧VwはW相の電圧値を示している。
【0016】
インバータ回路102は、バッテリBBTから直流電圧Edcを供給されている。アナログデジタル変換回路ADCは、アナログ値としての三相のモータ電流値(Iu-a、Iv-a、Iw-a)を、デジタル値としての三相のモータ電流値(Iu、Iv、Iw)へ変換するために設けられる。レゾルバ110は、モータ101の回転軸の正確な角度位置を測定できる電子機械式センサーである。レゾルバデジタル変換回路RDCは、レゾルバ110の検出した角度位置を示す信号を、マルチコア型半導体装置向けに、デジタル信号の角度信号、位置信号に変換し、回転角度検出部107へ供給する。
【0017】
図2は、実施例1に係るモータ制御装置のコアの割り当てとモータ電流制御ブロックの関連図であり、三相のモータ電流値(Iu、Iv、Iw)をASIL側コア(Core0 209:算出側コア、または、第1コアとも言う)とQM側コア(Core1 208:参照側コア、または、第2コアとも言う)の入力に着目したブロック図である。
図2には、アナログデジタル変換回路ADCと電流検出部201(
図1の電流検出部103に対応する)とが示されている。ここで、ASILとは、Automotive Safety Integrity Levelの略であり、QMとは、Quality Management levelの略である。
【0018】
電流検出部201は、ASIL側コア(Core0 209)用のモータ電流値(Iu_Lv2 205、Iv_Lv2 206、Iw_Lv2 207)と、QM側コア(Core1 208)用のモータ電流値(Iu_Lv1 202、Iv_Lv1 203、Iw_Lv1 204)と、を有している。ASIL側コア(Core0 209)は、第1データ群としてのモータ電流値(Iu_Lv2 205、Iv_Lv2 206、Iw_Lv2 207)に基づいてデータ(第1算出データDa)を算出する。また、QM側コア(Core1 208)は、第2データ群としてのモータ電流値(Iu_Lv1 202、Iv_Lv1 203、Iw_Lv1 204)に基づいてデータ(第2算出データDb)を算出する。
【0019】
QM側コア(Core1 208)がASIL側コア(Core0 209)で算出した値(Da)を受け取り、QM側コア(Core1 208)で算出した値(Db)と比較し、それら(Da、Db)が閾値内かどうかを判定する診断を、QM側コア(Core1 208)が行う場合がある。この場合に、同周期のデータ群としての「モータ電流値(Iu_Lv2 205、Iv_Lv2 206、Iw_Lv2 207)とモータ電流値(Iu_Lv2 205、Iv_Lv2 206、Iw_Lv2 207)と」に基づいて算出されたデータ(Da、Db)同士で比較しなければ誤診断を起こしてしまう可能性がある。ここで、ASIL側コア(Core0 209)はあくまでも第1算出データDaの算出処理を行うだけであるので、QM側コア(Core1 208)から侵害されないことは担保されている前提である。
【0020】
図3は、問題点を説明するための三相電流値(Iu、Iv、Iw)の更新タイミングと参照タイミングを示したタイミングチャートである。ASIL側コア(Core0 209)のモータ電流値(Iu_Lv2 304、Iv_Lv2 305、Iw_Lv2 306)とQM側コア(Core1 208)のモータ電流値(Iu_Lv1 301、Iv_Lv1 302、Iw_Lv1 303)の更新タイミングを表したタイミングチャートである。
【0021】
タイミングt1 308は、第1データ群としてのモータ電流値(Iu_Lv2 304、Iv_Lv2 305、Iw_Lv2 306)と第2データ群としてのモータ電流値(Iu_Lv1 301、Iv_Lv1 302、Iw_Lv1 303)の全ては、今回値となっており、診断するデータとしては問題無い(第1データ群と第2データ群の同時性は保証されている)。しかし、タイミングt2 307ではCore 1 208でCore 0 209からASILのモータ電流値(Iu_Lv2 304、Iv_Lv2 305、Iw_Lv2 306)を受け取って診断を実施する場合、V相電流値(ASIL: Iv_Lv2 305、QM: Iv_Lv1 302)とW相電流値(ASIL: Iv_Lw2 306、QM: Iw_Lv1 303)のタイミングが前回値(Iv_Lv2 305、Iw_Lv2 306)と今回値(Iv_Lv1 302、Iw_Lv1 303)とであり一致していない。このため、本来はタイミングt1 308の様に同周期(ここでは、すべて今回値)のデータ同士で比較しなければならないが、タイミングt2 307の様に異周期(ここでは、今期値と前回値)のデータ同士での比較なので、誤診断に繋がる可能性がある。また、この中でコア間通信を行っているデータはASIL用のモータ電流値(Iu_Lv2, Iv_Lv2, Iw_Lv2)となる。
【0022】
図4は、比較例に係るダブルバッファを使ったコア間データの同時性保証方法を示す図である。
【0023】
Core 1 401は同時性が取れたデータ群にアクセスする為、2面のバッファ(ダブルバッファの第1面目403(データ1 403ともいう)、および、ダブルバッファの第2面目404(データ2 404ともいう))を用意し、データ群の同時性が取れてからアクセスするようにする。マルチコアで制御する場合、Core 1 401とCore 0 402は非同期で処理される為、Core 1 401とCore 0 402で同じバッファに対して書き込み(または算出)と参照とを同タイミングで行ってしまう可能性がある。その為、Core 0 402がデータを書き込み、Core 1 401がデータを参照するとした場合、書き込み側のCore 0 402でCore 1 401のデータの参照先を指定する必要がある。
図4で、データ2 404にCore 0 402がデータの書き込みをする場合、その間(データの書き込み中)はCore 1 401がデータ2 404にアクセスできないようにアクセス禁止する必要がある。つまり、Core 0 402が参照先通知 405をCore 1 401にすることによって、Core 1 401とCore 0 402の同じバッファへの同時アクセスを禁止することで、データ群の同時性を保証する。
【0024】
図5は、比較例に係るフラグを用いたダブルバッファの算出側コアの処理のフローチャート図であり、
図4のCore 0 402(データの算出側コア:データの書き込み側コアとも言う)の処理のフローチャートである。
【0025】
分岐処理501で、フラグのON/OFFを確認する。ここで、例えば、フラグのONは”1”のようなハイレベルの値、フラグのOFFは”0”のようなローレベルの値とすることができる。ダブルバッファの為、フラグのONまたはOFFの値で書き込み先を制御する。分岐処理501で、このフラグがOFFの場合(真:YES)は、処理502でダブルバッファの第1面目(403)を更新し、処理503でフラグをONにし、処理506で参照側であるCore 1 401へダブルバッファの第1面目(403)を参照するように参照先を通知する。また、分岐処理501で、フラグがONの場合(否:NO)は、処理504でダブルバッファの第2面目(404)を更新し、処理505でフラグをOFFにする。そして、処理506で参照側であるCore 1 401へダブルバッファの第2面目(404)を参照するように参照先を通知する。このように、処理506で参照先通知405が行われるまでは、Core 1 401は算出先とは異なるデータを参照する。
【0026】
図6は、比較例に係るフラグを用いたダブルバッファの参照側コアの処理のフローチャート図であり、Core 1 401(データの参照側コア)の処理のフローチャートである。
【0027】
図5の処理506で通知されたフラグを分岐処理601で判定する。分岐処理601は、参照先の選択処理ということも可能である。分岐処理601で、フラグがOFFの場合(YES)は、参照処理602でダブルバッファの第2面目(404)を参照する。分岐処理601で、フラグがONの場合(NO)は、参照処理603でダブルバッファの第1面目(403)を参照する。
図5、
図6で示した手法を用いてダブルバッファ(403,404)を用いたデータの同時性を保証する。しかし、この方法では分岐処理601があり、Core 1 401の処理負荷が少しも増加させることができない場合は適用することできない、という課題がある。
【0028】
図7は、実施例1に係るダブルバッファを使ったコア間データの同時性保証方法を示す図である。
図7では、
図5、
図6で説明したフラグを使わずに、ダブルバッファでデータのやり取りを示した図であり、ダブルバッファのアクセス先をアドレスで制御する手法を示した図である。
【0029】
ダブルバッファDDBはデータバッファとして第1面目のデータバッファ(以下、第1面目ともいう)703と第2面目のデータバッファ(以下、第2面目ともいう)704とを有している。ここでは、ダブルバッファDDBの第1面目703も第2面目704も先頭アドレスが固定である場合を考える。ここで、例えば、第1面目703は先頭アドレス703ADであり、第2面目704は先頭アドレス704ADであるものとする。そして、その先頭アドレス(703ADまたは704AD)を、フラグの代わりとすることで、制御用データ群の同時性を保証する。例えば、データの算出側コア(書き込み側コア)のCore 0 702がダブルバッファDDBの第1面目703に対する第1算出データDaとしての第1書き込みデータDa1の書き込みを終わったときに、Core 0 702は、第1面目703の先頭アドレス703ADを参照するデータのアドレス705としてデータの参照側コアのCore 1 701に参照先のアドレス通知706を行う。
【0030】
Core 1 701はその通知されたアドレス705(ここでは、先頭アドレス703AD)を経由して、ダブルバッファDDBの第1面目703のデータ(Da1)にアクセスする。参照側コアのCore 1 701は、書き込み側コアのCore 0 702で算出した値(Da1)を参照して受け取り、参照側コアのCore 1 701で算出した値(第2算出データDbの第1比較データDb1)と比較し、それが閾値内かどうかを判定する診断をおこなう。なお、第1書き込みデータDa1と第1比較データDb1とは同周期のデータの基づいているものとする。
【0031】
つまり、算出側コア(Core 0 702)は第1データ群としてのモータ電流値(Iu_Lv2 205、Iv_Lv2 206、Iw_Lv2 207)に基づいてデータ(第1算出データDaの第1書き込みデータDa1)を算出する。また、QM側コア(Core1 701)は、第2データ群としてのモータ電流値(Iu_Lv1 202、Iv_Lv1 203、Iw_Lv1 204)に基づいてデータ(第2算出データDbの第1比較データDb1)を算出する。第1データ群と第2データ群とは、同周期のデータとされている。ここで、データDa1はモータ電流値(Iu_Lv2 205、Iv_Lv2 206、Iw_Lv2 207)に基づく1または複数のデータであり、例えば、モータ電流値(Iu_Lv2 205、Iv_Lv2 206、Iw_Lv2 207)の電流値とすることもできる。同様に、データDb1はモータ電流値(Iu_Lv1 202、Iv_Lv1 203、Iw_Lv1 204)に基づく1または複数のデータであり、例えば、モータ電流値モータ電流値(Iu_Lv1 202、Iv_Lv1 203、Iw_Lv1 204)の電流値とすることもできる。
【0032】
また、例えば、Core 0 702がダブルバッファDDBの第2面目704に対する第1算出データDaの第2書き込みデータDa2の書き込みを終わったときに、Core 0 702は、第2面目704の先頭アドレス704ADを参照先のデータのアドレス705としてCore 1 701に参照先のアドレス通知706を行う。
【0033】
Core 1 701はその通知されたアドレス(先頭アドレス704AD)を経由して、参照するデータのアドレス705を算出し、アドレス705を用いてダブルバッファDDBの第2面目704のデータ(Da2)にアクセスする。参照側コアのCore 1 701は、書き込み側コアのCore 0 702で算出した値(Da2)を参照して受け取り、参照側コアのCore 1 701で算出した値(第2算出データDbの第2比較データDb2)と比較し、それが閾値内かどうかを判定する診断をおこなう。ここで、第2書き込みデータDa2と第2比較データDb2とは、同周期のデータの基づいているものとする。
【0034】
つまり、算出側コア(Core 0 702)は次の第1データ群としての次のモータ電流値(Iu_Lv2 205、Iv_Lv2 206、Iw_Lv2 207)に基づいてデータ(第1算出データDaの第2書き込みデータDa2)を算出する。また、QM側コア(Core1 701)は、次の第2データ群としての次のモータ電流値(Iu_Lv1 202、Iv_Lv1 203、Iw_Lv1 204)に基づいてデータ(第2算出データDbの第2比較データDb2)を算出する。第1データ群と第2データ群とは、次の同周期のデータとされている。ここで、データDa2はモータ電流値(Iu_Lv2 205、Iv_Lv2 206、Iw_Lv2 207)に基づく1または複数のデータであり、例えば、モータ電流値(Iu_Lv2 205、Iv_Lv2 206、Iw_Lv2 207)の電流値とすることもできる。同様に、データDb2はモータ電流値(Iu_Lv1 202、Iv_Lv1 203、Iw_Lv1 204)に基づく1または複数のデータであり、例えば、モータ電流値モータ電流値(Iu_Lv1 202、Iv_Lv1 203、Iw_Lv1 204)の電流値とすることもできる。
【0035】
ここで、第1書き込みデータDa1の算出に係る第1データ群としてのモータ電流値(Iu_Lv2 205、Iv_Lv2 206、Iw_Lv2 207)と、第2書き込みデータDa2算出に係る第1データ群としてのモータ電流値(Iu_Lv2 205、Iv_Lv2 206、Iw_Lv2 207)とは、今回値と、今回値の次の周期の次回値と関係、あるいは、前回値と、前回値の次の周期の今回値と関係である。同様に、第1比較データDb1の算出に係る第2データ群としてのモータ電流値(Iu_Lv1 202、Iv_Lv1 203、Iw_Lv1 204)と、第2比較データDb2の算出に係る第2データ群としてのモータ電流値(Iu_Lv1 202、Iv_Lv1 203、Iw_Lv1 204)とは、今回値と、今回値の次の周期の次回値と関係、あるいは、前回値と、前回値の次の周期の今回値と関係である。
【0036】
なお、ここでは、Core 1 701は第1面目 703の先頭アドレス703ADや第2面目704の先頭アドレス704ADが分かれば、Core 0 702の算出データ(Da1,Da2)の書き込まれたアドレスが分かるものとしている。例えば、Core 1 701は、先頭アドレス(703ADや704AD)に所定のアドレス(ADD1,ADD2)を加算したアドレス空間(領域)にCore 0 702がデータ(Da1,Da2)を書き込むことをあらかじめ認識している。つまり、データ(Da1,Da2)において、データDa1は、(703AD+ADD1)のアドレスに、データDa2は、(704AD+ADD2)のアドレスに、格納されている。
【0037】
この様に、第1面目 703の先頭アドレス703ADまたは第2面目704の先頭アドレス704ADを用いて参照するデータ(Da1,Da2)のアドレス705を算出とすることで、Core 1 701は、ダブルバッファDDBの第1面目703、第2面目704を意識せずに、ダブルバッファDDBにアクセスすることができる。つまり、比較例で説明したフラグを用いる必要がなくなるので、フラッグの値の分岐処理は不要である。
【0038】
この例では、先頭アドレス703ADや先頭アドレス704ADを通知することにしているがこれに限定されない。通知するアドレスは、Core 0 702がデータを書き込むアドレスが第1面目703の予め決められた所定の第1書き込みアドレスまたは第2面目704において予め決められた所定の第2書き込みアドレスであるならば、所定の第1書き込みアドレスまたは所定の第2書き込みアドレスを、参照先のアドレス通知706によりCore 1 701へ通知してももちろん良い。
【0039】
図8は、実施例1に係るアドレス参照を用いたダブルバッファで算出側コアの処理のフローチャート図であり、算出側コアつまり書き込み側コア(Core 0 702)の処理のフローチャートである。分岐処理801で参照側コア(Core 1 701)に通知する先頭アドレス(つまり、参照側コア701が参照するバッファの先頭アドレス)とダブルバッファDDBの第1面目703の先頭アドレスとが同じかどうかを判定する。参照側コア(Core 1 701)に通知する先頭アドレスと第1面目703の先頭アドレス(703AD)とが同じ(真:YES)であれば、更新処理802でダブルバッファDDBの第2面目704のデータ(Da2)を更新または書き込みし、通知処理804で参照側コア(Core 1 701)に参照するダブルバッファDDBの先頭アドレス(704AD)を通知する。分岐処理801で、参照側コア(Core 1 701)に通知する先頭アドレスと第1面目703の先頭アドレス(703AD)とが異なる(否:NO)である場合、更新処理803でダブルバッファDDBの第1面目703のデータ(Da1)を更新または書き込みし、通知処理804で参照側コア(Core 1 701)に参照するダブルバッファDDBの先頭アドレス(703AD)を通知する。
【0040】
図9は、実施例1に係るアドレス参照を用いたダブルバッファで参照側コアの処理のフローチャート図であり、参照側コア(Core 1 701)の処理のフローチャートである。退避処理901で通知された先頭アドレス(704ADまたは703AD)をローカルの記憶装置やレジスタに退避または格納する。処理902で先頭アドレス(704ADまたは703AD)を用いてダブルバッファDDBの第1面目703または第2面目704のデータ(Da1またはDa2)にアクセスする。
【0041】
以上で説明した実施例1のモータ制御装置109は、次のように纏めることができる。すなわち、モータ制御装置109は、第1コア702と第2コア701とを含むマルチコア半導体装置108を使用してモータ101の制御に必要な三相電流値(Iu、Iv、Iw)を、第1コア702と第2コア701を用いて診断するモータ制御装置である。第1コア702は、三相電流値(Iu、Iv、Iw)に関する第1データ群(Iu_Lv2、Iv_Lv2、Iw_Lv2)に基づいて第1算出データDa(Da1)を算出してバッファ(DDB、703)に書き込む。第2コア701は、三相電流値(Iu、Iv、Iw)に関する第2データ群(Iu_Lv1、Iv_Lv1、Iw_Lv1)に基づいて第2算出データDb(Db1)を算出する。
【0042】
そして、第2コア701は、第1コア702がバッファ703に書き込んだ第1算出データ(Da1)を読み出して、第1算出データ(Da1)と第2算出データ(Db1)とを比較し、第1算出データ(Da1)と第2算出データ(Db1)とが閾値内かどうかを判定する診断を行う際に、第1コア702がバッファ703に書き込んだ第1算出データ(Da1)を、バッファ(DDB、703)のアドレスを用いて直接参照して読み出す。
【0043】
また、モータ制御装置109は、第2コア701が第1コア702の算出した第1算出データ(Da1)にアクセスするタイミングが第1コア702の第1算出データ(Da1)と第2コア701の第2算出データ(Db1)が算出された後である場合に、今周期で算出された第1コア702の第1算出データ(Da1)と第2コア701の第2算出データ(Db1)を比較する。
【0044】
また、バッファDDBが複数のバッファ(703、704)により構成される場合において、第1コア702が複数のバッファ(703、704)に第1算出データ(Da1、Da2)を保存する場合に、第2コア701は第1コア702が複数バッファ(703、704)の中でどのバッファ(703または704)に算出したかを示すアドレス(703ADまたは704AD)を受け取り、第2コア701はアドレス(703ADまたは704AD)を使用して、対応するバッファ(703または704)の第1算出データ(Da1またはDa2)をアクセスする。
【0045】
(実施例1の効果)
図8、
図9の方法を用いることで、フラグを使わない分、参照側コア(Core 1 701)の分岐処理を入れる必要がなくなり、比較例のダブルバッファの同時性保証方法よりも、マルチコア型半導体装置の処理負荷、さらには、参照側コア(Core 1 701)の処理負荷を低減させることができる。
本実施例2は、異なるコアで同周期タスクの算出データ(出力データとも言う)を使って制御を行うことを前提とする。実施例1では書き込み側コア(Core 0 702)にどちらのバッファ(第1面目703または第2面目704)に書き込むかを選択(通知)する処理を入れた場合だったが、実施例2では参照側コア(Core 1 701)にどちらのバッファ(第1面目703または第2面目704)に書き込むかを選択(通知)する処理を入れた場合の説明である。
以上で説明した実施例2のモータ制御装置109は、次のように纏めることができる。すなわち、バッファDDBが、複数のバッファ(703、704)により構成される場合において、第1コア702が複数のバッファ(703、704)に第1算出データ(Da1、Da2)を保存する場合に、第1コア702は第2コア701が複数バッファ(703、704)の中でどのバッファ(703または704)へ参照したかを示すアドレス(703ADまたは704AD)を受け取り、第1コア702はアドレス(703ADまたは704AD)を使用して、第2コア701が参照中のバッファ(703または704:ダブルバッファ703と704の一方のバッファ)を避けて他のバッファ(704または703:ダブルバッファ703と704の他方のバッファ)へ第1算出データ(Da1またはDa2)を算出する。