(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-03-07
(45)【発行日】2022-03-15
(54)【発明の名称】整数除算装置およびモータ制御装置
(51)【国際特許分類】
G06F 7/535 20060101AFI20220308BHJP
H02P 23/22 20160101ALI20220308BHJP
【FI】
G06F7/535
G06F7/535 520
H02P23/22
(21)【出願番号】P 2019058398
(22)【出願日】2019-03-26
【審査請求日】2020-12-22
(73)【特許権者】
【識別番号】000232302
【氏名又は名称】日本電産株式会社
(74)【代理人】
【識別番号】100109380
【氏名又は名称】小西 恵
(74)【代理人】
【識別番号】100109036
【氏名又は名称】永岡 重幸
(72)【発明者】
【氏名】小泉 太嘉志
(72)【発明者】
【氏名】海永 正博
【審査官】松浦 かおり
(56)【参考文献】
【文献】特開2006-023974(JP,A)
【文献】特開2010-033275(JP,A)
【文献】特開平02-242426(JP,A)
【文献】特開昭57-041737(JP,A)
【文献】特開平06-180640(JP,A)
【文献】特開平09-222993(JP,A)
【文献】特開2015-180983(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 5/01
G06F 7/38- 7/537
G06F 7/57- 7/575
G06F 7/74- 7/78
H02P 21/00-25/03
H02P 25/04
H02P 25/10-27/18
(57)【特許請求の範囲】
【請求項1】
被除数および除数に基づいて、前記被除数を前記除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する判定部と、
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、予め定められた固定値を出力値として前記レジスタに出力する出力部と、を備えることを特徴とする整数除算装置。
【請求項2】
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、前記被除数を前記除数で整数除算する除算処理を行う除算部をさらに備え、
前記出力部は、
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、前記除算部による前記除算処理の結果である商を前記出力値として出力し、
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、前記固定値を前記出力値として出力することを特徴とする請求項1に記載の整数除算装置。
【請求項3】
前記除算部は、
前記除数を定数として扱い、当該除数の逆数に対応する値を前記被除数に乗算することで前記除算処理を行うことを特徴とする請求項2に記載の整数除算装置。
【請求項4】
前記固定値は、前記レジスタの大きさのビット数で表せる最大値であることを特徴とする請求項1から3のいずれか1項に記載の整数除算装置。
【請求項5】
前記固定値は、前記レジスタの大きさのビット数で表せる最小値であることを特徴とする請求項1から4のいずれか1項に記載の整数除算装置。
【請求項6】
前記固定値は、零であることを特徴とする請求項1から5のいずれか1項に記載の整数除算装置。
【請求項7】
前記出力部により前記出力値として前記固定値が出力された場合、整数除算の異常であると判断する異常判断部をさらに備えることを特徴とする請求項1から6のいずれか1項に記載の整数除算装置。
【請求項8】
入力信号を電子ギア比に基づいて調整する電子ギア部と、
前記電子ギア部においてモータの位置指令値を前記入力信号として調整された前記位置指令値に基づいて、前記モータを制御する電力変換部と、を備え、
前記電子ギア部は、
被除数および除数に基づいて、前記被除数を前記除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する判定部と、
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、予め定められた固定値を出力値として前記レジスタに出力する出力部と、を備えることを特徴とするモータ制御装置。
【請求項9】
前記電子ギア部は、
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、前記被除数を前記除数で整数除算する除算処理を行う除算部をさらに備え、
前記出力部は、
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、前記除算部による前記除算処理の結果である商を前記出力値として出力し、
前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、前記固定値を前記出力値として出力することを特徴とする請求項8に記載のモータ制御装置。
【請求項10】
前記除数は、前記位置指令値の分解能および前記モータに接続されたエンコーダの分解能のいずれか一方であり、
前記除算部は、
前記除数を定数として扱い、当該除数の逆数に対応する値を前記被除数に乗算することで前記除算処理を行うことを特徴とする請求項9に記載のモータ制御装置。
【請求項11】
前記レジスタの大きさのビット数は、前記入力信号のビット数と同等であることを特徴とする請求項8から10のいずれか1項に記載のモータ制御装置。
【請求項12】
被除数および除数に基づいて、前記被除数を前記除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定するステップと、
前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に
収まらないと判定された場合、予め定められた固定値を出力値として前記レジスタに出力するステップと、を含むことを特徴とする整数除算方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、整数除算装置およびモータ制御装置に関する。
【背景技術】
【0002】
従来、整数除算機能を実現するハードウェアとしては、専用IC、または汎用MCUが用いられている。専用ICでは、ハードウェア除算命令が存在するため高速な除算処理を実現することができるが、コストが高いといった問題がある。そのため、コストの削減のためには、安価な汎用MCUを用い、汎用MCUにソフトウェア処理を加えることで整数除算機能を実現する必要がある。
例えば、特許文献1には、被除数から除数を減算したときに部分剰余と部分商とが同時に求められるように除算処理前に除数を変換し、被除数を1ビットずつ左シフトしながら被除数から除数を繰返し減算して各桁の商を求める整数除算方法が開示されている。
また、特許文献2には、整数の除算において、除数があらかじめ定まった定数のとき、被除数を補正することで、加減算とビットシフト操作だけで商を求める整数除算方式が開示されている。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2002-175179号公報
【文献】特開平04-348424号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
汎用MCU内で除算処理を行った場合、除算処理に時間がかかると、同一MCU内で行われる通信等の他の制御に支障をきたす。そのため、ハードウェアに対応するハードウェア除算命令が無い安価な汎用MCUでは、高速除算の実現が難しかった。
そこで、本発明は、ソフトウェアで高速除算機能を実現することができる整数除算装置およびモータ制御装置を提供することを目的とする。
【課題を解決するための手段】
【0005】
上記課題を解決するために、本発明の一つの態様の整数除算装置は、被除数および除数に基づいて、前記被除数を前記除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する判定部と、前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、予め定められた固定値を出力値として前記レジスタに出力する出力部と、を備える。
【0006】
また、本発明の一つの態様のモータ制御装置は、入力信号を電子ギア比に基づいて調整する電子ギア部と、前記電子ギア部においてモータの位置指令値を前記入力信号として調整された前記位置指令値に基づいて、前記モータを制御する電力変換部と、を備え、前記電子ギア部は、被除数および除数に基づいて、前記被除数を前記除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する判定部と、前記判定部により前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、予め定められた固定値を出力値として前記レジスタに出力する出力部と、を備える。
【0007】
さらに、本発明の一つの態様の整数除算方法は、被除数および除数に基づいて、前記被除数を前記除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定するステップと、前記商の値が前記レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、予め定められた固定値を出力値として前記レジスタに出力するステップと、を含む。
【発明の効果】
【0008】
本発明の一つの態様によれば、被除数を除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定し、商の値がレジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、除算処理を実行せず固定値を出力するため、除算の高速化を実現することができる。
【図面の簡単な説明】
【0009】
【
図1】
図1は、本実施形態におけるモータ制御装置の構成例を示す図である。
【
図2】
図2は、電子ギア部の機能ブロック図である。
【
図3】
図3は、整数除算処理を示すフローチャートである。
【
図4】
図4は、張り付け処理を行った場合の出力値を示す図である。
【
図5】
図5は、張り付け処理を行わない場合の出力値を示す図である。
【発明を実施するための形態】
【0010】
以下、図面を用いて本発明の実施の形態について説明する。
なお、本発明の範囲は、以下の実施の形態に限定されるものではなく、本発明の技術的思想の範囲内で任意に変更可能である。
【0011】
図1は、本実施形態におけるータ制御装置10の構成例を示す図である。
モータ制御装置10は、電子ギア部11~13と、位置速度制御器14と、電力変換部15と、を備え、モータ21の回転を制御する。モータ21は、例えばACサーボモータであり、モータ21には、モータ軸の回転位置を検出する回転検出器としてのエンコーダ22が接続されている。
【0012】
電子ギア部11~13は、入力信号を電子ギア比に基づいて調整する。なお、電子ギア部11~13は、分周逓倍を利用して電子ギア機能を実現する。したがって、
図1では、電子ギア部11~13を「分周逓倍」と表記している。
電子ギア部11は、モータ21の位置指令値を入力信号とし、位置指令値の分解能とモータ21に接続されたエンコーダ22の分解能との違いを調整する。ここで、モータ21の位置指令値は、モータ21の目標とする位置情報(角度情報)を示す値であり、整数の値である。当該位置指令値は、ユーザが指定した値であってもよいし、不図示の上位装置により生成された値であってもよい。
電子ギア部12は、エンコーダ22から出力されるモータ21の位置検出値を入力信号とし、位置指令値の分解能とエンコーダ22の分解能との違いを調整する。
電子ギア部13は、エンコーダ22から出力されるモータ21の位置検出値を入力信号とし、エンコーダ22の分解能とパルスの分解能との違いを調整する。
【0013】
本実施形態では、電子ギア部11~13における電子ギア機能は、汎用MCU(Micro Control Unit)のソフトウェア処理により実現される。電子ギア部11~13の入力信号をinput、出力値をoutputとした場合、電子ギア機能は、次式の除算処理により表すことができる。
output=input×分解能A/分解能B ………(1)
ここで、電子ギア部11における処理の場合、入力信号inputは位置指令値、分解能Aはエンコーダ22の分解能、分解能Bは位置指令値の分解能である。
また、電子ギア部12における処理の場合、入力信号inputは位置検出値、分解能Aは位置指令値の分解能、分解能Bはエンコーダ22の分解能である。
さらに、電子ギア部13における処理の場合、入力信号inputは位置検出値、分解能Aはパルスの分解能、分解能Bはエンコーダ22の分解能である。
これらの電子ギア部11~13は、それぞれ被除数を除数で整数除算した結果を出力する整数除算装置として動作することができる。
【0014】
位置速度制御器14は、位置制御器や速度制御器、電流制御器といった制御器を備える。位置速度制御器14は、電子ギア部11において調整された位置指令値と、エンコーダ22から出力されるモータ21の位置検出値との偏差(差分)に基づいて、当該偏差を0とするべくフィードバック制御を行う。
電力変換部15は、位置速度制御器14により出力される制御信号に従って、モータ21の駆動電流を制御する。つまり、電力変換部15は、電子ギア部11においてモータ21の位置指令値を入力信号inputとして調整された位置指令値に基づいて、モータ21を制御する。
【0015】
また、モータ制御装置10は、位置指令値と、電子ギア部12において調整された位置検出値との偏差をもとに、位置偏差の絶対値を出力するABS位置偏差の出力機能を有する。
さらに、モータ制御装置10は、電子ギア部13において調整された位置検出値をもとにパルス信号を出力するパルス出力機能を有する。
【0016】
ところで、安価な汎用MCUはハードウェアに対応するハードウェア除算命令が無く、標準除算関数を用いて除算処理を行った場合、多くの処理時間がかかってしまう。開発環境によっては、ハードウェア除算命令が存在するMCUの場合と比較して、11倍もの処理時間がかかる場合もある。
そこで、本実施形態では、除算処理の高速化を実現するために、電子ギア部11~13における出力値outputのビット数を制限する。
【0017】
図2は、電子ギア部11の機能ブロック図である。なお、電子ギア部12および13についても、電子ギア部11と同様の構成を有するため、ここでは説明を省略する。
電子ギア部11は、取得部11aと、判定部11bと、除算部11cと、出力部11dと、異常判断部11eと、を備える。
取得部11aは、入力信号inputとして、位置指令値を取得する。取得部11aは、取得した入力信号inputを、判定部11bおよび除算部11cに出力する。
【0018】
判定部11bは、被除数(input×エンコーダの分解能)および除数(位置指令値の分解能)に基づいて、被除数を除数で除算して得られる商の値がレジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する。ここで、上記レジスタは、MCUが有する内部レジスタであり、当該レジスタの大きさのビット数は予め分かっているものとする。
具体的には、判定部11bは、入力信号inputの値を取得し、入力信号inputの値が所定の値以上である場合に、商の値がレジスタの大きさのビット数で表せる値の範囲に収まらないと判定する。
【0019】
位置指令値の分解能およびエンコーダの分解能の値は、プログラム(ソフトウェア)を実行する時点で分かっており、一度プログラムを実行した後は、ハードウェアが変わらない限り変わることはない。そのため、内部レジスタの大きさのビット数と、各分解能の値とに基づいて、入力信号inputの値がいくつ以下でないと商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まらないか(商がオーバーフローしてしまうか)が決まる。
そこで、判定部11bは、内部レジスタの大きさのビット数と、各分解能の値とに基づいて、商がオーバーフローしない入力信号inputの値を設定する。そして、判定部11bは、設定した値と入力信号inputの値とを比較し、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する。
【0020】
除算部11cは、判定部11bの判定結果を入力し、判定部11bにより商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合に、取得部11aから取得された入力信号inputを用いて、被除数を除数で整数除算する除算処理を行う。このとき、除算部11cは、除数である位置指令値の分解能を定数として扱い、当該除数の逆数に対応する値を被除数に乗算することで除算処理を行う。
MCUにとっては、乗算の方が除算よりも処理時間が少なくてすむ。そのため、除数の逆数を被除数に乗算する手法を用いて除算処理を実現することで、演算処理時間を短縮することができる。また、電子ギア部11における除算処理の除数(分母)は、位置指令値の分解能であり、定数とみなせる。除数が定数である場合、除数の逆数は計算のたびに変化しないため、除算処理(除数の逆数を乗算する処理)のたびに当該逆数を計算する必要はない。したがって、除数を定数として扱い、当該除数の逆数に対応する値を被除数に乗算する除算処理を行うことで、高速演算が可能となる。
【0021】
なお、電子ギア部12および13における除算処理の場合にも、除数(分母)はエンコーダ22の分解能であり、定数とみなせる。したがって、同様に、除数であるエンコーダ22の分解能を定数として扱い、当該除数の逆数に対応する値を被除数に乗算することで除算処理の高速化が図れる。
【0022】
出力部11dは、判定部11bの判定結果を入力し、判定部11bにより商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まると判定されている場合、除算部11cによる除算処理の結果である商を出力値outputとして出力する。一方、出力部11dは、判定部11bにより商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まらないと判定されている場合、予め定められた固定値を出力値outputとして内部レジスタに出力する。
【0023】
ここで、上記固定値は、内部レジスタに収まる範囲の上限値または下限値とすることができる。例えば、内部レジスタの大きさのビット数がNビットであり、除算結果が負の値をとらない場合には、上限値は2N-1、下限値は0となる。一方、内部レジスタの大きさのビット数がNビットであり、除算結果が正負の値をとる場合には、符号ビット(最上位ビット)を考慮して、上限値は2N-1-1、下限値は-(2N-1-1)となる。
つまり、上記固定値は、内部レジスタの大きさのビット数で表せる最大値、内部レジスタの大きさのビット数で表せる最小値、もしくは零とすることができる。
なお、上記固定値は、内部レジスタの大きさのビット数で表せる値であれば、任意の値としてもよい。つまり、除算結果を内部レジスタの大きさ以下のビット数に制限して出力できればよい。
【0024】
異常判定部11eは、出力部11dから出力される出力値outputを入力し、出力部11dにより出力値outputとして固定値が出力されている場合、整数除算の異常であると判断する。
【0025】
図3は、電子ギア部11において実行される整数除算処理を示すフローチャートである。この
図3に示す処理は、取得部11a、判定部11b、除算部11cおよび出力部11dの処理であり、MCUがプログラムを実行することにより実現される。なお、電子ギア部12および13においてそれぞれ実行される整数除算処理についても同様であるため、ここでは説明を省略する。
まずステップS1において、取得部11aは、被除数として、入力信号inputとエンコーダの分解能とを取得する。
【0026】
次にステップS2において、判定部11bは、被除数および除数に基づいて、被除数を除数で除算して得られる商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する。具体的には、判定部11bは、ステップS1において取得された入力信号inputの値が所定の値以上であるか否かに基づいて、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する。
そして、判定部11bは、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まると判定した場合、ステップS3に移行する。一方、判定部11bは、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まらないと判定した場合にはステップS4に移行する。
【0027】
ステップS3では、除算部11cは、被除数を除数で整数除算する除算処理を行い、ステップS5に移行する。このとき、ステップS3において除算部11cは、除数である位置指令値の分解能を定数として扱い、当該除数の逆数に対応する値を被除数に乗算することで除算処理を行う。そして、出力部11dは、除算部11cによる除算処理の結果である商を出力値outputとして設定する。
また、ステップS4では、出力部11dは、予め定められた固定値を出力値outputとして設定し、ステップS5に移行する。
ステップS5では、出力部11dは、出力値outputを内部レジスタおよび異常判断部11eに出力し、
図3の処理を終了する。
【0028】
このように、本実施形態における電子ギア部11(整数除算装置)は、被除数および除数に基づいて、被除数を除数で除算して得られる商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定する判定部11bと、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、予め定められた固定値を出力値outputとして内部レジスタに出力する出力部11dと、を備える。
さらに、電子ギア部11は、判定部11bにより商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、被除数を除数で整数除算する除算処理を行う除算部11cをさらに備える。そして、電子ギア部11の出力部11dは、判定部11bにより商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、除算部11cによる除算処理の結果である商を出力値outputとして出力する。
【0029】
つまり、電子ギア部11は、除算処理を実行する前に、被除数を除数で除算した商の値を判定し、その判定結果に応じて、除算処理を実行した結果を出力したり、除算処理を実行せずに固定値を出力したりする。したがって、処理の高速化を実現することができる。
また、除算部11cは、除数を定数として扱い、当該除数の逆数に対応する値を被除数に乗算することで除算処理を行うことができる。電子ギアの場合、除数は位置指令値の分解能またはエンコーダの分解能であり、定数とみなすことができる。除数を定数として扱うことで、処理時間を要する除算に替えて乗算を行い、除算処理を実現することができるので、整数除算の高速演算が可能となる。また、分子の分解能Aと分母の分解能Bの両方を定数化するのではなく、分母の分解能Bのみを定数化するので、桁落ちの発生を防ぐことができ、精度良く除算処理を行うことができる。
【0030】
さらに、出力値outputとして出力する上記固定値は、内部レジスタの大きさのビット数で表せる最大値、最小値もしくは零とすることができる。このように、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まらない場合には、計算結果として想定されている商の上限値または下限値に張り付ける張り付け処理を行うようにしてもよい。
これにより、除算結果として出力する出力値outputを、内部レジスタの大きさ以下のビット数に制限することができる。また、出力値outputの張り付け処理を行うことで、商が内部レジスタからあふれたことを容易に判断することができる。
【0031】
さらにまた、電子ギア部11は、出力部11dにより出力値outputとして固定値が出力されている場合、整数除算の異常であると判断する異常判断部11eをさらに備えることができる。これにより、出力値outputの値から容易に異常判断を行うことができる。例えば、出力値outputが、内部レジスタの大きさのビット数で表せる最大値、最小値、もしくは零といった正常時には取り得ない値となっている場合には、整数除算の異常であると容易に判断することができる。
【0032】
図4は、張り付け処理を行った場合の出力値outputを示す図である。この
図4において、二点鎖線で示す直線Aは、除算処理の実際の計算結果である。なお、
図4では、除算処理の計算結果が正負の値をとる場合の例を示している。除算処理の計算結果が負の値をとらない場合には、
図4の最小値minが0となる。
本実施形態では、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まると判定された場合、被除数を除数で整数除算する除算処理を行い、除算処理の結果である商を出力値outputとして出力する。したがって、この場合には、実際の計算結果が出力値outputとして出力される。
【0033】
一方、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合には、出力値outputを最大値maxもしくは最小値minに張り付ける。具体的には、商の値が最大値max以上となる場合には、出力値outputを最大値maxに張り付け、商の値が最小値min以下となる場合には、出力値outputを最小値minに張り付ける。
したがって、出力値outputを見るだけで、商がオーバーフローする異常が発生したか否かを容易に判断することができる。例えば丸印Bで示すように、出力値outputが最大値maxである場合には、商が最大値max以上となるオーバーフローが発生したことを容易に把握することができる。
【0034】
一方、本実施形態のような出力値outputの張り付け処理を行わない場合、一般的には、実際の計算結果が内部レジスタに収まらない範囲の値であっても、内部レジスタの大きさのビット数で表すことができる範囲の数値のみが出力される。そのため、出力値outputは、
図5に示すように内部レジスタに収まる範囲の値となる。例えば、商の値が最大値maxを超えた場合、出力値outputは最小値minから始まる値となる。このように、商がオーバーフローした場合、出力値outputは、内部レジスタに収まる範囲の値となって返ってくる。
したがって、出力値outputの張り付け処理を行わない場合には、出力値outputを見ただけでは、商がオーバーフローする異常が発生したか否かを判断することはできない。例えば丸印Cに示す出力値outputが得られた場合、実際の計算結果が内部レジスタに収まる範囲の値なのか、商がオーバーフローして内部レジスタに収まる範囲の値が返ってきたのかを判断できない。
本実施形態では、商がオーバーフローする異常を適切に判断し、電子ギアの異常を適切に判断することができる。
【0035】
なお、本実施形態では、実際の計算結果が最大値maxもしくは最小値minとなった場合であっても(商が内部レジスタに収まる場合であっても)、出力値outputが最大値maxもしくは最小値minであるために異常と判断する。内部レジスタの大きさは、正常な計算結果が最大値maxおよび最小値minに達しないように設計されるのが一般的であるため、実際の計算結果が最大値maxもしくは最小値minとなった場合には異常であると判断して問題はない。同様の理由により、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合に張り付ける固定値は、最大値maxもしくは最小値minの近傍の値であってもよい。
【0036】
さらに、電子ギア部11は、内部レジスタの大きさのビット数が入力信号inputのビット数と同等であるとして、商の値が入力信号inputのビット数で表せる値の範囲に収まるか否かを判定するようにしてもよい。
電子ギアの場合、例えば位置指令値の分解能とエンコーダの分解能とは、同じくらいの桁数で表すことのできる値であり(位置指令値の分解能≒エンコーダの分解能)、上記(1)式の分解能A/分解能Bは1程度である。そのため、正常に計算が行われた場合、計算結果である商のビット数は、入力信号inputのビット数と同等となると考えることができる。
したがって、商の値が入力信号inputのビット数で表せる値の範囲に収まるか否かを判定することで、正常な計算結果の大きさに合わせて設計された内部レジスタに商が収まるか否かを適切に判定することができる。そして、その判定結果に応じて実際に除算処理を行うか固定値を出力するかを判断することで、正常な計算結果が出力されると予測される場合にのみ実際に除算処理を行うようにすることができ、適切に処理の高速化を実現することができる。
【0037】
以上説明したように、本実施形態における整数除算方法は、被除数および除数に基づいて、被除数を除数で除算して得られる商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まるか否かを判定するステップと、商の値が内部レジスタの大きさのビット数で表せる値の範囲に収まらないと判定された場合、予め定められた固定値を出力値としてレジスタに出力するステップと、を含む。
これにより、ハードウェアに対応するハードウェア除算命令が無い安価な汎用MCUであっても、ソフトウェアによる高速除算機能の実現を可能とすることができる。具体的には、汎用MCUにおいて標準除算関数を用いて除算処理を行った場合と比較して、6分の1まで処理時間を短縮することも可能である。また、本実施形態における整数除算方法では、処理時間が開発環境のバージョンに依存しない。
なお、本実施形態は、例えば、32bitの除算命令を備えるMCUにて、64bitの除算命令を実現する場合や、ハードウェア除算命令が存在しないMCUにて、32bitの除算命令を実現する場合など、対応するハードウェア除算命令が無い場合を想定している。
【0038】
高応答および高精度な位置決めを実現するモータであるACサーボモータでは、ユーザから受信する位置指令値の分解能とモータに接続されたエンコーダの分解能との違いを調整するために、電子ギア機能が用いられている。この電子ギア機能を汎用MCUで実現する場合、ソフトウェアの処理として必ず除算処理が必要となる。ところが、除算処理に時間がかかると、同一MCU内で行われる他の制御(モータ制御や通信等)に支障をきたし、ACサーボモータの特徴である高応答が実現できなくなってしまう。そのため、ハードウェアに対応するハードウェア除算命令が無い安価な汎用MCUでの電子ギア機能の実現は難しかった。
【0039】
これに対して、本実施形態では、ハードウェアに対応するハードウェア除算命令が無い安価な汎用MCUで、高応答および高精度な位置決めを行うACサーボモータの電子ギア機能を適切に実現することができる。また、電子ギアの異常を除算の結果から容易に判断することができる。
なお、上記実施形態においては、整数除算装置が、ACサーボモータが有する電子ギア機能を実現する場合について説明したが、電子ギア機能以外の整数除算処理にも適用可能である。
【符号の説明】
【0040】
10…モータ制御装置、11~13…電子ギア部、14…位置速度制御器、15…電力変換部、11a…取得部、11b…判定部、11c…除算部、11d…出力部、11e…異常判断部、21…モータ、22…エンコーダ