(57)【要約】【課題】ソフトウェアで高速除算機能を実現することができる整数除算装置およびモータ制御装置を提供する。【解決手段】整数除算装置は、被除数および除数に基づいて、被除数を除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する判定部と、判定部により商の値がレジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、予め定められた固定値を出力値としてレジスタに出力する出力部と、を備える。【選択図】      図３
2020160704.tif 000002
【特許請求の範囲】
【請求項１】
被除数および除数に基づいて、前記被除数を前記除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する判定部と、
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、予め定められた固定値を出力値として前記レジスタに出力する出力部と、を備えることを特徴とする整数除算装置。
【請求項２】
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、前記被除数を前記除数で整数除算する除算処理を行う除算部をさらに備え、
前記出力部は、
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、前記除算部による前記除算処理の結果である商を前記出力値として出力し、
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、前記固定値を前記出力値として出力することを特徴とする請求項１に記載の整数除算装置。
【請求項３】
前記除算部は、
前記除数を定数として扱い、当該除数の逆数に対応する値を前記被除数に乗算することで前記除算処理を行うことを特徴とする請求項２に記載の整数除算装置。
【請求項４】
前記固定値は、前記レジスタの大きさのビット数で表せる最大値であることを特徴とする請求項１から３のいずれか１項に記載の整数除算装置。
【請求項５】
前記固定値は、前記レジスタの大きさのビット数で表せる最小値であることを特徴とする請求項１から４のいずれか１項に記載の整数除算装置。
【請求項６】
前記固定値は、零であることを特徴とする請求項１から５のいずれか１項に記載の整数除算装置。
【請求項７】
前記出力部により前記出力値として前記固定値が出力された場合、整数除算の異常であると判断する異常判断部をさらに備えることを特徴とする請求項１から６のいずれか１項に記載の整数除算装置。
【請求項８】
入力信号を電子ギア比に基づいて調整する電子ギア部と、
前記電子ギア部においてモータの位置指令値を前記入力信号として調整された前記位置指令値に基づいて、前記モータを制御する電力変換部と、を備え、
前記電子ギア部は、
被除数および除数に基づいて、前記被除数を前記除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する判定部と、
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、予め定められた固定値を出力値として前記レジスタに出力する出力部と、を備えることを特徴とするモータ制御装置。
【請求項９】
前記電子ギア部は、
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、前記被除数を前記除数で整数除算する除算処理を行う除算部をさらに備え、
前記出力部は、
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、前記除算部による前記除算処理の結果である商を前記出力値として出力し、
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、前記固定値を前記出力値として出力することを特徴とする請求項８に記載のモータ制御装置。
【請求項１０】
前記除数は、前記位置指令値の分解能および前記モータに接続されたエンコーダの分解能のいずれか一方であり、
前記除算部は、
前記除数を定数として扱い、当該除数の逆数に対応する値を前記被除数に乗算することで前記除算処理を行うことを特徴とする請求項９に記載のモータ制御装置。
【請求項１１】
前記レジスタの大きさのビット数は、前記入力信号のビット数と同等であることを特徴とする請求項８から１０のいずれか１項に記載のモータ制御装置。
【請求項１２】
被除数および除数に基づいて、前記被除数を前記除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定するステップと、
前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、予め定められた固定値を出力値として前記レジスタに出力するステップと、を含むことを特徴とする整数除算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、整数除算装置およびモータ制御装置に関する。
【背景技術】
【０００２】
従来、整数除算機能を実現するハードウェアとしては、専用ＩＣ、または汎用ＭＣＵが用いられている。専用ＩＣでは、ハードウェア除算命令が存在するため高速な除算処理を実現することができるが、コストが高いといった問題がある。そのため、コストの削減のためには、安価な汎用ＭＣＵを用い、汎用ＭＣＵにソフトウェア処理を加えることで整数除算機能を実現する必要がある。
例えば、特許文献１には、被除数から除数を減算したときに部分剰余と部分商とが同時に求められるように除算処理前に除数を変換し、被除数を１ビットずつ左シフトしながら被除数から除数を繰返し減算して各桁の商を求める整数除算方法が開示されている。
また、特許文献２には、整数の除算において、除数があらかじめ定まった定数のとき、被除数を補正することで、加減算とビットシフト操作だけで商を求める整数除算方式が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００２−１７５１７９号公報
【特許文献２】特開平０４−３４８４２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
汎用ＭＣＵ内で除算処理を行った場合、除算処理に時間がかかると、同一ＭＣＵ内で行われる通信等の他の制御に支障をきたす。そのため、ハードウェアに対応するハードウェア除算命令が無い安価な汎用ＭＣＵでは、高速除算の実現が難しかった。
そこで、本発明は、ソフトウェアで高速除算機能を実現することができる整数除算装置およびモータ制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記課題を解決するために、本発明の一つの態様の整数除算装置は、被除数および除数に基づいて、前記被除数を前記除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する判定部と、前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、予め定められた固定値を出力値として前記レジスタに出力する出力部と、を備える。
【０００６】
また、本発明の一つの態様のモータ制御装置は、入力信号を電子ギア比に基づいて調整する電子ギア部と、前記電子ギア部においてモータの位置指令値を前記入力信号として調整された前記位置指令値に基づいて、前記モータを制御する電力変換部と、を備え、前記電子ギア部は、被除数および除数に基づいて、前記被除数を前記除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する判定部と、前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、予め定められた固定値を出力値として前記レジスタに出力する出力部と、を備える。
【０００７】
さらに、本発明の一つの態様の整数除算方法は、被除数および除数に基づいて、前記被除数を前記除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定するステップと、前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、予め定められた固定値を出力値として前記レジスタに出力するステップと、を含む。
【発明の効果】
【０００８】
本発明の一つの態様によれば、被除数を除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定し、商の値がレジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、除算処理を実行せず固定値を出力するため、除算の高速化を実現することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施形態におけるモータ制御装置の構成例を示す図である。
【図２】図２は、電子ギア部の機能ブロック図である。
【図３】図３は、整数除算処理を示すフローチャートである。
【図４】図４は、張り付け処理を行った場合の出力値を示す図である。
【図５】図５は、張り付け処理を行わない場合の出力値を示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を用いて本発明の実施の形態について説明する。
なお、本発明の範囲は、以下の実施の形態に限定されるものではなく、本発明の技術的思想の範囲内で任意に変更可能である。
【００１１】
図１は、本実施形態におけるータ制御装置１０の構成例を示す図である。
モータ制御装置１０は、電子ギア部１１〜１３と、位置速度制御器１４と、電力変換部１５と、を備え、モータ２１の回転を制御する。モータ２１は、例えばＡＣサーボモータであり、モータ２１には、モータ軸の回転位置を検出する回転検出器としてのエンコーダ２２が接続されている。
【００１２】
電子ギア部１１〜１３は、入力信号を電子ギア比に基づいて調整する。なお、電子ギア部１１〜１３は、分周逓倍を利用して電子ギア機能を実現する。したがって、図１では、電子ギア部１１〜１３を「分周逓倍」と表記している。
電子ギア部１１は、モータ２１の位置指令値を入力信号とし、位置指令値の分解能とモータ２１に接続されたエンコーダ２２の分解能との違いを調整する。ここで、モータ２１の位置指令値は、モータ２１の目標とする位置情報（角度情報）を示す値であり、整数の値である。当該位置指令値は、ユーザが指定した値であってもよいし、不図示の上位装置により生成された値であってもよい。
電子ギア部１２は、エンコーダ２２から出力されるモータ２１の位置検出値を入力信号とし、位置指令値の分解能とエンコーダ２２の分解能との違いを調整する。
電子ギア部１３は、エンコーダ２２から出力されるモータ２１の位置検出値を入力信号とし、エンコーダ２２の分解能とパルスの分解能との違いを調整する。
【００１３】
本実施形態では、電子ギア部１１〜１３における電子ギア機能は、汎用ＭＣＵ（Micro Control Unit）のソフトウェア処理により実現される。電子ギア部１１〜１３の入力信号をｉｎｐｕｔ、出力値をｏｕｔｐｕｔとした場合、電子ギア機能は、次式の除算処理により表すことができる。
ｏｕｔｐｕｔ＝ｉｎｐｕｔ×分解能Ａ／分解能Ｂ  ………（１）
ここで、電子ギア部１１における処理の場合、入力信号ｉｎｐｕｔは位置指令値、分解能Ａはエンコーダ２２の分解能、分解能Ｂは位置指令値の分解能である。
また、電子ギア部１２における処理の場合、入力信号ｉｎｐｕｔは位置検出値、分解能Ａは位置指令値の分解能、分解能Ｂはエンコーダ２２の分解能である。
さらに、電子ギア部１３における処理の場合、入力信号ｉｎｐｕｔは位置検出値、分解能Ａはパルスの分解能、分解能Ｂはエンコーダ２２の分解能である。
これらの電子ギア部１１〜１３は、それぞれ被除数を除数で整数除算した結果を出力する整数除算装置として動作することができる。
【００１４】
位置速度制御器１４は、位置制御器や速度制御器、電流制御器といった制御器を備える。位置速度制御器１４は、電子ギア部１１において調整された位置指令値と、エンコーダ２２から出力されるモータ２１の位置検出値との偏差（差分）に基づいて、当該偏差を０とするべくフィードバック制御を行う。
電力変換部１５は、位置速度制御器１４により出力される制御信号に従って、モータ２１の駆動電流を制御する。つまり、電力変換部１５は、電子ギア部１１においてモータ２１の位置指令値を入力信号ｉｎｐｕｔとして調整された位置指令値に基づいて、モータ２１を制御する。
【００１５】
また、モータ制御装置１０は、位置指令値と、電子ギア部１２において調整された位置検出値との偏差をもとに、位置偏差の絶対値を出力するＡＢＳ位置偏差の出力機能を有する。
さらに、モータ制御装置１０は、電子ギア部１３において調整された位置検出値をもとにパルス信号を出力するパルス出力機能を有する。
【００１６】
ところで、安価な汎用ＭＣＵはハードウェアに対応するハードウェア除算命令が無く、標準除算関数を用いて除算処理を行った場合、多くの処理時間がかかってしまう。開発環境によっては、ハードウェア除算命令が存在するＭＣＵの場合と比較して、１１倍もの処理時間がかかる場合もある。
そこで、本実施形態では、除算処理の高速化を実現するために、電子ギア部１１〜１３における出力値ｏｕｔｐｕｔのビット数を制限する。
【００１７】
図２は、電子ギア部１１の機能ブロック図である。なお、電子ギア部１２および１３についても、電子ギア部１１と同様の構成を有するため、ここでは説明を省略する。
電子ギア部１１は、取得部１１ａと、判定部１１ｂと、除算部１１ｃと、出力部１１ｄと、異常判断部１１ｅと、を備える。
取得部１１ａは、入力信号ｉｎｐｕｔとして、位置指令値を取得する。取得部１１ａは、取得した入力信号ｉｎｐｕｔを、判定部１１ｂおよび除算部１１ｃに出力する。
【００１８】
判定部１１ｂは、被除数（ｉｎｐｕｔ×エンコーダの分解能）および除数（位置指令値の分解能）に基づいて、被除数を除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する。ここで、上記レジスタは、ＭＣＵが有する内部レジスタであり、当該レジスタの大きさのビット数は予め分かっているものとする。
具体的には、判定部１１ｂは、入力信号ｉｎｐｕｔの値を取得し、入力信号ｉｎｐｕｔの値が所定の値以上である場合に、商の値がレジスタの大きさのビット数で表せる値の範囲に収まらないと判定する。
【００１９】
位置指令値の分解能およびエンコーダの分解能の値は、プログラム（ソフトウェア）を実行する時点で分かっており、一度プログラムを実行した後は、ハードウェアが変わらない限り変わることはない。そのため、内部レジスタの大きさのビット数と、各分解能の値とに基づいて、入力信号ｉｎｐｕｔの値がいくつ以下でないと商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まらないか（商がオーバーフローしてしまうか）が決まる。
そこで、判定部１１ｂは、内部レジスタの大きさのビット数と、各分解能の値とに基づいて、商がオーバーフローしない入力信号ｉｎｐｕｔの値を設定する。そして、判定部１１ｂは、設定した値と入力信号ｉｎｐｕｔの値とを比較し、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する。
【００２０】
除算部１１ｃは、判定部１１ｂの判定結果を入力し、判定部１１ｂにより商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合に、取得部１１ａから取得された入力信号ｉｎｐｕｔを用いて、被除数を除数で整数除算する除算処理を行う。このとき、除算部１１ｃは、除数である位置指令値の分解能を定数として扱い、当該除数の逆数に対応する値を被除数に乗算することで除算処理を行う。
ＭＣＵにとっては、乗算の方が除算よりも処理時間が少なくてすむ。そのため、除数の逆数を被除数に乗算する手法を用いて除算処理を実現することで、演算処理時間を短縮することができる。また、電子ギア部１１における除算処理の除数（分母）は、位置指令値の分解能であり、定数とみなせる。除数が定数である場合、除数の逆数は計算のたびに変化しないため、除算処理（除数の逆数を乗算する処理）のたびに当該逆数を計算する必要はない。したがって、除数を定数として扱い、当該除数の逆数に対応する値を被除数に乗算する除算処理を行うことで、高速演算が可能となる。
【００２１】
なお、電子ギア部１２および１３における除算処理の場合にも、除数（分母）はエンコーダ２２の分解能であり、定数とみなせる。したがって、同様に、除数であるエンコーダ２２の分解能を定数として扱い、当該除数の逆数に対応する値を被除数に乗算することで除算処理の高速化が図れる。
【００２２】
出力部１１ｄは、判定部１１ｂの判定結果を入力し、判定部１１ｂにより商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まると判定されている場合、除算部１１ｃによる除算処理の結果である商を出力値ｏｕｔｐｕｔとして出力する。一方、出力部１１ｄは、判定部１１ｂにより商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まらないと判定されている場合、予め定められた固定値を出力値ｏｕｔｐｕｔとして内部レジスタに出力する。
【００２３】
ここで、上記固定値は、内部レジスタに収まる範囲の上限値または下限値とすることができる。例えば、内部レジスタの大きさのビット数がＮビットであり、除算結果が負の値をとらない場合には、上限値は２N−１、下限値は０となる。一方、内部レジスタの大きさのビット数がＮビットであり、除算結果が正負の値をとる場合には、符号ビット（最上位ビット）を考慮して、上限値は２N-1−１、下限値は−（２N-1−１）となる。
つまり、上記固定値は、内部レジスタの大きさのビット数で表せる最大値、内部レジスタの大きさのビット数で表せる最小値、もしくは零とすることができる。
なお、上記固定値は、内部レジスタの大きさのビット数で表せる値であれば、任意の値としてもよい。つまり、除算結果を内部レジスタの大きさ以下のビット数に制限して出力できればよい。
【００２４】
異常判定部１１ｅは、出力部１１ｄから出力される出力値ｏｕｔｐｕｔを入力し、出力部１１ｄにより出力値ｏｕｔｐｕｔとして固定値が出力されている場合、整数除算の異常であると判断する。
【００２５】
図３は、電子ギア部１１において実行される整数除算処理を示すフローチャートである。この図３に示す処理は、取得部１１ａ、判定部１１ｂ、除算部１１ｃおよび出力部１１ｄの処理であり、ＭＣＵがプログラムを実行することにより実現される。なお、電子ギア部１２および１３においてそれぞれ実行される整数除算処理についても同様であるため、ここでは説明を省略する。
まずステップＳ１において、取得部１１ａは、被除数として、入力信号ｉｎｐｕｔとエンコーダの分解能とを取得する。
【００２６】
次にステップＳ２において、判定部１１ｂは、被除数および除数に基づいて、被除数を除数で除算して得られる商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する。具体的には、判定部１１ｂは、ステップＳ１において取得された入力信号ｉｎｐｕｔの値が所定の値以上であるか否かに基づいて、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する。
そして、判定部１１ｂは、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まると判定した場合、ステップＳ３に移行する。一方、判定部１１ｂは、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まらないと判定した場合にはステップＳ４に移行する。
【００２７】
ステップＳ３では、除算部１１ｃは、被除数を除数で整数除算する除算処理を行い、ステップＳ５に移行する。このとき、ステップＳ３において除算部１１ｃは、除数である位置指令値の分解能を定数として扱い、当該除数の逆数に対応する値を被除数に乗算することで除算処理を行う。そして、出力部１１ｄは、除算部１１ｃによる除算処理の結果である商を出力値ｏｕｔｐｕｔとして設定する。
また、ステップＳ４では、出力部１１ｄは、予め定められた固定値を出力値ｏｕｔｐｕｔとして設定し、ステップＳ５に移行する。
ステップＳ５では、出力部１１ｄは、出力値ｏｕｔｐｕｔを内部レジスタおよび異常判断部１１ｅに出力し、図３の処理を終了する。
【００２８】
このように、本実施形態における電子ギア部１１（整数除算装置）は、被除数および除数に基づいて、被除数を除数で除算して得られる商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する判定部１１ｂと、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、予め定められた固定値を出力値ｏｕｔｐｕｔとして内部レジスタに出力する出力部１１ｄと、を備える。
さらに、電子ギア部１１は、判定部１１ｂにより商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、被除数を除数で整数除算する除算処理を行う除算部１１ｃをさらに備える。そして、電子ギア部１１の出力部１１ｄは、判定部１１ｂにより商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、除算部１１ｃによる除算処理の結果である商を出力値ｏｕｔｐｕｔとして出力する。
【００２９】
つまり、電子ギア部１１は、除算処理を実行する前に、被除数を除数で除算した商の値を判定し、その判定結果に応じて、除算処理を実行した結果を出力したり、除算処理を実行せずに固定値を出力したりする。したがって、処理の高速化を実現することができる。
また、除算部１１ｃは、除数を定数として扱い、当該除数の逆数に対応する値を被除数に乗算することで除算処理を行うことができる。電子ギアの場合、除数は位置指令値の分解能またはエンコーダの分解能であり、定数とみなすことができる。除数を定数として扱うことで、処理時間を要する除算に替えて乗算を行い、除算処理を実現することができるので、整数除算の高速演算が可能となる。また、分子の分解能Ａと分母の分解能Ｂの両方を定数化するのではなく、分母の分解能Ｂのみを定数化するので、桁落ちの発生を防ぐことができ、精度良く除算処理を行うことができる。
【００３０】
さらに、出力値ｏｕｔｐｕｔとして出力する上記固定値は、内部レジスタの大きさのビット数で表せる最大値、最小値もしくは零とすることができる。このように、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まらない場合には、計算結果として想定されている商の上限値または下限値に張り付ける張り付け処理を行うようにしてもよい。
これにより、除算結果として出力する出力値ｏｕｔｐｕｔを、内部レジスタの大きさ以下のビット数に制限することができる。また、出力値ｏｕｔｐｕｔの張り付け処理を行うことで、商が内部レジスタからあふれたことを容易に判断することができる。
【００３１】
さらにまた、電子ギア部１１は、出力部１１ｄにより出力値ｏｕｔｐｕｔとして固定値が出力されている場合、整数除算の異常であると判断する異常判断部１１ｅをさらに備えることができる。これにより、出力値ｏｕｔｐｕｔの値から容易に異常判断を行うことができる。例えば、出力値ｏｕｔｐｕｔが、内部レジスタの大きさのビット数で表せる最大値、最小値、もしくは零といった正常時には取り得ない値となっている場合には、整数除算の異常であると容易に判断することができる。
【００３２】
図４は、張り付け処理を行った場合の出力値ｏｕｔｐｕｔを示す図である。この図４において、二点鎖線で示す直線Ａは、除算処理の実際の計算結果である。なお、図４では、除算処理の計算結果が正負の値をとる場合の例を示している。除算処理の計算結果が負の値をとらない場合には、図４の最小値ｍｉｎが０となる。
本実施形態では、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、被除数を除数で整数除算する除算処理を行い、除算処理の結果である商を出力値ｏｕｔｐｕｔとして出力する。したがって、この場合には、実際の計算結果が出力値ｏｕｔｐｕｔとして出力される。
【００３３】
一方、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合には、出力値ｏｕｔｐｕｔを最大値ｍａｘもしくは最小値ｍｉｎに張り付ける。具体的には、商の値が最大値ｍａｘ以上となる場合には、出力値ｏｕｔｐｕｔを最大値ｍａｘに張り付け、商の値が最小値ｍｉｎ以下となる場合には、出力値ｏｕｔｐｕｔを最小値ｍｉｎに張り付ける。
したがって、出力値ｏｕｔｐｕｔを見るだけで、商がオーバーフローする異常が発生したか否かを容易に判断することができる。例えば丸印Ｂで示すように、出力値ｏｕｔｐｕｔが最大値ｍａｘである場合には、商が最大値ｍａｘ以上となるオーバーフローが発生したことを容易に把握することができる。
【００３４】
一方、本実施形態のような出力値ｏｕｔｐｕｔの張り付け処理を行わない場合、一般的には、実際の計算結果が内部レジスタに収まらない範囲の値であっても、内部レジスタの大きさのビット数で表すことができる範囲の数値のみが出力される。そのため、出力値ｏｕｔｐｕｔは、図５に示すように内部レジスタに収まる範囲の値となる。例えば、商の値が最大値ｍａｘを超えた場合、出力値ｏｕｔｐｕｔは最小値ｍｉｎから始まる値となる。このように、商がオーバーフローした場合、出力値ｏｕｔｐｕｔは、内部レジスタに収まる範囲の値となって返ってくる。
したがって、出力値ｏｕｔｐｕｔの張り付け処理を行わない場合には、出力値ｏｕｔｐｕｔを見ただけでは、商がオーバーフローする異常が発生したか否かを判断することはできない。例えば丸印Ｃに示す出力値ｏｕｔｐｕｔが得られた場合、実際の計算結果が内部レジスタに収まる範囲の値なのか、商がオーバーフローして内部レジスタに収まる範囲の値が返ってきたのかを判断できない。
本実施形態では、商がオーバーフローする異常を適切に判断し、電子ギアの異常を適切に判断することができる。
【００３５】
なお、本実施形態では、実際の計算結果が最大値ｍａｘもしくは最小値ｍｉｎとなった場合であっても（商が内部レジスタに収まる場合であっても）、出力値ｏｕｔｐｕｔが最大値ｍａｘもしくは最小値ｍｉｎであるために異常と判断する。内部レジスタの大きさは、正常な計算結果が最大値ｍａｘおよび最小値ｍｉｎに達しないように設計されるのが一般的であるため、実際の計算結果が最大値ｍａｘもしくは最小値ｍｉｎとなった場合には異常であると判断して問題はない。同様の理由により、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合に張り付ける固定値は、最大値ｍａｘもしくは最小値ｍｉｎの近傍の値であってもよい。
【００３６】
さらに、電子ギア部１１は、内部レジスタの大きさのビット数が入力信号ｉｎｐｕｔのビット数と同等であるとして、商の値が入力信号ｉｎｐｕｔのビット数で表せる値の範囲に収まるか否かを判定するようにしてもよい。
電子ギアの場合、例えば位置指令値の分解能とエンコーダの分解能とは、同じくらいの桁数で表すことのできる値であり（位置指令値の分解能≒エンコーダの分解能）、上記（１）式の分解能Ａ／分解能Ｂは１程度である。そのため、正常に計算が行われた場合、計算結果である商のビット数は、入力信号ｉｎｐｕｔのビット数と同等となると考えることができる。
したがって、商の値が入力信号ｉｎｐｕｔのビット数で表せる値の範囲に収まるか否かを判定することで、正常な計算結果の大きさに合わせて設計された内部レジスタに商が収まるか否かを適切に判定することができる。そして、その判定結果に応じて実際に除算処理を行うか固定値を出力するかを判断することで、正常な計算結果が出力されると予測される場合にのみ実際に除算処理を行うようにすることができ、適切に処理の高速化を実現することができる。
【００３７】
以上説明したように、本実施形態における整数除算方法は、被除数および除数に基づいて、被除数を除数で除算して得られる商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定するステップと、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、予め定められた固定値を出力値としてレジスタに出力するステップと、を含む。
これにより、ハードウェアに対応するハードウェア除算命令が無い安価な汎用ＭＣＵであっても、ソフトウェアによる高速除算機能の実現を可能とすることができる。具体的には、汎用ＭＣＵにおいて標準除算関数を用いて除算処理を行った場合と比較して、６分の１まで処理時間を短縮することも可能である。また、本実施形態における整数除算方法では、処理時間が開発環境のバージョンに依存しない。
なお、本実施形態は、例えば、３２ｂｉｔの除算命令を備えるＭＣＵにて、６４ｂｉｔの除算命令を実現する場合や、ハードウェア除算命令が存在しないＭＣＵにて、３２ｂｉｔの除算命令を実現する場合など、対応するハードウェア除算命令が無い場合を想定している。
【００３８】
高応答および高精度な位置決めを実現するモータであるＡＣサーボモータでは、ユーザから受信する位置指令値の分解能とモータに接続されたエンコーダの分解能との違いを調整するために、電子ギア機能が用いられている。この電子ギア機能を汎用ＭＣＵで実現する場合、ソフトウェアの処理として必ず除算処理が必要となる。ところが、除算処理に時間がかかると、同一ＭＣＵ内で行われる他の制御（モータ制御や通信等）に支障をきたし、ＡＣサーボモータの特徴である高応答が実現できなくなってしまう。そのため、ハードウェアに対応するハードウェア除算命令が無い安価な汎用ＭＣＵでの電子ギア機能の実現は難しかった。
【００３９】
これに対して、本実施形態では、ハードウェアに対応するハードウェア除算命令が無い安価な汎用ＭＣＵで、高応答および高精度な位置決めを行うＡＣサーボモータの電子ギア機能を適切に実現することができる。また、電子ギアの異常を除算の結果から容易に判断することができる。
なお、上記実施形態においては、整数除算装置が、ＡＣサーボモータが有する電子ギア機能を実現する場合について説明したが、電子ギア機能以外の整数除算処理にも適用可能である。
【符号の説明】
【００４０】
１０…モータ制御装置、１１〜１３…電子ギア部、１４…位置速度制御器、１５…電力変換部、１１ａ…取得部、１１ｂ…判定部、１１ｃ…除算部、１１ｄ…出力部、１１ｅ…異常判断部、２１…モータ、２２…エンコーダ
【図１】
2020160704.tif 000003
【図２】
2020160704.tif 000004
【図３】
2020160704.tif 000005
【図４】
2020160704.tif 000006
【図５】
2020160704.tif 000007