(57)【要約】【課題】モータ制御装置において、固定小数点演算に係る正規化シフトビット数を、各ビット位置におけるビットデータの反転有無の判定を行わずに決定する。【解決手段】モータ制御装置（１）は、シフトビット数テーブル（４０１）を参照して、制御対象であるモータ（２）に対応付けられた正規化シフトビット数を取得する。【選択図】図１
2019122071.tif 000002
【特許請求の範囲】
【請求項１】
固定小数点演算器を備えるモータ制御装置であって、
前記固定小数点演算器にモータの制御に係る複数の固定小数点演算を順次実行させる演算制御部と、
制御対象である前記モータに対応付けられたシフト量を取得する取得部と、
前記固定小数点演算器の出力データを、前記取得部により取得された前記シフト量だけビットシフトしたデータを、前記演算制御部へと出力するシフト部と、を備え、
前記演算制御部は、前記シフト部から取得したデータを用いて、前記固定小数点演算器に、前記モータの制御に係る前記固定小数点演算を実行させる
ことを特徴とするモータ制御装置。
【請求項２】
前記モータに対応付けられた前記シフト量を予め格納している記憶部をさらに備える
ことを特徴とする請求項１に記載のモータ制御装置。
【請求項３】
前記モータに係る所定のパラメータを用いて、前記モータに対応付けられる前記シフト量を算出する算出部をさらに備える
ことを特徴とする請求項１または２に記載のモータ制御装置。
【請求項４】
前記モータに対応付けられた前記シフト量は、さらに、前記モータの制御に係る前記固定小数点演算のうち、所定の固定小数点演算に対応付けられている
ことを特徴とする請求項１から３のいずれか１項に記載のモータ制御装置。
【請求項５】
前記モータに係る所定のパラメータは、前記モータの誘起電圧定数、最高速度、および、電源電圧を含む
ことを特徴とする請求項３に記載のモータ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、固定小数点演算器を備えるモータ制御装置に関する。
【背景技術】
【０００２】
一般に、固定小数点演算器では、演算器の演算桁数を有効に活用するために、入力データを正規化してから演算器で処理を行なう。従来、正規化のためのシフトビット数（正規化シフトビット数）を効率的に求めるための方法が研究されている。例えば、下掲の特許文献１の正規化シフトビット数検出回路は、連続して入力されるデータの正規化シフトビット数検出を、既に検出された入力データの正規化シフトビット数に基づいて、現入力データの一部のビットデータのみを対象として行う。これにより、特許文献１の正規化シフトビット数検出回路は、常に入力されたデータの最上位ビット位置から順に反転ビット位置を検出することなく、入力データの正規化シフトビット数検出を行なうことを可能としている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１１−２８２６４９号公報（１９９９年１０月１５日公開）
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述のような従来技術は、現入力データの一部のビットデータのみを対象とするものであるものの、前記ビットデータについて、プライオリティエンコーダによって各ビット位置におけるビットデータの反転の有無を判定する。そのため、上述のような従来技術は、処理時間および回路規模を十分に抑制することが困難であるという問題がある。
【０００５】
本発明の一態様は、固定小数点演算に係る正規化シフトビット数を、各ビット位置におけるビットデータの反転有無の判定を行わずに決定することにより、正規化のための処理時間および回路規模を十分に抑制することが可能なモータ制御装置を実現することを目的とする。
【課題を解決するための手段】
【０００６】
前記の課題を解決するために、本発明の一態様に係るモータ制御装置は、固定小数点演算器を備えるモータ制御装置であって、前記固定小数点演算器にモータの制御に係る複数の固定小数点演算を順次実行させる演算制御部と、制御対象である前記モータに対応付けられたシフト量を取得する取得部と、前記固定小数点演算器の出力データを、前記取得部により取得された前記シフト量だけビットシフトしたデータを、前記演算制御部へと出力するシフト部と、を備え、前記演算制御部は、前記シフト部から取得したデータを用いて、前記固定小数点演算器に、前記モータの制御に係る前記固定小数点演算を実行させることを特徴としている。
【０００７】
前記の構成によれば、前記モータ制御装置は、前記固定小数点演算器の出力データを、前記モータに対応付けられた前記シフト量だけビットシフトし、ビットシフトしたデータを用いて、前記モータの制御に係る次の固定小数点演算を実行する。前記モータ制御装置は、固定小数点演算に係る正規化シフトビット数（シフト量）を、制御対象である前記モータによって決定し、つまり、プライオリティエンコーダ等によって前記出力データの各ビット位置におけるビットデータの反転の有無を判定する必要が無い。
【０００８】
したがって、前記モータ制御装置は、前記モータの制御に係る固定小数点演算の際に実行する正規化について、処理時間および回路規模を十分に抑制することができるという効果を奏する。
【０００９】
本発明の一態様に係るモータ制御装置は、前記モータに対応付けられた前記シフト量を予め格納している記憶部をさらに備えてもよい。
【００１０】
前記の構成によれば、前記モータ制御装置は、前記モータに対応付けられた前記シフト量を前記記憶部に予め格納している。前記モータ制御装置は、固定小数点演算に係る正規化シフトビット数を、前記記憶部を参照して取得し、つまり、プライオリティエンコーダ等によって前記出力データの各ビット位置におけるビットデータの反転の有無を判定する必要が無い。
【００１１】
したがって、前記モータ制御装置は、前記モータの制御に係る固定小数点演算の際に実行する正規化について、処理時間を十分に抑制することができるという効果を奏する。
【００１２】
本発明の一態様に係るモータ制御装置は、前記モータに係る所定のパラメータを用いて、前記モータに対応付けられる前記シフト量を算出する算出部をさらに備えてもよい。
【００１３】
前記の構成によれば、前記モータ制御装置は、前記モータに係る前記所定のパラメータを用いて、前記モータに対応付けられる前記シフト量を算出する。
【００１４】
したがって、前記モータ制御装置は、制御対象である前記モータごとに、前記モータに対応付けられる前記シフト量を算出し、算出したシフト量を用いて、前記モータの制御に係る固定小数点演算の際の正規化を実行することができるという効果を奏する。
【００１５】
本発明の一態様に係るモータ制御装置において、前記モータに対応付けられた前記シフト量は、さらに、前記モータの制御に係る前記固定小数点演算のうち、所定の固定小数点演算に対応付けられていてもよい。
【００１６】
前記の構成によれば、前記モータ制御装置は、前記モータの制御に係る前記固定小数点演算ごとに、前記モータおよび前記固定小数点演算に対応付けられる前記シフト量を用いて、前記固定小数点演算器の出力データを正規化する。前記モータ制御装置は、前記モータと、前記モータの制御に係る固定小数点演算と、によって決定される前記シフト量を用いて、前記固定小数点演算に係る正規化を実行する。前記モータ制御装置は、前記固定小数点演算に係る正規化に際して、プライオリティエンコーダ等によって前記出力データの各ビット位置におけるビットデータの反転の有無を判定する必要が無い。
【００１７】
したがって、前記モータ制御装置は、前記モータの制御に係る固定小数点演算の際、前記モータごと、固定小数点演算ごとの前記シフト量を用いて、正規化を実行するので、前記正規化に係る処理時間を十分に抑制することができるという効果を奏する。
【００１８】
本発明の一態様に係るモータ制御装置において、前記モータに係る所定のパラメータは、前記モータの誘起電圧定数、最高速度、および、電源電圧を含んでいてもよい。
【００１９】
前記の構成によれば、前記モータ制御装置は、前記モータの誘起電圧定数、最高速度、および、電源電圧を用いて、前記モータに対応付けられる前記シフト量を算出する。
【００２０】
つまり、前記モータ制御装置は、制御対象である前記モータの誘起電圧定数、最高速度、および、電源電圧を用いて算出した前記シフト量を用いて、前記モータの制御に係る固定小数点演算の際の正規化を実行することができる。言い換えれば、前記モータ制御装置は、制御対象であるモータごとに、当該モータの誘起電圧定数、最高速度、および、電源電圧を用いてシフト量を算出し、算出したシフト量を用いて、固定小数点演算の演算結果を正規化することができる。前記モータ制御装置は、前記シフト量の決定に際して、プライオリティエンコーダによって各ビット位置におけるビットデータの反転の有無を判定する必要が無い。
【００２１】
したがって、前記モータ制御装置は、制御対象であるモータごとにシフト量を算出し、算出したシフト量を用いて固定小数点演算に係る正規化を実行するので、正規化について、処理時間および回路規模を十分に抑制することができるという効果を奏する。
【発明の効果】
【００２２】
本発明の一態様によれば、モータ制御装置について、固定小数点演算に係る正規化シフトビット数を、各ビット位置におけるビットデータの反転有無の判定を行わずに決定することにより、正規化のための処理時間および回路規模を十分に抑制することができるとの効果を奏する。
【図面の簡単な説明】
【００２３】
【図１】本発明の実施形態１に係るモータ制御装置等の要部構成などを示す図である。
【図２】図１のモータ制御装置が実行するモータ制御処理の一例を示す図である。
【図３】図１のモータ制御装置が実行する固定小数点演算の概要を示す図である。
【図４】図１のモータ制御装置が実行する正規化ビットシフト数算出処理の概要を示す図である。
【発明を実施するための形態】
【００２４】
〔実施形態１〕
以下、本発明の一側面に係る実施の形態（以下、「本実施形態」とも表記する）を、図１から図４に基づいて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰返さない。本実施の形態においては、例えばモータ２の駆動を制御するモータ制御装置１をモータ制御装置の典型例として説明を行う。本発明の一態様に係るモータ制御装置１についての理解を容易にするため、先ず、モータ制御装置１を含むモータ制御システムＳｙｓの概要を、図１を用いて説明する。
【００２５】
§１．適用例
図１は、モータ制御システムＳｙｓに含まれるモータ制御装置１等の要部構成などを示す図である。図１に例示するように、モータ制御システムＳｙｓは、モータ制御装置１、モータ２、および、エンコーダ３を含んでいる。モータ制御システムＳｙｓは、さらに、不図示の上位コントローラおよびツールを含んでいてもよい。
【００２６】
モータ制御システムＳｙｓにおいて、モータ制御装置１とモータ２とは専用ケーブルによって接続され、モータ制御装置１は、例えばサーボドライバであり、モータ２の駆動を制御する。モータ２は、例えば電動サーボモータであり、モータ制御装置１によって駆動を制御される。モータ制御システムＳｙｓにおいて、モータ制御装置１には、信号線を介してエンコーダ３が接続されており、エンコーダ３は、モータ２の位置（モータ位置）を検出し、検出したモータ位置をモータ制御装置１へ出力する。
【００２７】
モータ制御装置１は、例えば、不図示の上位装置またはツールから受け付けた「モータ２を制御する指令値（モータ駆動指令）」と、エンコーダ３からのモータ位置等のフィードバック情報と、の差（偏差）に基づいて、モータ２への操作量を決定する。
【００２８】
モータ制御装置１は、モータ２への操作量を決定するため、つまり、モータ２を制御するため、所定の複数の演算を実行し、特に、固定小数点データを用いた所定の複数の演算（固定小数点演算）を実行する。モータ制御装置１は、所定の複数の固定小数点演算を実行する演算部２０を備え、演算部２０は、固定小数点演算部２１０およびバレルシフタ２２０を含んでいる。なお、固定小数点データとは、小数点が桁数の特定位置に固定されているデジタル信号である。
【００２９】
ここで、モータ制御装置１は、固定小数点演算部２１０の演算桁数を有効に活用するために行う正規化の方法が、特に、正規化のためのシフトビット数（正規化シフトビット数）の検出方法・決定方法が、従来までのモータ制御装置とは異なる。
【００３０】
従来、正規化シフトビット数の検出方法として、最上位ビット位置から順に、「どのビット位置でビットデータが初めて反転するか」を、プライオリティエンコーダを用いて調べ、最上位ビット位置から初めて生じた反転ビット位置までのビット数を求めていた。このような従来の方法では、入力データにおいてビットデータがその最下位ビット位置において初めて反転するような場合、最上位ビット位置から最下位ビット位置までの全ビットに対して、その反転の有無を判定することになる。したがって、入力データのビット幅が増えると、処理時間および回路規模の増大を招くことになる。
【００３１】
モータ制御装置１の開発者は、モータ制御に際して実行する一連の演算について、「ｎ番目の演算の演算結果データ（出力データ）において、最上位ビット位置から反転が初めて生じる反転ビット位置までのビット数は、予測可能である」ことを見出した。具体的には、「モータ制御に際して実行するｎ番目の演算の出力データにおいて、最上位ビット位置から反転が初めて生じる反転ビット位置までのビット数は、制御対象のモータごとに予測可能である」ことを、モータ制御装置１の開発者は見出した。つまり、モータ制御装置１の開発者は、モータ２の駆動制御（モータ制御）に際して実行するｎ番目の演算の出力データ（演算結果）に対する正規化シフトビット数は、モータ２に対応付けることが可能であることを見出した。
【００３２】
モータ制御装置１において、正規化シフトビット数（シフト量）はモータ２により決定されるため、モータ制御装置１は、「プライオリティエンコーダを用いて、最上位ビット位置から順に、どのビット位置でビットデータが初めて反転するかを調べる」必要が無い。つまり、モータ制御装置１は、モータ２の制御に際して実行するｎ番目の演算の出力データに対する正規化シフトビット数を、その出力データの各ビット位置におけるビットデータの反転有無の判定を行わずに決定することができる。具体的には、モータ制御装置１は、モータ２の制御に際して実行する各演算の出力データに対する正規化シフトビット数を、モータ２により、特に、モータ２および各演算を識別する情報（例えば、後述する演算番号）により決定する。
【００３３】
したがって、モータ制御装置１は、正規化シフトビット数を決定するための処理時間および回路規模を十分に抑制することができ、つまり、正規化のための時間を含む演算処理時間を短縮し、また、回路規模の縮小を実現することができる。また、ユーザは、モータ制御装置１を用いることにより、演算処理時間を短縮することができ、従来のモータ制御装置に比べて、より高速な処理（制御処理等）を実現することができる。
【００３４】
§２．構成例
（サーボドライバの構成概要）
これまでに概要を説明してきたモータ制御装置１について、次にその詳細を説明していく。モータ制御装置１についての理解を容易にするため、モータ制御装置１の概要を整理しておけば以下の通りである。
【００３５】
すなわち、モータ制御装置１は、固定小数点演算部２１０（固定小数点演算器）を備えるモータ制御装置であって、固定小数点演算部２１０にモータ２の制御に係る複数の固定小数点演算を順次実行させる演算制御部１０と、制御対象であるモータ２に対応付けられたシフト量を取得するシフトビット数取得部５０（取得部）と、固定小数点演算部２１０の出力データを、シフトビット数取得部５０により取得された前記シフト量だけビットシフトしたデータを、演算制御部１０へと出力するバレルシフタ２２０（シフト部）と、を備え、演算制御部１０は、バレルシフタ２２０から取得したデータを用いて、固定小数点演算部２１０に、モータ２の制御に係る固定小数点演算を実行させる。
【００３６】
前記の構成によれば、モータ制御装置１は、固定小数点演算部２１０の出力データを、モータ２に対応付けられた前記シフト量だけビットシフトし、ビットシフトしたデータを用いて、モータ２の制御に係る次の固定小数点演算を実行する。モータ制御装置１は、固定小数点演算に係る正規化シフトビット数（シフト量）を、制御対象であるモータ２によって決定し、つまり、プライオリティエンコーダ等によって前記出力データの各ビット位置におけるビットデータの反転の有無を判定する必要が無い。
【００３７】
したがって、モータ制御装置１は、モータ２の制御に係る固定小数点演算の際に実行する正規化について、処理時間および回路規模を十分に抑制することができるという効果を奏する。
【００３８】
モータ制御装置１は、モータ２に対応付けられた前記シフト量を格納する記憶部４０（特に、シフトビット数テーブル４０１）をさらに備えている。前記の構成によれば、モータ制御装置１は、モータ２に対応付けられた前記シフト量をシフトビット数テーブル４０１に格納している。モータ制御装置１は、固定小数点演算に係る正規化シフトビット数を、シフトビット数テーブル４０１を参照して取得する。つまり、モータ制御装置１は、プライオリティエンコーダ等によって固定小数点演算部２１０の出力データの各ビット位置におけるビットデータの反転の有無を判定する必要が無い。
【００３９】
したがって、モータ制御装置１は、モータ２の制御に係る固定小数点演算の際に実行する正規化について、処理時間を十分に抑制することができるという効果を奏する。
【００４０】
モータ制御装置１は、モータ２に係る所定のパラメータを用いて、モータ２に対応付けられる前記シフト量を算出するシフトビット数算出部３０（算出部）をさらに備えている。前記の構成によれば、モータ制御装置１は、モータ２に係る前記所定のパラメータを用いて、モータ２に対応付けられる前記シフト量を算出する。
【００４１】
したがって、モータ制御装置１は、制御対象であるモータ２ごとに、モータ２に対応付けられる前記シフト量を算出し、算出したシフト量を用いて、モータ２の制御に係る固定小数点演算の際の正規化を実行することができるという効果を奏する。
【００４２】
モータ制御装置１において、モータ２に対応付けられた前記シフト量は、さらに、モータ２の制御に係る固定小数点演算のうち、所定の固定小数点演算に対応付けられている。前記の構成によれば、モータ制御装置１は、モータ２の制御に係る前記固定小数点演算ごとに、モータ２および前記固定小数点演算に対応付けられる前記シフト量を用いて、固定小数点演算部２１０の出力データを正規化する。モータ制御装置１は、モータ２と、モータ２の制御に係る固定小数点演算と、によって決定される前記シフト量を用いて、前記固定小数点演算に係る正規化を実行する。モータ制御装置１は、前記固定小数点演算に係る正規化に際して、プライオリティエンコーダ等によって前記出力データの各ビット位置におけるビットデータの反転の有無を判定する必要が無い。
【００４３】
したがって、モータ制御装置１は、モータ２の制御に係る固定小数点演算の際、モータ２ごと、固定小数点演算ごとの前記シフト量を用いて、正規化を実行するので、前記正規化に係る処理時間を十分に抑制することができるという効果を奏する。
【００４４】
モータ制御装置１において、モータ２に係る所定のパラメータは、モータ２の誘起電圧定数、最高速度、および、電源電圧を含んでいてもよい。前記の構成によれば、モータ制御装置１は、モータ２の誘起電圧定数、最高速度、および、電源電圧を用いて、モータ２に対応付けられる前記シフト量を算出する。
【００４５】
つまり、モータ制御装置１は、制御対象であるモータ２の誘起電圧定数、最高速度、および、電源電圧を用いて算出した前記シフト量を用いて、モータ２の制御に係る固定小数点演算の際の正規化を実行することができる。言い換えれば、モータ制御装置１は、制御対象であるモータごとに、当該モータの誘起電圧定数、最高速度、および、電源電圧を用いてシフト量を算出し、算出したシフト量を用いて、固定小数点演算の演算結果を正規化することができる。モータ制御装置１は、前記シフト量の決定に際して、プライオリティエンコーダによって固定小数点演算部２１０の出力データの各ビット位置におけるビットデータの反転の有無を判定する必要が無い。
【００４６】
したがって、モータ制御装置１は、制御対象であるモータごとにシフト量を算出し、算出したシフト量を用いて固定小数点演算に係る正規化を実行するので、正規化について、処理時間および回路規模を十分に抑制することができるという効果を奏する。
【００４７】
（モータ制御装置の詳細）
以下、図１を参照して、モータ制御装置１の詳細を説明していく。図１に示すように、モータ制御装置１は、演算制御部１０、演算部２０、シフトビット数算出部３０、記憶部４０、および、シフトビット数取得部５０を備えている。演算制御部１０、シフトビット数算出部３０、および、シフトビット数取得部５０は、例えば、プロセッサ（ＣＰＵ、central processing unit）等が、ＲＯＭ（read only memory）、ＮＶＲＡＭ（non-Volatile random access memory）等で実現された不揮発性メモリ（記憶部４０）に記憶されているプログラムを、ＲＡＭ等により実現されるメインメモリに読み出して実行することで実現できる。以下、先ず記憶部４０以外の演算制御部１０、演算部２０、シフトビット数算出部３０、および、シフトビット数取得部５０について説明する。
【００４８】
（記憶部以外の機能ブロックの詳細）
演算制御部１０は、演算部２０に、モータ２の制御に係る演算を実行させ、特に、モータ２の制御に係る複数の所定の演算（特に、固定小数点演算）の各々を実行させ、各々の演算の実行結果（計算結果）を演算部２０から取得する。また、演算制御部１０は、演算部２０に実行させる複数の所定の演算の各々を識別する情報をシフトビット数取得部５０に通知し、例えば、演算部２０に実行させる複数の所定の演算の各々を特定する演算番号ｎを、シフトビット数取得部５０に通知する。
【００４９】
なお、以下の説明において、ｎは「１以上の自然数」とし、具体的には、「ｎ＝１、２、・・・、Ｍ、Ｎ」である。例えば、演算番号が「ｎ」である演算は、演算制御部１０が演算部２０に実行させる複数の所定の演算のうち、ｎ番目に実行する演算である。
【００５０】
演算部２０は、演算制御部１０に制御されて所定の演算を実行し、特に、複数の所定の固定小数点演算の各々を実行する。具体的には、演算部２０は、演算制御部１０から、各演算について、入力データとして、固定小数点データ（図１に示す例では、固定小数値１および固定小数値２）を受け付け、この固定小数点データに対して、所定の演算を実行する。例えば、演算部２０は、演算制御部１０から、演算番号１の演算に係る入力データとして、固定小数値１および固定小数値２（演算番号１）を受け付け、固定小数値１および固定小数値２（演算番号１）に対し、演算番号１の演算を実行する。また、演算部２０は、演算制御部１０から、演算番号２の演算に係る入力データとして、固定小数値１および固定小数値２（演算番号２）を受け付け、固定小数値１および固定小数値２（演算番号２）に対し、演算番号２の演算を実行する。同様に、演算部２０は、演算制御部１０から、演算番号ｎの演算に係る入力データとして、固定小数値１および固定小数値２（演算番号ｎ）を受け付け、固定小数値１および固定小数値２（演算番号ｎ）に対し、演算番号ｎの演算を実行する。
【００５１】
演算部２０は、各演算の演算結果を、各演算についてシフトビット数取得部５０から通知されるシフト量（正規化シフトビット数）だけビットシフトし、ビットシフト後の計算結果を演算制御部１０に出力する。例えば、演算部２０は、演算番号１の演算の実行結果を、シフトビット数取得部５０から通知される「演算番号１のシフト量」だけビットシフトし、ビットシフト後の計算結果（演算番号１）を演算制御部１０に出力する。また、演算部２０は、演算番号２の演算の実行結果を、シフトビット数取得部５０から通知される「演算番号２のシフト量」だけビットシフトし、ビットシフト後の計算結果（演算番号２）を演算制御部１０に出力する。同様に、演算部２０は、演算番号ｎの演算の実行結果を、シフトビット数取得部５０から通知される「演算番号ｎのシフト量」だけビットシフトし、ビットシフト後の計算結果（演算番号ｎ）を演算制御部１０に出力する。
【００５２】
演算部２０は、固定小数点演算を実行する固定小数点演算部２１０と、固定小数点演算部２１０の演算結果を、シフトビット数取得部５０から通知されるシフト量だけビットシフトしてビットシフト後の計算結果を出力するバレルシフタ２２０と、を含んでいる。
【００５３】
固定小数点演算部２１０は、演算制御部１０から、演算番号ｎ（ｎ＝１、２、・・・、Ｍ、Ｎ）の演算に係る入力データとして、固定小数点データである固定小数値１および固定小数値２（演算番号ｎ）を受け付ける。固定小数点演算部２１０は、演算制御部１０から受け付けた演算番号ｎの固定小数値１および固定小数値２に対し、演算番号ｎに対応する所定の固定小数点演算を実行する。固定小数点演算部２１０は、演算番号ｎの固定小数値１および固定小数値２に対し、演算番号ｎに対応する所定の演算を実行し、演算番号ｎの演算結果をバレルシフタ２２０に出力する。
【００５４】
バレルシフタ２２０は、シフトビット数取得部５０から、モータ２に対応するシフト量（正規化シフトビット数）を取得し、特に、固定小数点演算部２１０が実行した演算を識別する演算番号ｎと、モータ２と、に対応するシフト量を取得する。バレルシフタ２２０は、固定小数点演算部２１０から取得した「演算番号ｎの演算結果」を、シフトビット数取得部５０から取得した「モータ２に対応するシフト量（特に、演算番号ｎと、モータ２と、に対応するシフト量）」だけビットシフトする。バレルシフタ２２０は、ビットシフト後の「演算番号ｎの計算結果」を、演算制御部１０に出力する。
【００５５】
バレルシフタ２２０は、例えば、ｎ番目の入力データ（演算番号ｎの演算結果）をシフトビット数取得部５０から通知されたシフト量だけ上位側にシフトする。そして、バレルシフタ２２０は、シフト後のデータ（ｍビット）の最上位ビット位置からその中間ビット位置までの一定ビット幅（ｎビット）のデータを出力する。例えば、バレルシフタ２２０は、固定小数点演算部２１０から、演算番号ｎの演算結果である４０ビットのデータを入力データとして取得し、シフトビット数取得部５０から、「演算番号ｎと、モータ２と、に対応するシフト量」として「８」を取得する。バレルシフタ２０１は、「シフト量＝８」に基づき、４０ビットの入力データを８ビットだけ上位側にシフトした後、所定のビット幅のデータを、ビットシフト後の「演算番号ｎの計算結果」として、演算制御部１０に出力する。バレルシフタ２０１は、例えば、４０ビットの入力データを８ビットだけ上位側にシフトした後、シフト後の２０ビットのデータを、ビットシフト後の「演算番号ｎの計算結果」として、演算制御部１０に出力する。
【００５６】
シフトビット数算出部３０は、モータ２のメモリ（記憶部）からモータ２のパラメータを読み出し、読み出したパラメータを用いて、モータ２の制御に係る固定小数点演算に際して実行する正規化のためのシフト量（正規化ビットシフト数）を算出する。シフトビット数算出部３０は、モータ２のメモリから読み出したパラメータを用いて、「モータ２に対応するシフト量」を算出し、特に「演算番号ｎと、モータ２と、に対応するシフト量」を算出する。シフトビット数算出部３０は、算出したシフト量を、記憶部４０のシフトビット数テーブル４０１に格納する。
【００５７】
シフトビット数算出部３０がモータ２のメモリから読み出すモータ２のパラメータには、例えば、モータ２の、モータ最高速度、誘起電圧定数、インダクタンス値、抵抗値、電源電圧（最大電圧値）、最大電流値などが含まれる。シフトビット数算出部３０が、モータ２のパラメータから、「モータ２に対応するシフト量」を算出し、特に「演算番号ｎと、モータ２と、に対応するシフト量」を算出する方法について、詳細は後述する。
【００５８】
なお、モータ制御装置１がシフトビット数算出部３０を備えることはモータ制御装置１にとって必須ではない。例えば、モータ制御装置１は、外部のシフトビット数算出装置から、「モータ２に対応するシフト量」を、特に「演算番号ｎと、モータ２と、に対応するシフト量」を取得し、取得したシフト量を、シフトビット数テーブル４０１に格納してもよい。その場合、シフトビット数算出装置が、モータ２のパラメータから、「モータ２に対応するシフト量」を算出し、特に「演算番号ｎと、モータ２と、に対応するシフト量」を算出し、算出したシフト量を、モータ制御装置１に通知する。
【００５９】
シフトビット数取得部５０は、記憶部４０のシフトビット数テーブル４０１を参照して、「モータ２に対応するシフト量」を取得し、特に「演算番号ｎと、モータ２と、に対応するシフト量」を取得し、取得したシフト量をバレルシフタ２２０に通知する。具体的には、シフトビット数取得部５０は、先ず、演算制御部１０から、演算制御部１０が演算部２０に実行させる演算を識別する演算番号ｎを取得する。そして、シフトビット数取得部５０は、シフトビット数テーブル４０１を参照して、「モータ２に対応するシフト量」を取得し、特に「演算制御部１０から取得した演算番号ｎと、モータ２と、に対応するシフト量」を取得する。シフトビット数取得部５０は、取得したシフト量をバレルシフタ２２０に通知する。
【００６０】
（記憶部の詳細）
記憶部４０は、モータ制御装置１が使用する各種データ（例えば、ツールによって設定および調整された、モータ制御装置１の動作に必要なプログラムおよび各種パラメータ）を格納する記憶装置である。記憶部４０は、モータ制御装置１が実行する（１）制御プログラム、（２）モータ制御装置１が有する各種機能を実行するためのアプリケーションプログラム、および、（３）該アプリケーションプログラムを実行するときに読み出す各種データを非一時的に記憶してもよい。記憶部４０はさらに、シフトビット数テーブル４０１を格納している。
【００６１】
シフトビット数テーブル４０１には、「モータ２に対応するシフト量」が格納され、特に「演算番号ｎと、モータ２と、に対応するシフト量」が格納される。シフトビット数テーブル４０１には、例えば、モータ２の識別情報と、演算番号ｎと、に対応付けられて、ｎ番目の固定小数点演算の演算結果を正規化するための正規化シフトビット数であるシフト量が格納されている。
【００６２】
前述の通り、シフトビット数テーブル４０１に格納される、「モータ２に対応するシフト量」は、特に「演算番号ｎと、モータ２と、に対応するシフト量」は、シフトビット数算出部３０により算出され、外部のシフトビット数算出装置により算出されてもよい。
【００６３】
§３．動作例
モータ２の制御装置であるモータ制御装置１は、モータ２を制御する指令値（モータ駆動指令）を、例えば不図示の上位コントローラまたはツールから受け付ける。また、モータ制御装置１は、モータ位置などのフィードバック値を、例えばエンコーダ３（位置センサ）から受け付ける。モータ制御装置１は、フィードバック値がモータ駆動指令に近づくように、例えば、モータ２を駆動するための電力（電圧）を調整する。具体的には、モータ制御装置１は、例えば、ＰＷＭ（Pulse Width Modulation）方式によりモータ２を制御し、すなわち、ＰＷＭ信号によるスイッチング素子のオン・オフに基づいてモータ２の駆動を制御する。
【００６４】
（モータ制御に係る処理フローの一例）
図２は、モータ制御装置１が実行するモータ制御処理の一例を示す図である。図２に示す例では、モータ制御装置１が実行するモータ制御処理は、電流指令値生成処理、検出電流値取得処理、ＰＩ制御処理、補正値算出処理、検出電圧値取得処理、および、ＰＷＭ算出処理を含んでいる。
【００６５】
図２において、モータ２を制御しようとするモータ制御装置１は、電流指令値生成処理を実行して正規化された固定小数点の電流指令値ＩＲｅｆ＿Ｓｃａｌｅを生成し、また、検出電流値取得処理を実行して正規化された固定小数点の検出電流値ＩＳｃａｌｅを取得する。モータ制御装置１は、生成した電流指令値ＩＲｅｆ＿Ｓｃａｌｅと、取得した検出電流値ＩＳｃａｌｅと、を用いて、ＰＩ制御処理を実行して正規化された固定小数点の電圧値ＶＰＩ＿Ｓｃａｌｅを生成する。
【００６６】
モータ制御装置１は、モータ２のパラメータ（図２に示す例では、モータ２の速度ω、誘起電圧定数Ｋｅｍｆ、および、正規化用最大電圧値Ｖｍａｘ）を取得し、取得したパラメータを用いて補正値算出処理を実行してＶＫｅｍｆ＿Ｓｃａｌｅを生成する。
【００６７】
また、モータ制御装置１は、検出電圧値取得処理を実行して正規化された固定小数点の検出電圧値ＶＳｃａｌｅを取得する。
【００６８】
そして、モータ制御装置１は、ＰＩ制御処理の実行結果（電圧値ＶＰＩ＿Ｓｃａｌｅ）、補正値算出処理の実行結果（ＶＫｅｍｆ＿Ｓｃａｌｅ）、および、検出電圧値取得処理の実行結果（検出電圧値ＶＳｃａｌｅ）を用いて、ＰＷＭ算出処理を実行する。ＰＷＭ算出処理は、モータ２を駆動するための電力（電圧）を調整するＰＷＭ信号を生成する処理であり、モータ制御装置１は、ＰＷＭ算出処理で生成したＰＷＭ信号によるスイッチング素子のオン・オフに基づいて、モータ２の駆動を制御する。
【００６９】
（モータ制御に係る固定小数点演算の一例）
図３は、モータ制御装置１が実行する固定小数点演算の概要を示す図である。モータ制御装置１は、図２に例示したＰＷＭ方式によってモータ２を制御しようとする場合、例えば、図３に例示するような処理を実行する。
【００７０】
（ＰＩ制御）
すなわち、演算制御部１０は、演算制御を開始すると、先ず演算番号１の演算として、ＰＩ制御処理に対応する演算（演算番号１）を、演算部２０に実行させる。具体的には、演算制御部１０は、演算部２０に、演算番号１の演算に係る入力データとして固定小数値１、２（演算番号１）を通知して、演算番号１の演算を実行させる。固定小数値１、２（演算番号１）は、例えば、図２における電流指令値ＩＲｅｆ＿Ｓｃａｌｅおよび検出電流値ＩＳｃａｌｅである。
【００７１】
また、演算制御部１０は、演算番号１を、シフトビット数取得部５０に通知する。演算番号１を通知されたシフトビット数取得部５０は、記憶部４０のシフトビット数テーブル４０１を参照して、「演算番号１と、モータ２と、に対応するシフト量」を取得し、取得したシフト量（例えば、シフト量（演算番号１））を演算部２０に通知する。
【００７２】
演算部２０は、固定小数値１、２（演算番号１）に対する演算番号１の演算の結果を、シフト量（演算番号１）だけ上位側にシフトし、シフト後の所定のビット幅のデータを、計算結果（演算番号１）として、演算制御部１０に出力する。
【００７３】
（補正値算出）
演算部２０から計算結果（演算番号１）を取得した演算制御部１０は、次に、演算番号２の演算として、補正値算出処理に対応する演算（演算番号２）を、演算部２０に実行させる。具体的には、演算制御部１０は、演算部２０に、演算番号２の演算に係る入力データとして固定小数値１、２（演算番号２）を通知して、演算番号２の演算を実行させる。固定小数値１、２（演算番号２）は、例えば、図２におけるモータ速度ω、モータの誘起電圧定数Ｋｅｍｆ、および、正規化用最大電圧値Ｖｍａｘに対応する値である。
【００７４】
また、演算制御部１０は、演算番号２を、シフトビット数取得部５０に通知する。演算番号２を通知されたシフトビット数取得部５０は、記憶部４０のシフトビット数テーブル４０１を参照して、「演算番号２と、モータ２と、に対応するシフト量」を取得し、取得したシフト量（例えば、シフト量（演算番号２））を演算部２０に通知する。
【００７５】
演算部２０は、固定小数値１、２（演算番号２）に対する演算番号２の演算の結果を、シフト量（演算番号２）だけ上位側にシフトし、シフト後の所定のビット幅のデータを、計算結果（演算番号２）として、演算制御部１０に出力する。演算部２０から計算結果（演算番号２）を取得した演算制御部１０は、次に、演算部２０に固定小数値１、２（演算番号３）を出力して演算番号３の演算を演算部２０に実行させるとともに、演算番号３を、シフトビット数取得部５０に通知する。
【００７６】
同様に、演算部２０から計算結果（演算番号ｎ）を取得した演算制御部１０は、演算部２０に固定小数値１、２（演算番号ｎ＋１）を出力して演算番号ｎ＋１の演算を演算部２０に実行させるとともに、演算番号ｎ＋１を、シフトビット数取得部５０に通知する。
【００７７】
（ＰＷＭ算出）
演算部２０から計算結果（演算番号Ｍ−１）を取得した演算制御部１０は、演算番号Ｍの演算として、ＰＷＭ算出処理に対応する演算（演算番号Ｍ）を、演算部２０に実行させる。具体的には、演算制御部１０は、演算部２０に、演算番号Ｍの演算に係る入力データとして固定小数値１、２（演算番号Ｍ）を通知して、演算番号Ｍの演算を実行させる。固定小数値１、２（演算番号Ｍ）は、例えば、図２における電圧値ＶＰＩ＿Ｓｃａｌｅ、補正値算出処理の実行結果（ＶＫｅｍｆ＿Ｓｃａｌｅ）、および、検出電圧値ＶＳｃａｌｅに対応する値である。
【００７８】
また、演算制御部１０は、演算番号Ｍを、シフトビット数取得部５０に通知する。演算番号Ｍを通知されたシフトビット数取得部５０は、記憶部４０のシフトビット数テーブル４０１を参照して、「演算番号２と、モータ２と、に対応するシフト量」を取得し、取得したシフト量（例えば、シフト量（演算番号Ｍ））を演算部２０に通知する。
【００７９】
演算部２０は、固定小数値１、２（演算番号Ｍ）に対する演算番号Ｍの演算の結果を、シフト量（演算番号Ｍ）だけ上位側にシフトし、シフト後の所定のビット幅のデータを、計算結果（演算番号Ｍ）として、演算制御部１０に出力する。演算制御部１０は、演算部２０から計算結果（演算番号Ｍ）を取得すると、演算制御を終了する。
【００８０】
（正規化ビットシフト数算出処理の一例）
図４は、モータ制御装置１が実行する正規化ビットシフト数（つまり、シフト量）の算出処理の概要を示す図である。モータ制御装置１のシフトビット数算出部３０は、モータ２からモータ２のパラメータ（例えば、モータ２の、モータ最高速度、誘起電圧定数、インダクタンス値、抵抗値、電源電圧（最大電圧値）、最大電流値など）を取得する。シフトビット数算出部３０は、取得したパラメータを用いて、モータ２の制御に係る固定小数点演算に際して実行する正規化のためのシフト量（モータ２に対応するシフト量）を算出する。
【００８１】
例えば、シフトビット数算出部３０は、モータ２から取得したパラメータを用いて仮の「モータ２に対応するシフト量」（仮のシフト量）を算出する。シフトビット数算出部３０は、仮のシフト量を用いて正規化した入力データを用いて固定小数点演算を実行して、「モータ２の制御に必要な変数（例えば、モータ２の速度）」を算出する。シフトビット数算出部３０は、また、前述の入力データの浮動小数点データに対して浮動小数点演算を実行して「モータ２の制御に必要な変数（例えば、モータ２の速度）」を算出する。シフトビット数算出部３０は、仮のシフト量を用いて正規化した入力データを用いて固定小数点演算を実行して算出した「モータ２の制御に必要な変数」と、浮動小数点演算を実行して算出した「モータ２の制御に必要な変数」と、を比較する。そして、シフトビット数算出部３０は、両者（固定小数点演算を実行して算出した「モータ２の制御に必要な変数」、および、浮動小数点演算を実行して算出した「モータ２の制御に必要な変数」）の差が所定範囲内になるよう、仮のシフト量を決定する。以下、図４を用いて、シフトビット数算出部３０による「モータ２に対応するシフト量」の算出方法について、一例を示す。
【００８２】
図４には、モータ制御装置１が、誘起電圧定数Ｋｅｍｆの正規化のためのシフト量（正規化ビットシフト数）を算出する処理の一例が示されている。誘起電圧定数Ｋｅｍｆの正規化ビットシフト数（シフト量）を算出するために、モータ制御装置１のシフトビット数算出部３０は、先ず、モータ２のメモリから、以下のパラメータを読み出す。すなわち、モータ制御装置１は、モータ２の最高速度（モータ最高速度ωｍａｘ）、誘起電圧定数Ｋｅｍｆ、電源電圧Ｖｍａｘ（最大電圧値Ｖｍａｘ）などのパラメータを読み出す（Ｓ１００）。
【００８３】
シフトビット数算出部３０は、「Ｖｅ＝ωｍａｘ×Ｋｅｍｆ」を浮動小数点で計算する（Ｓ１１０）。また、シフトビット数算出部３０は、モータ２の速度の固定小数点化を実行し（Ｓ１２０）、つまり、「ωｍａｘ＿Ｆｉｘｅｄ[ｎ−１：０]＝ｉｎｔ（ωｍａｘ）」を実行する。そして、シフトビット数算出部３０は、ビットシフト量の初期化を実行し（Ｓ１３０）、つまり、「ＢｉｔＳｈｉｆｔ＝０」とする。
【００８４】
シフトビット数算出部３０は、誘起電圧定数Ｋｅｍｆをｎビット固定小数点化（具体的には、ｎビットの固定小数点データにする処理）を実行し（Ｓ１４０）、つまり、「Ｋｅｍｆ＿Ｆｉｘｅｄ[ｎ−１：０]＝ｉｎｔ（Ｋｅｍｆ／Ｖｍａｘ×２＾（ｎ＋ＢｉｔＳｈｉｆｔ））」を実行する。そして、シフトビット数算出部３０は、固定小数点型で以下の計算を実行する（Ｓ１５０）。すなわち、「Ｖｅ＿Ｆｉｘｅｄ＿ｔｍｐ[２ｎ−１：０]＝ωｍａｘ＿Ｆｉｘｅｄ[ｎ−１：０]×Ｋｅｍｆ＿Ｆｉｘｅｄ[ｎ−１：０]」および「Ｖｅ＿Ｆｉｘｅｄ[ｎ−１：０]＝Ｖｅ＿Ｆｉｘｅｄ＿ｔｍｐ[ｎ−１：０]」を実行する。また、シフトビット数算出部３０は、電圧の浮動小数点化（具体的には、浮動小数点データにする処理）を実行し（Ｓ１６０）、つまり、「Ｖｅ＿Ｆｌｏａｔ＝Ｖｍａｘ×Ｖｅ＿Ｆｉｘｅｄ[ｎ−１：０]／２＾ｎ」を実行する。
【００８５】
シフトビット数算出部３０は、誤差率εを算出し（Ｓ１７０）、つまり、「ε＝（Ｖｅ／Ｖｅ＿Ｆｌｏａｔ）／Ｖｅ×１００」を算出する。シフトビット数算出部３０は、誤差率εが閾値εｔｈ以下であるかを判定する（Ｓ１８０）。
【００８６】
シフトビット数算出部３０は、誤差率εが閾値εｔｈ以下になるまでシフト量を変更し、誤差率εが閾値εｔｈ以下になると、そのシフト量を、シフトビット数テーブル４０１に格納する。すなわち、誤差率εが閾値εｔｈよりも大きい場合（Ｓ１８０でＮｏ）、シフトビット数算出部３０は、ビットシフト量（シフト量、正規化ビット数）を変更し（Ｓ１９０）、つまり、「ＢｉｔＳｈｉｆｔ＝ＢｉｔＳｈｉｆｔ＋１」を実行する。シフトビット数算出部３０は、ビットシフト量を変更した後、Ｓ１４０からＳ１８０までの処理を繰り返す。誤差率εが閾値εｔｈ以下となると（Ｓ１８０でＹｅｓ）、シフトビット数算出部３０は、シフト量の算出処理を終了し、算出したシフト量をシフトビット数テーブル４０１に格納する。
【００８７】
シフトビット数算出部３０は、モータ２のパラメータに対し、図４に例示する正規化ビットシフト数（つまり、シフト量）の算出処理を実行し、モータ２の駆動制御に係る演算用のシフト量、特に、モータ２の駆動制御に係るｎ番目の演算用のシフト量を算出する。シフトビット数算出部３０は、算出した「モータ２の駆動制御に係るｎ番目の演算用のシフト量」をシフトビット数テーブル４０１に格納する。シフトビット数取得部５０はシフトビット数テーブル４０１を参照して「ｎ番目の演算用のシフト量」を取得し、取得した「ｎ番目の演算用のシフト量」を、バレルシフタ２２０に通知する。バレルシフタ２２０は、固定小数点演算部２１０による演算処理の実行結果を、シフトビット数取得部５０から通知されたシフト量だけビットシフトして出力する。
【００８８】
例えば、モータ２の駆動制御に係るｎ番目の演算の演算結果を正規化するためのシフト量を、ｎ番目の演算の実行前に、モータ２に対応付けて予め決定しておくことにより、モータ制御装置１は、正規化のための処理時間を十分に抑制することができる。
【００８９】
§４．変形例
例えば、モータ制御装置１において、シフトビット数算出部３０は、モータ２のパラメータから、モータ２の制御に係る演算ごとの（つまり、演算番号ｎの）シフト量を算出し、算出した「演算番号ｎのシフト量」をシフトビット数テーブル４０１に予め格納しておく。そして、バレルシフタ２２０は、演算番号ｎの演算の演算結果を、シフトビット数テーブル４０１に予め格納されている「演算番号ｎのシフト量（正規化シフトビット数）」だけビットシフトする。つまり、モータ制御装置１は、モータ２の制御に係る複数の演算の各々について、演算結果を正規化するためのシフト量を、演算結果の各ビット位置におけるビットデータの反転有無の判定を行わずに、決定する。したがって、モータ制御装置１は、固定小数点演算に係る正規化のための処理時間および回路規模を十分に抑制することができる。
【００９０】
ここで、モータ制御装置１は、固定小数点演算に係る正規化のためのシフト量（正規化ビットシフト数）を、モータ２によって決定し、特に、実行する固定小数点演算（例えば、実行する固定小数点演算を識別する演算番号）およびモータ２によって決定すればよい。モータ制御装置１についての理解を正確にするため、以下の点を付記しておく。
【００９１】
これまでに説明してきた実施形態においては、入力データのビットシフトをバレルシフタ２２０により実施した。しかしながら、モータ制御装置１が、固定小数点演算部２１０の出力データを、シフトビット数取得部５０により取得されたシフト量だけビットシフトして出力するのに、バレルシフタ２２０を備えることは必須ではない。モータ制御装置１は、シフトレジスタによって、固定小数点演算部２１０の出力データを、シフトビット数取得部５０により取得されたシフト量だけビットシフトして出力してもよい。シフトレジスタは、ｎビット（例えば、ｎ＝４０）の入力データに対応する格納領域を有し、シフトビット数取得部５０により取得されたシフト量を示す信号に基づいて格納したビットデータをシフトした後に、所定のビット幅のデータを出力する。
【００９２】
モータ制御装置１は、サーボドライバであってもよいし、ブラシレスモータドライバであってもよく、モータ２を制御する制御装置であって、モータ２の制御に際して固定小数点演算を実行する制御装置であればよい。
【００９３】
また、これまでに説明してきた実施形態においては、エンコーダ３から与えられるモータ位置に基づいて、モータ制御装置１がモータ２を制御する例を挙げたが、モータ制御装置１がモータ位置を用いてモータ２の駆動を制御することは必須ではない。エンコーダ３の代わりに、例えば、モータ２のトルクを検出するトルクセンサを設け、モータ制御装置１は、トルクセンサから与えられるトルク値に基づいて、モータ２を制御してもよい。また、エンコーダ３の代わりに、例えば、モータ２の速度を検出する速度センサを設け、モータ制御装置１は、速度センサから与えられる速度値に基づいて、モータ２を制御してもよいし、モータの電流等からモータの位置や速度を推定してモータ２を制御してもよい。
【００９４】
モータ制御装置１により駆動を制御されるモータ２は、サーボモータに限られず、モータ制御装置１は、ステッピングモータ（ブラシレスモータ）、誘導モータ、ＤＣモータ等のモータ２を制御する場合にも適用することができる。
【００９５】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【符号の説明】
【００９６】
１  モータ制御装置
２  モータ
３０  シフトビット数算出部（算出部）
４０  記憶部
５０  シフトビット数取得部（取得部）
２１０  固定小数点演算部（固定小数点演算器）
２２０  バレルシフタ（シフト部）
【図１】
2019122071.tif 000003
【図２】
2019122071.tif 000004
【図３】
2019122071.tif 000005
【図４】
2019122071.tif 000006