本発明の実施形態を説明する。本実施形態を概観すると、制御パラメータ自動調整装置において、モータ停止中のモータ振動、およびモータ移動中のモータ振動を検出し、モータ振動を抑制しながら、振動振幅量及びオーバーシュート量がユーザが設定する許容値範囲内で、適正な制御パラメータを得るまで、自動調整を繰り返す調整法および装置を提供することが特徴となっている。
詳細は下記の実施例の説明を通して理解されるが、次のような効果が得られるものとなっている。すなわち、まず、制御パラメータ増加に伴うモータ振動発生に対し、制御パラメータを調整することで、モータ振動を抑制することができる。また、自動生成した位置指令パターンによるフィードバック制御パラメータを短時間に、モータ振動を抑制しつつ調整することができる。また、頻繁に利用する特定の位置指令パターンに関して、モータ振動を抑制しつつ整定時間を最小化するようなフィードフォワード制御パラメータの自動調整が可能となる。さらには、ユーザが事前に登録した複数の位置指令パターンに対して、オーバーシュート量を規定値以下とすることができる。
なお、本発明の実施形態として説明する電動機制御装置及びその自動制御法では、フィードバック制御パラメータを自動調整する際、位置制御応答周波数、及び速度制御応答周波数の2つの制御パラメータについて調整を行うが、その調整手順は、どちらを初めに調整しても最適な制御パラメータを得ることができる。実施例1では、位置制御応答周波数を調整後、速度応答周波数を調整する、という手順の実施例を示す。
図1は、本発明の第1の実施例による電動機制御装置の自動調整法を示す制御ブロック図である。第1の実施例は、フィードバック制御パラメータの自動調整を目的とする。
図1において、駆動源となる電動機1は駆動対象負荷2と連結軸3によって連結される。電動機1には電力を供給するために電力変換装置4が取り付けられており、この電力変換装置4から供給される電流によって電動機1が駆動される。電動機1には、電動機1の位置検出値θMを出力する位置検出器5が取り付けられており、後述する上位指令装置からの位置指令値θM *と電動機1の位置検出値θMとの位置偏差θeを演算する減算器6が設けられている。減算器7からの位置偏差θeは位置制御器7へと出力され、この位置制御器7は位置偏差θeに応じて速度指令値ωM *を出力する。
位置検出器5の出力する位置検出値θMは速度検出器8へと入力され、この速度検出器8は電動機1の速度検出値ωMを出力する。また、速度指令値ωM *と電動機1の速度検出値ωMとの速度偏差ωeを演算する減算器9が設けられ、この速度偏差ωeは速度制御器10に入力される。速度制御器10は入力された速度偏差ωeに応じてトルク電流指令値Iq *を出力する。
電力変換装置4と電動機1との間には、電動機1に供給されるトルク電流検出値Iqを検出する電流検出器11が取り付けられ、検出された電流値は演算器12へと送られる。演算器12はトルク電流指令値Iqと電流検出器11で検出されたトルク電流検出値Iqとの電流偏差Ieを演算し、この電流偏差電流偏差Ieは電力制御器13へと入力される。電力制御器13は電流偏差Ieに応じて電力変換器4の出力電流を調整する。
このような電動機制御装置において、位置指令に応じた速度指令値を出力する位置フィードフォワード制御部14が設けられている。この位置フィードフォワード制御部14は位置指令θM *に応じて速度指令値ωM *を出力する。さらには、位置指令θM *を生成し、位置制御器7および速度制御器10および位置フィードフォワード制御部14のパラメータを自動調整するフィードバック及びフィードフォワード制御パラメータチューニング部15が設けられている。
このチューニング部は前述の位置偏差θeを入力し、位置指令値θM *、と位置制御7に設定する位置応答周波数および速度制御器10に設定する速度応答周波数と、位置フィードフォワード制御部に設定する位置フィードフォワードゲイン及び位置フィードフォワード時定数を出力する。
図2は、図1が示すフィードバック制御及び位置フィードフォワード制御パラメータチューニング部15のブロック図を示す。
位置指令はユーザが設定するものとし、位置指令生成部151はユーザにより設定される位置指令パターンから具体的な位置指令θM *を生成する。
また、減算器6から出力された位置偏差θeを入力として、電動機から発生するモータ振動の有無を検出するモータ振動判定部152と、位置偏差θe、及び152から出力されるモータ振動検出フラグflgmvibを入力として、後述するアルゴリズムを用いて最適な位置制御応答周波数、および最適な速度制御応答周波数を自動で調整するフィードバック制御パラメータチューニング部153とを備える。
さらに、ユーザが設定する位置指令値θref * 、及び位置指令生成部151から出力される位置指令値θM *を入力として、モータ移動中、若しくはモータ停止中のいずれかを判断し、モータ停止中、モータ移動中、各々の場合において、異なるモータ振動検出振動振幅量判定値を出力する、モータ振動検出振動振幅量判定値切替部154、及び、位置偏差θe、及びモータ振動判定部152から出力されるモータ振動検出フラグflgmvibを入力として、後述するアルゴリズムを用いて最適な位置フィードフォワードゲイン、および最適な位置フィードフォワード時定数を自動で調整するフィードフォワード制御パラメータチューニング部155とを備えている。
フィードバック制御パラメータチューニング部153の内部には、後述するフィードバック制御パラメータの自動調整アルゴリズムを有している。その基本動作は、位置応答周波数、及び速度応答周波数を、位置指令印加時の位置偏差振動振幅量がユーザが設定する規定値、例えば許容値を越えない範囲内で、かつモータ振動判定部の出力であるモータ振動検出フラグflgmvibが(「モータ繰返し振動発生無し」)の状態において、最大化するというものである。
図3、および図4は第1の実施例によるフィードバック制御パラメータの自動調整フローチャートである。この図を用いて、フィードバック制御パラメータの自動調整アルゴリズムを説明する。
図4において、Fs_minは、ユーザが設定する最小速度応答周波数、Fs_maxはユーザが設定する最大速度応答周波数、Fs_divはユーザが設定する速度応答周波数増分ステップである。後述する調整時には、速度応答周波数をFs_minからFs_maxまでFs_divのステップで増加しながら調整することを意味する。
同様に、Fp_minは、ユーザが設定する最小位置応答周波数、Fp_maxはユーザが設定する最大位置応答周波数、Fp_divはユーザが設定する位置応答周波数増分ステップである。後述する調整時には、位置応答周波数をFp_minからFp_maxまでFp_divのステップで増加しながら調整することを意味する。
また、θvibは、ユーザが設定する位置偏差θeの振動振幅許容値である。Fsは、速度制御器10に設定されている現在の速度応答周波数、Fpは位置制御器7に設定されている現在の位置応答周波数である。Fp_voは振動限界の最大位置応答周波数であり、位置偏差波形の振動振幅量が許容値θvib以下、またはモータ振動検出無し、となる最大の位置応答周波数を記録する。Fs_vlは、調整により最終的に求まる最適速度応答周波数、Fp_vlは、調整により最終的に求まる最適位置応答周波数、flag_fpmaxは‘ON’の場合に位置偏差波形の振動振幅が許容値θvib以下のまま、かつモータ振動を検出しないまま最大位置応答に達したことを示すフラグである。
本フローチャートにおける調整の基本的な考え方は、位置応答周波数および速度応答周波数を、位置偏差波形に振動を誘発しない範囲内、かつモータ振動を検出しない範囲内で、可能な限り高く設定することである。また、位置応答周波数を徐々に高めて行く過程で、位置偏差波形に振動が発生、もしくはモータ振動を検出しても、速度応答周波数を少し高めることで前記位置偏差波形の振動を低減できる、またはモータ振動を抑制することができる場合があることが経験的に分かっている。
そこで、この経験則を活かす為に、位置偏差波形に振動が発生した場合、もしくはモータ振動が繰返し発生した場合には、速度応答周波数Fsを速度応答周波数増分ステップFs_divだけ高くして位置偏差波形の振動あるいは繰返し発生したモータ振動の再評価を行うこととした。
次に、図3のフローチャートを順を追って説明する。図3では、20でフィードバック制御パラメータの自動調整を開始し、処理21で各変数の初期化を実施する。初期化処理21では、FsにFs_minを代入し、速度応答周波数を最小速度応答周波数Fs_minから開始するように設定している。同様に、FpにFp_minを代入し、位置応答周波数を最小位置応答周波数Fp_minから開始するように設定している。
更に、振動限界の最大位置応答周波数Fp_voを最小位置応答周波数Fp_minで、フラグflag_fpmaxを‘OFF’で初期化し、処理22に移行する。処理22では、位置指令値θM *を入力として電動機を駆動し、処理23へ移行する。処理23では、処理22で生成する位置指令を図1における位置指令値θM *として印加した際の位置偏差θeの振動振幅を測定し、処理24へ移行する。この位置偏差θeの振動振幅の測定手段については後述する。処理24では、図2におけるモータ振動判定部152からの出力であるモータ振動検出フラグflgmvibを用いてモータ振動が繰り返しあったかを検出する。このモータ振動の検出手段ついては後述する。
次に、判定処理25では、処理24でモータ振動が繰り返し発生したか否かを判定する。判定処理25で、モータ振動が発生していない場合、処理26へ移行する。処理26では、位置偏差θeの振動振幅が許容値θvib以下か否かを判定する。判定処理26で位置偏差θeの振動振幅が許容値θvib以下かの場合、処理27へ移行する。判定処理27では、現在の位置応答周波数Fpが最大位置応答周波数Fp_max未満か否かを判定し、未満であれば、処理28に移行する。処理28では現在の位置応答周波数を位置応答周波数増分ステップだけ増加し、処理22に移行する。
一方、判定処理27で現在の位置応答周波数Fpが最大位置応答周波数Fp_max以上の場合には、処理29に移行する。処理29では、フラグflag_fpmaxに‘ON’を設定し、位置偏差波形の振動振幅が許容値θvib以下、かつモータ振動検出無しのまま、最大位置応答周波数に達したことを明示し、判定処理30に移行する。
判定処理30では、現在の速度応答周波数Fsが最大速度応答周波数Fs_max未満か否かを判定し、未満であれば、処理31に移行する。処理31では現在の速度応答周波数を速度応答周波数増分ステップFs_divだけ増加し、処理22に移行する。
一方、判定処理30で現在の位置応答周波数Fpが最大速度応答周波数Fs_max以上の場合には、位置応答周波数、速度応答周波数ともに、位置偏差波形の振動振幅が許容値θvib以下、かつモータ振動検出なしのまま最大値に達したことを意味し、処理32に移行する。処理32では、最適速度応答周波数Fs_vl、および最適位置応答周波数Fp_vlに対して、それぞれ現在の速度応答周波数Fs、現在の位置応答周波数Fpを代入した後、33へ移行し終了する。
判定処理26で振動振幅が許容値θvib以下でない場合には、処理34に移行する。判定処理34では、flag_fpmaxをチェックし、位置偏差波形の振動振幅が許容値θvib以下のまま最大位置応答に達したか否かを確認する。ここで、flag_fpmax=OFFでない場合には、位置偏差波形の振動振幅が許容値θvib以下のまま、最大位置応答に達し、その後、位置偏差波形の振動振幅が許容値θvibを越えるまで速度応答周波数を高めたことを意味し、処理35に移行する。処理35では、最適速度応答周波数Fs_vlに対して、位置偏差波形の振動振幅が許容値θvib以下となる条件を設定する為に、現在の速度応答周波数Fsから速度応答周波数増加ステップFs_divだけ減算した値を代入した後、33へ移行し終了する。
判定処理34で、flag_fpmax=OFFの場合には、判定処理36に移行し、現在の位置応答周波数Fpと前記した振動限界の最大位置応答周波数Fp_voとを比較する。ここで、「Fp>Fp_vo」が成立しない場合には、現在の位置応答周波数Fpが振動限界の最大位置応答周波数Fp_voを越える条件が存在しないことを意味し、処理35に移行する。判定処理36で「Fp>Fp_vo」が成立する場合には、判定処理37に移行する。
判定処理37では、現在の速度応答周波数Fsが最大速度応答周波数Fs_max未満か否かを判定し、未満であれば処理38に移行する。処理38では、現在の速度応答周波数Fsを速度応答周波数増分ステップFs_divだけ増加し、位置偏差波形の振動振幅の低減を図る。更に、位置偏差波形の振動振幅が必ず許容値θvib以下となるように、現在の位置応答周波数Fpを位置応答周波数増分ステップFp_divだけ減少し、処理39に移行する。処理39では、振動限界の最大位置応答周波数Fp_voとして現在の位置応答周波数Fpを記録し、位置応答周波数を更に上げるべく処理22に移行する。
判定処理37で現在の速度応答周波数Fsが最大速度応答周波数Fs_max以上の場合には、現在の速度応答周波数Fsをこれ以上増加できないことを意味し、処理40に移行する。処理40では、最適速度応答周波数Fs_vlに対して、現在の速度応答周波数Fsを代入する。更に、最適位置応答周波数Fp_vlに対しては、位置偏差波形の振動振幅が必ず許容値θvib以下となるように、現在の位置応答周波数Fpを位置応答周波数増分ステップFp_divだけ減少した後、33へ移行し終了する。
判定処理25でモータ振動検出有り状態と判定した場合には、処理41に移行する。判定処理41では、flag_fpmaxをチェックし、モータ振動検出無し状態のまま最大位置応答に達したか否かを確認する。flag_fpmax=OFF以外の場合には、位置偏差波形のモータ振動検出無しのまま、最大位置応答に達し、その後、モータ振動検出無し状態を越えるまで速度応答周波数を高めたことを意味し、処理42に移行する。
処理42では、現在の速度応答周波数は、モータ振動検出有り状態であることから、現在の速度応答周波数Fsを速度応答周波数増加ステップFs_divだけ減算する。ここで、現在の速度応答周波数Fsを速度応答周波数増加ステップFs_divだけ減算した値は、モータ振動検出しない範囲内での限界値であることが分かる。よって、最大速度応答周波数Fs_maxを現在の速度応答周波数Fsで記録することで、次回電動機駆動時にモータ振動検出有り状態となることを防ぎ、処理22へ移行する。
判定処理41で、flag_fpmax=OFFの場合には、判定処理43に移行し、現在の位置応答周波数Fpと振動限界の最大位置応答周波数Fp_voとを比較する。ここで、「Fp>Fp_vo」が成立しない場合には、現在の位置応答周波数Fpが振動限界の最大位置応答周波数Fp_voを越える条件が存在しないことを意味し、処理42に移行する。判定処理43で「Fp>Fp_vo」が成立する場合には、処理44に移行する。
判定処理44では、現在の速度応答周波数Fsが最大速度応答周波数Fs_max未満か否かを判定し、未満であれば処理45に移行する。処理45では、現在の速度応答周波数Fsを速度応答周波数増分ステップFs_divだけ増加し、現在の位置応答周波数Fpを位置応答周波数増分ステップFp_divだけ減少することで、モータ振動検出無し状態とし、処理46に移行する。処理46では、振動限界の最大位置応答周波数Fp_voとして現在の位置応答周波数Fpを記録し、位置応答周波数Fpを更に上げるべく処理22に移行する。
判定処理44で現在の速度応答周波数Fsが最大速度応答周波数Fs_max以上の場合には、現在の速度応答周波数Fsをこれ以上増加できないことを意味し、処理42に移行する。
図5および図6は、第1の実施例における振動振幅・整定時間・オーバーシュート量の測定処理フロー図である。このフローを用い、フィードバック制御及び位置フィードフォワード制御パラメータチューニング部15において、必要となる位置偏差波形の振動振幅、整定時間、オーバーシュート量を計測する方法を述べる。
図5および図6において、timeoutは、ユーザが設定する整定監視タイムアウト時間であり、位置偏差波形が始めてゼロクロスした時点を起点として、timeoutだけ整定時間を計測させる調整パラメータである。posin_plsは、ユーザが設定する整定判定用偏差であり、位置偏差の絶対値が安定してposin_pls以下となるとき、整定しているとする。
また、poserrは位置偏差、poserr_workは振動・オーバーシュート計測用位置偏差であり、位置指令印加直後の位置偏差が電動機の駆動方向に関わらず、常に正側から開始するように位置偏差poserrを符号調整した状態量である。flag_poserr_plusは、位置指令印加直後の位置偏差が正から開始することを示すフラグであり、位置偏差が正から開始する時には、flag_poserr_plus=ONとし、負から開始する時には、flag_poserr_plus=OFFとする。よって、flag_poserr_plus=ONではposerr_work=poserrであり、flag_poserr_plus=OFFではposerr_work=-poserrとなる。
poserr_minは位置偏差最小値であり、位置指令が変化し終わった直後から、整定時間の計測を終了するまでの間、常にその時点におけるposerr_workの最小値を保持する変数である。poserr_vibは位置偏差中の振動振幅最大値であり、「poserr_work-poserr_min」で算出されるposerr_workの振動振幅から常に最大値を保持する変数である。flag_plsinは整定判定用偏差到達フラグであり、位置偏差の絶対値が整定判定用偏差posin_pls以下ならばflag_plsin=ONとし、そうでないならば、flag_plsin=OFFとする。よって、flag_plsin_bkは整定判定用偏差到達フラグ前回値であり、前回設定したflag_plsinと同値なフラグである。
time_sは計測経過時間であり、位置指令が変化し終わった直後を起点とする経過時間、time_wは整定監視経過時間であり、位置偏差波形が始めてゼロクロスした時点を起点とする経過時間を示す。Stは整定時間であり、位置偏差の絶対値が整定判定用偏差posin_plsよりも大きい値からposin_pls以下となる度にStに対して計測経過時間time_sを代入する。これにより、整定監視タイムアウト時間timeoutが適切に長く設定されていれば、Stには位置指令が変化し終わった直後から位置偏差が最終的に整定するまでに要する時間が記録されることになる。
over_shootは電動機位置の位置指令値に対するオーバーシュート量であり、整定後には、poserr_minの符号反転値に等しくなる。
次に、図5および図6のフローチャートを順を追って説明する。図5および図6では、50でフローチャートを開始し、判定処理51で位置指令θM *の変化を確認する。ここでは、位置指令が入力されるまでは、位置指令に変化がない為、判定処理51を繰り返し実行するが、位置指令が入力されると、「位置指令θM *に変化あり」と判定され、判定処理52に移行する。判定処理52では、位置指令が一定か否かを判定する。ここでは、位置指令が完全に立ち上がった時点において、位置指令が一定となり、判定処理53に移行する。一方、位置指令が立ち上がっている最中は、判定処理52を繰り返し実行する。
判定処理53では、位置偏差poserrの正負を確認し、正であれば処理54に移行する。処理54では、前記位置偏差が正から開始することを示すフラグflag_poserr_plusに‘ON’をセットし、処理55に移行する。処理55では、位置偏差最小値poserr_minを位置偏差poserrで初期化し、初期化処理56に移行する。判定処理53において、位置偏差poserrが負であれば、処理57に移行し、位置偏差が正から開始することを示すフラグflag_poserr_plusに‘OFF’をセットし、処理58に移行する。処理58では、善意位置偏差最小値poserr_minを位置偏差poserrの符号反転-poserrで初期化し、初期化処理56に移行する。初期化処理56では、位置偏差中の振動振幅最大値poserr_vib、計測経過時間time_s、整定監視時間time_w、整定判定用偏差到達フラグ前回値flag_plsin_bkをゼロで初期化し、処理59に移行する。
処理59では、計測経過時間time_sに1加算し、判定処理60に移行する。判定処理60では、位置偏差poserrの絶対値が整定判定用偏差posin_pls以下ならば、処理61に移行し整定判定用偏差到達フラグflag_plsinに‘ON’をセットし、判定処理62に移行する。
判定処理62では、整定判定用偏差到達フラグ前回値flag_plsin_bkがゼロか否かを判定し、flag_plsin_bk=OFFならば、処理63に移行し整定時間Stに計測経過時間time_sを記録し処理65へ移行する。また、判定処理62において、flag_plsin_bk=ONならば、既に整定している為、整定時間Stを更新する必要は無く、処理65に移行する。処理65では、次回の位置偏差判定処理60に備えて、整定時間判定用偏差到達フラグ前回値flag_plsin_bkに対して、今回の整定時間判定用偏差到達フラグflag_plsinの値を代入し、判定処理66へ移行する。
判定処理66では、位置偏差が正から開始することを示すフラグflag_poserr_plusをチェックする。flag_poserr_plus=ONならば、位置偏差が正から開始したとして処理67へ移行し、振動・オーバーシュート計測用位置偏差poserr_workに位置偏差poserrをそのまま代入し、判定処理69に移行する。判定処理66において、flag_poserr_plus=OFFならば、位置偏差が負から開始したとして処理68へ移行し、振動・オーバーシュート計測用位置偏差poserr_workに位置偏差poserrの符号反転-poserrを代入し、判定処理69に移行する。
判定処理69では、振動・オーバーシュート計測用位置偏差poserr_workが位置偏差最小値poserr_min以下か否かを判定する。以下であれば処理70に移行し、位置偏差最小値poserr_minを現在の振動・オーバーシュート計測用位置偏差poserr_workで更新し、判定処理71に移行する。判定処理69において、振動・オーバーシュート計測用位置偏差poserr_workが位置偏差最小値poserr_min以下とならない場合には、位置偏差最小値poserr_minを更新することなく、判定処理71に移行する。
判定処理71では、これまでに計測された位置偏差中の振動振幅最大値poserr_vibと「poserr_work-poserr_min」を比較し、poserr_vibの方が小さい場合には処理72へ移行し、poserr_vibを「poserr_work-poserr_min」で更新し、判定処理73に移行する。判定処理71において、poserr_vibの方が大きい場合には、poserr_vibを更新することなく、判定処理73に移行する。
判定処理73では、位置偏差がゼロクロスしたことを検出する為に、位置偏差最小値poserr_minがゼロ以下か否かを評価する。ここで、poserr_min≦0ならば、過去に位置偏差がゼロクロスしたと判定し、処理74に移行する。処理74では、位置偏差波形が始めてゼロクロスした時点を起点とする経過時間を表す整定監視経過時間time_wに1加算し、判定処理75に移行する。判定処理73でposerr_min≦0が成立しない場合には、未だ一度も位置偏差波形がゼロクロスしていないと判定し、処理59へ移行する。
判定処理75では、位置指令が変化し終わった直後を起点とする整定監視経過時間time_wと整定監視タイムアウト時間timeoutを比較し、time_w≧timeoutならば整定監視を終了するべく処理76に移行する。一方、判定処理75において、time_w≧timeoutが成立しない場合には、整定監視を継続するべく処理59に移行する。処理76では、オーバーシュート量over_shootとして位置偏差最小値poserr_minの符号反転値-poserr_minを設定し、77に移行し、位置偏差波形の振動振幅、整定時間、オーバーシュート量を計測する処理を終了する。
図7は、第1の実施例における振動振幅・整定時間・オーバーシュート量の計測説明波形図であり、各部状態量の波形を用いて、図5および図6のフローチャートの結果を具体例で示す。図7において、波形80は位置指令値、波形81は位置偏差poserr及び振動・オーバーシュート計測用位置偏差poserr_workである。波形82は整定判定用偏差到達フラグflag_plsin、波形83は位置偏差最小値poserr_min、波形84はposerr_work-poserr_minである。
また、各波形の横軸は計測経過時間time_sであり、位置指令を示す波形80が完全に立ち上がった時点をtime_s=0としている。この場合、位置指令波形80が正方向に変化しているため、time_s≧0でのposerr_workは位置偏差poserrと等しい。ここでもし、位置指令波形80が負方向に変化していたならば、poserr_workを示す波形81を時間軸に対して線対称に変換した波形となる。
また、整定判定用偏差到達フラグflag_plsinを示す波形82は、poserr_workを示す波形81がグラフ中の-posin_plsからposin_plsの間に存在すれば‘ON’を取り、それ以外では‘OFF’を取る。この例のように、位置偏差波形が振動的な場合には、‘OFF’と‘ON’を何度か往復した後、特に整定監視タイムアウト時間timeoutが十分に長く設定されていれば、最終的に‘ON’に落ち着く。
また、整定判定用偏差到達フラグflag_plsinの立ち上がりエッジ(矢印)毎に、整定時間Stを計測経過時間time_sで更新する。整定監視経過時間time_wは、整定監視タイムアウト時間timeoutを計測する為の経過時間であり、図中に時間軸85で示したように、位置偏差波形81が始めてゼロクロスした時点を起点としている。このように、計測経過時間time_sとは別に、位置偏差波形81が始めてゼロクロスした時点を起点とする整定監視経過時間time_wを新たに設ける。その理由は、位置偏差波形がゼロクロスした時点から整定までに要する時間が、位置応答周波数や速度応答周波数といった制御パラメータの影響をあまり受けないことによる。
これにより、ユーザによる整定監視タイムアウト時間timeoutの設定に際しては、位置応答周波数や速度応答周波数と言った制御パラメータを考慮することなく、一定値を設定するだけで、制定時間Stの正確な測定を可能としている。また、波形83は位置偏差最小値poserr_minであり、振動・オーバーシュート計測用位置偏差poserr_workと比較するとわかりやすいが、poserr_workの各時点での最小値を示す。また、波形84は、poserr_work-poserr_minであり、振動・オーバーシュート計測用位置偏差poserr_workに含まれる振動成分のみを抽出した波形となる。
このことは、もしposerr_workが振動を伴わない漸減波形ならば、poserr_work-poserr_minが常にゼロになることから理解できる。また、最終的に求めたい位置偏差中の振動振幅最大値poserr_vibは、波形84のピークホールド値である。
図8は、モータ駆動時にモータ振動が発生した場合の説明波形図である。波形100は位置指令生成部151で生成される位置指令波形である。波形101は位置偏差θeである。波形102は波形101を微分することにより得られる、位置偏差微分波形である。
波形100の位置指令値を入力値として、電動機、負荷、制御パラメータ等の影響によりモータが振動した場合、位置偏差波形は波形101のように振動的な波形となり、波形101の微分により得られる波形102は、振動振幅量が大きく、周期的な振動波形となる。
本実施例におけるモータ振動判定方法は、この点に着目し、波形102の振動波形1周期分の振動振幅量が、ある任意の値を越える場合の計測回数を計測する。この計測回数が、ある任意の時間の間に、ある任意の回数だけ検出された場合、モータ振動が繰り返し発生した、と判定することを特徴とする。
図9〜図12は、第1の実施例におけるモータ振動検出処理152のフローである。このフローを用い、モータ振動判定部152で行うモータ振動検出を検出するフローを述べる。
図9〜図12において、poserrは位置偏差θeであり、poserr_oldは位置偏差θeの前回値であり位置偏差(前回値)とする。poserr_difは前記位置偏差と前記位置偏差(前回値) poserr_oldの差から算出される位置偏差微分値である。
time_vib_cntはモータ振動時の位置偏差微分波形が示す、モータ振動波形1周期分の測定時間であり、後述するモータ振動振幅最大値検出状態開始からモータ振動振幅最小値検出状態終了までの時間を測定する。time_vib_jdgはモータ振動検出時間の合計値であり、後述するモータ振動検出回数をカウントアップする毎に、モータ振動波形1周期分の時間を合算し、モータ振動が検出されている間の合計時間を計測する。time_vib_jdg_levelは、モータ振動検出時間の判定値である。モータ振動はtime_vib_jdgがtime_vib_jdg_levelを越えない範囲内で、ある任意の回数だけ繰り返し検出した場合、モータ振動検出に誤検出なくモータ振動を検出した、と判定する。また、モータ振動はtime_vib_jdgがtime_vib_jdg_levelを越えた場合、モータ振動検出時に、誤検出があったと判断し、モータ振動を繰り返し検出した、と判定しない。
time_buf[vib_dtct_ov_cnt]はモータ振動波形1周期分の測定時間を保存するバッファ値である。モータ振動を検出し、time_vib_jdg がtime_vib_jdg_level を越えた場合、time_buf[vib_dtct_ov_cnt]分だけ減算する。vib_dtct_ov_cntは、モータ振動検出時間オーバーカウント回数である。vib_dtct_ov_cntはtime_vib_jdg がtime_vib_jdg_level を越える毎にカウントアップする。vib_cntはモータ振動検出判定回数である。
poserr_dif_chk_stsはモータ振動検出判定状態を示す。poserr_dif_chk_sts=VIB_MAXのとき、モータ振動振幅最大値を測定する状態であり、poserr_dif_chk_sts=VIB_MINのとき、モータ振動振幅最小値を測定する状態であり、poserr_dif_chk_sts=VIB_CHKのとき、モータ振動振幅最大値とモータ振動振幅最小値の関係から、モータ振動を検出したか判定する状態である。
poserr_dif_maxは、poserr_difが示すモータ振動波形1周期中の最大振幅値である。poserr_dif_minは、poserr_difが示すモータ振動波形1周期中の最小振幅値である。poserr_vib_levelはモータ振動検出振動振幅量判定値であり、poserr_dif_chk_sts=VIB_CHKの状態において、poserr_dif_maxとposerr_dif_minの差が、poserr_vib_levelを越えた場合、モータ振動検出回数poserr_dif_vib_cntをカウントアップする。vib_chk_levelはモータ振動振幅最大最小判定レベル値である。
poserr_dif_vib_cntはモータ振動検出回数であり、モータ振動の動作が、time_vib_jdg_levelの範囲内で何度繰り返し検出されたかを示す。また、poserr_dif_vib_cnt が、モータ振動検出判定回数poserr_dif_vib_cnt_jdgを越えた場合、モータ振動が繰り返し発生したと判定する。vib_dtct_flgはモータ振動検出状態フラグであり、モータ振動を検出していない場合、vib_dtct_flg =OFF、モータ振動を検出した場合、vib_dtct_flg =ONとなる。
次に図9〜図12のフローチャートを順を追って説明する。図9では、300でフローチャートを開始し、処理301でモータ振動検出状態フラグvib_dtct_flg、及びモータ振動検出フラグflgmvibをOFFとし、モータ振動検出判定状態poserr_dif_chk_sts=VIB_MAXとして初期化処理を行い、処理302へ移行する。処理302では、位置偏差poserrと位置偏差(前回値)poserr_oldの差分から、位置偏差微分値poserr_difを算出する。処理303で位置偏差poserrを位置偏差(前回値)poserr_oldとし、次回の処理302で位置偏差(前回値)poserr_oldとして扱う。処理304では、位置偏差微分値poserr_difに1次遅れフィルタ処理を加え、高周波ノイズの影響によるモータ振動の誤検出を抑制する。処理305では、モータ振動1周期分の時間を測定するため、time_vib_cntに1加算し、判定処理306へ移行する。
判定処理306では、すでにモータ振動検出した状態であるかを判別し、すでにモータ振動を検出した場合、307の状態へ移行する。処理307ではモータ振動検出フラグ=‘ON’と設定することで、前記モータ振動判定部でモータ振動を検出したことを出力し、処理308へ移行し、モータ振動検出処理を終了する。また、モータ振動を検出していない場合、処理309へ移行する。
判定処理309では、モータ振動振幅値最大値検出状態poserr_dif_chk_sts=VIB_MAXの場合、判定処理310へ移行する。判定処理310では、モータ振動振幅値最大値poserr_dif_maxが位置偏差微分値poserr_difより小さい場合、処理311へ移行する。処理311にて、モータ振動振幅値最大値poserr_dif_max=poser_difとしてモータ振動振幅値最大値を更新し、判定処理312へ移行する。
判定処理312では、モータ振動振幅値最大値検出状態を終了するか判定する処理である。モータ振動時、位置偏差微分波形は正弦波波形となるため、位置偏差微分波形1周期中の最大値を通った後、位置偏差微分値は徐々に小さくなる。このことから、poserr_dif_max-poser_difなる値がモータ振動振幅最大最小判定レベル値vib_chk_levelより大きくなった場合、モータ振動振幅値最大値はすでに取得したと判断する。このとき、処理313へ移行し、モータ振動振幅値最小値検出状態poserr_dif_chk_sts=VIB_MINとする。判定処理314では、モータ振動振幅値最大値検出状態poserr_dif_chk_sts=VIB_MINの場合、判定処理315へ移行する。
判定処理315では、モータ振動振幅値最小値poserr_dif_minが位置偏差微分値poserr_difより大きい場合、処理316に移行する。処理316にて、モータ振動振幅値最小値poserr_dif_minを現在の位置指令微分値poser_difで更新し、判定処理317へ移行する。
判定処理317では、モータ振動振幅値最小値検出状態が終了か否かを判定する処理である。モータ振動時、位置偏差微分波形は正弦波波形となるため、位置偏差微分波形1周期中の最小値を通った後、位置偏差微分値は徐々に大きくなる。このことから、|poserr_dif_min-poser_dif|なる値がモータ振動振幅最大最小判定レベル値vib_chk_levelより大きくなった場合、位置偏差微分波形1周期中における、モータ振動振幅値最小値はすでに取得したと判断する。このとき、処理318へ移行し、モータ振動振幅値判定状態poserr_dif_chk_sts=VIB_CHKとする。
判定処理319では、モータ振動振幅値判定状態poserr_dif_chk_sts=VIB_CHKの場合、判定処理320へ移行する。判定処理320では、モータ振動振幅値最大値poserr_dif_maxとモータ振動振幅値最小値poserr_dif_minの差からモータ振動振幅量を算出し、その値がモータ振動検出振動振幅値判定値より大きい場合、モータが振動する動作をした、として処理321へ移行する。処理321では、モータ振動検出回数を1加算し、処理322へ移行する。処理322では、モータ振動検出時間に、今回のモータ振動1周期分の検出時間を加算し、判定処理323へ移行する。
判定処理323では、モータ振動検出時間がモータ振動検出時間判定値を越えたかを判定する。モータ振動検出時間がモータ振動検出時間判定を越えた場合、モータ振動検出時に誤検出があったとして、処理324へ移行する。処理324では、モータ振動誤検出が少なくとも1回は発生していることから、モータ振動検出回数をカウントダウンする。処理325では、モータ振動検出時間から、モータ振動検出時間バッファ値time_buf[vib_cnt]だけ減算する。これにより、モータ振動誤検出した、と考えられる時間を減算することが可能となる。処理326では、モータ振動検出時間がモータ振動検出時間判定値を越えた回数を測定する。処理327では、モータ振動時間(1周期分) time_vib_cntをtime_buf[vib_cnt]へ保存する。処理328ではモータ振動検出総計回数をカウントアップする。
判定処理329では、モータ振動検出回数がモータ振動検出判定回数以上であるかを判定する。モータ振動検出回数がモータ振動検出判定回数以上の場合、処理330へ移動し、モータが振動したと判定しモータ振動検出状態フラグvib_dtct_flg=ONをセットする。判定処理329、または処理330終了後、処理331へ移行する。
処理331では、モータ振動検出判定を終了し、再度モータ振動1周期分のモータ振動振幅値最大値を検出するため、モータ振動振幅値判定状態poserr_dif_chk_sts=VIB_MAXとし、また、再度モータ振動振幅の最大値を検出するため、モータ振動振幅値最大値poserr_dif_maxを、設定しうる最小の値とし、そして、再度モータ振動振幅の最小値を検出するため、モータ振動振幅値最小値poserr_dif_minを、設定しうる最大の値に設定して、処理302へ移動し、モータ振動検出処理を繰り返す。
図13は、第1の実施例におけるモータ振動波形、モータ振動検出_判定状態、モータ振動振幅値最大値、モータ振動振幅値最小値、モータ振動検出振動振幅量判定値、モータ振動振幅最大最小判定レベル値、モータ振動検出回数の計測法説明波形図であり、各状態量の波形を用いて、図9〜図12のフローチャートの結果を具体例で示す。図13において、波形350は位置偏差微分値poser_dif、波形351はモータ振動振幅値最大値poserr_dif_max、波形352はモータ振動振幅値最小値poserr_dif_min、波形353はモータ振動振幅値最大値poserr_dif_maxとモータ振動振幅値最小値poserr_dif_minの差である。波形354はモータ振動検出処理が、モータ振動振幅最大値検出状態、またはモータ振動最小値検出状態、またはモータ振動判定状態のいずれの状態であるかを示している。
poserr_dif_chk_sts=VIB_MAXの時、モータ振動振幅値最大値poserr_dif_maxを検出している。この状態において、位置偏差微分値poserr_difがモータ振動振幅値最大値poserr_dif_maxよりも大きい場合、位置偏差微分値は、モータ振動振幅値最大値を検出し始めてから、一番大きな値を取得していることを表している。ここで位置偏差微分値の一番大きな値を表す、モータ振動振幅値最大値を更新するため、poserr_dif_max=poserr_difとして、poserr_dif_maxを増加させる。このとき、波形355では、poserr_dif_max-poserr_dif=0となり、モータ振動振幅値最大値が増加状態であることを示している。波形350の位置偏差微分値poserr_difが減少し、位置偏差微分値poserr_difがモータ振動振幅値最大値poserr_dif_maxよりも小さい場合、波形351のモータ振動振幅値最大値は更新されない。また、波形355において、poserr_dif_max-poserr_difは0より大きくなり、増加していく。波形355において、poserr_dif_max-poserr_difが増加していき、モータ振動振幅最大最小判定レベル値vib_chk_levelより大きくなった場合、モータ振動振幅値最大値は取得完了したとして、モータ振動最小値検出状態poserr_dif_chk_sts=VIB_MINとなる。
波形354において、poserr_dif_chk_sts=2の時、波形352に示すように、モータ振動振幅値最小値を検出している。この状態において、位置偏差微分値poserr_difがモータ振動振幅値最小値poserr_dif_minよりも大きい場合、poserr_dif_min=poser_difとして、poserr_dif_minも増加していく。このとき、波形355では、poserr_dif-poserr_dif_min=0となり、モータ振動振幅値最小値が減少状態であることを示している。
波形350の位置偏差微分値poserr_difが小さくなった場合、波形352のモータ振動振幅値最小値は更新されない。また、波形355において、poserr_dif-poserr_dif_minは0より大きくなり、増加していく。
波形355において、poserr_dif-poserr_dif_minが増加していき、モータ振動振幅最大最小判定レベル値vib_chk_levelより大きくなった場合、モータ振動振幅値最小値は取得完了したとして、モータ振動最小値検出状態poserr_dif_chk_sts=VIB_CHKとなる。
波形354において、poserr_dif_chk_sts=VIB_CHKの時、波形353に示す、モータ振動振幅値poserr_dif_max+ poserr_dif_minを波形351モータ振動振幅値最大値poserr_dif_maxと、波形352モータ振動振幅最小値poserr_dif_minの和から算出する。モータ振動振幅量poserr_dif_max+ poserr_dif_minがモータ振動検出振動振幅量判定値poserr_vib_levelより大きい場合、波形356に示すようにモータ振動検出回数poserr_dif_vib_cntをカウントアップする。この処理を繰り返し、モータ振動検出回数が、ある任意の値を越えた場合、モータ振動を検出したと判定し、モータ振動検出フラグvib_dtct_flgをONとする。
図14では、モータ移動中、モータ停止中のモータ振動検出振動振幅量判定値の切替方法について説明する。図14において、波形360は位置指令波形、波形361は位置指令差分波形、波形362は位置偏差波形、波形363は位置偏差微分波形図、波形364はモータ振動振幅レベルを示す。
波形362は、位置指令値θM *と位置検出値θMとの位置偏差波形であり、波形363は波形362を微分した位置偏差微分波形である。波形363では、モータ移動中も位置偏差微分波形が振動的な波形であるが、モータ振動が微小である状態を表している。この場合、モータ移動中はモータ振動音が発生せず、モータ振動として検出する必要はない。一方、モータ停止中には、モータ振動音が発生するため、モータ振動として検出する必要がある。
ここで、モータ停止中とモータ移動中のモータ振動レベルを同値とした場合について述べる。モータ停止中のモータ振動レベルを、モータ振動検出振動振幅量判定値として設定した場合、モータ移動中にモータ振動音が発生しない場合であっても、モータ振動と誤検出する場合がある。一方、モータ移動中のモータ振動レベルをモータ振動検出振動振幅量判定値として設定した場合には、モータ停止中のモータ振動が大きい場合しかモータ振動を検出できなくなる。このため、モータ振動を判定するモータ振動検出振動振幅量判定値は、モータ移動中とモータ停止中で異なる値を持つ必要がある。
モータ振動検出振動振幅量判定値を、モータ移動中とモータ停止中で異なる値を設定するためには、モータ移動中とモータ停止中を区別する必要となる。本実施形態では、位置指令値をユーザが事前に入力して、モータを駆動させるので、位置指令値θM *の最終的な値が予め分かっている。つまり、入力する位置指令値θM *が、ユーザの設定する位置指令値θref *に一致した時、位置指令値θM *が停止し、モータは移動中→停止動作に移ることがわかる。
すなわち、位置指令値θM *とユーザの設定する位置指令値θref *が異なる場合は、モータ移動中であると判定し、モータ振動検出振動振幅量判定値をモータ移動中に適した値に設定し、位置指令値θM *とユーザの設定する位置指令値θref *が一致した場合は、モータ停止中であると判定し、モータ振動検出振動振幅量判定値をモータ停止中に適した値に設定することで、モータ振動レベルを切替ることが可能となる。
これにより、モータ停止中のモータ振動レベルを、モータ振動検出振動振幅量判定値として設定した場合、モータ移動中にモータ振動音が発生しない場合であっても、モータ振動と誤検出する場合が発生する。一方、モータ移動中のモータ振動レベルをモータ振動検出振動振幅量判定値として設定すると、モータ停止中のモータ振動が大きい場合しか検出できなくなる。といった誤検出を防ぐことが可能となる。
図15はモータ振動が周期的に発生した場合の、モータ振動判定方法を説明し、図16はノイズの影響でモータ振動が非周期的に発生した場合、モータ振動として誤検出されるのを防ぐ方法について説明する。図15において波形370は位置指令波形、波形371はモータ振動発生時の位置偏差波形、波形372はモータ振動発生時の位置偏差微分波形を示す。また、波形373はモータ振動が検出された場合のモータ振動検出回数を示し、波形374はモータ振動検出状態フラグを示す。
また、図16において、波形375では位置指令波形、波形376はノイズの影響を受けた場合の位置偏差波形、波形377はノイズの影響を受けた場合の位置偏差微分波形、波形378はモータ振動が検出された場合のモータ振動検出回数を示し、波形379はモータ振動検出状態フラグである。
モータ振動周波数fvibであるモータ振動が、モータ振動検出判定回数poserr_dif_vib_jdgだけモータ振動検出を繰り返した場合、モータ振動が繰り返し検出された合計時間tvibは(1)式を用いて表すことが出来る。
ここで、モータ振動検出判定回数poserr_dif_vib_jdg を一定値として、モータ振動周波数fvibが大きくなる場合、(1)式から、モータ振動が繰り返し検出された時間tvibは小さくなる。また、モータ振動周波数fvibは速度応答周波数Fsより大きな値となり、本実施例おける速度応答周波数の最小値はFs_minであることから、モータ振動が繰り返し検出された合計時間tvibは(2)を満たすことが分かる。
(2)式より、モータ振動検出判定回数poserr_dif_vib_jdgと、モータ振動が繰り返し検出された時間tvibを、事前に適切に設定すれば、モータ振動検出の誤検出を抑制することが可能である。なお、tvibに関して(2)式が成り立つ条件を満たせば、任意に設定することが出来る。
波形370に示す位置指令値波形を入力し、波形371に示す位置偏差波形のようにモータ振動が発生した場合、波形372のモータ振動振幅量がモータ振動値振動量判定値を越えるモータ振動検出処理が周期的に発生する。モータ振動が検出された場合には、波形373で示すモータ振動検出回数poserr_dif_vib_cntを1加算する。波形373がモータ振動検出時間判定値time_vib_jdg_level内で、モータ振動検出判定回数poserr_dif_vib_cnt_jdgを越えた場合に、モータ振動が繰り返し検出されたと判定し、波形374でモータ振動を繰り返し検出した状態を示すため‘ON’を出力する。
一方、波形375に示す位置指令値波形を入力し、波形376に示すノイズの影響により、モータ振動が発生した場合、波形377では、位置偏差微分波形のモータ振動振幅量がモータ振動値振動量判定値を越えている場合が不定期に発生することを示している。ノイズの影響によりモータ振動を誤検出した場合であっても、波形378で示すモータ振動検出回数poserr_dif_vib_cntを1加算する。モータ振動検出回数poserr_dif_vib_cntがモータ振動検出時間判定値time_vib_jdg_level内で、モータ振動検出判定回数poserr_dif_vib_cnt_jdgを越えた場合に、モータ振動が繰り返し検出されたと判定する。ノイズの影響によりモータ振動を誤検出した場合には、モータ振動検出が不定期となることから、モータ振動検出回数poserr_dif_vib_cntは波形378のようになる。波形378では、モータ振動検出回数poserr_dif_vib_cntがモータ振動検出時間判定値time_vib_jdg_level内で、モータ振動検出判定回数poserr_dif_vib_cnt_jdgを越えていないので、モータ振動繰り返し検出した、と判定しない。
これにより、ある任意の時間、ある任意のモータ振動検出回数を適切に設定すれば、ノイズによる影響から発生したモータ振動検出は、モータ振動が繰り返し発生したと判定されることは無く、波形379でモータ振動を繰り返し検出した状態を示す‘ON’を出力せず、‘OFF’のままである。
図17は、モータ振動検出処理中にモータ振動検出時間time_vib_jdgが、モータ振動検出時間判定値time_vib_jdg_levelを越えた場合の説明波形図である。波形380は、モータ振動時の位置偏差微分波形、波形381は、モータ振動検出判定時のモータ振動振幅レベル、波形382はモータ振動検出回数、波形383はモータ振動検出時間time_vib_jdg、波形384はモータ振動検出時間バッファ値time_buf[vib_cnt]である。
波形380に示すように、位置偏差微分の振動値が大きい状態から、位置偏差微分の振動量が徐々に小さくなっていく場合、波形381がモータ振動検出レベル判定値を越える間、波形382に示すようにモータ振動検出回数が増加していく。同時に、波形383に示すように、モータ振動1周期分のモータ振動検出時間をモータ振動が検出される毎に加算していく。波形383がモータ振動検出時間判定値を越えた場合、モータ振動は、ある任意回数のモータ振動検出回数を、ある任意時間以内に繰り返し検出していないことを示している。
この場合、ある任意の時間、ある任意の検出回数を適切に設定すれば、モータ振動に誤検出があったと判断できる。モータ振動が誤検出されていると判断された場合、モータ振動検出回数を1減算する。波形384では、モータ振動が検出された場合の、モータ振動1周期分の検出時間をバッファとして保持し。モータ振動誤検出があったと判定された場合には、モータ振動検出時間から、モータ振動検出開始1回目のモータ振動検出時間であるモータ振動検出時間バッファ値を減算した値をモータ振動検出時間とする。この処理を繰り返すことにより、モータ振動が周期的に発生するモータ振動検出を検出する。
冒頭に述べたように本実施形態では、フィードフォワード制御パラメータを自動調整する際、位置フィードフォワードゲイン、及び位置フィードフォワード時定数の2つの制御パラメータについて調整を行うが、その調整手順は、どちらを先に調整しても最適な制御パラメータを得ることができる。実施例2では、位置フィードフォワードゲインを調整後、位置フィードフォワード時定数を変更、位置フィードフォワードゲインを再度調整する、という手順を繰り返す調整法の実施例について示す。
前提とするシステムは、図1に示される通りに第1の実施例と同様であるため、詳細な説明は省略する。
第2の実施例では、第1の実施例におけるフィードバック制御パラメータの自動調整に加え、位置フィードフォワード制御パラメータの自動調整をも行う。位置フィードフォワード制御器への入出力関係は、ラプラス演算子をsとするとき、制御器のパラメータであるフィードフォワードゲインKffとフィードフォワード時定数Tffを用いて(3)式で表すことができる。
次に、フィードフォワードゲインKffの自動調整法を具体的に説明するが、まず、その考え方を、図18を用いて説明する。
図18は、第2の実施例におけるフィードフォワードゲインと整定時間・オーバーシュートの関係説明図であり、同図(a)は、フィードフォワードゲインと整定時間の関係、同図(b)は、フィードフォワードゲインとオーバーシュート量の関係を示す。図18(a)では、横軸がフィードフォワードゲインKff、縦軸が整定時間であり、基本的にはフィードフォワードゲインKffが大きい程、整定時間が短くなる傾向を示す。図のように、フィードフォワードゲインKffがある値以上になると、急激に整定時間が長くなることを示している。
一方、図18(b)では、横軸がフィードフォワードゲインKff、縦軸がオーバーシュート量であり、フィードフォワードゲインKffが小さい場合には、オーバーシュートを全く発生しない。しかし、フィードフォワードゲインKffがある値以上になると、オーバーシュートが発生し始め、以後、その発生量はKffに関して単調増加となることを示している。
以上、図18(a)、(b)から、オーバーシュート量がゼロか十分に小さい場合には、整定時間はフィードフォワードゲインKffを大きく設定した方が短くなると言える。また、オーバーシュート量はフィードフォワードゲインKffを大きく設定する程、増大することから、整定時間を最小化するには、フィードフォワードゲインKffをオーバーシュート量が許容値を超えない範囲内で最大化すれば良いことがわかる。
よって、以下に説明する処理フローチャートでは、予め登録した全位置指令パターンに関して、オーバーシュート量が許容値を超えない条件を満たす最大フィードフォワードゲインKffの探索を行う。
図19は、第2の実施例におけるフィードフォワードゲインKffの自動調整法の処理フロー図である。なお、フィードフォワード時定数Tffの自動調整法については、その調整過程において、フィードフォワードゲインKffの自動調整を必要とする為、後述することとする。
図19において、Kff_iniはユーザが設定するフィードフォワードゲイン初期値、Kff_dmaxはユーザが設定するフィードフォワードゲイン探索最大ステップ、Kff_dminはユーザが設定するフィードフォワードゲイン探索最小ステップである。Kffは位置フィードフォワード制御器14に設定されている現在のフィードフォワードゲイン、Kff_divは現在のフィードフォワードゲイン探索ステップ、Kff_bdは最終的に求めたい限界フィードフォワードゲインである。
また、実施例1同様、位置フィードフォワード制御パラメータの自動調整を行う際も、図2に示す「モータ振動検出処理部」にてモータ振動を検出する。
後述する調整時には、Kff=Kff_iniから探索を開始し、Kff=Kff_iniでオーバーシュート量が許容値未満、かつモータ振動を検出しない範囲内であればKffをKff_dmaxで増加する。また、Kff=Kff_iniでオーバーシュート量が許容値以上、またはモータ振動を検出した状態(flgmvib=ON)であれば、KffをKff_dmaxのステップで減少する。更に、Kff_dmaxステップでのKff更新中にオーバーシュート量が許容値未満から許容値以上に変化、あるいはオーバーシュート量が許容値以上から許容値未満に変化、あるいはモータ振動を検出しない状態(flgmvib=OFF)からモータ振動を検出した状態(flgmvib=ON)に変化、あるいはモータ振動を検出した状態(flgmvib=ON)からモータ振動を検出しない状態(flgmvib=OFF)に変化した場合には、次の処理を実施する。
すなわち、前記現在のフィードフォワードゲイン探索ステップKff_divを半減しながらKffを増減探索する処理をKff_divがフィードフォワードゲイン探索最小ステップKff_dminを下回るまで実施することを意味する。
次に、図19のフローチャートを順を追って説明する。図19では、400でフローチャートを開始し、初期化処理401で現在のゲインKffにフィードフォワードゲインKffにフィードフォワードゲイン初期値Kff_iniを設定する。そして、現在のフィードフォワードゲイン探索ステップKff_divにフィードフォワードゲイン探索ステップKff_dmaxを設定し、処理402に移行する。
処理402では、ユーザが予め登録した全ての位置指令パターンでの運転を行い、各運転毎に前述の手段で、整定時間、オーバーシュート量を計測し、判定処理403へ移行する。
判定処理403では、各運転パターン毎のオーバーシュート量の評価を行い、いずれかの運転パターンでのオーバーシュート量が許容値以上となる場合、またはいずれかの運転パターンでモータ振動を検出した場合(flgmvib=ON)には、処理404に移行する。処理404では、現在のフィードフォワードゲインKffを現在のフィードフォワードゲイン探索ステップKff_divだけ減じた後に、処理405に移行する。処理405では、処理402と同様にユーザが予め登録した全ての位置指令パターンでの運転を行い、各運転毎に整定時間、オーバーシュート量を計測し、判定処理406へ移行する。
判定処理406では、各運転パターン毎のオーバーシュート量の評価を行い、全ての運転パターンでのオーバーシュート量が許容値未満で、かつ全ての運転パターンでモータ振動を検出しなかった場合(flgmvib=OFF)には、処理407へ移行する。一方、判定処理406において、いずれかの運転パターンでのオーバーシュート量が許容値以上となる場合、またはいずれかの運転パターンでモータ振動を検出した場合(flgmvib=ON)には、更に現在のフィードフォワードゲインKffを減ずる目的で、処理404に移行する。
処理407では、全ての運転パターンでのオーバーシュート量を許容値未満であり、かつ全ての運転パターンでモータ振動無し(flgmvib=OFF)とする最大Kffの候補の1つとして、現在のフィードフォワードゲインKffで限界フィードフォワードゲインKff_bdを更新し、処理408に移行する。
処理408では、後のフローを考慮して、現在のフィードフォワードゲインKffに現在のゲイン探索ステップKff_divを加算し、いずれかの運転パターンでのオーバーシュート量が許容値以上、またはいずれか運転パターンでモータ振動を検出した(flgmvib=ON)条件を再設定し、処理409へ移行する。判定処理403において、全ての運転パターンでのオーバーシュート量が許容値未満、かつ全ての運転パターンでモータ振動を検出しなかった(flgmvib=OFF)場合には処理410に移行する。
処理410では、全ての運転パターンでのオーバーシュート量を許容値未満、かつモータ振動無し(flgmvib=OFF)とする最大Kffの候補の1つとして、現在のフィードフォワードゲインKffで限界フィードフォワードゲインKff_bdを更新し、処理411に移行する。処理411では、現在のフィードフォワードゲインKffに現在のフィードフォワードゲイン探索ステップKff_divを加算した後に、処理412に移行する。
処理412では、処理405と同様にユーザが予め登録した全ての位置指令パターンでの運転を行い、各運転毎に整定時間、オーバーシュート量を計測し、判定処理413に移行する。判定処理413では、各運転毎のオーバーシュート量の評価を行い、いずれかの運転パターンでのオーバーシュート量が許容値以上となる場合、またはいずれかの運転パターンでモータ振動を検出した場合(flgmvib=ON)には、処理409に移行する。
一方、判定処理413において、全ての運転パターンでのオーバーシュート量が許容値未満、かつ全ての運転パターンでモータ振動を検出しなかった(flgmvib=OFF)場合には、更に現在のフィードフォワードゲインKffを増加する目的で、処理410に移行する。処理409に続くフローでは、現在のフィードフォワードゲイン探索ステップKff_divを半減しながらKffを増減探索する処理であり、処理409では、現在のフィードフォワードゲイン探索ステップKff_divを半減し、判定処理414に移行する。
判定処理414では、現在のフィードフォワードゲインKff_divの大きさがフィードフォワードゲイン探索最小ステップKff_dmin以上か否かを判定する。そして、それ以上であれば処理415に移行し、未満であれば、425に移行し、処理を終了する。処理415では、現在のフィードフォワードゲインKffを現在のフィードフォワードゲイン探索ステップKff_divだけ減じた後に処理416へ移行する。
処理416では、処理412と同様にユーザが予め登録した全ての位置指令パターンでの運転を行い、各運転毎に、整定時間、オーバーシュート量を計測し、判定処理417に移行する。判定処理417では、各運転パターン毎のオーバーシュート量が許容値未満、かつ全ての運転パターンでモータ振動を検出しなかった(flgmvib=OFF)場合には、処理418に移行する。一方、判定処理417において、いずれかの運転パターンでのオーバーシュート量が許容値以上となる場合、またはいずれかの運転パターンでモータ振動を検出した場合(flgmvib=ON)には、更に現在のフィードフォワードゲインKffを減ずる目的で、処理409に移行する。
処理418では、全ての運転パターンでのオーバーシュート量を許容値未満であり、かつ全ての運転パターンでモータ振動無し(flgmvib=OFF)とする最大Kffの候補の1つとして、現在のフィードフォワードゲインKffで限界フィードフォワードゲインKff_bdを更新し、処理419に移行する。処理419では、現在のフィードフォワードゲイン探索ステップKff_divを半減し、判定処理420に移行する。判定処理420では、現在のフィードフォワードゲイン探索ステップKff_divの大きさがフィードフォワードゲイン最小探索ステップKff_dmin以上か否かを判定する。そして、それ以上であれば処理421に移行し、未満であれば425に移行し、フィードフォワードゲインKffの探索を終了する。
処理421では、現在のフィードフォワードゲインKffに現在のフィードフォワードゲイン探索ステップKff_divを加算した後に、処理422に移行する。処理422では、処理416と同様に予めユーザが登録した全ての位置指令パターンでの運転を行い、各運転毎に整定時間、オーバーシュート量を計測し、判定処理423に移行する。
判定処理423では、各運転パターン毎のオーバーシュート量の評価を行い、いずれかの運転パターンでのオーバーシュート量が許容値以上、またはいずれかの運転パターンでモータ振動を検出した(flgmvib=ON)場合には、更に現在のフィードフォワードゲインKffを減ずる目的で、処理409に移行する。
一方、判定処理423において、全ての運転パターンでのオーバーシュート量が許容値未満、かつモータ振動検出無し(flgmvib=OFF)となる場合には、処理424に移行する。処理424では、全ての運転パターンでのオーバーシュート量を許容値未満、かつモータ振動検出無し(flgmvib=OFF)とする最大Kffの候補の1つとして、現在のフィードフォワードゲインKffで限界フィードフォワードKff_bdを更新し、更に現在のフィードフォワードゲインKffを増加する目的で、処理419に移行する。
以上のように、図19のフローチャートを用いれば、予め登録した全位置指令パターンに関して、オーバーシュート量が許容値を超えない、かつモータ振動無し(flgmvib=OFF)の条件を満たす最大フィードフォワードゲインKffが限界フィードフォワードゲインKff_bdとして見出される。また、その時の整定時間は、オーバーシュートの許容値が十分に小さければ、最小となる。
また、前述の図(a)、(b)は、図19のフローチャートによる調整改定を具体的に示している。このときの各調整パラメータは、Kff_ini=0.10、Kff_dmin=0.005、Kff_dmax=0.10、オーバーシュート許容値=2[pulse]である。図18中の(1)から(6)の順に探索が行われ、最終的に処理420において、Kff_div=0.003125がセットされる。このため、次の判定処理でNoとなり、endに移行するものである。
図19は、第2の実施例における、フィードフォワード時定数と限界フィードフォワードゲインKff_bdと整定時間の関係説明図である。同図(a)に示すフィードフォワード時定数と限界フィードフォワードゲイン(最大値)における整定時間の関係および、同図(b)に示すフィードフォワード時定数と整定時間の関係を説明する。
図20(a)は横軸がフィードフォワード時定数Tff、縦軸が限界フィードフォワードゲインにおける整定時間であり、図20(b)は横軸がフィードフォワード時定数Tff、縦軸がフィードフォワードゲインである。また、各グラフのパラメータとして、異なる位置指令パターンを3種類選んでいる。ここで、限界フィードフォワードゲインKff_bdとは、各位置指令パターン関して、オーバーシュート量が許容値を超えない、かつモータ振動を検出しない(flgmvib=OFF)条件を満たす最大フィードフォワードゲインKffのことである。
具体的には、図20(b)の各波形上の数値は、フィードフォワード時定数Tffを固定した条件で、前述図19のフローチャートを各単独の位置指令パターンに関して実行し、求めたものである。図20(a)の各波形上の数値は、こうして求めた限界フィードフォワードゲインKff_bdでの整定時間St_bdを記録したものである。ここで、図20(a)、(b)から明らかなことは、最小の整定時間を与える最適フィードフォワード時定数は位置指令パターンによって、異なることである。例えば、図20(a)から、位置指令パターン1の最適フィードフォワード時定数は約5[ms]であるが、位置指令パターン2および位置指令パターン3の最適フィードフォワード時定数はそれぞれ約9[ms]、10[ms]である。また、限界フィードフォワードゲインKff_bdも位置指令パターンによって異なることが、図20(b)に示されている。
以上の具体例で示したように、最適なフィードフォワード時定数および限界フィードフォワードゲインKff_bdは、位置指令パターンによって変化するものである。このため、位置フィードフォワードゲイン制御パラメータの調整に際しては、実際にユーザが使用する位置指令パターンに対し、妥当な位置フィードフォワード制御パラメータを決定する場合には、特に整定時間を最小化したい位置指令パターンをユーザ自身が設定できるようにする。そして、その位置指令パターンでの整定時間の極小化を実現するフィードフォワード時定数を見出すことができる。
図21〜23は、以上に示した考え方に基づく、最適なフィードフォワード時定数、及び限界フィードフォワードゲインKff_bd探索フロー図である。また、本フローチャートでは、最適なフィードフォワード時定数、及び限界フィードフォワードゲインKff_bd時のパラメータ設定値および整定時間測定結果を効率よく保存・評価する為に、図23で示すdata[0]、data[1]、 data[2]の3つの構造体型要素で構成された構造体配列型構造のデータ構造を利用する。
図24では、最適フィードフォワード時定数Tff_opt探索用データ構造説明図であり、data[0]、data[1]、 data[2]の3つの構造体型要素で構成された構造体配列型のデータ構造を利用する。また、構造体のメンバは、次の4つである。まず、フィードフォワード時定数Tffであり、次に、該Tffでの限界フィードフォワードゲインKff_bdである。更に、該Tff、Kff_bdでの優先位置指令パターンに対する整定時間St_bdであり、最後に、該Tffの次に小さいTffに関するデータを保存する配列番号を指示する次データ指示インデックスnextである。Sm_indexは、前記構造体配列data[0]、data[1]、 data[2]の内、どの番号の配列に、現在最小のTffに関するデータが保存されているかを示す最小Tffデータ指示インデックスである。また、以下では、各構造体メンバへの参照手段は、C言語の記述と同様として説明する。例えば、構造体配列data[1]のメンバSt_bdを参照する場合には、data[1].St_bdと記述する。また、図24で示したように、data[0].next=1の場合には、data[data[0].next].St_bdとしても data[1]のメンバSt_bdを参照可能である。
図21〜23のフローチャートにおいて、Tff_iniがユーザが設定するフィードフォワード時定数初期値、Tff_dminはユーザが設定するフィードフォワード時定数探索最小ステップである。また、Tff_dmaxはユーザが設定するフィードフォワード時定数探索最大ステップ、Tffは位置フィードフォワード制御14に設定されている現在のフィードフォワード時定数、Tff_divは現在のフィードフォワード時定数探索ステップである。更に、Tff_optは最終的に求めたい最適フィードフォワード時定数であり、Kff_optは最適フィードフォワードゲインであり、最適フィードフォワード時定数Tff_optにおける限界フィードフォワードゲインKff_bdに等しい。また、dat_countは初期取得データ数カウンタであり、Tffに関する取得データ数が3点ほどあることを確認する為のカウンタ、data[]およびsm_indexは前述したとおりである。
次に、本フローチャートによる最適フィードフォワード時定数Tff_optの探索概要を、図25を参照しながら説明する。
図25では、最適フィードフォワード時定数Tff_opt探索過程説明図である。図において、横軸がフィードフォワード時定数Tff、縦軸が該フィードフォワード時定数Tffでの限界フィードフォワードゲインKff_bdにおける優先位置指令パターンに対する整定時間St_bdである。また、図25に示す例では、Tff_ini=Tff_1とした。本フローチャートでは、常にTffに関する3点データを評価しながら、次に探索するべきTffを決定する。このため、まず、Tff=Tff_1のデータ(1)を起点として、Tff_dmax感覚でデータ(2)、データ(3)を取得する。
次に、データ(1)、(2)、(3)を評価し、これらのSt_bdがTffに関して単調減少であることから、更なるSt_bdの減少を期待して、データ(3)の延長上にデータ(4)を取得し、溢れたデータ(1)を破棄する。次に、データ(2)、(3)、(4)を評価し、これらのSt_bdがTffに関して下に凸であることから、最適フィードフォワード時定数Tff_optが「データ(2)とデータ(3)の間」か「データ(3)とデータ(4)の間」の何れかにあると考える。
この時点では、何れの側にTff_optがあると断定できないが、両端のデータ(2)とデータ(4)のSt_bdを比較し、小さい側を探索することにしている。よって、データ(3)とデータ(4)の中間のデータ(5)を取得し、データ(2)を破棄する。次に、データ(3)、(4)、(5)を評価し、これらのSt_bdがTffに関して下に凸であることから、上記同様にデータ(3)とデータ(4)のSt_bdを比較し、小さい側のデータ(6)を取得し、データ(4)を破棄する。
次に、データ(3)、(5)、(6)を評価し、これらのSt_bdがTffに関して単調減少であることから、データ(5)の延長上にデータ(7)を取得し、溢れたデータ(3)を破棄する。ここで、データ(5)、(6)、(7)を評価すると、これらのSt_bdがTffに関して下に凸となる。しかし、更なる探索を行うと、現在のフィードフォワード時定数探索ステップTff_divがユーザが設定するフィードフォワード時定数探索最小ステップTff_dminを下回ることとなる。よって、探索を終了し、この時点の極小点であるデータ(5)のTffを最適フィードフォワード時定数Tff_optとする。以上、図21〜23に示すフローチャートによる探索概要を図25を参照しながら説明した。
次に、図21〜23のフローチャートを順を追って説明する。まず、500でフローチャートを開始する。初期化処理501では、現在のフィードフォワード字絵地数Tffにフィードフォワード時定数初期値Tff_iniを設定し、現在のフィードフォワード時定数探索ステップTff_divにフィードフォワード時定数探索最大ステップTff_dmaxを設定する。
また、構造体配列data[]の並びを、格納するTffが小さい順にdata[0]、data[1]、data[2]と初期化する。この為に、次データ指示インデックスnextをdata[0].next=1、data[1].next=2、data[2].next=0とし、更に、最小Tffデータ指示インデックスsm_indexをsm_index=0とする。また、現在の取得データ数をゼロとする為に初期取得データ数カウンタdat_count=0とし、処理502に移行する。処理502では、前述した図19の限界フィードフォワードゲインKff_bd探索フローチャートを実施し、処理503に移行する。処理503では、現在のフィードフォワード時定数Tffをdata[dat_count].Tffに保存し、現在のTffでの限界フィードフォワードゲインKff_bdをdata[dat_count].Kff_bdに保存する。また、現在のTffおよびKff_bdにおける優先位置指令パターンに対する整定時間St_bdをdata[dat_count].St_bdをに保存し、判定処理504に移行する。判定処理504では、初期取得データ数カウンタdat_countの値を評価し、Tffに関するデータ数が3点あれば判定処理505に移行し、データ数が3点無いならば、処理506に移行する。処理506では、現在のフィードフォワード時定数Tffに現在のフィードフォワード時定数探索ステップTff_divを加算し、処理502に移行する。
判定処理505では、優先位置指令パターンに対する整定時間St_bdがフィードフォワード時定数Tffに関して下に凸か否かを判定する。ここの処理は具体的には、次の通りであれば、下に凸と判断して、処理507に移行する。すなわち、data[sm_index].St_bd>data[data.[sm_index].next].St_bd、且つdata[data[sm_index].next].next].St_bd>data[data[sm_index].next].St_bdである。処理507では、現在のフィードフォワード時定数探索ステップTffを半減し、判定処理508に移行する。判定処理508の大きさがフィードフォワード時定数探索ステップTff_div以上か否かを判定し、以上であれば判定処理509に移行し、未満であれば処理510に移行する。判定処理509では3点データの内、最小Tffでの優先位置指令パターンに対する整定時間St_bdと、最大TffでのSt_bdの大小関係を比較する。
具体的には、data[sm_index].St_bd>data[data[data[sm_index].next].next.St_bdが成立するか否かを判定し、成立する場合には、処理512に移行する。処理512では、新規のデータを2番目に大きいTffと最大Tffの中点に取得する為に、Tffを2番目に大きいTffとTff_divを加算した値とする。具体的には、現在のフィードフォワード時定数Tffをdata[data[sm_index].next].Tff+Tff_divで更新し、処理513に移行する。
処理513では、前述した図19の限界フィードフォワードゲインKff_bd探索フローチャートを実施し、処理514に移行する。処理514では、現在最小のTffに関するデータを保存した配列要素を処理513で取得した新規データで上書き更新する。この為に、現在のフィードフォワード時定数Tffをdata[sm_index].Tffに保存し、現在のTffでの限界フィードフォワードゲインKff_bdをdata[sm_index].Kff_bdに保存する。そして、現在のTff及びKff_bdにおける優先位置指令パターンに対する整定時間St_bdをdata[sm_index].St_bdに保存する。更に、これまで最小のTffに関するデータを保存していた配列要素を、今後2番目に大きいTffに関するデータとなる新規データで上書き更新したことによる次データ指示インデックスnextの乱れを修正する。具体的には、data[sm_index].nextの値を一時変数tmpに退避した上で、data[sm_index].nextをdata[data[sm_index].next].nextで更新する。また、data[data[sm_index].next].nextをsm_indexで更新し、data[data[data[sm_index].next].next].nextを一時変数tmpの値で更新する。最後に、sm_indexを一時変数tmpの値で更新し、判定処理505に移行する。判定処理509において、data[sm_index].St_bd>data[data[data[sm_index].next].next].St_bdが成立しない場合には、処理515に移行する。
処理515では、新規のデータを最小Tffと2番目に大きいTffとの中点に取得する為に、Tffを2番目に大きいTffからTff_divを減算した値とする。具体的には、現在のフィードフォワード時定数Tffをdata[data[sm_index].next].Tff-Tff_divで更新し、処理516に移行する。
処理516では、前述した図19の限界フィードフォワードゲインKff_bd探索フローチャートを実施し、処理517へ移行する。処理517では、現在最大のTffに関するデータを保存した配列要素を処理516で取得した新規データで上書き更新する為、現在のフィードフォワード時定数Tffをdata[data[data[sm_index].netx].next].Kff_bdに保存する。また、現在のTff及びKff_bdにおける優先位置指令パターンに対する整定時間St_bdをdata[data[data[sm_index].next].next.St_bdに保存する。更に、これまで最大のTffに関するデータを保存していた配列要素を、今後2番目に大きいTffに関するデータとなる新規データで上書き更新したことによる次データ指示インデックスnextの乱れを修正する。具体的には、data[sm_index].nextの値を一時変数tmpに退避した上で、data[sm_index].nextをdata[data[sm_index].next].nextで更新する。また、data[data[sm_index].next].nextをdata[data[data[sm_index].next].next].nextで更新する。さらに、data[data[data[sm_index].next].next].nextを一時変数tmpの値で更新し、判定処理505に移行する。判定処理508においてTff_div≧Tff_dminが成立しない場合には、処理510に移行する。処理510では、最適フィードフォワード時定数Tff_optに2番目に大きいTffであるdata[data[sm_index].next].Tffをセットする。そして、最適フィードフォワードゲインKff_optに2番目に大きいTffにおける限界フィードフォワードゲインKff_bdであるdata[data[sm_index].next].Kff_bdをセットし、終了状態511に移行する。一方、判定処理505において、優先位置指令パターンに対する整定時間St_bdがフィードフォワード時定数Tffに関して下に凸でない場合には、判定処理518に移行する。判定処理518では、優先位置指令パターンに対する整定時間St_bdがフィードフォワード時定数Tffに関して下に凸で無い場合には、判定処理518移行する。判定処理518では、優先位置指令パターンに対する整定時間St_bdがフィードフォワード時定数Tffに関して下に単調増加か否かを判定する。
ここでは、data[sm_index].St_bd<data[data[sm_index].next].St_bd< data[data[data[sm_index].next].next].St_bdならば、単調増加であると判断し、処理519に移行する。
処理519では、単調増加であることから、St_bdの減少を期待して、最小Tffデータの延長上に新規データを取得する。具体的には、現在のフィードフォワード時定数Tffをdata[sm_index].Tff-Tff_divで更新し、処理520に移行する。処理520では、前述した図19の限界フィードフォワードゲインKff_bd探索フローチャートを実施し、処理521に移行する。処理521では、現在最大のTffに関するデータを保存した配列要素を処理520で取得した新規データで上書き更新する。この為に、現在のフィードフォワード時定数Tffをdata[data[data[sm_index].next].next].Tffに保存する。そして、現在のTffでの限界フィードフォワードゲインKff_bdをdata[data[data[sm_index].next].next].Kff_bdに保存する。また、現在のTff及びKf_bdにおける優先位置指令パターンに対する整定時間St_bdをdata[data[data[sm_index].next].next].St_bdに保存する。更に、これまで最大のTffに関するデータを保存していた配列要素に、最小のTffに関するデータを上書き更新したことによる最小Tffデータ指示インデックスsm_indexの更新を実施する。すなわち、data[data[sm_index].next].nextの代入を実施し、判定処理505に移行する。判定処理518で単調増加と判定されなかった場合には、単調減少と考えて処理522に移行する。
処理522では、単調減少であることから、St_bdの更なる減少を期待して、最大Tffデータの延長上に新規データを取得する。具体的には、現在のフィードフォワード時定数Tffをdata[sm_index].Tff+3×Tff_divで更新し、処理523に移行する。処理523では、前述した図19の限界フィードフォワードゲインKff_bd探索フローチャートを実施し、処理524に移行する。処理524では、現在最小のTffに関するデータを保存した配列要素を処理523で取得した新規データで上書き更新する。この為に、現在のフィードフォワード時定数Tffをdata[sm_index].Tffに保存し、現在のTffでの限界フィードフォワードゲインKff_bdをdata[sm_index].Kff_bdに保存する。また、現在のTff及びKff_bdにおける優先位置指令パターンに対する整定時間St_bdをdata[sm_index].St_bdに保存する。更に、これまで最小のTffに関するデータを保存していた配列要素に、最大のTffに関するデータを上書き更新したことによる最小Tffデータ指示インデックスsm_indexの更新を実施する。すなわち、data[sm_index].nextの代入で実施し、判定処理505に移行する。
このように、予め登録した全位置指令パターンにつき、オーバーシュート量を規定(許容)値以内に抑えつつ、かつモータ振動無しの状態で(flgmvib=OFF)指定された特定の位置指令パターンでの整定時間を最小化する位置フィードフォワード制御パラメータの自動探索を行うことができる。
なお、処理503、処理514、処理517、処理521、処理524において、data[].St_bdには、優先位置指令パターンに対する整定時間St_bdをセットしたが、評価した全位置指令パターンのうち、最も長かった整定時間をセットしてもよい。
次に、調整パラメータ設定画面の実施例を図26、図27に示す。図26は、本実施例におけるフィードバック制御パラメータの自動調整に際して、ユーザが調整条件を入力するパソコンの画面構成例である。図26における入力項目は、前述の各調整パラメータに対応し、例えば600は最小位置応答周波数Fp_minに、601は最大位置応答周波数Fp_maxに、602は位置応答周波数増分ステップFp_divに対応する。また、603は最小速度応答周波数Fs_minに、604は最大速度応答周波数Fs_maxに、605は速度応答周波数増分ステップFs_divに、606は位置偏差θeの振動振幅許容値θvibに、607は整定監視タイムアウト時間timeoutに対応する。また、ステップ状の位置指令を自動生成するか、手動設定するかをユーザ側で選択可能とする為に、排他的に選択できるチェックボックス608と609を設けた。ここで、608を選択した場合、図2のフローチャートに示した処理が実行され、位置指令パターンが自動生成される。一方、609を選択した場合には、加減速時間610、移動距離611、最大速度612の各項目をユーザ自身が設定し、位置指令パターンを決定する必要がある。
図27は、本実施例における第2の実施例である位置フィードフォワード制御パラメータの自動調整に際して、ユーザ自身が調整条件を入力するパソコン画面構成例である。図27における各入力項目は、前述の各調整パラメータに対応し、例えば、613はフィードフォワードゲイン探索最小ステップKff_dminに、614はフィードフォワードゲイン探索最大ステップKff_dmaxに対応する。また、615はフィードフォワード時定数初期値Tff_iniに、616は同じく時定数探索最小ステップTff_dminに、617は同じく時定数探索最大ステップTff_dmaxに、618は整定監視タイムアウト時間timeoutに対応する。
また、620から624はそれぞれ、位置指令パターン1から位置指令パターン5までの調整条件設定画面であり、620から624の番号で指し示したパターン名の表記部分をマウスでクリックすることにより、該パターンの設定画面を開くことができる。なお、図27では位置指令パターン1の設定画面が開いた上体であるが、他の位置指令パターンの設定画面も同様の構成である。よって、630には、該位置指令パターンでの加減速時間、631には該位置指令パターンでの移動距離、632には該位置指令パターンでの最大速度を設定し、該位置指令パターンを決定する。また、625は該位置指令パターンでのオーバーシュート量の許容値に、626は該位置指令パターンでの整定判定用偏差posin_plsに対応する。チェックボックス627は該位置指令パターンでの調整を行うか否かを設定する為のものである。また、位置フィードフォワード時定数調整の実施有無を設定する為に、選択項目628を設けた。628の選択項目には「調整あり」と「調整なし」があり、「調整なし」を選択すると、図19のフローチャートを実行し、現在の位置フィードフォワード時定数に対して、位置フィードフォワードゲインのみが調整される。一方、「調整あり」を選択した場合には、図20〜22のフローチャートを実行し、位置フィードフォワードゲイン・時定数両方の調整が行われる。また、整定時間を最小化する最優先位置指令パターンを指定する為に、選択項目619を設けた。619の選択項目では、チェックボックス627でチェックを付けた位置指令パターンと「整定時間最大パターン」の中から1つを選択することができる。
図28は、第1の実施例、第2の実施例に共通して本実施形態の電動機制御装置の全体のシステム構成図である。図28において、651はボールネジユニット、652は電動機、653は電動機652の位置検出器、655は負荷654と搭載するスライダー、650はサーボアンプ、656は電動機652の位置検出信号をサーボアンプ650に伝送するケーブルである。また、657は、サーボアンプ649から電動機652にj駆動電力を供給するケーブル、659はサーボアンプに電源を供給するケーブルである。662は、フィードバック制御パラメータ及び位置フィードフォワード制御パラメータの自動調整に際して、ユーザが調整条件を入力するパソコン、663はパソコン662からの調整条件をサーボアンプ650に伝送する為の通信ケーブルである。
なお、図28では、全体のシステム構成図として、電動機制御装置の駆動対象に回転系の電動機を用いた場合を例として、説明を行ったが、この電動機制御装置の全体のシステム構成は、電動機制御装置の駆動対象に、直動系の電動機を用いた場合でも、同様の効果を得ることができる。
最後に、前述の実施例1、実施例2の説明に用いた図1の符号と図28における符号との対応関係を説明する。電動機1は652に、位置検出器5は653に、負荷2は654及び655に、駆動軸3はボールネジユニット651内部のボールネジに対応する。また、次の構成要素はサーボアンプ649に含まれる。すなわち、電力変換器4を筆頭に、減算器6、位置制御器7、速度制御器8、減算器9、速度制御器10、電流検出器11、減算器12、及び電流制御器13等の通常の制御装置である。また、本発明によって付加された位置フィードフォワード制御器14、フィードバック及びフィードフォワード制御パラメータチューニング部15なども、サーボアンプ650に含まれている。