以下では図面等を参照して本発明を実施するための最良の形態について説明する。
(基本コンセプト)
最初に本発明の理解を容易にするために基本コンセプトについて説明する。
はじめに、フーリエ変換で伝達関数を算出する従来手法について説明しておく。
たとえば対象物の特性上、伝達関数が一次遅れ型であることが分かっていれば、未知パラメーターτを使用して、伝達関数を次式(1)のようにおくことができる。
入力u(t)と出力y(t)に基づいて、フーリエ変換によって対象物の伝達関数を算出すると次式(2)になる。
e-jωtは、オイラーの公式で正弦波と余弦波とに分けて考えると、持続振動項であることが分かる。したがって、y(t)及びu(t)が有限の時間でゼロにならなければ、上式はどこまで時間を進めても変動し続け、積分結果は確定せず、算出に要する時間が長くなり、その伝達関数のパラメーターを推定するのに要する時間も長くなってしまう。
そこで、積分区間を適当に区切って、区切った区間の外は区切った積分区間と同じ信号が周期的に発生していると仮定し、有限時間の積分区間で計算することを考える。すると伝達関数は次式(3)で算出される。
ただし、このままでは、積分区間の端が不連続となり、誤差が大きくなってしまう。
そこで次式(4)のように、y(t)及びu(t)に積分区間の端で値がゼロに近づくような窓関数W(t)を乗算すれば、積分区間の端の影響を抑制できる。すなわち入力u(t)と出力y(t)と窓関数W(t)とを用いて、次式(4)のように有限の積分区間[0,T]でフーリエ変換し、複数の周波数について対象の伝達関数を算出し、伝達関数の周波数特性を得る。
式(4)のフーリエ変換は、s=jωとした場合の計算なので、算出される伝達関数はs=jωの周波数伝達関数となる。しかしながらこのようにしても、理想的なフーリエ変換には存在しない窓関数W(t)を導入したことによって、算出された周波数伝達関数は本来の周波数伝達関数に対して誤差を含むこととなる。そして式(4)で算出した伝達関数と合うように、式(1)のsをjωとし、τをフィッティングパラメーターとして、フィッティングし、フィッティングできなければ、最初に想定した式(1)が誤りであることが分かり、フィッティングできれば、τの推定値を得ることができる。
しかしながら、式(4)を計算する過程で窓関数W(t)を導入したことによる誤差が生じているので、誤差を含む伝達関数の周波数応答特性から伝達関数のパラメーターを推定しても、推定されたパラメーターの精度が低下してしまう。
これに対して、本実施形態では、窓関数W(t)を導入するのではなく、次式(5)のようにe-αtを乗算するようにした。e-αtは図22に示す通り、時間経過と共にゼロに収束するので、窓関数と同様に積分区間の終点t=Tで不連続となる影響を抑制できる。
なお積分区間の始点t=0では、e-αt=1なので、積分区間の始点t=0で不連続になることによる影響がある。
そこで、積分開始時点の入力u(t)及び出力y(t)は時間経過で変動しない状態(du/dt=0、dy/dt=0)で、積分区間内のu(t)はu(0)からの差を用い、y(t)は y(0) からの差を用いることで、精度よく計算できる。
このようにした場合、式(5)のラプラス変換は、s=α+jωとした場合の計算なので、算出される伝達関数はs=α+jωの伝達関数となる。ただし、理想的なフーリエ変換には存在しないαを導入したことによって、算出された伝達関数G(α+jω)は、本来の周波数伝達関数G(jω)とは異なるものとなっている。そして式(5)で算出した伝達関数と合うように、式(1)のsをα+jωとし、τをフィッティングパラメーターとして、フィッティングし、フィッティングできなければ、最初に想定した式(1)が誤りであることが分かり、フィッティングできれば、τの推定値を得ることができる。そして式(1)のsをα+jωとしてフィッティングしているので、τの推定値にαを導入したことによる誤差は生じないのである。
本願は、以上のような技術思想に基づく発明である。そして対象物として特に燃料電池を考える。
具体的には、一般的な燃料電池スタックの単セルについて図1のような等価回路を考える。
発電電流Iを入力、発電電流Iに応じた電圧降下Vを出力とする。すると等価回路のインピーダンスに相当する部分が伝達関数Gになって次式(6)の関係が得られる。
この式(6)を変形すると、一般的な燃料電池のモデルとなる伝達関数(モデル伝達関数)は以下になる。
このモデル伝達関数のパラメーターのうち、電解質膜抵抗Rmemは既知でなくてもよく、以下の手順に示すように電解質膜抵抗Rmemに因らずに反応触媒層の反応抵抗Ract及び電気二重層容量Cdlを推定して伝達関数を決定できることとなる。
そこで、s=α+jωを代入すると以下になる。
そして上式(8)の虚部Gimを抜き出すと次式(9)が得られる。
逆数をとると次式(10)が得られる。
両辺にマイナスを乗算し、ωで除算すると次式(11)が得られる。
ゆえに次式(12)が得られる。
したがって、横軸に1/ω2、縦軸に−1/ωGimをとれば、切片がCdl、傾きm=(1+αCdlRact)2/CdlRact 2の直線が描かれることとなる。これについて発明者らが実験したところ、図2の実験データーのようになり、ωが小の低周波領域であれば、確かに上述の関係が得られるものの、ωが大の高周波領域では合致しないことが知見された。これに関する発明者の考察を図3を参照して説明する。
すなわち触媒層での反応を厳密に考えるには、触媒層の厚さ方向におけるPt(反応サイト)の分布を考慮しなければならない。電解質膜から遠いPt上で反応する場合は、プロトンH+は、アイオノマー中を長い距離移動しなければならないが、電解質膜から近いPt上に集中しすぎてしまうと、やはり損失が大きくなるので、自然に、厚さ方向の分布を持って、反応が進むこととなるからである。
このような厚さ方向の分布を考慮するために、図4のような分布定数系の等価回路を考える。この等価回路によれば、高周波数の入力であるほど電気二重層容量のインピーダンス1/(ωCdl)が小さくなって、反応サイトのインピーダンスも低下する。したがって、電解質膜に近い反応サイトには、高周波数の入力であるほど電流が流れやすくなることが分かる。また電解質膜から遠い反応サイトには、アイオノマー抵抗を通らなければ電流が流れないので、高周波数の入力であるほど電流が流れにくくなることが分かる。
したがって、図2のグラフに示す直線から実測値が乖離し始める周波数よりも高周波数の領域では、電解質膜から遠い反応サイトの電気二重層容量が燃料電池の容量にはカウントされなくなって、燃料電池の容量が式(6)の直線に合致しなくなっているということが発明者らの知見である。
この特性は、式(7)の直線から実測値が乖離し始める周波数で、電気二重層容量のインピーダンスとアイオノマー抵抗とが同程度となったことによって現れると考えられる。
したがって、この周波数での電気二重層容量のインピーダンスを算出することで、おおよそのアイオノマー抵抗を推定することもできる、と本件発明者らは知見した。
したがって、このような技術思想を利用すれば、伝達関数の虚部の情報のみから算出できる燃料電池の容量に基づいて、燃料電池の状態(伝達関数のパラメーター)を容易に推定することができるのである。
続いて以下では、このような技術思想を用いる燃料電池内部状態推定装置の具体的な構成について説明する。
図5は、本発明による燃料電池内部状態推定装置を適用可能な燃料電池システムの一例を示すシステム構成図である。
燃料電池システム1は、燃料電池スタック10と、DC/DCコンバーター40と、二次電池50と、負荷60と、コントローラー70と、を含む。
燃料電池スタック10は、アノードライン20から供給される水素と、カソードライン30から供給される空気と、を消費して発電する。燃料電池スタック10の電流値は電流センサー11によって検出され、電流信号がコントローラー70に送られる。燃料電池スタック10の電圧値は電圧センサー12によって検出され、電圧信号がコントローラー70に送られる。燃料電池スタック10のアノードライン20には、水素ボンベ21と、水素調圧弁22と、エゼクター23と、水素循環ポンプ24と、燃料電池入口水素圧力センサー25と、パージ弁26と、が設けられる。燃料電池スタック10のカソードライン30には、コンプレッサー31と、空気流量センサー32と、燃料電池入口空気圧力センサー33と、空気調圧弁34と、が設けられる。
水素ボンベ21は、水素を貯蔵しておく。
水素調圧弁22は、弁の開度を調節することで水素ボンベ21から燃料電池スタック10に供給される水素の圧力を制御する。
エゼクター23は、燃料電池スタック10から排出された余った水素を再度燃料電池スタック10に供給する。
水素循環ポンプ24は、燃料電池スタック10への水素の供給量を調節する。
燃料電池入口水素圧力センサー25は、燃料電池スタック10に空気される水素の圧力を検出する。検出された水素圧力信号は、コントローラー70に送られる。
パージ弁26は、弁を開くことで電解質膜を透過して水素側に混入する窒素の濃度を下げる。
コンプレッサー31は、燃料電池スタック10に空気を供給する。
空気流量センサー32は、燃料電池スタック10に供給される空気の流量を検出する。検出された空気流量信号は、コントローラー70に送られる。
燃料電池入口空気圧力センサー33は、燃料電池スタック10に供給される空気の圧力を検出する。検出された空気圧力信号は、コントローラー70に送られる。
空気調圧弁34は、弁開度を調節することで燃料電池スタック10に供給される空気の圧力を制御する。
DC/DCコンバーター40は、燃料電池スタック10の電圧を調整し、二次電池50及び負荷60に出力する。
コントローラー70は、電流センサー11の出力信号、電圧センサー12の出力信号、燃料電池入口水素圧力センサー25の出力信号、空気流量センサー32の出力信号、燃料電池入口空気圧力センサー33の出力信号、を入力する。そしてコントローラー70は、燃料電池スタック10に設けられた電流センサー11及び電圧センサー12の信号に基づいて燃料電池の内部状態を推定する。そしてコントローラー70は、推定した燃料電池内部状態に基づいて、水素調圧弁22の開度に対してあらかじめ決められているデューティー比となるように、水素調圧弁22に対して駆動信号(パルス幅変調(Pulse Width Modulation;PWM)信号)を出力する。またコントローラー70は、パージ弁26の開閉を制御するように駆動信号(ON/OFF信号)を出力する。またコントローラー70は、推定した燃料電池内部状態に基づいて、空気調圧弁34の開度に対してあらかじめ決められているデューティー比となるように、空気調圧弁34に対して駆動信号(PWM信号)を出力する。またコントローラー70は、推定した燃料電池内部状態に基づいて、コンプレッサー回転数に対してあらかじめ決められているデューティー比となるように、コンプレッサー31に駆動信号(PWM信号)を出力する。またコントローラー70は、推定した燃料電池内部状態に基づいて、水素循環ポンプ回転数に対してあらかじめ決められているデューティー比となるように、水素循環ポンプ24に対して、駆動信号(PWM信号)を出力する。またコントローラー70は、燃料電池スタック10から取り出す電流に対してあらかじめ決められているデューティー比となるように、DC/DCコンバーター40に対して駆動信号(PWM信号)を出力する。コントローラー70は、I/Oインタフェース、プログラムROM、ワークRAM及びCPUを備えたマイクロプロセッサで構成される。なお、電流センサー11、電圧センサー12、DC/DCコンバーター40、コントローラー70及びそれらを繋ぐ信号線/通信線は、後述する燃料電池内部状態推定パラメーターを推定するために必要な周波数帯flow[Hz]〜fhigh[Hz]で動作可能である。また、電流センサー11及び電圧センサー12とコントローラー70とのI/Oインタフェースについては、エイリアシング発生を防止するためのアンチエイリアシングフィルタを備える。
図6は、本発明による燃料電池内部状態推定装置を適用可能な燃料電池制御装置の制御ブロック図である。また図7は、制御フローチャートである。両図の対応が分かりやすくなるように、同じ機能を果たす部分には同様の符号を付する。
はじめに図6の制御ブロック図を参照して説明する。
燃料電池制御装置7は、電流検出部S1−1と、電圧検出部S1−2と、水素圧力検出部S1−3と、空気圧力検出部S1−4と、内部状態推定パラメーター算出部S2と、燃料電池劣化状態推定部S3と、目標発電電流算出部S4と、目標水素流量算出部S5−1と、目標空気流量算出部S5−2と、目標水素圧力算出部S5−3と、目標空気圧力算出部S5−4と、発電電流制御部S6−0と、水素循環ポンプ回転数制御部S6−1と、コンプレッサー回転数制御部S6−2と、水素調圧弁開度制御部S6−3と、空気調圧弁開度制御部S6−4と、を含む。
電流検出部S1−1は、電流センサー11で検出している燃料電池スタック10から取り出している電流を読み取る。
電圧検出部S1−2は、電圧センサー12で検出している燃料電池スタック10の電圧を読み取る。
水素圧力検出部S1−3は、燃料電池入口水素圧力センサー25で水素の圧力を検出する。
空気圧力検出部S1−4は、燃料電池入口空気圧力センサー33で空気の圧力を検出する。
内部状態推定パラメーター算出部S2は、電流検出部S1−1で検出した燃料電池スタック10から取り出している電流と、電圧検出部S1−2で検出した燃料電池スタック10の電圧に基づいて、燃料電池スタック10の内部状態を推定するパラメーターを算出する。
燃料電池劣化状態推定部S3は、推定したパラメーターに基づいて燃料電池の劣化状態を推定する。
目標発電電流算出部S4は、燃料電池スタック10に要求される電力と、内部状態推定パラメーター算出部S2で算出されたパラメーターと、に基づいて、燃料電池スタック10から取り出す発電電流を算出する。
目標水素流量算出部S5−1は、目標発電電流算出部S4で算出した目標発電電流Ir_stkに基づいて燃料電池スタック10に供給する水素の目標流量Qr_h2を算出する。
目標空気流量算出部S5−2は、内部状態推定パラメーター算出部S2で算出したパラメーターに基づいて酸素利用率UO2[%]を算出し、その酸素利用率UO2[%]及び目標発電電流算出部S4で算出した目標発電電流Ir_stkに基づいて燃料電池スタック10に供給する空気の目標流量Qr_airを算出する。
目標水素圧力算出部S5−3は、目標発電電流算出部S4で算出した目標発電電流Ir_stkに基づいて燃料電池スタック10に供給する水素の目標圧力Pr_h2を算出する。
目標空気圧力算出部S5−4は、目標発電電流算出部S4で算出した目標発電電流Ir_stkに基づいて燃料電池スタック10に供給する空気の目標圧力Pr_airを算出する。
発電電流制御部S6−0は、目標発電電流算出部S4で算出した目標発電電流Ir_stkに基づいてDC/DCコンバータ14に駆動信号を出力する。
水素循環ポンプ回転数制御部S6−1は、目標水素流量算出部S5−1で算出した目標水素流量に基づいて水素循環ポンプ11に駆動信号を出力する。
コンプレッサー回転数制御部S6−2は、目標空気流量算出部S5−2で算出した目標空気流量に基づいてコンプレッサー10に駆動信号を出力する。
水素調圧弁開度制御部S6−3は、目標水素圧力算出部S5−3で算出した目標水素圧力と、水素圧力検出部S1−3で検出した水素圧力と、に基づいて、水素調圧弁22に駆動信号を出力する。
空気調圧弁開度制御部S6−4は、目標空気圧力算出部S5−4で算出した目標空気圧力と、空気圧力検出部S1−4で検出した空気圧力と、に基づいて、空気調圧弁34に駆動信号を出力する。
次に図7の制御フローチャートを参照して説明する。
ステップS1においてコントローラー70は、燃料電池スタック10に流れる電流Istk[A]を電流センサー11で検出する。またコントローラー70は、燃料電池スタック10の電圧Vstk[V]を電圧センサー12で検出する。さらにコントローラー70は、燃料電池入口の水素圧力Ph2[kPa]を燃料電池入口水素圧力センサー25で検出する。さらにまたコントローラー70は、燃料電池入口の空気圧力Pair[kPa]を燃料電池入口空気圧力センサー33で検出する。なお、燃料電池スタック10の電流Istk[A]および電圧Vstk[V]については、後述する燃料電池内部状態推定パラメーター推定処理で燃料電池内部状態推定パラメーターを推定するために使用する周波数帯flow[Hz]〜fhigh[Hz]の最高周波数fhigh[Hz]がナイキスト周波数未満となるような検出周期で検出する。
ステップS2においてコントローラー70は、燃料電池スタック10の内部状態を推定するための伝達関数パラメーター(電気二重層容量Cdl[F]、反応抵抗Ract[Ω])及びアイオノマー抵抗Rion[Ω]を算出する。具体的な算出方法は後述する。
ステップS3においてコントローラー70は、伝達関数パラメーター(電気二重層容量Cdl[F]、反応抵抗Ract[Ω])及びアイオノマー抵抗Rion[Ω]の少なくともいずれかひとつの初期状態からの劣化割合を記録しておき、燃料電池スタック10の性能低下による交換を判断するための情報として利用する。反応抵抗Ract[Ω]及びアイオノマ抵抗Rion[Ω]は劣化すると、抵抗値が大きくなるので、どの程度大きくなったかを初期状態の抵抗値との比率で記録しておく。電気二重層容量Cdl[F]は劣化すると、容量値が小さくなるため、どの程度小さくなったかを初期状態の容量値との比率で記録しておく。本実施形態では、各パラメーターの劣化割合を記録することとしているが、ユーザーが理解しやすいように情報を加工するなどして、ユーザーに交換時期を通知するようにしてもよい。
ステップS4においてコントローラー70は、燃料電池に要求される電力Pr[kW]に基づいて、たとえば図8のようなテーブルデーターを参照することによって暫定的な目標発電電流Ir_stk_tmp[A]を算出する。ここで、テーブルデーターは実験を通じて燃料電池スタック10の電流と電圧との関係を測定して設定する。そして、ステップS2で求めた燃料電池の容量CFCが大きく低下し始める周波数fcurの逆数を時定数τcur[sec]とし、その時定数τcurで、暫定的な目標発電電流Ir_stk_tmpに一次遅れフィルタ処理を実施する。さらに後述する伝達関数算出処理に使用する入力信号としてM系列信号を加えて、目標発電電流Ir_stk[A]を算出する。入力信号は、燃料電池の内部状態を推定する伝達関数パラメーター(電気二重層容量Cdl[F]、反応抵抗Ract[Ω])及びアイオノマー抵抗Rion[Ω]を推定するために必要な周波数帯flow[Hz]〜fhigh[Hz]と振幅Aamp[A]を実験で調べておき、推定に必要な周波数帯flow[Hz]〜fhigh[Hz]の周波数成分が含まれる振幅Aamp[A]以上の信号を入力信号とする。
ステップS5においてコントローラー70は、目標発電電流Ir_stkに基づいて、たとえば図9(A)のようなテーブルデーターを参照して、目標水素流量Qr_h2[L/min]を算出する。ここで、テーブルデーターは目標発電電流Ir_stkが大きいほど、目標水素流量Qr_h2が多くなる傾向である。値は、たとえば机上にて目標発電電流Ir_stkで消費される水素量を見積もり、実験で各単位セルへの配流ばらつきを調査し、配流ばらつきがあっても電流による消費で水素不足にならないように設定する。
またコントローラー70は、たとえば図10(A)に示すテーブルに、アイオノマ抵抗Rionを適用して触媒層の相対湿度acat_ion[%]を推定する。また図10(B)に示すテーブルに、電気二重層容量Cdlを適用して触媒層の相対湿度acat_dl[%]を推定する。そして両者の平均値acat[%](=(acat_ion[%]+acat_dl[%])/2)を算出し、このacat[%]に基づいて、たとえば図10(C)のようなテーブルデーターを参照して酸素利用率UO2[%]を算出する。ここで酸素利用率UO2[%]とは、供給する空気中の酸素に対して発電電流で消費する酸素の割合を示しており、テーブルデーターは、実験で燃料電池スタック10の各単位セルへの配流ばらつきや、空気流量及び触媒層の湿潤状態の関係を調査し、配流ばらつきがあっても電流による消費で酸素不足にならないような値で、かつ、触媒層の相対湿度acat[%]が大きいほど目標空気流量Qr_air[L/min]が多くなるようにして触媒層の湿潤常態が調整されるような値を設定する。
そしてコントローラー70は、目標発電電流Ir_stkに基づいて、たとえば図9(B)のようなテーブルデーターを参照して発電に必要な空気流量Qn_air[L/min]を算出し、酸素利用率UO2[%]/100で除算し、燃料電池スタック10の各単位セルへ配流可能な最低流量Qair_base[L/min]を加えて目標空気流量Qr_air[L/min](=Qn_air[L/min]/ UO2[%]/100+Qair_base[L/min])を算出する。ここでテーブルデーターは目標発電電流Ir_stk[A]が大きいほど、発電に必要な目標空気流量Qn_air[L/min]が多くなる傾向である。値は机上にて電流で消費される酸素量と大気中の酸素成分比率から必要な空気流量とを見積もって設定する。
またコントローラー70は、目標発電電流Ir_stkに基づいて、たとえば図9(C)のようなテーブルデーターを参照して目標水素圧力Pr_h2[kPa]を算出する。ここで、テーブルデーターは目標発電電流Ir_stk[A]が大きいほど、目標水素圧力Pr_h2[kPa]が高くなる傾向である。値はテーブルデーターは机上および実験結果から圧力上昇による燃料電池の発電効率向上による効果と圧力を上昇させることで増えるコンプレッサー31などの補機類の消費電力増加による損失を考慮して最も効率よく発電できるように設定する。
またコントローラー70は、目標発電電流Ir_stk[A]に基づいて、たとえば図9(D)のようなテーブルデーターを参照して目標空気圧力Pr_air[kPa]を算出する。ここで本実施形態では図9(D)のテーブルデーターは目標水素圧力Pr_h2[kPa]を算出するときに使用した図9(C)のテーブルデーターと同じである。
ステップS6においてコントローラー70は、目標発電電流Ir_stk[A]となるようなデューティー比を計算し、そのデューティー比に基づいて、DC/DCコンバータ14を駆動させるための駆動信号を出力する。
またコントローラー70は、目標水素流量Qr_h2[L/min]に基づいて、たとえば図11(A)のようなテーブルを用いることで水素循環ポンプ目標回転数Rr_hrp[rpm]を算出する。ここで、テーブルデーターは目標水素流量Qr_h2[L/min]が多いほど水素循環ポンプ目標回転数Rr_hrp[rpm]が大きくなる。値は、たとえば実機を用いた実験によって水素流量と水素循環ポンプ回転数との関係を取得して定めればよい。そしてコントローラー70は、水素循環ポンプ目標回転数Rr_hrp[rpm]となるようなデューティー比を計算し、そのデューティー比に基づいて、水素循環ポンプ11を駆動させるための駆動信号を出力する。
さらにコントローラー70は、目標空気流量Qr_air[L/min]に基づいて、たとえば図11(B)のようなテーブルを用いることでコンプレッサー目標回転数Rr_cmp[rpm]を算出する。ここで、テーブルデーターは目標空気流量Qr_air[L/min]が多いほどコンプレッサー目標回転数Rr_cmp [rpm]が大きくなる。値は、たとえば実機を用いた実験によって空気流量とコンプレッサー回転数との関係を取得して定めればよい。そしてコントローラー70は、コンプレッサー目標回転数Rr_cmp[rpm]となるようなデューティー比を計算し、そのデューティー比に基づいて、コンプレッサー31を駆動させるための駆動信号を出力する。
さらにまたコントローラー70は、目標空気圧力Pr_air[kPa]と燃料電池入口の空気圧力Pair[kPa]に基づいて、燃料電池入口の空気圧力Pair[kPa]が目標空気圧力Pr_air[kPa]となるように、PIコントローラーを用いてフィードバック制御し、PIコントローラーの出力を空気調圧弁目標開度Dr_acv[deg]として算出する。そしてコントローラー70は、空気調圧弁目標開度Dr_acv[deg]となるようなデューティー比を計算し、そのデューティー比に基づいて、空気調圧弁34を駆動させるための駆動信号を出力する。
またコントローラー70は、目標水素圧力Pr_h2[kPa]と燃料電池入口の水素圧力Ph2[kPa]とに基づいて、燃料電池入口の水素圧力Ph2[kPa]が目標水素圧力Pr_h2[kPa]となるように、PIコントローラーを用いてフィードバック制御し、PIコントローラーの出力を水素調圧弁目標開度Dr_hcv[deg]として算出する。そしてコントローラー70は、水素調圧弁目標開度Dr_hcv[deg]となるようなデューティー比を計算し、そのデューティー比に基づいて、水素調圧弁22を駆動させるための駆動信号を出力する。
図12は、内部状態推定パラメーターを算出するサブルーチンのフローチャートである。
ステップS21においてコントローラー70は、燃料電池の電流値及び電圧値の過去の値を配列Istk_buf(i)(i=1〜N:N個の要素を持つ配列)に順次格納する。具体的には以下である。すなわち、図13(A−1)に示した初期状態では、Istk_buf(1)にI(1)が格納されている。以下順次Istk_buf(i)にI(i)が格納されている。
そして新たな電流Istkが加わったら、図13(A−2)に示すように、Istk_buf(1)の値を捨ててIstk_buf(2)の値(すなわちI(2))を上書きする。次にIstk_buf(2)にIstk_buf(3)の値(すなわちI(3))を上書きする。以下順次Istk_buf(i)にIstk_buf(i+1)の値を上書きする。そしてIstk_buf(N)にはIstkを上書きする。そしてIstk_buf(1)の値をΔIとする。
そして図13(A−3)に示すように、配列Istk_buf(i)の各要素からΔIを差し引いた値をそれぞれ配列ΔIstk_buf(i)に格納する。
同様に、図13(B−1)に示した初期状態では、Vstk_buf(1)にV(1)が格納されている。以下順次Vstk_buf(i)にV(i)が格納されている。そして新たな電圧Vstkが加わったら、図13(B−2)に示すように、Vstk_buf(1)の値を捨ててIstk_buf(2)の値(すなわちV(2))を上書きする。次にVstk_buf(2)にVstk_buf(3)の値(すなわちV(3))を上書きする。以下順次Vstk_buf(i)にVstk_buf(i+1)の値を上書きする。そしてVstk_buf(N)にはVstkを上書きする。そしてVstk_buf(1)の値をΔVとする。そして図13(B−3)に示すように、配列Vstk_buf(i)の各要素からΔVを差し引いた値をそれぞれ配列ΔVstk_buf(i)に格納する。
なお配列要素数Nは、伝達関数を算出するために必要な燃料電池スタック10の電流及び電圧の時系列データーの長さを実験で調べて設定する。たとえば、様々な運転条件下で燃料電池を運転し、アイオノマー抵抗Rion[Ω]を推定する場合よりも比較的低周波数のデーターを必要とする反応抵抗Ract[Ω]又は電気二重層容量Cdl[F]の推定に必要な時系列データーの長さを調べて設定すればよい。
ステップS22においてコントローラー70は、電流値及び電圧値の変動が許容値よりも小であるか否かを判定する。具体的には、まず電流の履歴を格納した配列ΔIstk_buf(i)(i=1〜N)の最も古い値ΔIstk_buf(1)と2番目に古い値ΔIstk_buf(2)を用いて次式(13)によって電流の微分値dI/dtを求める。
同様に、電圧降下の履歴を格納した配列ΔVstk_buf(i)(i=1〜N)の最も古い値ΔVstk_buf(1)と2番目に古い値ΔVstk_buf(2)を用いて、次式(14)によって電圧の微分値dV/dtを求める。
そして、電流の微分値dI/dtが許容値ΔIarよりも小さく、かつ、電圧の微分値dV/dtが許容値ΔVarよりも小さければ、コントローラー70は処理を抜け、そうでなければコントローラー70はステップS23へ処理を移行する。ここで、許容値ΔIar及びΔVarは、実験で実際に燃料電池内部状態推定パラメーターを推定し、正常に推定可能な許容値を確認して設定する。
ステップS23においてコントローラー70は、燃料電池容量を算出する。具体的な内容は後述する。
ステップS24においてコントローラー70は、燃料電池容量に基づいて、燃料電池スタック10の内部状態を推定するための伝達関数パラメーター(電気二重層容量Cdl[F]、反応抵抗Ract[Ω])及びアイオノマー抵抗Rion[Ω]を算出する。具体的な内容は後述する。
ステップS25においてコントローラー70は、ナイキスト線図を利用する従来手法によって内部状態パラメーター参照値を算出する。具体的には、伝達関数Gの実部Greと虚部Gimに基づいて、図14のようなナイキスト線図を利用して次式によって、電気二重層容量参照値Cdl_ref[F]、反応抵抗参照値Ract_ref[Ω]、アイオノマー抵抗参照値Rion_ref[Ω]を算出する。
ステップS26においてコントローラー70は、ステップS24にて燃料電池の容量から算出した電気二重層容量Cdlが確からしいか否かを検証する。具体的にはステップS24にて燃料電池の容量から算出した電気二重層容量Cdlと従来技術を用いて算出した電気二重層容量参照値Cdl_refとの比が許容範囲内にあれば確からしいと判定する。またステップS24にて燃料電池の容量から算出した反応抵抗Ractと従来技術を用いて算出した反応抵抗参照値Ract_refとの比が許容範囲内にあれば確からしいと判定する。さらにステップS24にて燃料電池の容量から算出したアイオノマー抵抗Rionと従来技術を用いて算出したアイオノマー抵抗参照値Rion_refとの比が許容範囲内にあれば確からしいと判定する。電気二重層容量Cdl、反応抵抗Ract及びアイオノマー抵抗Rionのすべてが確からしければ、コントローラー70は、ステップS28に処理を移行する。いずれか1つでも確からしくなければ、コントローラー70は、ステップS27に処理を移行する。
ステップS27においてコントローラー70は、内部状態パラメーターを前回値のまま維持しておく。内部状態パラメーターの初期値には標準的な燃料電池の運転状態における標準的な値が格納されている。
ステップS28においてコントローラー70は、内部状態パラメーターを、今回ステップS24で算出した値(電気二重層容量Cdl、反応抵抗Ract、アイオノマー抵抗Rion、燃料電池の容量CFCが大きく低下し始める周波数fcur)で更新する。
図15は、燃料電池容量を算出するサブルーチンのフローチャートである。
ステップS231においてコントローラー70は、推定に必要な周波数帯flow[Hz]〜fhigh[Hz]の範囲内で、以降の処理で伝達関数を算出する周波数をあらかじめ複数点選定する。そして図16のような配列fcal(k)(k=1〜M)に格納しておく。ループ変数kを1とする。ここで伝達関数を算出する周波数fcal(k)(k=1〜M)は周波数帯flow[Hz]〜fhigh[Hz]の範囲で燃料電池内部状態推定パラメーターを推定するために必要な周波数特性が得られるように実験で確認して選定する。
ステップS232においてコントローラー70は、伝達関数を算出する周波数fcal(k)をセットする。なお周波数fcal(k)の初期値は周波数fcal(1)であり、fcal(2)、fcal(3)、・・・と順次更新される。そして角周波数ω(=2π×fcal(k))[Hz]を算出する。
ステップS233においてコントローラー70は、ステップS232でセットした周波数での伝達関数Gの虚部Gim(k)を次式(16)に基づいて算出する。
なお減衰係数αは任意に選べる。固定値を用いてもよいし、状況に応じて異なる値を用いてもよい。ただし減衰係数αが大きいほど、伝達関数を算出するために必要な時系列データーは少なくてよい。すなわちラプラス積分の積分区間を短くできる。ただしこのようにすると、伝達関数を算出した結果に誤差が多く含まれることとなる。そこで、そのようなトレードオフを実験等で確認して減衰係数αを決めておく。
ステップS234においてコントローラー70は、ステップS233で算出した伝達関数に基づいて燃料電池容量CFCを次式(17)に基づいて算出し、図17に示すように順次配列に格納する。
ステップS235においてコントローラー70は、全周波数での燃料電池容量CFCの算出が完了するまではステップS232へ処理を戻し、完了したら処理を抜ける。
以上の処理によって図18のような相関がある周波数及び燃料電池容量が配列に格納されることとなる。
図19は、燃料電池容量に基づいて内部状態パラメーターを算出するサブルーチンのフローチャートである。
ステップS241においてコントローラー70は、電気二重層容量Cdl[F]を求める。具体的には、図20に示すように、角周波数ωcal(k)=2πfcal(k)(k=1〜M)の2乗の逆数を横軸、燃料電池容量CFC(k)(k=1〜M)を縦軸にとったグラフに対して近似直線を引いて、その近似直線の切片を電気二重層容量Cdlと読み取る。
ステップS242においてコントローラー70は、反応抵抗Ract[Ω]を求める。具体的には、電気二重層容量Cdlと、図20の近似直線の傾きmと、に基づいて次式(18)によって反応抵抗Ractを算出する。
ステップS243においてコントローラー70は、アイオノマー抵抗Rion[Ω]を求める。具体的には、図21のように周波数を横軸、燃料電池容量を縦軸にとって、燃料電池容量CFCが大きく低下し始める周波数fcurを求める。本実施形態では、図21に示すように、低周波数側から外挿した直線と高周波数側から外挿した直線とが交わる周波数を、周波数fcurとしている。そして次式(19)に基づいてアイオノマー抵抗Rion[Ω]を算出する。
従来のフーリエ変換を用いて伝達関数を算出する方法は、伝達関数を算出するために必要な時間が長くなり、その伝達関数のパラメーターを推定するのに要する時間も長くなっていた。伝達関数の算出時間を短縮するために、窓関数を導入してフーリエ変換することも考えられる。この場合は、窓関数を導入することによって、算出された伝達関数に誤差が生じる。このように誤差を含む伝達関数の周波数応答特性から伝達関数のパラメーターを推定しようとすると、推定されたパラメーターの精度が低下してしまう。
しかしながら本実施形態によれば、燃料電池の特性に基づいてモデル伝達関数を設定し、周波数ごとの燃料電池の伝達関数と整合させることで、そのモデル伝達関数に含まれるパラメーターを推定するようにした。具体的には、伝達関数の虚部の情報のみから算出できる燃料電池の容量に基づいて、モデル伝達関数に含まれるパラメーターを推定するようにした。このようにしたので、パラメーター(電気二重層容量Cdl[F]、反応抵抗Ract[Ω])及びアイオノマー抵抗Rion[Ω]の算出が容易である。そしてラプラス演算子の実部がフーリエ変換の窓関数と同じ役割を果たして、伝達関数算出に必要な周波数成分を含んでいれば周期的な信号でなくても対象への入力信号として使うことができるとともに、未知パラメーターを含む伝達関数式と伝達関数算出手段で算出した伝達関数との整合を取ることで、ラプラス演算子に任意の実部を設定したことで生じる誤差を未知パラメーターの推定値から取り除くことができる。したがって、推定に要する時間を無用に長くすることなく、伝達関数のパラメーターの推定精度の低下を抑制することができるようになった。パラメーターを推定することで伝達関数を設定できれば燃料電池の内部状態を推定できる。燃料電池の状態を推定できれば、内部状態に応じて燃料電池を最適に運転でき、また燃料電池の交換時期の基準にすることができるのである。
またラプラス演算子の実部の値αが大きいほどラプラス積分の積分区間を短くするようにした。実部の値αが大きいほどe-αt(tは積分開始からの時間)がゼロに漸近する時間が短くなる特性を利用して、ラプラス演算子の実部の値を任意に設定することで積分区間の長さを調節し、使用するデータ量を減らして推定精度に優先して推定にかかる時間を短くする、あるいは、使用するデータ量を増やして推定にかかる時間が長くなる代わりに推定精度を向上する、ということを容易に調整できる。
さらに各パラメーターの推定値を参照値と比較することで、推定値の信頼性を向上することができる。
以上説明した実施形態に限定されることなく、その技術的思想の範囲内において種々の変形や変更が可能であり、それらも本発明の技術的範囲に含まれることが明白である。
たとえば、上記実施形態においては、発電電流を制御して入力信号を生成しているが、燃料電池スタック10の電圧を制御して入力信号を生成し、発電電流の応答から同様に伝達関数算出手段で燃料電池スタック10の伝達関数を算出してもよい。
また入力信号は、推定に必要な周波数帯域flow[Hz]〜fhigh[Hz]が含まれていて振幅がAamp[A]以上であれば、入力信号としてステップ的な信号やM系列信号、複数の正弦波の合成信号等、どのような形態の信号を用いてもよい。ただし、振幅が大きくなると暫定的な目標発電電流Ir_stk_tmp[A]と目標発電電流Ir_stk[A]との乖離が大きくなることで要求された電力Pr[kW]と燃料電池の出力との乖離が大きくなってしまう可能性があり、燃料電池の電流と電圧の関係が線形で近似できず非線形となるため燃料電池内部状態推定パラメーターの推定が正しくできない可能性もあるので、燃料電池内部状態推定パラメーターの推定で必要な振幅Aamp[A]を超える振幅は入力信号として使わないことが望ましい。また燃料電池の運転で生じる電流変動、電圧変動等で推定に必要な周波数帯域および振幅が確保できるならば、M系列信号等の入力信号を加えなくともよい。
またステップS4においては、時定数τcurで、暫定的な目標発電電流Ir_stk_tmpに一次遅れフィルタ処理を実施したが、触媒層の電解質膜から遠い反応サイトが有効に使われなくなるfcur以上の高周波数領域の燃料電池スタック10の発電電流を抑制し、燃料電池スタック10の出力が低下しないようにできるならば、一次遅れフィルタ処理である必要はないため、一次遅れフィルタ処理に代えて、二次遅れフィルタ処理やその他の遅れ要素を持つフィルタ処理を実施してもよい。
さらに暫定的な目標発電電流Ir_stk_tmp[A]が推定に必要な周波数帯flow[Hz]〜fhigh[Hz]を含んでいて振幅がAamp[A]以上であって、かつ、τcur[sec]を時定数とする一次遅れフィルタ処理を実施しない場合には、新たに入力信号を加える必要がない。そこでこのような場合は、暫定的な目標発電電流Ir_stk_tmp[A]が入力信号であり、かつ、目標発電電流Ir_stk[A]でもある信号として扱ってもよい。
また本実施形態では、ステップS5において、アイオノマ抵抗から推定した触媒層の相対湿度acat_ion[%]と、電気二重層容量から推定した触媒層の相対湿度acat_dl[%]と、の平均値から触媒層の相対湿度acat[%]を算出した。しかしながら簡易的には、アイオノマ抵抗Rion[Ω]と触媒層の相対湿度の関係、または電気二重層容量Cdl[F]と触媒層の相対湿度の関係の少なくともいずれか一方から触媒層の相対湿度acat[%]が推定してもよい。また触媒層の相対湿度acat[%]に基づいて、酸素利用率UO2を変化させることで、目標空気流量Qr_airを算出しているが、触媒層の湿潤状態を変化させられる方法であれば、空気流量で湿潤状態を管理する必要はない。そこでこのような場合には、空気流量の調整によって湿潤状態を管理するのではなく、水素流量、水素圧力、空気圧力、燃料電池の運転温度等の調整によって湿潤状態を管理したり、その他の方法によって湿潤状態を管理したり、あるいは複数の方法を組み合わせて湿潤状態を管理してもよい。
また本実施形態では、ステップS23においては、微分値dI/dt及びdV/dtに基づいて電流Istkおよび電圧Vstkの単位時間あたりの変動の大きさを判断して条件分岐を判定した。しかしながら電流Istkおよび電圧Vstkの単位時間あたりの変動の大きさが判断できる値であれば、他の値を用いてもよく、たとえば、代わりに分散を算出して同様の条件分岐の判断をしてもよい。
また本実施形態では、ステップS243においては、低周波数側から外挿した直線と高周波数側から外挿した直線が交わる周波数をfcur[Hz]としているが、低周波数側から外挿した直線から高周波数側の特性が乖離する周波数fcur[Hz]が抽出できれば他の方法でもよい。