以下、本発明の実施形態を図面に基づいて説明する。
《第1実施形態》
図1は、発明の実施形態に係るインバータ制御装置を含む車両の概要を示すブロック図である。以下、本例のインバータ制御装置をシリーズ型のハイブリッド車両に提供した例を挙げて説明するが、本例のインバータ制御装置は、例えばエンジン及びモータを駆動源とするパラレル型のハイブリッド車両にも適用可能である。
図1に示すように、本例のインバータ制御装置を含む車両は、エンジン1と、発電機モータ2と、発電機インバータ3と、バッテリ4と、駆動機インバータ5と、駆動機モータ6と、減速機7と、駆動輪8と、エンジンコントローラ10と、発電機コントローラ20と、バッテリコントローラ30と、駆動機コントローラ40と、システムコントローラ100とを備えている。
エンジン(内燃機関)1は、ガソリン、軽油その他の燃料を燃焼させてエネルギを出力軸に出力し、エンジンコントローラ10からの制御信号に基づいて、スロットルバルブのバルブ開度や燃料噴射バルブの燃料噴射量等を制御して駆動する。またエンジン1は、発電のための駆動力を発電機モータ2に伝達する。発電機モータ2は、エンジン1の出力軸に連結され、エンジン1により駆動される。また発電機モータ2はエンジン1の始動時にエンジン1をクランキングしたり、また発電機モータ2の駆動力を利用してエンジン1を力行回転させることで電力を消費させたりする。
発電機インバータ3は、IGBT等のスイッチング素子を複数備え、発電機コントローラ20からのスイッチング信号により当該スイッチング素子のオン及びオフを切り替えることで、発電機モータ2から出力される交流電力を直流電力に変換し、または直流電力から交流電力に逆変換する変換回路である。発電機インバータ3は、バッテリ4及び駆動機インバータ5に接続されている。また発電機インバータ3には、電流センサが設けられて、電流センサなどの検出値は発電機コントローラ20に出力される。バッテリ4は、発電機インバータ3と駆動機インバータ5との間に接続され、駆動機インバータ5に電力を供給し、発電機インバータ3からの電力により充電される二次電池である。駆動機インバータ5は、発電機インバータ3あるいはバッテリ4から出力される直流電力を交流電力に変換して、駆動機モータ6に当該交流電力を出力する変換回路である。駆動機インバータ5は、駆動機コントローラ40の制御信号に基づき制御される。また駆動機インバータ5には、電流センサが設けられて、電流センサなどの検出値は駆動機コントローラ40に出力される。
駆動機モータ6は、車両の駆動軸に連結され、駆動機インバータ5からの交流電力により駆動する車両の駆動源である。また駆動機モータ6には、回転角センサが接続され、当該回転角センサの検出値は駆動機コントローラ40に出力される。駆動機モータ6の出力軸は、減速機7及び左右のドライブシャフトを介して、左右の駆動輪8に連結されている。また駆動機モータ6は、駆動輪8の回転により、回生駆動力を発生させることで、エネルギを回生する。
エンジンコントローラ10は、システムコントローラ100から送信されるエンジントルク指令値及びエンジン1に設けられた空燃比センサ(図示しない)、酸素センサ(図示しない)の検出値、温度センサ等に基づいて、スロットルバルブのバルブ開度や燃料噴射バルブの燃料噴射量、点火時期等を設定して、エンジン1を制御することで、指令値のトルクをエンジン1から出力させるためのコントローラである。発電機コントローラ20は、システムコントローラ100から送信される発電機回転数指令値及び発電機インバータ3に設けられている電流センサの検出値に基づいて、発電機インバータ3に含まれるスイッチング素子のスイッチング信号を設定して、発電機インバータ3を制御することで、指令値の回転数を実現するためのコントローラである。なお、発電機コントローラ20の詳細な構成は後述する。
バッテリコントローラ30は、バッテリ4の電圧を検出する電圧センサ、バッテリ4の電流を検出する電流センサ等の検出値から、バッテリ4の充電状態(SOC:State of Charge)を計測する。またバッテリコントローラ30は、バッテリ4の温度、バッテリ4の内部抵抗及びSOCに応じて、バッテリ4の放電可能な電力及び充電可能な電力を演算し、システムコントローラ100へ出力する。駆動機コントローラ40は、システムコントローラ100から指令される駆動トルク及び駆動機モータ6に設けられる電流センサの検出値や回転数に基づいて、駆動インバータ5を制御し、指令値のトルクを実現するためのコントローラである。
システムコントローラ100は、運転者のアクセルペダルの操作量に応じてアクセル開度、車速及び勾配などの車両状態、バッテリ4のSOC、バッテリ4の充放電可能電力、発電機モータ2の発電電力等に応じて、運転者の要求に応じてトルクを出力させるための駆動トルクを、駆動機コントローラ40を介して、駆動機モータ6に指令する。また、システムコントローラ100は、車両状態及びバッテリの状態に応じて、バッテリ4の充電又は駆動機モータ6の駆動のために、発電機モータ2の目標発電電力を演算して、発電機コントローラ20に送信する。さらに、当該目標発電電力を実現するために、エンジン1のエンジントルク指令値及び発電機モータ2の回転数指令値を演算し、エンジンコントローラ10及び発電機コントローラ20に送信する。これにより、システムコントローラ100は、車両の運転状態及びバッテリ4の状態に応じて、車両の駆動系の効率を最適化しつつ、エンジン1、発電機モータ2及び駆動機モータ6を制御する。
次に、図2を用いて、発電機コントローラ20の構成について説明する。図2は発電機モータ2、発電機インバータ3及び発電機コントローラ20のブロック図である。発電機コントローラ20は、回転数制御器21、電流指令値演算器22、電流制御器23、非干渉化制御器24、二相三相電圧変換器25、回転数演算器26及び三相二相変換器27を有している。
回転数制御器21は、回転数演算器23から出力される回転数検出値(ω
G)を、システムコントローラ100から出力される発電機モータ2の回転数指令値(ω
G *)に一致させるように、発電機モータ2のトルク指令値(T
*)を演算するPID制御器である。回転数制御器21は、回転数指令値(ω
G *)及び回転数検出値(ω
G)を入力として、以下の式(1)によりトルク指令値(T
*)を演算し、電流指令値演算器22に出力する。
ただし、K
pは比例ゲインを、K
Iは積分ゲインを、K
Dは微分ゲインを、T
Dは近似微分の時定数を、sはラプラス演算子を、ω
Gは回転数検出値を、ω
G *は回転数指令値を示す。回転数指令値(ω
G *)は、上記のとおり、システムコントローラ100により、本例のハイブリッド車両の状態から、発電機モータ2で発電すべきと判断された場合に、発電機モータ2の目標発電電力に応じて設定される指令値である。
電流指令値演算器22は、トルク指令値(T*)、バッテリ4の電圧(Vdc)、及び、発電機モータ2の角周波数を示す回転数検出値(ωG)を入力して、発電機モータ2のdq軸電流指令値(Id *、Iq *)を演算し、電流制御器23に出力する。電流指令値演算部22には、トルク指令値(T*)、回転数検出値(ωG)、電圧(Vdc)を指標として、dq軸電流指令値(Id *、Iq *)を出力するためのマップが格納されている。当該マップは、トルク指令値(T*)、回転数検出値(ωG)及び電圧(Vdc)の入力に対して、発電機モータ2の損失及び発電機インバータ3の損失を最小限に抑える最適な指令値を出力するよう対応づけられている。そして、電流指令値演算器22は、当該マップを参照して、dq軸電流指令値(Id *、Iq *)を演算する。
また電流指令値演算器22には、トルク指令値(T*)、バッテリ4の電圧(Vdc)及び回転数検出値(ωG)の他に、電流センサ29の検出値に基づくdq軸電流(Id、Iq)及びバッテリ4の充放電可能電力(Pin、Pout)が入力され、電流指令値演算器22は、発電機モータ2の発電電力の脈動を消費させるためのdq軸電流指令値を演算する。なお、当該dq軸電流指令値を演算するための、電流指令値演算器22の具体的な構成及び制御は後述する。
電流制御器23は、dq軸電流指令値(I
d *、I
q *)及びdq軸電流(I
d、I
q)を入力として、以下の式(2)を用いて、制御演算を行い、dq軸電圧指令値(v
d *、v
q *)を出力する。
ただし、K
pd、K
pqは比例ゲインを、K
id、K
iqは積分ゲインを示す。
非干渉化制御器24は、発電機モータ2のd軸及びq軸に電流が流れた際に、発生する干渉電圧を打ち消すためのdq軸非干渉電圧(v
ddcpl、v
qdcpl)を演算する。発電機モータ2に用いられるIMPモータの電圧方程式は、dq座標で表すと、一般的に以下の式(3)で表される。
ただし、L
dはd軸インダクタンスを、L
qはq軸インダクタンスを、R
aは発電機モータ2の巻線抵抗を、ω
reは電気角速度を、φ
aは磁束密度を、pは微分演算子を示す。
式(3)を各成分に分けてラプラス変換して変形すると、次式で表される。
ただし、電流応答モデルGpはそれぞれ次式で表される。
式(3)に示されるように、dq軸間で干渉しあう速度起電力があり、これを打ち消すために非干渉制御器24は、以下の式(6)で表される非干渉電圧(v
ddcpl、v
qdcpl)を演算する。
電流制御器23及び非干渉制御器24の出力側には減算器が設けられ、当該減算器において、電圧指令値(v
d *、v
q *)から式(6)で示される非干渉電圧(v
ddcpl、v
qdcpl)を減算することで、式(4)の干渉項が打ち消され、dq軸電流は、以下の式(7)で表される。
二相三相電圧変換器25は、dq軸電圧指令値(v
d *、v
q *)及び磁極位置検出器52の検出値θを入力として、下記の式(8)を用いて、当該回転座標系のdq軸電圧指令値(v
d *、v
q *)を固定座標系のu、v、w軸の電圧指令値(v
u *、v
v *、v
w *)に変換し、インバータ4に出力する。
三相二相電流変換器27は、3相2相変換を行う制御部であり、相電流(Iu、Iv、Iw)及び磁極位置検出器52の検出値θを入力として、固定座標系の相電流(Iu、Iv、Iw)を回転座標系の相電流(Id、Iq)に変換し、電流指令値演算器22、電流制御器23及び非干渉化制御器24に出力する。
電流センサ51は、U相及びV相にそれぞれ設けられ、相電流(Iu、Iv)を検出し、三相二相電流変換器26に出力する。w相の電流は、電流センサ51により検出されず、代わりに、三相二相電流変換器26は、入力された相電流(Iu、Iv)に基づき、w相の相電流を演算する。
磁極位置検出器52は発電機モータ2に設けられ、発電機モータ2の磁極の位置を検出する検出器であり、検出値(θ)を回転数演算器26に出力する。回転数演算器26は、磁極位置検出器9の検出値(θ)からモータ8の角周波数である回転数検出値(ωG)を演算し、回転数制御器21及び電流指令値演算器22に出力する。
そして、当該相電流(Id、Iq)が電流制御器23に入力されることにより、本例のインバータ制御装置は所定のゲインの電流制御ループによる制御を行う。また発電機インバータ3は、電流制御ループによる制御の下、入力された電圧指令値(v* u、v* v、v* w)に基づき、スイッチング素子のオン及びオフを切り替えるPWM制御信号を生成し、当該PWM制御信号に基づいて、スイッチング素子を動作させて、電力を変換する。
次に、図3を用いて、電流指令値演算器22の構成を説明する。図3は、電流指令値演算器22のブロック図である。電流指令値演算器22は、エンジン1の脈動によって発生する発電機2の電力の脈動を、発電機モータ2の損失として消費させるために、以下の構成を有している。
電流指令値演算器22は、電力演算器221と、電力変化率演算器222と、電力極小値演算器223と、損失増加量演算器224と、dq軸電流指令値演算器225とを有している。
電力演算器221は、三相二相電流変換器27から出力されたdq軸電流(I
d、I
q)と、最終電圧指令値(v
’ d * _z、v
’ q * _z)から、式(9)を用いて、発電機モータ2の電力(P)を演算する。
最終電圧指令値(v’ d * _z、v’ q * _z)は、直前の制御周期のタイミングで、発電機コントローラ20で演算された電圧指令値(vd *、vq *)であって、電流制御器23及び非干渉電圧制御器24の出力に基づき演算された指令値である。
なお、発電機モータ2の電力(P)は、発電機インバータ3の電圧(V
dc)と発電機インバータの直流電流(I
dc)、又は、バッテリ4の電圧(V
dc)と発電機インバータの直流電流(I
dc)から、式(10)を用いて、演算されてもよい。
電力演算器221により演算された電力(P)は、電力変化率演算器222、電力極小値演算器223及び損失増加量演算器224に出力される。
電力変化率演算器222は、電力演算器221で演算された電力(P)から、式(11)を用いることで、近似微分演算処理により、発電機モータ2の電力の変化率(dP)を演算し、電力極小値演算器223及び損失増加量演算器224に出力する。
ただし、sはラプラス演算子を示し、τ
aは時定数を示す。時定数(τ
a)には、応答遅れを極力小さくしつつ、適度にノイズを除去可能な値が設定されている。
電力極小値演算器223は、電力変化率から、発電機モータ2の電力の極小値を演算する演算器である。発電機モータ2がエンジン1の脈動の影響を受けると、発電機モータ2の電力が変化する。そのため、発電機モータ2の電力特性には、脈動に合わせて、減少から増加に転ずる点が表れる。電力極小値演算値223は、脈動により生じる電力変化の極小点を演算している。
まず、電力変化率演算値223は、電力変化率が負の値から正の値に転じた点を極小として判定するために、電力変化率(dP)が式(12)を満たすか否かを判定する。
ただし、dPzは前回の電力変化率を示す。
式(12)を満たす場合に、電力変化率演算値223は、電力演算器221で演算された電力(P)が極小値であると、判定する。そして、電力変化率演算値223は極小値を判定した場合には、電力演算器221の電力(P)を電力極小値(Pmin)として更新し、当該電力極小値(Pmin)を損失増加量演算器224に出力する。
一方、式(12)を満たさない場合には、電力変化率演算値223は、電力演算器221で演算された電力(P)を極小値として判定しない。電力演算器221の電力(P)が極小値でない場合には、電力変化率演算値223は、電力極小値(Pmin)を更新せずに、前回演算した電力極小値(Pmin)を損失増加量演算器224に出力する。
すなわち、電力変化率演算器223は、発電機モータ2の電力が極小値をとるタイミングで、電力極小値(Pmin)を更新し、各極小値の間では電力極小値(Pmin)を保持している。
損失増加量演算器224は、電力極小値演算器223により演算された電力極小値(Pmin)、電力変化率演算器222により演算された電力変化率(dP)及びバッテリ4の入出力可能電力(Pin、Pout)から、損失増加量(ΔP*)を演算する。損失増加量(ΔP*)は、発電機モータ2の損失を最小限にする電流指令値(Id *、Iq *)を調整して、エンジン1のトルク脈動により発生する発電機モータ2の電力の脈動を、発電機モータ2で消費させる電力に相当し、dq軸電流指令値の調整幅に相当する。
本例では、電力の脈動成分を発電機2の損失として消費させるために、電流指令値演算器22において、トルク指令値(T*)に基づき演算されたdq軸電流指令値を調整して、意図的に発電機モータ2で損失が発生するように制御する。この際、発電機モータ2の損失は可能な限り小さい方が好ましいため、電流指令値演算器22は、以下に説明するように、発電機モータ2の損失を抑制しつつ、脈動を消費させる指令値の調整量(損失増加量(ΔP*))を演算する。
まず、損失増加量演算器224は、発電機モータ2に電力脈動が発生しているか否かを判定するために、電力変化率(dP)を用いて判定する。まず、損失増加量演算器224は、ローパスフィルタ(LPF)を用いて、電力変化率の絶対値(|dP|)から
電力変化率判定値(dP_jdg)を演算する。ローパスフィルタは、電力変化率の絶対値(|dP|)の減少時に作用する遅れフィルタであって、電力変化がない(電力変化率(dP)がゼロ)、あるいは、電力変化が小さい場合に、電力変化率をゼロに収束させるためのフィルタである。なお、LPFの時定数には、電力脈動の有無を効果的に判定できる値が予め設定されている。
電力変化率の絶対値(|dP|)が減少していない場合には、電力変化率の絶対値(|dP|)が、電力変化率判定値(dP_jdg)として演算される。一方、電力変化率の絶対値(|dP|)が減少した場合には、電力変化率の絶対値(|dP|)にローパスフィルタを施した値が電力変化率判定値(dP_jdg)として演算される。
そして、損失増加量演算器224は、電力変化率判定値(dP_jdg)と所定の判定閾値(dP_th)とを比較する。電力変化率判定値(dP_jdg)が判定閾値(dP_th)より大きい場合には、電力脈動が発生していると判定する。一方、電力変化率判定値(dP_jdg)が判定閾値(dP_th)以下である場合には、電力脈動が発生していないと判定する。
判定閾値(dP_th)は、組み合わせるエンジン1の動作回転数と脈動周波数に応じて、設計または実験的に調整された閾値である。電流指令値演算器22はマップにより、判定閾値(dP_th)を管理しており、当該マップは、エンジン動作回転数と判定閾値とを対応させてマップである。
電力脈動が発生している場合には、損失増加量演算器224は、発電機モータ2の電力(P)と電力極小値(Pmin)との差分(ΔP0 *)を演算する。電力極小値(Pmin)は、脈動する電力(P)の極小値を示している。そのため、発電機モータ2の電力(P)と電力極小値(Pmin)との差分(ΔP0 *)が、脈動により生じる電力の大きさとなる。
そして、損失増加量演算器224は、差分(ΔP
0 *)が、以下の式(13)の条件を満たすか否かを判定する。
ただし、Pinはバッテリ4の入力可能電力を、Poutはバッテリ4の出力可能電力を示す。バッテリ4の入出力可能電力(Pin、Pout)はバッテリコントローラ15で管理されている。
差分(ΔP0 *)がバッテリ4の入出力可能電力以下である場合には、脈動する分の電力をバッテリ4の充放電電力として消費することできるため、発電機モータ2の損失を高めて、脈動する電力を発電機モータ2で消費させなくてもよいことになる。
一方、差分(ΔP0 *)がバッテリ4の入出力可能電力より大きい場合には、脈動する分の電力がバッテリ4の充放電電力として消費される消費電力より大きくなるため、消費できない脈動の電力分を、発電機モータ2の消費電力とする。
すなわち、損失増加量演算器224は、式(13)を満たす場合には、式(14)により、差分(ΔP
0 *)からバッテリ4の入出力可能電力を減算して、電力の調整量(ΔP
*)を演算する。
一方、損失増加量演算器224は、式(13)を満たさない場合には、電力の調整量(ΔP*)をゼロとする。
dq軸電流指令値演算器225は、上記のとおり、トルク指令値(T*)、バッテリ4の電圧(Vdc)及び回転数検出値(ωG)に基づき、演算された発電機モータ2のdq軸電流指令値(Id *、Iq *)を、モータトルク及び電力損失量とdq軸電流との関係を示すマップ上で、調整して、調整量(ΔP*)を含んだdq軸電流指令値(Id *、Iq *)を演算する。なお、調整量(ΔP*)がゼロの場合には、dq軸電流指令値(Id *、Iq *)は、マップ上において、損失を最小限にした値となる。
図4は、dq軸電流(Id、Iq)上における、定トルク線及び定損失線の関係を示すグラフである。定トルク線について、トルク線の同一線上では同一のトルクが保たれており、T*で示される矢印の向きにトルクが大きくなる。また定損失線について、損失線の同一線上では電流損失は保たれており、ΔP*で示される矢印の向きに損失が大きくなる。損失は、発電機モータ2で消費される電力に相当する。図4に示すマップは、dq軸電流指令値演算器225に予め格納されている。
調整量(ΔP*)がゼロである場合には、発電機モータ2の各回転数(ωG)に応じて、発電機モータ2の効率が最も良くなるdq軸電流がマップに格納されている。
ここで、発電機モータ2の効率について、発電機モータ2の電流が増加すると、当該電流に依存する損失(発電機インバータ3の損失及び発電機モータ2の銅損)が大きくなり、また発電機モータ2の回転数が増加すると発電機モータ2の鉄損が大きくなる。
そのため、図4のマップ上で、発電機モータ2を効率よく動作させる電流指令値は、電流依存による損失を下げることに加えて、発電機モータ2の鉄損を下げるために、負のd軸電流を多く流すように設定されている。すなわち、調整量(ΔP*)がゼロである場合には、dq軸電流指令値演算器225は、図4のマップ上で、発電機モータ2の高効率点となるdq軸電流を、dq軸電流指令値として演算する。
一方、調整量(ΔP*)がゼロより大きくなると、dq軸電流指令値演算器225は、発電機モータ2の高効率点から、発電機モータ2の誘起電圧により生じる鉄損を高めるように、dq軸電流指令値を演算する。
具体的には、dq軸電流指令値演算器225は、外部から入力されるトルク指令値(T*)等に基づき、電流調整前のdq軸電流指令値(Id1 *、Iq1 *)の位置を図4のマップ上で特定する。次に、特定された位置を通る定トルク線上で、損失が大きくなる方向に、調整量(ΔP*)分、指令値を移動させる。この際、dq軸電流指令値演算器225は、図4のマップの定トルク線上で、d軸電流を、高効率点のd軸電流より正側に大きくなるように、言い換えると、高効率点のdq軸電流の位相を基本位相としたときに、当該基本位相よりも位相が遅れるように、指令値を移動させる。そして、移動後のdq軸電流指令値(Id2 *、Iq2 *)が、電力の脈動を発電機モータ2で消費させるための指令値となる。これにより、dq軸電流指令値演算器225は、dq軸電流指令値(Id1 *、Iq1 *)に基づく発電機モータ2のトルクを一定にしつつ、dq軸電流指令値(Id1 *、Iq1 *)を調整してdq軸電流指令値(Id2 *、Iq2 *)を演算する。
そして、発電機モータ2の電力の脈動により電力(P)が変動すると、電力極小値(Pmin)に対する差分(ΔP0 *)が変動し、式(13)、式(14)より、調整量(ΔP*)も、電力(P)と同期して変動する。さらに、電力極小値(Pmin)は、発電機モータ2の電力の極小値に同期して更新される。そのため、dq軸電流指令値演算器225は、電力の脈動と同期してdq軸電流指令値(Id1 *、Iq1 *)を調整した上で、当該dq軸電流指令値(Id2 *、Iq2 *)を演算することになる。これにより、本例は、当該dq軸電流指令値(Id2 *、Iq2 *)に基づいて発電機インバータ3を制御することで、発電機モータ2の損失を抑制しつつ、脈動する分の電力を発電機モータ2に消費することができる。
次に、図5を用いて、駆動機コントローラ40の構成について説明する。図5は駆動機モータ6、駆動機インバータ5及び駆動機コントローラ40のブロック図である。駆動機コントローラ40は、電流指令値演算器42、電流制御器43、非干渉化制御器44、二相三相電圧変換器45、三相二相変換器47を有している。
電流指令値演算器42は、トルク指令値(T*)、dq軸電流指令値(Id’、Iq’)、駆動機モータ6の回転数検出値(ωN)、バッテリ4の充電可能電力(Pin)、バッテリ4の放電可能電力(Pout)、バッテリ4の電圧(Vdc)及びバッテリ4の電流(Idc)を入力して、駆動機モータ6のdq軸電流指令値(Id *’、Iq *’)を演算し、電流制御器43に出力する。なお、dq軸電流指令値(Id *’、Iq *’)を演算するための、電流指令値演算器42の具体的な構成及び制御は後述する。
電流制御器43は、dq軸電流指令値(I
d *’、I
q *’)及びdq軸電流(I
d’、I
q’)を入力として、以下の式(15)を用いて、制御演算を行い、dq軸電圧指令値(v
d *’、v
q *’)を出力する。
ただし、K
pd、K
pqは比例ゲインを、K
id、K
iqは積分ゲインを示す。
非干渉化制御器44は、非干渉制御器24と同様に、dq軸電流(Id’、Iq’)を入力として、非干渉電圧を演算し、電流制御器43及び非干渉化制御器44の出力側に設けられた減算器に出力する。
二相三相電圧変換器45は、dq軸電圧指令値(vd *’、vq *’)及び磁極位置検出器52の検出値θを入力として、二相三相電圧変換器25と同様に、当該回転座標変換をし、電圧指令値(vu *’、vv *’、vw *’)をインバータ6に出力する。
三相二相電流変換器47は、3相2相変換を行う制御部であり、相電流(Iu’、Iv’、Iw’)及び磁極位置検出器54の検出値θを入力として、固定座標系の相電流(Iu’、Iv’、Iw’)を回転座標系の相電流(Id’、Iq’)に変換し、電流指令値演算器42、電流制御器43及び非干渉化制御器44に出力する。
電流センサ53は、U相及びV相にそれぞれ設けられ、相電流(Iu’、Iv’)を検出し、三相二相電流変換器46に出力する。磁極位置検出器54は駆動機モータ6に設けられ、駆動機モータ6の磁極の位置を検出する検出器であり、検出値(θ)を二相三相電圧変換器45及び三相二相電流変換器47に送信する。
次に、図6を用いて、電流指令値演算器42の構成を説明する。図6は、電流指令値演算器42のブロック図である。電流指令値演算器42は、エンジン1の脈動によって発生する発電機2の脈動する分の電力のうち、発電機モータ2で消費されない電力を、駆動機モータ6で消費させる。すなわち、電流指令値演算器22は、バッテリ4の入出力電力の脈動成分を、駆動機モータ6の損失として消費させるよう、電流指令値を演算する。
電流指令値演算器42は、電力演算器421と、電力変化率演算器422と、電力極小値演算器423と、損失増加量演算器424と、dq軸電流指令値演算器425とを有している。
電力演算器421は、バッテリ4の電圧(V
dc)及びバッテリ4の電流(I
dc)から、式(16)を用いて、バッテリ4の電力(P
’)を演算し、電力変化率演算器422及び損失増加量演算器424に出力する。
電力変化率演算器422は、電力演算器421で演算された電力(P
’)から、式(17)を用いて、近似微分演算処理により、バッテリ4の電力の変化率(dP
’)を演算し、電力極小値演算器423及び損失増加量演算器424に出力する。
ただし、式11と同様に、sはラプラス演算子を、τ
aは時定数を示す。
電力極小値演算器423は、電力変化率から、バッテリ4の電力の極小値(Pmin ’)を演算し、損失増加量演算器424に出力する。電力極小値演算器423による極小値(Pmin ’)の演算は、電力極小値演算器223の極小値(Pmin)の演算に対して、発電機モータ2の電力変化率(dP)及び前回の電力変化率(dPz)を、バッテリ4の電力変化率(dP’)及び前回の電力変化率(dPz’)に置きかえたものと、同様である。
損失増加量演算器424は、電力極小値演算器423により演算された電力極小値(Pmin)、電力変化率演算器222により演算された電力変化率(dP’)及びバッテリ4の入出力可能電力(Pin、Pout)から、損失増加量(ΔP*’)を演算し、dq軸電流指令値演算器425に出力する。
損失増加量演算器424による損失増加量(ΔP*’)の演算は、損失増加量演算器224の損失増加量(ΔP*)の演算に対して、電力変化率の絶対値(|dP|)電力変化率判定値(dP_jdg)、判定閾値(dP_th)及び差分(ΔP0 *)を、電力変化率の絶対値(|dP’|)電力変化率判定値(dP_jdg ’)、判定閾値(dP_th ’)及び差分(ΔP0 *’)に置きかえたものと、同様である。なお、判定閾値(dP_th ’)は脈動を判定するために、予め設定されている閾値である。
dq軸電流指令値演算器425は、トルク指令値(T*)、バッテリ4の電圧(Vdc)及び回転数検出値(ωM)に基づき、演算された駆動機モータ6のdq軸電流指令値(Id *’、Iq *’)を、モータトルク及び電力損失量とdq軸電流との関係を示すマップ上で、調整して、調整量(ΔP*’)を含んだdq軸電流指令値(Id *’、Iq *’)を演算する。dq軸電流指令値演算器425には、図4と同様のマップが予め格納されている。
そして、dq軸電流指令値演算器425は、外部から入力されるトルク指令値(T*)等に基づき、電流調整前のdq軸電流指令値(Id1 *’、Iq1 *’)の位置を、格納されたマップ上で特定する。次に、特定された位置を通る定トルク線上で、電流損失が大きくなる方向に、電流調整量(ΔP*’)分、指令値を移動させる。この際、dq軸電流指令値演算器225は、マップの定トルク線上で、d軸電流を、高効率点のd軸電流より正側に大きくなるように、言い換えると、高効率点のdq軸電流の位相を基本位相としたときに、当該基本位相よりも位相が高くなるように、指令値を移動させる。そして、移動後の、dq軸電流指令値(Id2 *’、Iq2 *’)が、電力の脈動を駆動機モータ6で消費させるための指令値となる。これにより、dq軸電流指令値演算器425は、dq軸電流指令値(Id1 *’、Iq1 *’)に基づく発電機モータ2のトルクを一定にしつつ、dq軸電流指令値(Id1 *’、Iq1 *’)を調整してdq軸電流指令値(Id2 *’、Iq2 *’)を演算する。
次に、電流指令値演算部22の制御について、説明する。
エンジン10のトルクが脈動すると、図7に示すように、発電機モータ2の電力が脈動する。図7は、時間に対する、発電機モータ2の電力特性を示すグラフである。
電流指令値演算器22は、脈動する電力の極小値を判定することで、脈動する電力が極小をとるタイミングを演算により特定している。図7に示す脈動の電力では、一点鎖線で示す時間(t1、t2、t3等)が、電力極小値演算器223で、極小値として特定されるタイミングである。また、電流指令値演算器22は、電力極小値演算器223により、特定した極小値のタイミングで、極小値(Pmin)を更新する。
そして、電流指令値演算器22は、式(9)〜式(14)を用いて、電力の調整量(ΔP*)を演算する。dq軸電流指令値演算器225は、電力の調整量(ΔP*)を用いて、dq軸電流指令値を調整する。
ここで、図8及び図9を用いて、調整前後のdq軸電流指令値(Id *、Iq *)について、説明する。図8は、比較例1において、dq軸電流指令値の位相を進角するよう指令値を調整した場合の、dq軸電流指令値(Id *、Iq *)を説明するためのグラフである。図9は、本例において、dq軸電流指令値の位相を遅角するよう指令値を調整した場合の、dq軸電流指令値(Id *、Iq *)を説明するためのグラフである。また、図8,9に示すグラフは、図4のマップと等価関係にある。
図8、9において、dq軸電流指令値(Id1 *、Iq1 *)は調整幅(ΔP*)で調整する前の指令値であり、dq軸電流指令値(Id2 *、Iq2 *)は調整幅(ΔP*)で調整した後の指令値である。また、点線は定電流線を、一点鎖線は定電圧線を示している。
発電機モータ2に、埋め込み磁石同期モータ(IPM)等のモータを用いた場合に、モータの損失には、モータのコイル等で消費する銅損(ジュール損失)に加えて、磁束が交番することにより発生する鉄損が存在する。銅損は、モータに流れる電流が大きいほど、大きくなる。鉄損は、磁束の増加に伴って、大きくなる。
dq軸電流指令値(Id1 *、Iq1 *)は、図4に示すマップ上で、発電機モータ2の損失を最小限にしつつ、トルク指令値(T*)により指令されたトルクを出力するために、演算された指令値である(図8のA1及び図9のB1相当)。発電機モータ2の損失は、上記の銅損と鉄損とを加えた、発電機モータ2の総合損失である。
トルク指令値(T*)対応する定トルク線上で、指令値を設定すれば、A1、B1の指令値におけるトルクと同じトルクが発電機モータ2から出力される。その一方で、A1、B1以外の指令値では発電機モータ2の損失が大きくなる。そこで、出力トルクを一定に保ちつつ、脈動の電力分を発電機モータ2で消費させるためには、A1、B1の指令値に対して、脈動の大きさに相当する調整幅(ΔP*)分、大きくした指令値を設定することになる。
この時、dq軸電流指令値を調整するためには、dq軸電流指令値(Id1 *、Iq1 *)の基本位相に対して、位相を進角させる場合(基本位相に対して左回りに位相を取った場合)と、位相を遅角させる場合(基本位相に対して右回りに位相を取った場合)が考えられる。なお、dq軸電流指令値(Id1 *、Iq1 *)の基本位相は、図4のマップ上で、トルク指令値等に基づいて発電機モータ2の総合損失を最小にする指令値の位相に相当する。
図8に示す比較例1では、調整後のdq軸電流指令値(Id2 *、Iq2 *)は、dq軸電流指令値(Id1 *、Iq1 *)の基本位相に対して、位相を進角させて、調整幅(ΔP*)分、指令値を大きくするよう、演算する。発電器モータ2において、電流指令値を進角させて、d軸電流を負側に大きくすると、図8に示すように、A1を通る定電圧線は、A2を通る定電圧線に下がり、誘起電圧が小さくなる。そして、誘起電圧が小さくなると、磁石の磁束が弱まり、全体の磁束が減少するため、鉄損が減少する。
そのため、比較例1では、調整幅(ΔP*)分、指令値を大きくすることで、電流を増加させて、インバータ損失や銅損を増加させたとしても、鉄損の減少により、総合損失が減少し、調整幅(ΔP*)分の電力を発電機モータ2で消費することができない。その結果として、発電機モータ2の電力の脈動を抑制することができない。
図9に示す本例では、調整後のdq軸電流指令値(Id2 *、Iq2 *)は、dq軸電流指令値(Id1 *、Iq1 *)の基本位相に対して、位相を遅角させて、調整幅(ΔP*)分、指令値を大きくするよう、演算する。発電器モータ2において、電流指令値を遅角させて、d軸電流を正側に大きくすると、図9に示すように、B1を通る定電圧線は、B2を通る定電圧線に上がり、誘起電圧が大きくなる。そして、誘起電圧が大きくなると、磁石の磁束が強まり、全体の磁束が増加するため、鉄損が増加する。
図10を用いて、本例による指令値の調整前後の、発電機モータ2の損失について説明する。図10は、発電機モータ2の、d軸電流に対する損失特性を示すグラフである。グラフaが電流に比例する損失特性を示し、グラフbが銅損特性を、グラフcが鉄損特性を、グラフdが総合損失特性を示すグラフである。
電流指令値演算器22は、調整前のdq軸電流指令値(Id1 *、Iq1 *)の基本位相に対して遅角させて、指令値を調整幅(ΔP*)分、大きくすることで、調整後のdq軸電流指令値(Id2 *、Iq2 *)を演算する。調整前のd軸電流指令値(Id1 *)は、正側に大きくなり、d軸電流指令値(Id2 *)となる。
銅損は、調整前のよりも調整後の方が大きくなっている。また、鉄損について、グラフbに示すように、鉄損特性は、d軸電流指令値(Id1 *)より正側では、増加特性を示している。そのため、鉄損は、電流指令値の位相を、基本位相より遅角させることで、増加させることができる。そして、発電機モータ2の総合損失は、調整前のよりも調整後の方が大きくなっている。
これにより、電流指令値演算部22は、dq軸電流指令値(Id1 *、Iq1 *)を調整して、発電機モータ2の誘起電圧の大きさに応じたモータの損失に基づいて、エンジン1のトルクの脈動により発生する発電機モータ2の電力の脈動を、発電機モータ2で消費させるdq軸電流指令値(Id2 *、Iq2 *)を演算している。そして、当該dq軸電流指令値(Id2 *、Iq2 *)で発電機インバータ3を制御することで、発電機モータ2の電力の脈動が抑制される。
また、上記のとおり、上記の調整幅(ΔP*)を演算する際に、基準となる極小値(Pmin)は、発電機モータ2の電力の極小のタイミングで更新される。例えば、図7に示すように、極小値(Pmin)が時刻(t1)、時刻(t2)及び時刻(t3)のタイミングで更新された場合に、時刻(t1)から時刻(t2)の間の時間では、調整幅(ΔP*)は、時刻(t1)の時の極小値(Pmin)と電力(P)との差分に基づいて演算され、時刻(t2)から時刻(t3)の間の時間では、調整幅(ΔP*)は、時刻(t2)の時の極小値(Pmin)と電力(P)との差分に基づいて演算される。
また、遅角させる際の基本位相は、時刻(t1)から時刻(t2)の間の時間では、時刻(t1)のdq軸電流指令値の位相となり、時刻(t2)から時刻(t3)の間の時間では、時刻(t2)のdq軸電流指令値の位相となる。
さらに、図9を用いて説明すると、電流指令値演算器22は、電力演算器221で演算された電力が極小をとるタイミングで、dq軸電流指令値演算器225により、調整前のdq軸電流指令値(Id1 *、Iq1 *)を演算することで、基本位相と、調整前の指令値の大きさが決まる。そして、モータの電力が極小値になった後、脈動により上昇すると、電流指令値演算器22は、電力(P)と極小値(Pmin)との差分に基づいて、調整幅(ΔP*)を演算する。
そして、dq軸電流指令値演算器225は、図4のマップにおいて、定トルク線上で、基本位相に対して遅角側に、電流指令値のベクトル(dq軸電流座標系のベクトル)を回転させつつ、調整幅(ΔP*)分、指令値を大きくするようにして、調整後のdq軸電流指令値(Id2 *、Iq2 *)を演算する。
すなわち、電力指令値演算器22は、演算された電力(P)が極小値をとるタイミングで、調整前のdq軸電流指令値(Id1 *、Iq1 *)の基本位相を設定する。また、電力(P)と極小値(Pmin)との差分は、発電機モータ2の電力の脈動の大きさと対応しているため、電力指令値演算器22は、発電機モータ2の電力の脈動の大きさに応じて、調整後のdq軸電流指令値(Id2 *、Iq2 *)を演算している。
次に、電流指令値演算器42の制御について説明する。電流指令値演算42の制御は、基本的には、電流指令値演算器22の制御と同様の方法で、dq軸電流指令値を演算し調整している。異なる点は、エンジン1のトルクの脈動により発生した、発電機モータ2の電力の脈動成分のうち、発電機モータ2で消費できない分の電力の脈動成分を、駆動機モータ6で消費するよう、調整量(ΔP*’)を演算している点である。
すなわち、電流指令値演算器42は、駆動機モータ6に対して、電力の脈動成分入力側である、バッテリ4の電圧(Vdc)及びバッテリ4の電流(Idc)からバッテリ4の電力(P’)を演算し、当該電力(P’)に基づいて、電流指令値演算器22と同様に、脈動する電力の極小をとるタイミングで、調整前のdq軸電流指令値の基本位相を更新しつつ、調整量(ΔP*’)を演算する。そして、電流指令値演算器42は、図4のマップと同様のマップにおいて、定トルク線上で、当該基本位相に対して遅角側に、電流指令値のベクトル(を回転させつつ、調整幅(ΔP*’)分、指令値を大きくするようにして、調整後のdq軸電流指令値を演算する。
次に、図11を用いて、電流指令値演算器22の制御手順について説明する。図11は、電流指令値演算器22の制御手順を示すフローチャートである。なお、図11に示す制御フローは所定の周期で繰り返し行われている。
ステップS1にて、電力演算器221は、dq軸電流(Id、Iq)及び最終電圧指令値(v’ d * _z、v’ q * _z)に基づいて、式(9)を用いて、発電機モータ2の電力(P)を演算する。ステップS2にて、電力変化率演算器222は、電力(P)に基づいて、式(11)を用いて、電力変化率(dP)を演算する。
ステップS3にて、電力極小値演算器223は、電力変化率(dP)及び前回の電力変化率(dPz)が式(12)の条件を満たすか否かを、判定する。なお、電力変化率(dPz)は前回の制御フローにて、ステップS2で演算された電力変化率である。
式(12)の条件を満たす場合には、電力極小値演算器223は、電力(P)が極小であると判定して、当該電力(P)を電力極小値(Pmin)に設定する(ステップS4)。
一方、式(12)の条件を満たさない場合は、電力極小値(Pmin)は更新されず、ステップS5に遷る。
ステップS5にて、損失増加量演算器224は、電力変化率の絶対値(|dP|)が減少しているか否かを判定する。絶対値(|dP|)の減少は、前回の制御フローにおける絶対値(|dPz|)との比較により演算すればよい。
絶対値(|dP|)が減少している場合には、損失増加量演算器224は、絶対値(|dP|)に対して、ローパスフィルタ(LPF)によるフィルタリング演算を行い、電力変化率判定値(dP_jdg)を演算する(ステップS6)。
一方、絶対値(|dP|)が減少していない場合には、損失増加量演算器224は、絶対値(|dP|)を電力変化率判定値(dP_jdg)として演算する(ステップS7)。
ステップS8にて、損失増加量演算器224は、電力変化率判定値(dP_jdg)が判定閾値(dP_th)より大きいか否かを判定する。電力変化率判定値(dP_jdg)が判定閾値(dP_th)より大きい場合には、損失増加量演算器224は、電力の脈動が生じていると判定して、ステップS9にて、損失増加量演算器224は、電流(P)と電力極小値(Pmin)との差分(ΔP0 *)を演算する。ステップS10にて、損失増加量演算器224は、差分(ΔP0 *)が、式(13)の条件を満たすか否かを判定する。
式(13)の条件を満たす場合には、損失増加量演算器224は、脈動する分の電力がバッテリ4の充放電電力として消費可能な電力より大きいと判定し、ステップS11にて、差分(ΔP0 *)及びバッテリ4の入出力可能電力(Pin、Pout)に基づいて、式(14)を用いて、電力の調整量(ΔP*)を演算する。
ステップS8に戻り、電力変化率判定値(dP_jdg)が判定閾値(dP_th)以下である場合には、損失増加量演算器224は、電力の脈動が生じていないと判定して、電力の調整量(ΔP*)をゼロにする(ステップS12)。
ステップS10に戻り、式(13)の条件を満たさない場合には、損失増加量演算器224は、脈動する分の電力を、バッテリ4の充放電電力として消費可能であると判定し、電力の調整量(ΔP*)をゼロにする(ステップS12)。
ステップS13にて、dq軸電流指令値演算器225は、図4のマップを参照し、発電機モータ2を効率よく動作させるdq軸電流指令値(Id1 *、Iq1 *)の基本位相に対して、位相を遅角させて、調整量(ΔP*)分、電流指令値を大きくさせることで、dq軸電流指令値(Id2 *、Iq2 *)を演算する。なお、ステップS13にて、調整量(ΔP*)がゼロの場合には、dq軸電流指令値演算器225は、指令値調整を行うことなく、dq軸電流指令値(Id1 *、Iq1 *)を出力する。
そして、電流指令値演算器22は、ステップ13で演算された指令値を電流制御器23に出力して、制御を終了する。
次に、図12を用いて、本発明及び比較例2における、発電機モータ2の回転数特性、発電機モータ2の発電電力特性、及び、発電機モータ2の損失特性について説明する。図12(a)は本発明及び比較例2における発電機モータ2の回転数特性を示すグラフであり、(b)は本発明及び比較例2における発電機モータ2の発電電力特性を示すグラフであり、(c)は本発明における発電機モータ2の損失特性を示すグラフである。図12(a)のグラフaは回転数の目標値(指令値)を示し、グラフbは回転数の計測値を示す。図12(b)のグラフcは比較例2の特性を、グラフdは本発明の特性を示す。なお、横軸は時間を示す。
比較例2は、本例と異なり、電流指令値演算器22において、電力の脈動を発電機モータ2の損失として消費させるように、dq軸電流指令値を調整していない。その他の構成は、本例と同様とする。
図12(a)に示すように、エンジン1のトルクの脈動によって、発電機2の回転数が脈動している。比較例2では、トルクの脈動によって、発電機モータ2の電力の脈動を抑制することできないため、図12(b)のグラフcに示すように、発電機モータ2の発電電力は脈動している。
一方、本例では、トルクの脈動によって発生する発電機モータ2の電力の脈動を、発電機モータ2で消費させている。そのため、図12(b)のグラフdに示すように、発電機モータ2の発電電力は脈動せずに、発電機モータ2の発電電力は、ほぼ一定の値で推移する。
そして、図12(c)に示すように、本発明における発電機モータ2の損失は、電力の脈動と同期するように、変化している。この点からも、発電機モータ2の損失として、電力の脈動が消費されていることが確認できる。
上記のように、本例は、発電機モータ2のトルク指令値に基づいて、発電機インバータ3を制御するdq軸電流指令値をそれぞれ演算し、dq軸電流指令値を調整して、少なくとも発電機モータ2の誘起電圧の大きさに応じた発電機モータ2の損失に基づいて、エンジン1のトルクの脈動により発生する発電機モータ2の電力の脈動を発電機モータ2で消費させるdq軸電流指令値を演算し、発電機インバータ3を制御する。
また、本例は、駆動機モータ6のトルク指令値に基づいて、駆動機インバータ5を制御するdq軸電流指令値をそれぞれ演算し、dq軸電流指令値を調整して、少なくとも駆動機モータ6の誘起電圧の大きさに応じた駆動機モータ6の損失に基づいて、エンジン1のトルクの脈動により発生する駆動機モータ6の電力の脈動を駆動機モータ6で消費させるdq軸電流指令値を演算し、駆動機モータ6を制御する。
これにより、本例は、電力の脈動をモータの損失で消費する場合に、電流変化に応じて変化する損失だけでなく、誘起電圧の大きさに応じて変化する損失(鉄損など)に応じて、電流指令値を調整するため、モータ2で消費させる電力が不足することを防ぎ、その結果として、モータの電力の脈動を抑制することができる。
また、本例は、図4のマップを参照し、調整前の電流指令値の位相である基本位相に対して遅角させて調整後の電流指令値を演算する。これにより、総合損失が最も小さくなる指令値の位相から遅角するように、電流指令値が調整されるため、調整する際の鉄損の減少を防ぐことができる。その結果として、モータの電力の脈動を抑制することができる。
また、発電機モータ2の損失を、発電機モータ2の脈動の電力分に抑えることで、発電電力の損失が大きくなることを防ぎ、効率及び燃費を向上させることができる。
また、本例は、発電機モータ2又は駆動機モータ6の電力の脈動を演算し、調整前の電流指令値の基本位相を、演算された電力の脈動が極小値をとるタイミングと対応して、設定している。これにより、電力の脈動成分を、モータで過不足なく消費させることができる。
また、本例は、発電機モータ2又は駆動機モータ6の電力の脈動の大きさに応じて、調整後の電流指令値を演算する。これにより、電力の脈動成分を、モータで過不足なく消費させることができる。
また、本例において、電流指令値演算器42は、発電機モータ2の電力脈動を、駆動機モータ2で消費させるように、電流指令値を演算する。これにより、駆動機モータの損失を調整することで、駆動トルクを大きく変化させることなく、発電機モータ2の電力の脈動を消費することができる。また、発電機モータ2で消費できない脈動する電力を、駆動機モータ6で消費することができるため、電力の脈動を十分に消費することができる。
なお、電力極小値演算器223の極小値の判定は、上記のように、実際に電力を計測して判定する方法に限定するものではなく、トルク指令値やモータの回転数信号と同期するよう判定してもよい。また、エンジン点火信号やエンジンクランク角センサ信号等のエンジン間欠燃焼を特定できる信号と同期させて、エンジン間欠燃焼に伴う発電電力脈動が最小となるタイミングに合わせるように判定してもよい。
上記の発電機モータ2又は駆動機モータ6が本発明の「モータ」に相当し、発電機インバータ3又は駆動機インバータ5が本発明の「インバータ」に、発電機コントローラ20又は駆動コントローラ40が本発明の「制御手段」に、電流指令値演算器22、42が本発明の「指令値演算手段」に、電力演算器221、421が「電力演算手段」に相当する。
《第2実施形態》
本発明の他の実施形態に係るインバータ制御装置について説明する。本例では上述した第1実施形態に対して、発電機モータ2の回転数に基づいて、電流指令値を調整している点が異なる。これ以外の構成は上述した第1実施形態と同じであるため、その記載を適宜、援用する。
まず、発電機モータ2の回転数と、発電機モータ2の鉄損との関係について、図13及び図14を用いて、説明する。図13(a)は発電機モータ2の回転数特性を示すグラフであり、図13(b)は発電機モータ2の電力特性を示すグラフである。なお、横軸は時間を示す。図14は、各回転数において、d軸電流に対する鉄損の特性を示すグラフである。なお、回転数の条件はω1<ω2<ω3とする。
図13に示すように、エンジン1のトルクの脈動が発生すると、発電機モータ2の回転数及び電力に脈動が発生する。そして、図14に示すように、発電機モータの回転数が変化すると、発電機モータ2の鉄損も変化し、発電機モータ2の鉄損(Wloss)は、回転数の2乗に比例する。
すなわち、脈動により回転数が変化すると鉄損が変化するため、調整幅(ΔP*)に基づいて調整された電流指令値により発電機モータ2を制御したとしても、実際に発電機モータ2で消費される脈動の電力は、調整幅(ΔP*)に相当する電力からずれる可能性がある。
一方、図14に示すように、回転数と鉄損との関係は予め決まっており、回転数に応じた鉄損の変化量は、回転数から把握することができる。そのため、本例では、回転数に応じて、電流指令値を補正することで、実際に発電機モータ2で消費される脈動の電力と、調整幅(ΔP*)に相当する電力とのずれを解消する。
dq軸電流指令値演算器225には、発電機モータ2の回転数と、電流指令値を補正するための補正量との関係を示すマップが格納されている。当該マップは、図14に示す関係に基づいて、予め算出されている。
dq軸電流指令値演算器225は、入力される回転数に対して当該マップを参照して、補正量を演算する。また、dq軸電流指令値演算器225は、調整幅(ΔP*)に基づいて、dq軸電流指令値を演算する。そして、dq軸電流指令値演算器225は、当該補正量を用いて、演算したdq軸電流指令値を補正する。
dq軸電流指令値演算器225には、脈動と同期して変化する回転数検出値が入力されるため、dq軸電流指令値演算器225は、当該脈動と同期して、補正量を演算し、dq軸電流指令値を補正することができる。
上記のように、本例は、発電機モータ2の回転数に応じて、電流指令値を補正する。これにより、回転数の変化により、発電機モータ2の鉄損が変化した場合に、鉄損変化分を補正することができるため、脈動する分の電力を過不足なく発電機モータ2で消費させることができる。
なお、本例において、回転数の値の代わりに、回転数脈動の幅に基づいて、電流指令値を補正してもよい。また、本例において、電流指令値演算器42は、電流指令値演算器22と同様の方法で、駆動機モータ6の回転数に応じて、電流指令値を補正してもよい。