以下、本発明による実施形態を図面を用いて説明する。
図1は本発明によるサーボ制御装置の一実施形態を示すブロック構成図であって、1は上位装置、2はこの実施形態のサーボ制御装置、21は指令値補間演算部、22はサーボ制御部、3は電動機、4は検出器である。
同図において、上位装置1は、サーボ制御装置2や電動機3,検出器4などからなる制御対象に、規定の周期tchgで、移動指令値Pk *(但し、k=1,2,3,……)を送信する(なお、「*」は上位装置1から送信されてきたものであることを表し、kは正整数である。また、以下では、周期tchgを規定の受信周期tchgということにする)。サーボ制御装置2は指令補間演算部21とサーボ制御部22とから構成されており、上位装置1からの移動指令値Pk *がこのサーボ制御装置2で受信される。
サーボ制御装置2では、受信された移動指令値Pk *が指令値補間演算部21に供給されて、このサーボ制御装置2の処理周期(以下、サーボ処理周期という)tschg毎に移動指令値Pk *を補間する補間演算処理が行われ、このサーボ処理周期tschg毎に平均化により補間された移動指令値(以下、平均移動指令値という)Psk *をサーボ制御部22に供給する。サーボ制御部22は、電動機3の回転子の位置や速度を検出する検出器4の検出結果を監視しながら、このサーボ処理周期tschg毎に、指令値補間演算部21から供給される平均移動指令値Psk *をもとに電動機の位置や速度電流を制御する。
図2は図1における指令値補間演算部21の基本構成を示すブロック構成図であって、211は移動指令値格納バッファ、212は移動平均処理用バッファ、213は移動平均値演算部、214は移動指令値格納バッファ、215は剰余バッファである。
同図において、この指令値補間演算部21は、移動指令値格納バッファ211と、移動平均処理用バッファ212と、移動平均値演算部213と、移動指令値格納バッファ214と、剰余バッファ215と、さらに、図示しないが、制御部とから構成されており、制御部によって各部が制御される。
受信された上位装置1(図1)からの規定の受信周期tchgの移動指令値Pk *は、順次移動指令値格納バッファ211に格納される。移動指令値格納バッファ211では、格納された移動指令値Pk *をサーボ制御装置2のサーボ処理周期tschgで繰り返し読出し、移動平均処理用バッファ212に順次格納する。なお、移動指令値格納バッファ211では、新たに移動指令値P(k+1) *が格納されると、これまで格納されていた移動指令値Pk *が新たな移動指令値P(k+1) *に更新される。
移動平均処理用バッファ212は、いま、受信周期tchg/サーボ処理周期tschgの商をm+1(但し、mは正整数)とすると、図示するように、(m+1)個のバッファb(0),b(1),b(2),……,b(m)から構成されるものであって、移動指令値格納バッファ211から読み出される移動指令値Pk *はバッファb(0)からバッファb(1),b(2),……,b(m)の順に格納される。従って、いま、移動指令値P1 *が移動指令値格納バッファ211に格納されたとすると、これに次いで、移動指令値格納バッファ211からサーボ処理周期tschgでこの移動指令値P1 *が繰り返し読み出され、最初に読み出された移動指令値P1 *から順にバッファb(0),b(1),b(2),……,b(m)に格納されることになる。ここで、サーボ処理周期tschgが規定の受信周期tchgの1/(m+1)倍とすると、移動指令値格納バッファ211から最初に読み出された移動指令値P1 *から順にバッファb(0),b(1),b(2),……,b(m)に順に格納され、最後のバッファb(m)に移動指令値格納バッファ211から読み出された移動指令値P1 *が書き込まれると、次に受信された移動指令値P2 *が移動指令値格納バッファ211に格納されることになり、同様にして、移動指令値格納バッファ211からこの移動指令値P2 *がサーボ処理周期tschgで繰り返し読み出されて、バッファb(0),b(1),b(2),……,b(m)に順に格納される。
なお、かかるバッファb(0),b(1),b(2),……,b(m)において、移動指令値格納バッファ211からの移動指令値Pk *を格納されるバッファb(i)(但し、i=0,1,2,……,m)は、図示しないが、上記の制御部に設けられたカウンタのカウント値によって指定される。かかるカウンタとしては、移動指令値Pk *が受信される毎にカウント値が「0」にリセットされるカウンタ(以下、リセットカウンタという)や0〜mの値を繰り返しカウントするリングカウンタが用いられる。カウント値が0のときには、バッファb(0)が指定され、カウント値が1のときには、バッファb(1)が指定され、……、カウント値がmのときには、バッファb(m)が指定される。
図2で示す状態は、バッファb(0),b(1),b(2),……,b(m)に移動指令値P1 *が書き込まれた後、次の移動指令値P2 *が移動指令値格納バッファ211に格納されて、移動平均処理用バッファ212のバッファb(0),b(1),b(2)まで移動指令値P2 *が格納された状態を示している。
移動平均処理用バッファ212の全てのバッファb(0),b(1),b(2),……,b(m)から、サーボ処理周期ts
chgの1周期毎に、同時に移動指令値P
k *が読み出されて移動平均値演算部213に供給され、その平均化処理(平均値計算)により、平均移動指令値Ps
k(n)
*、即ち
が求められる。
ここで、伝送の過程でジッタがなく、受信した移動指令値Pk *の規定周期tchgがサーボ制御装置2の処理周期tschgの(m+1)倍とすると、移動指令値格納バッファ211にk番目に受信された移動指令値Pk *が格納されたとき、この移動指令値格納バッファ211から最初に読み出される移動指令値Pk *が移動平均処理用バッファ212の最初のバッファb(0)に格納され、しかる後、移動平均処理用バッファ212の全てのバッファb(0)〜b(m)が読み出されて、移動平均値演算部213でその平均移動指令値Psk(0)*が計算されるが、これが1回目(n=0)の平均値計算である。そして、移動指令値格納バッファ211から次の2番目の移動指令値Pk *の読み出しが行われて移動平均処理用バッファ212の次のバッファb(1)に格納され、次いで、移動平均処理用バッファ212の全てのバッファb(0)〜b(m)が読み出されて、移動平均値演算部213でその平均移動指令値Psk(1)*が計算されるが、これが2回目(n=1)の平均値計算である。以下同様にして、移動指令値格納バッファ211から次の(m+1)番目の移動指令値P*の読み出しが行われて移動平均処理用バッファ212の次のバッファb(m)に格納され、次いで、移動平均処理用バッファ212の全てのバッファb(0)〜b(m)が読み出されて、移動平均値演算部213でその平均移動指令値Psk(m+1)*が計算されるが、これが(m+1)回目(n=m+1)の平均値計算であるが、これに続いて、次の移動指令値Pk+1 *が受信されて移動指令値格納バッファ211に格納され、上記と同様、移動平均処理用バッファ212の最初のバッファb(0)からのこの移動指令値Pk+1 *の格納が行われて、その格納が行われる毎に、n=0,1,2,……として、移動平均値演算部213でバッファb(0)〜b(m)の移動指令値Pk+1 *の平均移動指令値Ps(k+1)(n)*(なお、特定するものでないときには、単に、平均移動指令値Pskと表現する)が計算される。
なお、夫々の平均値計算において、値(m+1)未満の余り(剰余)値R(n−1)が生じた場合には、この剰余値R(n−1)が剰余バッファ215で一旦保持され、上記数1に示すように、次の平均値計算のとき、バッファb(0)〜b(m)の移動指令値Pk *の加算値にこの剰余値R(n−1)が剰余バッファ215から読み出されて加算されて平均移動指令値Psk *が計算される。これにより、この剰余値R(n−1)による影響を低減する(この剰余値R(n−1)を削除すると、受信される移動指令値Pとサーボ制御操作2で処理して得られる移動指令値との間で誤差が生ずる)。
移動平均値演算部213で順次得られる平均移動指令値Psk *は移動指令値格納バッファ214に一旦格納され、処理周期tschgで読み出されてサーボ制御装置2での移動指令値Psk *としてサーボ制御部22(図1)に供給される。サーボ制御部22は、この移動指令値Psk *に応じて電動機3(図1)のサーボ制御を行う。
図3は移動指令値P1 *が移動平均処理用バッファ212の最後のバッファb(m)に格納されてから図2に示す状態になるまでの移動平均処理用バッファ212の格納状態の変遷を示す図である。
図3(a)は移動指令値P1 *が移動指令値格納バッファ211に格納され、n=m+1回目の移動指令値P1 *が移動指令値格納バッファ211から読み出されて移動平均処理用バッファ212のn=m+1番目のバッファb(m)に格納された状態を示すものであって、このときの移動平均値演算部213で得られる平均移動指令値Psk *をPs1(m)*とし、余剰値RをR1(m)とする。
なお、移動指令値Pk *が規定の受信周期tchgで受信されるときには、この最後のバッファb(m)に移動指令値P(k-1) *が格納される期間(処理周期tschgの期間)に、次の移動指令値Pk *が受信されて移動指令値格納バッファ211に格納される。
図3(b)は次に移動指令値P2 *が移動指令値格納バッファ211に格納されて、移動指令値格納バッファ211から1回目(n=0)の、即ち、最初の移動指令値P2 *の読み出しが行われ、移動平均処理用バッファ212の最初(i=0)のバッファb(0)に格納された状態を示すものであって、このときの移動平均値演算部213で得られる平均移動指令値Psk(n)*をPs2(0)*とし、余剰値RをR2(0)とする。
図3(c)は移動指令値格納バッファ211から2回目(n=1)の移動指令値P2 *の読み出しが行われて、移動平均処理用バッファ212の2番目(i=1)のバッファb(1)に格納された状態を示すものであって、このときの移動平均値演算部213で得られる平均移動指令値Psk(n)*をPs2(1)*とし、余剰値RをR2(1)とする。
図3(d)は移動指令値格納バッファ211から3回目(n=2)の移動指令値P2 *の読み出しが行われて、移動平均処理用バッファ212の3番目(i=2)のバッファb(2)に格納された状態を示すものであって、このときの移動平均値演算部213で得られる平均移動指令値Psk(n)*をPs2(2)*とし、余剰値RをR2(2)とする。
以下同様にして、移動指令値格納バッファ211から移動指令値P2 *が繰り返し読み出され、移動平均処理用バッファ212のバッファb(3),b(4),……に順次格納され、格納される毎に上記数1による平均移動指令値Psk *が求められる。ここで、(n+1)番目のバッファb(n)に移動指令値P2 *が格納されたときの平均移動指令値PskをPs2(n)*とし、余剰値RをR2(n)とする。
以上の平均移動指令値Ps1(m)*,Ps2(0)*,Ps2(1)*,Ps2(2)*,Ps2(3)*,……,Ps2(n)*は、上記の数1により、次のようにして求められる。
Ps1(m)*={0・P2 *+(m+1)・P1 *+R(m−1)}/(m+1)
剰余値R=R1(m)
但し、R(m−1)は前回の平均値計算で得られた剰余値
Ps2(0)*={1・P2 *+(m+1−1)・P1 *+R(m)}/(m+1)
剰余値R=R2(0)
Ps2(1)*={2・P2 *+(m+1−2)・P1 *+R(0)}/(m+1)
剰余値R=R2(1)
Ps2(2)*={3・P2 *+(m+1−3)・P1 *+R(1)}/(m+1)
剰余値R=R2(2)
Ps2(3)*={4・P2 *+(m+1−4)・P1 *+R(2)}/(m+1)
剰余値R=R2(3)
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Ps2(n)*={(n+1)・P2 *+(m+1−(n+1))・P1 *
+R(n−1)}/(m+1)
剰余値R=R2(n)
となる。
ここで、受信周期tchg=2msec、サーボ処理周期tschg=200μsec(=0.2msec)とし、受信移動指令値P*がP0 *=0,P1 *=1000,P2 *=2000,P3 *=3000と規定の受信周期tchgで変化した場合のサーボ処理周期tschgでの平均移動指令値Psk(n)*の変化を数値でもって具体的に説明する。
なお、ここでは、m+1=tchg/tschg=10であるから、m=9であり、移動平均処理用バッファ212では、バッファb(0),b(1),b(2),……,b(9)の10個のバッファが設けられることになる。
また、(n+1)番目のバッファb(n)に移動指令値Pk *が格納されて計算される平均移動指令値Psk(n)*の、その1つ前の(n)番目のバッファb(n−1)にこの移動指令値Pk *が格納されて計算された平均移動指令値Psk(n−1)*に対する変化量(以下、平均移動指令値Psk(n)*の変化量という)ΔPsk(n)は、
ΔPsk(n)=Psk(n)*−Psk(n−1)*
で表される。
但し、ここでは、受信移動指令値P0 *(k=0)=0であるから、平均移動指令値Ps0(n)*は全て0であり、剰余値R0(n)も0である。
そこで、受信移動指令値P1 *,P2 *,P3 *が規定の受信周期tchgで順次供給されるときの、移動平均値演算部213によってサーボ処理周期tschgで順次得られる平均移動指令値Ps1(n)*,平均移動指令値Ps2(n)*,平均移動指令値Ps3(n)*は次の通りである。
受信移動指令値P1 *を受信:
Ps1(0)*={1・P1 *+(10−1)・P0 *+R0(9)}/10=100
R1(0)=0 ΔPs1(0)=100
Ps1(1)*={2・P1 *+(10−2)・P0 *+R1(0)}/10=200
R1(1)=0 ΔPs1(1)=100
Ps1(2)*={3・P1 *+(10−3)・P0 *+R1(1)}/10=300
R1(2)=0 ΔPs1(2)=100
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Ps1(8)*={9・P1 *+(10−9)・P0 *+R1(7)}/10=900
R1(8)=0 ΔPs1(8)=100
Ps1(9)*={10・P1 *+(10−10)・P0 *+R1(8)}/10
=1000
R1(9)=0 ΔPs1(9)=100
受信移動指令値P2 *を受信:
Ps2(0)*={1・P2 *+(10−1)・P1 *+R1(9)}/10=1100
R2(0)=0 ΔPs2(0)=100
Ps2(1)*={2・P2 *+(10−2)・P1 *+R2(0)}/10=1200
R2(1)=0 ΔPs2(1)=100
Ps2(2)*={3・P2 *+(10−3)・P1 *+R2(1)}/10=1300
R2(2)=0 ΔPs2(2)=100
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Ps2(8)*={9・P2 *+(10−9)・P1 *+R2(7)}/10=1900
R2(8)=0 ΔPs2(8)=100
Ps2(9)*={10・P2 *+(10−10)・P1 *+R2(8)}/10
=2000
R2(9)=0 ΔPs2(9)=100
受信移動指令値P3 *を受信:
Ps3(0)*={1・P3 *+(10−1)・P2 *+R2(9)}/10=2100
R3(0)=0 ΔPs3(0)=100
Ps3(1)*={2・P3 *+(10−2)・P2 *+R3(0)}/10=2200
R3(1)=0 ΔPs3(1)=100
Ps3(2)*={3・P3 *+(10−3)・P2 *+R3(1)}/10=2300
R3(2)=0 ΔPs3(2)=100
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Ps3(8)*={9・P3 *+(10−9)・P2 *+R3(7)}/10=2900
R3(8)=0 ΔPs3(8)=100
Ps3(9)*={10・P3 *+(10−10)・P2 *+R3(8)}/10
=3000
R3(9)=0 ΔPs3(9)=100。
図4は以上の平均移動指令値Ps1(0)*〜Ps3(9)*の時間的な変化を示すグラフ図であって、規定の受信周期tchgで受信される受信移動指令値Pk *が線形的に増加するのに対し、図示するように、平均移動指令値Psk *は、サーボ処理周期tschg毎に、同じ変化量ΔPskずつ、即ち、直線状に増大する。これにより、電動機3(図1)のスムーズなサーボ制御が行われることになる。
一方、受信移動指令値Pk *がジッタなどの影響により、その受信周期が規定の受信周期tchgからずれる場合がある。図5は、このジッタなどの影響により、受信周期が受信周期tchgよりもサーボ処理周期tschg程度短くなったときの図2における移動平均処理用バッファ212での受信移動指令値Pk *の格納状況の変化を示す図である。なお、ここでも、上記と同様、m+1=10(n=0,1,2,……,9)とする。
図5(a)は移動指令値P2 *が移動指令値格納バッファ211に格納され、移動指令値格納バッファ211からの移動指令値P2 *の9回目(n=8)の読み出しが行われて、移動平均処理用バッファ212の9番目のバッファb(8)に格納された状態を示すものである。
ここで、ジッタにより、受信移動指令値Pk *の受信周期が規定の受信周期tchgよりもサーボ処理周期tschg程度短くなっているものとすると、図5(a)に示す状態のときに、即ち、移動指令値P2 *がこのバッファb(8)に格納されて移動平均値演算部213で平均移動指令値Ps1(8)*が求められる期間に、次の移動指令値P3 *が受信されて移動指令値格納バッファ211に格納されることになり、ここで、バッファ(i)の指定にリセットカウンタが使用されている場合には、次に、移動平均処理用バッファ212の最初のバッファb(0)が指定されるから、移動指令値格納バッファ211から最初に読み出される移動指令値P3 *は、図5(b)に示すように、この最初のバッファb(0)に格納される。そして、それ以降、b(1),b(2),b(3),……の順に移動指令値P3 *が格納されていき、図5(c)に示すように、バッファb(8)に移動指令値P3 *が格納され、次いで、図5(d)に示すように、バッファb(9)に移動指令値P3 *が格納される。そして、このバッファb(9)に移動指令値P3 *が格納されるときの期間に、次の移動指令値P4 *が受信され、最初のバッファb(0)からこの移動指令値P4 *が順に格納されていく。
これに対し、バッファb(i)の指定にリングカウンタが使用されている場合には、図5(a)に示す状態で次の移動指令値P3 *が受信されるから、このリングカウンタは次にバッファb(9)を指定することになり、このため、このバッファb(9)にこの移動指令値P3 *が最初に格納される図5(b’)に示す状態となる。これ以降では、移動指令値格納バッファ211から順に読み出される移動指令値P3 *は、最初のバッファb(0)から順に格納される。
そこで、バッファb(i)を指定するカウンタがリセットカウンタである場合の、移動指令値P3 *が受信される前後の移動平均値演算部213で得られるサーボ処理周期tschgの平均移動指令値Ps2(7)*〜Ps3(9)*を示すと、次のようになる。但し、図3に示した先の例と同様、P0 *=0,P1 *=1000,P2 *=2000,P3 *=3000とし、平均移動指令値Ps2(6)*までは図3に示した例と同様である。
Ps2(7)*={8・P2 *+(10−8)・P1 *+R1(6)}/10=1800
R2(7)=0 ΔPs2(7)=100
Ps2(8)*={9・P2 *+(10−9)・P1 *+R2(7)}/10=1900
R2(8)=0 ΔPs2(8)=100
受信移動指令値P3 *を受信:
Ps3(0)*={1・P3 *+(10−2)・P2 *+1・P1 *+R2(8)}/10
=2000
R3(0)=0 ΔPs3(0)=100
Ps3(1)*={2・P3 *+(10−3)・P2 *+1・P1 *+R3(0)}/10
=2100
R3(0)=0 ΔPs3(1)=100
Ps3(2)*={3・P3 *+(10−4)・P2 *+1・P1 *+R3(1)}/10
=2200
R3(2)=0 ΔPs3(2)=100
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Ps3(7)*={8・P3 *+(10−9)・P2 *+1・P1 *+R2(6)}/10
=2700
R3(7)=0 ΔPs3(7)=100
Ps3(8)*={9・P3 *+(10−10)・P2 *+1・P1 *+R3(7)}/10
=2800
R3(8)=0 ΔPs3(8)=100
Ps3(9)*={10・P3 *+(10−10)・P2 *+R3(1)}/10
=3000
R3(9)=0 ΔPs3(9)=200。
ここで、次の移動指令値P4 *が受信されることになるが、P4 *=4000とすると、この移動指令値P4 *が移動平均処理用バッファ212のバッファb(0)に格納されたときの平均移動指令値Ps4(0)*は、
Ps4(0)*={1・P4 *+(10−1)・P3 *+R3(9)}/10=3100
R3(2)=0 ΔPs3(2)=100
となる。
このように、規定の受信周期tchgよりも1サーボ処理周期tschg程度短い受信周期で移動指令値P3 *が受信されると、これまで平均移動指令値Ps2(n)*の変化量ΔPs2(n)は一定であったが(上記の例では、ΔPs2(n)=100)、この短い周期で移動指令値P3 *が受信された時点での平均移動指令値Ps2(8)*と平均移動指令値Ps3(9)*との間で、ΔPs3(n)=200という、平均移動指令値Ps3(9)*の変化量ΔPs3(9)に大きな変動が現われることになる。
一方、バッファb(i)を指定するカウンタがリングカウンタである場合について示すと、次のようになる。
Ps2(7)*={8・P2 *+(10−8)・P1 *+R1(6)}/10=1800
R2(7)=0 ΔPs2(7)=100
Ps2(8)*={9・P2 *+(10−9)・P1 *+R2(7)}/10=1900
R2(8)=0 ΔPs2(8)=100
受信移動指令値P3 *を受信:
Ps3(0)*={1・P3 *+(10−1)・P2 *+R2(8)}/10=2100
R3(0)=0 ΔPs3(0)=200
Ps3(1)*={2・P3 *+(10−2)・P2 *+R3(0)}/10=2200
R3(0)=0 ΔPs3(1)=100
Ps3(2)*={3・P3 *+(10−3)・P2 *+R3(1)}/10=2300
R3(2)=0 ΔPs3(2)=100
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Ps3(7)*={8・P3 *+(10−8)・P2 *+R2(6)}/10=2800
R3(7)=0 ΔPs3(7)=100
Ps3(8)*={9・P3 *+(10−9)・P2 *+R3(7)}/10=2900
R3(8)=0 ΔPs3(8)=100
Ps3(9)*={10・P3 *+(10−10)・P2 *+R3(1)}/10=3000
R3(9)=0 ΔPs3(9)=100。
このように、受信周期tchgよりも1サーボ処理周期tschg程度短い受信周期で移動指令値P3 *が受信されると、バッファb(i)を指定するカウンタがリングカウンタである場合には、移動指令値P3 *が受信された後の最初の平均移動指令値Ps2(0)*で、ΔPsk(n)=200という、変化量ΔPsk(n)に大きな変動が現われることになる。
図6はリングカウンタを使用した場合の移動指令値P2 *を受信してから移動指令値P4 *を受信したときまでの期間での平均移動指令値Psk(n)*の変化を示す図であって、受信周期が規定の受信周期tchgよりも短い移動指令値P3 *を受信した時点での平均移動指令値Ps3(0)*(矢印Aで示す)に局所的な変動が現われる。
なお、リセットカウンタが使用された場合には、移動指令値P3 *を受信した後での平均移動指令値Ps3(9)*に局所的な変動が現われる。
図7は移動指令値Pkの受信周期が規定の受信周期tchgが、上記のように、短くなった場合に生ずる平均移動指令値Psk(n)*の変化量ΔPsk(n)の局所的な変動を抑制することができるようにした図1における指令値補間演算部21の第1の具体例を示すブロック構成図であって、216は不足バッファ補正処理部であり、図2に対応する部分には同一符号をつけて重複する説明を省略する。
同図において、移動平均処理用バッファ212は、バッファb(i)を指定するカウンタとして、リングカウンタを使用した場合の図5(b’)と同じ状態を示している。この第1の具体例では、この移動平均処理用バッファ212でバッファb(0)から順に移動指令値P2 *が格納されていくとき、最後のバッファb(m)でこの移動指令値P2 *に代わって次の移動指令値P3 *が格納されるものであり、しかる後、バッファb(0)から順に移動指令値P3 *が格納されていくが、このような所定回数α(但し、αはm+1以下の正整数)の各格納毎に、最後のバッファb(m)に格納されて移動指令値P1 *を更新した移動指令値P3 *を補正するものであり、かかる補正を不足バッファ補正処理部216で補正する。
バッファb(m)に格納されていた移動指令値P(k-1) *(ここでは、移動指令値P1 *)は、新たに移動指令値P(k+1) *(ここでは、移動指令値P3 *)が受信されると、本来期待する移動指令値Pk *(ここでは、移動指令値P2 *)に更新されない。不足バッファ補正処理部216は、この移動指令値P(k-1) *をα回にわたって補正処理することにより、本来格納されるべき移動指令値Pk *に補正するものである。
即ち、バッファb(0)に新たな移動指令値P(k+1) *が格納されると、バッファb(m)での移動指令値P(k-1) *を移動指令値Pk *に近づくように補正し、次に、バッファb(1)に新たな移動指令値P(k+1) *が格納されると、バッファb(m)での補正された移動指令値を移動指令値Pk *に近づくようにさらに補正し、……、バッファb(α−1)に新たな移動指令値P(k+1) *が格納されると、バッファb(m)での補正された移動指令値を、移動指令値Pk *に等しくなるように、さらに補正するものである。移動平均値演算部213での平均値計算では、バッファb(m)の移動指令値として、この補正された移動指令値が用いられる。
図8は図7における不足バッファ補正処理部216の補正処理の一具体例を示す図である。
同図において、不足バッファ補正処理部216では、最後のバッファb(m)でのj回目(但し、j=1,2,……,α)の補正された移動指令値を、補正移動指令値b
(k+1)(j)(m)とすると、リセットカウンタが使用される場合、
で表される。図5に示す状態では、P(k-1) *=P1 *,Pk *=P2 *であるから、
b3(j)(m)=P1 *+(P2 *−P1 *)・j/α
となり、j=αのとき、
b3(α)(m)=P1 *+(P2 *−P1 *)=P2 *
である。従って、かかる補正は、最後のバッファb(m)格納されていた移動指令値P1 *が移動指令値P2 *になるまで、(P2 *−P1 *)/αずつ補正されていくことになる。(α+1)回以降の平均値計算では、バッファb(m)に関しては、これに格納されているこの移動指令値P2 *が用いられる。即ち、バッファb(m)では、更新されなかった移動指令値P1 *が順次移動指令値P2 *へと更新されていくことになる。
このようにして、バッファb(m)での移動指令値が更新されることにより、図6において、移動指令値P3 *を受信した直後の平均移動指令値Ps3(0)*で生じた矢印Aで示すような局所的な変動が抑圧されることになる。
図9は図7に示す指令値補間演算部21の動作を示すフロー図である。ここでは、リセットカウンタが使用された場合を例に説明する。リングカウンタが使用される場合も、周期tchgが短い新たな移動指令値P(k+1) *が最初に格納されるバッファが異なるだけであって、動作は同様である。
同図において、移動平均処理用バッファ212でのバッファb(0)〜b(m)がカウンタによって順次指定されて移動指令値Pk *が格納されており、移動指令値Pk *の格納のためにバッファb(m−1)が指定された期間内に次の移動指令値P(k+1)が受信されないときには(ステップ100の“No”)、移動平均処理用バッファ212でのバッファb(0)〜b(m)から移動指令値P*が読み出され(ステップ106)、これをもとに移動平均値演算部213で平均移動指令値Psk *が生成される(ステップ107)。このとき、j=αに設定されており(ステップ108の“Yes”)、ステップ100に戻る。移動指令値Pk *の受信周期が、上記のように、受信周期tchgよりも短くならない限り、このステップ100,106〜108の動作が繰り返され、これによって、サーボ処理周期tschgで平均移動指令値Psk *が順次生成される。
ここで、移動指令値Pk *の受信周期が、上記のように、受信周期tchgよりも短くなり、移動平均処理用バッファ212でのバッファb(m−1)の指定期間内に次の移動指令値P(k+1) *が受信されると(ステップ100の“Yes”)、j=1が設定され(ステップ101)、移動平均処理用バッファ212でのバッファb(m−1)から移動指令値Pk *が、バッファb(m)から移動指令値P(k-1) *夫々読み出され、不足バッファ補正処理部216に供給される(ステップ102)。不足バッファ補正処理部216では、これら移動指令値Pk *,P(k-1) *が保存されるとともに(ステップ103)、これら移動指令値Pk *,P(k-1) *を用いて上記数2の演算処理が行われ、このバッファb(m)での移動指令値P(k-1) *に対する補正移動指令値b(k+1)(1)(m)が生成され(ステップ104)、これがバッファb(m)に格納される(ステップ105)。
しかる後、移動平均値演算部213でj=1回目のバッファb(0)〜b(m)からの移動指令値P*の読み出しが行われ(ステップ106)、これをもとに平均移動指令値Ps(k+1) *が生成される(ステップ107)。
そして、j<αであるので(ステップ108の“No”)、j=2とし(ステップ109)、ステッフ104に戻って、不足バッファ補正処理部216で、保存されている移動指令値P(k+1) *,P(k-1) *をもとに、次の補正移動指令値b(k+1)(2)(m)が生成され(ステップ104)、以下、ステップ105以下の動作が繰り返される。
その後、j>αとなると(ステップの“Yes”)、ステップ100に戻り、バッファb(m)での移動指令値P*がj=αのときの補正移動指令値b(k+1)(α)(m)である状態で、ステップ106〜108,100の動作が繰り返されて順次平均移動指令値Ps(k+1) *が生成される。
ここで、バッファb(i)を指定するカウンタとして、リセットカウンタを用いた場合での、m=9,α=4としたときの補正移動指令値b(k+1)(j)(m),平均移動指令値Ps(k+1) *の数値例を、移動指令値P2 *をバッファb(7)に格納するタイミングから移動指令値P3 *をバッファb(9)に格納するタイミングまでの平均移動指令値Ps*とともに、示すと、次のようになる。但し、上記のように、P2 *=2000,P3 *=3000とする。
Ps2(7)*={8・P2 *+(10−8)・P1 *+R1(6)}/10=1800
R2(7)=0 ΔPs2(7)=100
Ps2(8)*={9・P2 *+(10−9)・P1 *+R2(7)}/10=1900
R2(8)=0 ΔPs2(8)=100
受信移動指令値P3 *を受信:
Ps3(0)*={1・P3 *+(10−2)・P2 *+b3(1)(9)
+R2(8)}/10=2025
但し、b3(1)(9)=P1 *+(P2 *−P1 *)・1/4=1250
R3(0)=0 ΔPs3(0)=125
Ps3(1)*={2・P3 *+(10−3)・P2 *+b3(2)(9)
+R3(0)}/10=2150
但し、b3(1)(9)=P1 *+(P2 *−P1 *)・2/4=1500
R3(0)=0 ΔPs3(1)=125
Ps3(2)*={3・P3 *+(10−4)・P2 *+b3(3)(9)
+R3(1)}/10=2275
但し、b3(1)(9)=P1 *+(P2 *−P1 *)・3/4=1750
R3(2)=0 ΔPs3(2)=125
Ps3(3)*={4・P3 *+(10−5)・P2 *+b3(4)(9)
+R3(2)}/10=2400
但し、b3(4)(9)=P1 *+(P2 *−P1 *)・4/4=2000
R3(3)=0 ΔPs3(3)=125
Ps3(4)*={5・P3 *+(10−6)・P2 *+b3(4)(9)
+R3(2)}/10=2500
R3(3)=0 ΔPs3(3)=100
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Ps3(7)*={8・P3 *+(10−9)・P2 *+b3(4)(9)
+R3(6)}/10=2800
R3(7)=0 ΔPs3(7)=100
Ps3(8)*={9・P3 *+(10−10)・P2 *+b3(4)(9)
+R3(7)}/10=2900
R3(8)=0 ΔPs3(8)=100
Ps3(9)*={10・P3 *+(10−10)・P2 *+R3(8)}/10
=3000
R3(9)=0 ΔPs3(9)=100。
このように、平均移動指令値Ps2(i),Ps3(i+1)が得られが、これを図6で示したバッファb(9)に格納されている移動指令値P1 *を補正しない場合と比較すると、移動指令値P1 *の補正が行われた平均移動指令値Ps3(0),Ps3(1),Ps3(2),Ps3(3)で変化量ΔPsk(n)が値「25」だけ増加しているのに対し、平均移動指令値Ps3(9)では、変化量ΔPsk(n)が値「100」だけ減少して、値「100」となっており、変化量ΔPsk(n)の局所的な増加の変動が発生していない。このことは、バッファb(9)に格納されている移動指令値P1 *を補正しなければ発生するこの局所的な増加の変動が、移動指令値P1 *の補正が行われた平均移動指令値Ps3(0),Ps3(1),Ps3(2),Ps3(3)に分散されたことによるものである。
以上のようにして、この具体例では、ジッタなどによって受信される移動指令値Pk *の周期tchgが短くなっても、これによって生ずる平均移動指令値Psk *の変化量ΔPsk(n)の局所的な変動を他の平均移動指令値Psk *に分散することができ、これにより、この平均移動指令値Psk *の変化量ΔPsk(n)の局所的な変動を抑制することができるものである。
なお、上記の例では、α=4としたが、これに限るものではなく、αを大きくすることにより、かかる局所的な増加の変動量をより多くの平均移動指令値Psk *への分散が可能となり、より均一な変化量変化量ΔPsk(n)で平均移動指令値Psk *が変化することになる。
ところで、以上は、移動指令値Pk *の受信周期が規定の受信周期tchgよりも短くなった場合であったが、逆に長くなる場合もある。図10は、このジッタなどの影響により、移動指令値Pk *の受信周期が規定の受信周期tchgよりも1サーボ処理周期tschg程度長くなったときの図2における移動平均処理用バッファ212での受信移動指令値Pk *の格納状況の変化を示す図である。なお、ここでも、上記と同様、m+1=10(i=0,1,2,……,9)とする。
図10(a)は移動指令値P2 *が移動指令値格納バッファ211に格納されて、移動指令値格納バッファ211からm(=9)回目の移動指令値P2 *の読み出しがあって、移動平均処理用バッファ212の9番目のバッファb(8)に格納された状態を示すものである。
また、図10(b)は次の、即ち、移動指令値格納バッファ211からm+1(=10)回目の移動指令値P2 *の読み出しがあって、移動平均処理用バッファ212の10番目、即ち、最後のバッファb(9)に格納された状態を示すものである。
ここで、ジッタにより、受信移動指令値Pk *の受信周期が規定の受信周期tchgよりも1サーボ処理周期tschg程度長くなっており、移動平均処理用バッファ212のバッファb(0)〜b(m)を移動指令値Pk *を格納するために指定するカウンタがリングカウンタである場合には、次のサーボ処理周期tschgでは、最初のバッファb(0)が指定されるから、移動平均処理用バッファ212の状態は、図10(c)に示すように、図10(b)に示す状態と同じ状態が維持される(なお、このときを、特に、n=11としている)。そして、このときに、次の移動指令値P3 *が受信されて移動指令値格納バッファ211に格納されるが、これにより、移動平均処理用バッファ212のバッファb(i)を指定する上記のカウンタがバッファb(1)からの指定が開始されるから、このとき、移動平均処理用バッファ212の状態は、図5(d)に示すように、移動指令値格納バッファ211から最初に読み出された移動指令値P3 *がバッファb(1)に格納される。そして、それ以降、b(2),b(3),……の順に移動指令値P3 *が格納されていく。
なお、この具体例は、移動平均処理用バッファ212のバッファb(i)を指定するカウンタとして、0〜mのカウントを繰り返すリングカウンタとするものであるが、仮りに、移動指定値Pk *が受信される毎にリセットされるリセットカウンタが使用される場合には、バッファb(0)から新たな移動指令値P3 *が格納されることになるから、図10(c)の状態から図10(d’)に示す状態に移行することになる。
そこで、リングカウンタの指定により、移動平均処理用バッファ212の状態が図10(a),(b),(c),(d)に示すように移行する場合の移動指令値P3 *が受信される前後の移動平均値演算部213で得られるサーボ処理周期tschgの平均移動指令値Ps2(8)*〜Ps3(9)*を示すと、次のようになる。但し、図3に示した先の例と同様、P0 *=0,P1 *=1000,P2 *=2000,P3 *=3000とし、平均移動指令値Ps2(7)*までは図3に示した例と同様であって、図10(a)に示す状態から示す。
Ps2(8)*={9・P2 *+(10−9)・P1 *+R2(7)}/10 =1900
R2(8)=0 ΔPs2(8)=100
Ps2(9)*={10・P2 *+(10−10)・P1 *+R1(6)}/10=2000
R2(9)=0 ΔPs2(9)=100
Ps2(10)*=Ps2(9)*=2000
R2(10)=0 ΔPs2(10)=0
受信移動指令値P3 *を受信:
Ps3(0)*={1・P3 *+(10−1)・P2 *+R2(8)}/10=2100
R3(0)=0 ΔPs3(0)=100
Ps3(1)*={2・P3 *+(10−2)・P2 *+R3(0)}/10=2200
R3(1)=0 ΔPs3(1)=100
Ps3(2)*={3・P3 *+(10−3)・P2 *+R3(1)}/10=2300
R3(2)=0 ΔPs3(2)=100
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Ps3(8)*={9・P3 *+(10−9)・P2 *+R3(7)}/10 =2900
R3(8)=0 ΔPs3(8)=100
Ps3(9)*={10・P3 *+(10−10)・P2 *+R3(1)}/10=3000
R3(9)=0 ΔPs3(9)=100。
なお、移動平均処理用バッファ212のバッファb(0)〜b(m)を指定するカウンタがリセットカウンタである場合も、図10(c)に示す状態が存在するから、上記の移動指令値Pk *の受信によってリングカウンタを用いた場合と同様である。
このように、規定の受信周期tchgよりも1サーボ処理周期tschg程度長くなった受信周期で移動指令値P3 *が受信されると、これまで平均移動指令値Psk(n)*の変化量ΔPsk(n)は一定であったが(上記の例では、ΔPsk(n)=100)、この移動指令値P3 *の受信直後で、平均移動指令値Psk(n)*の変化量ΔPsk(n)に、これが変化しないという局所的な変動が現われることになる。
図11は移動指令値P2 *を受信してから移動指令値P4 *を受信したときまでの期間での平均移動指令値Psk(n)*の変化を示す図であって、移動指令値P3 *を受信する直前に得られる平均移動指令値Ps3(9)*に(矢印B)、変化しないという局所的変動が現れる。
図12は移動指令値Pkの受信周期が規定の受信周期tchgよりも長くなった場合に生ずる平均移動指令値Psk(n)*の変化量ΔPsk(n)の局所的な変動を抑制することができるようにした図1における指令値補間演算部21の第2の具体例を示すブロック構成図であって、217は超過バッファ補正処理部であり、図2に対応する部分には同一符号をつけて重複する説明を省略する。
同図において、移動平均処理用バッファ212は、図10(c)と同じ状態にあることを示している。この第2の具体例では、この移動平均処理用バッファ212でバッファb(0)から順に移動指令値P2 *が格納されていくとき、最後のバッファb(m)で移動指令値P2 *の格納がなされても、次の移動指令値P3 *は受信されず、1サーボ処理周期tschgだけ遅れて受信されるものであり、受信されるべき期間(即ち、バッファb(9)に移動指令値P2 *の格納が行われた図10(b)に示す状態の期間)に次の移動指令値P3 *が受信されないことが検出されると、超過バッファ補正処理部217が図10(c)に示す状態にあるバッファb(0)での移動指令値P2 *の補正を行い、さらに、これ以降、バッファb(1),b(2),……と移動指令値P3 *が格納されていくものである。
図13は図12における超過バッファ補正処理部217の一具体例を示すブロック構成図であって、218〜220は移動指令値格納バッファ、221は超過バッファ補正演算部、222,223は前回値保存処理部である。なお、移動平均処理用バッファ212のバッファb(0)〜b(m)を指定するカウンタとしては、ここでは、リングカウンタが使用されるものとする。
同図において、移動指令値格納バッファ218〜220は夫々受信した移動指令値Pk *を格納するものであって、移動指令値格納バッファ218には、最新の受信移動指令値P(k+1) *が、移動指令値格納バッファ219には、1つ前に受信した移動指令値Pk *が、移動指令値格納バッファ220には、2つ前に受信した移動指令値P(k-1) *が夫々格納される。ここで、移動指令値格納バッファ218に移動指令値Pk *が、移動指令値格納バッファ219に移動指令値P(k-1) *が、移動指令値格納バッファ220に移動指令値P(k-2) *が夫々格納された状態で、次の移動指令値P(k+1) *が受信されると、移動指令値格納バッファ219に格納されている移動指令値P(k-1) *が読み出されて、前回値保存処理部223を介して移動指令値格納バッファ220に格納され、移動指令値格納バッファ218に格納されている移動指令値Pk *が読み出されて、前回値保存処理部222を介して移動指令値格納バッファ219に格納される。そして、新たに受信された受信移動指令値P(k+1) *は移動指令値格納バッファ218に格納される。
超過バッファ補正演算部221は、新たに移動指令値P(k+1) *が受信されるべき期間にこの移動指令値P(k+1) *が受信されないとき、即ち、移動平均処理用バッファ212の状態が図10(b)に示す状態で移動指令値P(k+1) *が受信されないときに動作し、このとき移動指令値格納バッファ218,219,220に格納されている移動指令値P(k) *,P(k-1) *,P(k-2) *を用いて移動指令値格納バッファ220でのバッファb(0)に格納されている移動指令値Pk *の補正値(補正移動指令値)b(k+1)(0)(0)を生成する(ここで、「(k+1)」は格納予定の移動指令値P(k+1) *を予測するものであることを表し、「(0)」はバッファb(0)であることを表し、「(0)」は最初の補正移動指令値であることを表している)。ここで、補正移動指令値b(k+1)(0)(0)は、移動指令値格納バッファ218,219,220に格納されている移動指令値P(k) *,P(k-1) *,P(k-2) *から、現在バッファb(0)に格納されるべき移動指令値P(k+1) *を予測した値である。
図13はこのときの状態(即ち、図10(c)でのバッファb(0)の移動指令値を補正する状態)を示すものであって、移動指令値格納バッファ218に受信移動指令値P
2 *が、移動指令値格納バッファ219に移動指令値P
1 *が、移動指令値格納バッファ220に移動指令値P
0 *が夫々格納されている。超過バッファ補正演算部221は、これら移動指令値P
2 *,P
1 *,P
0 *から、バッファb(0)に対する補正移動指令値b
3(0)(0)を、
として求める。なお、この数3において、右辺第1項が位置を表わすものとすると、第2項は位置の変化で速度を表しており、第3項は速度の変化で加速度を表している。この数3に示す補正移動指令値b3(0)(0)は、移動指令値P0 *から移動指令値P2 *までの変化をもとに、位置と速度と加速度とにより、次の移動指令値P3 *を予測するものである。
超過バッファ補正演算部221で生成されたこの補正移動指令値b3(0)(0)は、図10(c)に示す状態にある移動平均処理用バッファ212(図12)のバッファb(0)に格納される。即ち、このとき、このバッファb(0)では、移動指令値P2 *が格納されたままとなっているが、これがこの補正移動指令値b3(0)(0)に更新されることになる。
このように、図10(c)の状態でバッファb(0)にこの補正移動指令値b3(0)(0)が格納されると、移動平均値演算部213(図12)において、移動平均処理用バッファ212での各バッファb(0)〜b(m)に格納された移動指令値P2 *が取り込まれ(但し、バッファb(0)からは、この補正移動指令値b3(0)(0)が取り込まれる)、第1の具体例と同様、移動指令値P2 *による平均移動指令値Ps2(n)*に続く移動指令値P2 *による平均移動指令値として、平均移動指令値Ps3(0)が生成される。
次に、移動指令値P3 *が受信されると、移動指令値格納バッファ218に受信された移動指令値P3 *が格納され、また、移動平均処理用バッファ212では、バッファb(1)にこの新たに受信された移動指令値P3 *が格納される。なお、ここでは、リングカウンタが使用されるので、バッファb(0)に上記の補正移動指令値b3(0)(0)がそのまま格納された状態にある。これ以降では、移動平均処理用バッファ212でのバッファb(2),b(3),……,b(m)に順に移動指令値P3 *が格納されていき、その都度移動平均値演算部213(図12)で平均移動指令値Ps3(n)*が生成される。
ここで、m=9,β=4としたときの補正移動指令値b3(0)(0),平均移動指令値Ps2 *,Ps3 *の数値例を、移動指令値P2 *をバッファb(8)(図10(a)に示す状態)に格納するタイミングから移動指令値P3 *をバッファb(9)に格納するタイミングまでの平均移動指令値Ps*とともに示す。但し、一例として、上記のように、P0 *=0,P1 *=1000,P2 *=2000,P3 *=3000とし、Ps2(7)*までは図11の場合と同様である。
Ps2(8)*={9・P2 *+(10−9)・P1 *+R2(7)}/10=1900
R2(8)=0 ΔPs2(8)=100
Ps2(9)*={10・P2 *+(10−10)・P1 *+R1(6)}/10
=2000
R2(7)=0 ΔPs2(7)=100
Ps2(10)*=Ps3(0)*
={b3(0)(0)+(10−1)・P2 *
+R1(6)}/10=2100
但し、b3(0)(0)=P2 *+(P2 *−P1 *)+{(P2 *−P1 *)
−(P1 *−P0 *)}=3000
R3(0)=0 ΔPs3(0)=100
受信移動指令値P3 *を受信:
Ps3(1)*={b3(0)(0)+1・P3 *+(10−2)・P2 *
+R3(0)}/10=2200
R3(0)=0 ΔPs3(1)=100
Ps3(2)*={b3(0)(0)+2・P3 *+(10−3)・P2 *
+R3(1)}/10=2300
R3(2)=0 ΔPs3(2)=100
Ps3(3)*={b3(0)(0)+3・P3 *+(10−4)・P2 *
+R3(2)}/10=2400
R3(3)=0 ΔPs3(3)=100
Ps3(4)*={b3(0)(0)+4・P3 *+(10−5)・P2 *
+R3(2)}/10=2500
R3(3)=0 ΔPs3(3)=100
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Ps3(7)*={b3(0)(0)+7・P3 *+(10−8)・P2 *
+R3(6)}/10=2800
R3(7)=0 ΔPs3(7)=100
Ps3(8)*={b3(0)(0)+8・P3 *+(10−9)・P2 *
+R3(7)}/10=2900
R3(8)=0 ΔPs3(8)=100
Ps3(9)*={b3(0)(0)+9・P3 *+(10−10)・P2 *
+R3(8)}/10=3000
R3(9)=0 ΔPs3(9)=100。
このように、平均移動指令値Ps2(i),Ps3(i+1)が得られが、これを図11で示したバッファb(0)に格納されている移動指令値P2 *を補正しない場合と比較すると、補正が行われた平均移動指令値Ps3(0),Ps3(1),Ps3(2),Ps3(3)で変化量ΔPsk(n)が値「100」となって一定の値であり、変化量ΔPsk(n)の局所的な増加の変動が解消されることになる。
このようにして、この具体例では、シッタなどによって受信される移動指令値Pk *の受信周期が規定の受信周期tchgよりも長くなっても、これによって生ずる平均移動指令値Psk *の変化量ΔPsk(n)の局所的な変動を抑制することができる。
なお、上記の例では、β=4としたが、これに限るものではなく、βを大きくしても同様の効果が得られるものである。
なお、この具体例において、移動平均処理用バッファ212のバッファb(0)〜b(m)を指定するカウンタとして、移動指令値Pk *の受信でリセットされるリセットカウンタを使用した場合には、図10(c)に示す状態でバッファb(0)に上記の補正移動指令値b3(0)(0)が格納された状態と次の図10(d’)に示す状態とは、b3(0)(0)=P3 *=3000であるから、全く同じ状態であり、平均移動指令値Psk *の変化量の変動は補正されないことになる。従って、この具体例では、バッファb(0)に補正移動指令値b3(0)(0)がそのまま格納された状態で残るようにするために、リングカウンタが使用されるものである。
図14は図12における超過バッファ補正処理部217の他の具体例を示すブロック構成図であって、224は超過バッファ変動補正演算部、225は切替スイッチであって、図13に対応する部分には同一符号をつけて重複する説明を省略する。
同図において、この具体例は、図13に示す具体例の構成に超過バッファ変動補正演算部224と切替スイッチ225とを追加し、超過バッファ補正演算部221で生成された補正移動指令値b3(0)(0)と超過バッファ変動補正演算部224で生成される補正移動指令値b3(j)(0)とを、切替スイッチ225で切り替えて移動平均処理用バッファ212でのバッファb(0)に供給するものである。
なお、この具体例でも、移動平均処理用バッファ212でのバッファb(0)〜b(m)を指定するカウンタとして、リングカウンタが用いられる。従って、移動平均処理用バッファ212では、移動指令値Pk *の受信により、図10(c)に示す状態から図10(d)に示す状態に移行する。
図14(a)は移動平均処理用バッファ212が図10(c)に示す状態にあるときを示すものであって、移動指令値格納バッファ218に受信移動指令値P2 *が、移動指令値格納バッファ219に移動指令値P1 *が、移動指令値格納バッファ220に移動指令値P0 *が夫々格納されている。超過バッファ補正演算部221は、これら移動指令値P2 *,P1 *,P0 *から、バッファb(0)に対する補正移動指令値b3(0)(0)を、図13に示した具体例と同様、先の数3の演算を行うことによって求める。
このとき、切替スイッチ225はA端子側に閉じており、求められたこの補正移動指令値b3(0)(0)は、切替スイッチ225を介して図10(c)に示す状態にある移動平均処理用バッファ212(図12)のバッファb(0)に格納される。即ち、このとき、このバッファb(0)には、移動指令値P2 *が格納されているが、これがこの補正移動指令値b3(0)(0)に更新されることになる。
このように、図10(c)の状態でバッファb(0)にこの補正移動指令値b3(0)(0)が格納されると、移動平均値演算部213(図12)において、移動平均処理用バッファ212での各バッファb(1)〜b(m)に格納された移動指令値P2 *とバッファb(0)の補正移動指令値b3(0)(0)とが取り込まれ、第1の具体例と同様、移動指令値P2 *による平均移動指令値Ps2(9)*に続く移動指令値P3 *による最初の平均移動指令値として、平均移動指令値Ps3(0)が生成される。
次いで、次の移動指令値P3 *が受信されると、図14(b)に示す状態となり、移動指令値格納バッファ218に受信された移動指令値P3 *が格納され、これとともに、移動指令値格納バッファ218に格納されていた移動指令値P2 *が移動指令値格納バッファ219に格納され、移動指令値格納バッファ219に格納されていた移動指令値P1 *が移動指令値格納バッファ220に格納される。また、切替スイッチ225がB端子側に切り替わる。このとき、移動平均処理用バッファ212では、バッファb(0)に補正移動指令値b3(0)(0)が格納されている。
これとともに、超過バッファ変動補正演算部224が動作を開始し、β回(但し、βはm以下の整数)バッファb(0)の補正移動指令値b3(j)(0)(但し、j=1,2,……,β)を順次生成し、切替スイッチ225を介して移動平均処理用バッファ212でのバッファb(0)に格納する。従って、このバッファb(0)では、補正移動指令値b3(j)(0)が順次更新される。
かかる補正移動指令値b
3(j)(0)は、超過バッファ補正演算部221で生成された補正移動指令値b
3(0)(0)と移動指令値格納バッファ218に格納された移動指令値P
3 *とから、
によって求められるものである。
これにより、図10(d)に示す状態からバッファb(0)において、補正移動指令値b3(j)(0)がb3(1)(0),b3(1)(0),……,b3(β)(0)と更新されていくことになる。
ここで、m=9,β=4としたときの補正移動指令値b3(j)(0),平均移動指令値Ps2 *,Ps3 *の数値例を、移動指令値P2 *をバッファb(8)(図10(a)に示す状態)に格納するタイミングから移動指令値P3 *をバッファb(9)に格納するタイミングまでの平均移動指令値Ps*とともに示す。但し、上記のように、P2 *=2000,P3 *=3000とする。
Ps2(8)*={9・P2 *+(10−9)・P1 *+R2(7)}/10=1900
R2(8)=0 ΔPs2(8)=100
Ps2(9)*={10・P2 *+(10−10)・P1 *+R1(6)}/10
=2000
R2(7)=0 ΔPs2(7)=100
Ps2(10)*=Ps3(0)*
={b3(0)(0)+9・P2 *+R1(6)}/10=2100
但し、b3(0)(0)=P2 *+(P2 *−P1 *)+{(P2 *−P1 *)
−(P1 *−P0 *)}=3000
R3(0)=0 ΔPs3(0)=100
受信移動指令値P3 *を受信:
Ps3(1)*={b3(1)(0)+1・P3 *+(10−2)・P2 *
+R3(0)}/10=2200
但し、b3(0)(0)=P3 *=3000であるから、上記の数4により、
b3(1)(0)〜b3(4)(0)=b3(0)(0)=3000
R3(0)=0 ΔPs3(1)=100
Ps3(2)*={b3(2)(0)+2・P3 *+(10−3)・P2 *
+R3(1)}/10=2300
R3(2)=0 ΔPs3(2)=100
Ps3(3)*={b3(3)(0)+3・P3 *+(10−4)・P2 *
+R3(2)}/10=2400
但し、b3(4)(9)=P1 *+(P2 *−P1 *)・4/4=2000
R3(3)=0 ΔPs3(3)=100
Ps3(4)*={b3(4)(0)+4・P3 *+(10−5)・P2 *
+R3(2)}/10=2500
R3(3)=0 ΔPs3(3)=100
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Ps3(7)*={b3(4)(0)+7・P3 *+(10−8)・P2 *
+R3(6)}/10=2800
R3(7)=0 ΔPs3(7)=100
Ps3(8)*={b3(4)(0)+8・P3 *+(10−9)・P2 *
+R3(7)}/10=2900
R3(8)=0 ΔPs3(8)=100
Ps3(9)*={b3(4)(0)+9・P3 *+(10−10)・P2 *
+R3(8)}/10=3000
R3(9)=0 ΔPs3(9)=100。
このように、平均移動指令値Ps2(i),Ps3(i+1)が得られが、これを図11で示したバッファb(0)に格納されている移動指令値P2 *を補正しない場合と比較すると、補正が行われた平均移動指令値Ps3(0),Ps3(1),Ps3(2),Ps3(3)で変化量ΔPsk(n)が値「100」となって一定の値であり、変化量ΔPsk(n)の局所的な増加の変動が解消されることになる。
このようにして、この具体例では、ジッタなどによって受信される移動指令値Pk *の受信周期が規定の受信周期tchgよりも長くなっても、これによって生ずる平均移動指令値Psk *の変化量ΔPsk(n)の局所的な変動を抑制することができる。
なお、上記の例では、β=4としたが、これに限るものではなく、βを大きくしても同様の効果が得られるものである。
ここで、上記のように、補正移動指令値b3(j)(0)が次に受信する移動指令値P3 *と等しい場合には、超過バッファ変動補正演算部224で得られる補正移動指令値b3(j)(0)は超過バッファ補正演算部221で得られる補正移動指令値b3(0)(0)に等しく(なぜならば、上記数3でのP3 *−b3(0)(0)=0であるから)、この場合には、超過バッファ変動補正演算部224は超過バッファ補正演算部221が生成する補正移動指令値b3(0)(0)と等しい補正移動指令値b3(j)(0)を生成してバッファb(0)に格納するものであるから、図13に示す具体例では、補正移動指令値b3(0)(0)を1回格納するのに対し、図14に示す具体例では、これと同じ補正移動指令値b3(j)(0)をβ回格納するという点で異なるが、結果的には、超過バッファ変動補正演算部224は超過バッファ補正演算部221と同じ作用をなしているものである。従って、この場合には、図14に示す具体例は、図13に示す具体例と作用が等しいものである。
なお、上記数3において、移動指令値P0 *,P1 *,P2 *,P3 *が同じ関数で表わされる軌道上に存在するものであるときには、補正移動指令値b3(0)(0)が次に受信される移動指令値P3 *と等しくなる。
これに対し、超過バッファ補正演算部221で生成される補正移動指令値b3(0)(0)が次に受信する移動指令値P3 *と異なる場合もあり得、この場合には、超過バッファ変動補正演算部223の作用により、図14に示す具体例は、図13に示す具体例と作用が異なるものとなる。
即ち、図13に示す具体例では、例えば、図10(c)に示す状態で、バッファb(0)に補正移動指令値b3(0)(0)を格納したとすると、バッファb(1),b(2),……,b(9)に順次移動指令値P3 *を格納する間、バッファb(0)に補正移動指令値b3(0)(0)が保持されたままであり、次いで、バッファb(0)に移動指令値P3 *が格納されると(補正移動指令値b3(0)(0)が移動指令値P3 *に更新される)、バッファb(9)に対して、バッファb(0)の値が移動指令値P3 *と補正移動指令値b3(0)(0)との差の値が変化するだけであり、このときの平均移動指令値Ps3(0)の変化量ΔPs3(0)はその差値に応じたわずかな値である。
例えば、移動指令値P0 *,P1 *,P2 *,P3 *を夫々、P0 *=300、P1 *=500、P2 *=1000、P3 *=2000とすると、
補正移動指令値b3(0)(0)=1800
であるが、図13に示す具体例による図10(b)に示す状態からバッファb(0)で補正移動指令値b3(0)(0)が移動指令値P3 *に更新されるまでの平均移動指令値Psk(i)の変化をみると、次の通りである。
Ps2(9)*={10・P2 *+(10−10)・P1 *+R1(6)}/10
=1000
R2(7)=0
Ps2(10)*=Ps3(0)*
={b3(0)(0)+9・P2 *+R1(6)}/10=1080
R3(0)=0 ΔPs3(0)=80
受信移動指令値P3 *を受信:
Ps3(1)*={b3(0)(0)+1・P3 *+(10−2)・P2 *
+R3(0)}/10=1180
R3(0)=0 ΔPs3(1)=100
Ps3(2)*={b3(0)(0)+2・P3 *+(10−3)・P2 *
+R3(1)}/10=1280
R3(2)=0 ΔPs3(2)=100
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Ps3(7)*={b3(0)(0)+7・P3 *+(10−8)・P2 *
+R3(6)}/10=1780
R3(7)=0 ΔPs3(7)=100
Ps3(8)*={b3(0)(0)+8・P3 *+(10−9)・P2 *
+R3(7)}/10=1880
R3(8)=0 ΔPs3(8)=100
Ps3(9)*={b3(0)(0)+9・P3 *+(10−10)・P2 *
+R3(8)}/10=1980
R3(9)=0 ΔPs3(9)=100。
この平均移動指令値Ps3(9)*が生成される期間に規定の受信周期tchgで次の移動指令値P4 *が受信されることになり、バッファb(0)から順にこの移動指令値P4 *が格納されていくことになる。
これによると、バッファb(9)に格納される平均移動指令値Ps3(9)*は「1980」であって、移動指令値P3 *の「2000」よりも、この移動指令値P3 *と補正移動指令値b3(0)(0)との差に応じた値「20」だけ小さい値となっている。
このように、図13に示す具体例では、補正移動指令値b3(0)(0)が移動指令値P3 *と異なる場合には、正確な平均移動指令値Pskが得られないことになる。
これに対し、図14に示す具体例の場合には、
補正移動指令値b3(0)(0)=1800
b3(1)(0)=50, b3(2)(0)=100,
b3(3)(0)=150,b3(4)(0)=200
となるものであり、図10(b)に示す状態からバッファb(0)で補正移動指令値b3(0)(0)が移動指令値P3 *に更新されるまでの平均移動指令値Psk(i)の変化を見ると、次の通りである。
Ps2(9)*={10・P2 *+(10−10)・P1 *+R1(6)}/10
=1000
R2(7)=0
Ps2(10)*=Ps3(0)*
={b3(0)(0)+9・P2 *+R1(6)}/10=1080
R3(0)=0 ΔPs3(0)=80
受信移動指令値P3 *を受信:
Ps3(1)*={b3(1)(0)+1・P3 *+(10−2)・P2 *
+R3(0)}/10=1185
R3(0)=0 ΔPs3(1)=105
Ps3(2)*={b3(2)(0)+2・P3 *+(10−3)・P2 *
+R3(1)}/10=1290
R3(2)=0 ΔPs3(2)=105
Ps3(3)*={b3(3)(0)+3・P3 *+(10−4)・P2 *
+R3(6)}/10=1395
R3(7)=0 ΔPs3(7)=105
Ps3(4)*={b3(4)(0)+4・P3 *+(10−5)・P2 *
+R3(6)}/10=1500
R3(7)=0 ΔPs3(7)=105
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Ps3(7)*={b3(4)(0)+7・P3 *+(10−8)・P2 *
+R3(6)}/10=1800
R3(7)=0 ΔPs3(7)=100
Ps3(8)*={b3(4)(0)+8・P3 *+(10−9)・P2 *
+R3(7)}/10=1900
R3(8)=0 ΔPs3(8)=100
Ps3(9)*={b3(4)(0)+9・P3 *+(10−10)・P2 *
+R3(8)}/10=2000
R3(9)=0 ΔPs3(9)=100。
この平均移動指令値Ps3(9)*を生成する期間に、規定の受信周期tchgで次の移動指令値P4 *が受信される。
これによると、平均移動指令値Ps3(8)*と平均移動指令値Ps3(9)*との間の変化量ΔPs3(9)は、正常値の「100」であり、局所的な変動は現れないし、移動指令値P3 *が最後のバッファb(9)に格納されたことによって生成される平均移動指令値Ps3(9)*は、移動指令値P3 *に等しい正しい値となっている。
図15は図1における指令値補間演算部21の第3の具体例を示すブロック構成図であって、図2,図7及び図12に対応する部分には同一符号をつけて重複する説明を省略する。
同図において、この第3の具体例は、図2に示す基本構成に図7における不足バッファ補正処理部216と図12における超過バッファ補正処理部217とを備えた構成をなすものである。不足バッファ補正処理部216は、先に説明したように、移動指令値Pk *の受信周期が規定の受信周期tchgよりも短くなったときに、図8で説明した補正処理により、移動平均処理用バッファ212のバッファb(m)に格納されている移動指令値Pk(m)*の補正処理を行うものである。超過バッファ補正処理部217は、先に説明したように、移動指令値Pk *の受信周期が規定の受信周期tchgよりも長くなったときに、移動平均処理用バッファ212のバッファb(0)に格納されている移動指令値Pk(0)*の補正処理を行うものであり、図13もしくは図14に示す構成をなしている。
ここで、この具体例では、不足バッファ補正処理部216と超過バッファ補正処理部217とが用いられるものであるから、移動平均処理用バッファ212でのバッファb(0)〜b(m)を指定するカウンタとして、リングカウンタとリセットカウンタとが用いられる。
これにより、この具体例では、移動指令値Pk *の受信周期tchgが短くなったときも、また、移動指令値Pk *の受信周期tchgが長くなったときも、移動平均処理用バッファ212に格納されている移動指令値Pk *を補正することができ、電動機3(図1)を制御するための平均移動指令値Psk *の変化量ΔPs3の局所的な変動を抑制することができる。
図16は図15に示す指令値補間演算部21での移動平均処理用バッファ212におけるバッファb(0)〜b(m)の指定手段の一具体例を示すブロック構成図であって、231はリセットカウンタ、232はリングカウンタ、233は比較部、234はANDゲート、235はカウント値判定部、236は切替スイッチであり、図15に対応する部分には同一符号をつけて重複する説明を省略する。
また、図17は図16に示す具体例の動作を示すタイムチャートである。なお、同図(a)は移動指令値Pk *が規定の受信周期tchgで受信されるときの、同図(b)は移動指令値Pk *が規定の受信周期tchgよりも1サーボ処理周期tschg程度短い周期で受信されたときの、同図(c)は移動指令値Pk *が規定の受信周期tchgよりも1サーボ処理周期tschg程度長い周期で受信されたときの夫々、移動指令値Pk *の受信とリセットカウンタ231の出力カウント値NC1とリングカウンタ232の出力カウント値NC2とのタイミング関係を示すものである。
図16において、図15での移動平均処理用バッファ212におけるバッファb(0)〜b(m)を指定する手段として、リセットカウンタ231とリングカウンタ232とが用いられ、これらの出力カウント値NC1,NC2が、バッファb(0)〜b(m)の指定値として、切替スイッチ236で選択される。通常、リングカウンタ232の出力カウント値NC2が、バッファb(0)〜b(m)の指定値として、切替スイッチ236で選択される。
即ち、図17(a)は移動指令値Pk *が規定の受信周期tchgで受信される状態を示すものであるが、この場合には、切替スイッチ236はB端子側に閉じ、リングカウンタ232の出力カウントNC2をバッファb(0)〜b(m)の指定値として選択する。
また、図17(b)は移動指令値Pk *が規定の受信周期tchgよりも1サーボ処理周期tschg程度短い周期で受信される状態を示すものであるが、この場合には、切替スイッチ236はA端子側に閉じ、リセットカウンタ231の出力カウントNC1をバッファb(0)〜b(m)の指定値として選択する。
さらに、図17(c)は移動指令値Pk *が規定の受信周期tchgよりも1サーボ処理周期tschg程度長い周期で受信される状態を示すものであるが、この場合には、切替スイッチ236はB端子側に閉じ、リングカウンタ232の出力カウントNC2をバッファb(0)〜b(m)の指定値として選択する。
移動指令値Pk *が受信される毎に、これに同期してリセットパルスPR *が生成され、このリセットパルスPR *によってリセットカウンタ231がリセットされる。このリセットカウンタ231とリングカウンタ232とは、このリセットパルスPR *の(m+1)倍の周波数のクロックをカウントするものであって、移動指令値Pk *が規定の受信周期tchgで受信されるときには、リセットカウンタ231はカウント値NC1がmになると、このリセットパルスPR *によって0にリセットされるから、0〜mの値を繰り返しカウントすることになる。また、リングカウンタ232も、リセットパルスPR *によってリセットされないが、0〜mの値を繰り返しカウントする。
但し、リングカウンタ232は、移動指令値Pk *が規定の受信周期tchgで受信されるときには、そのカウント値NC2がリセットカウンタ231のカウント値NC1と等しくなるように、移動指令値Pk *の受信開始時、リセットパルスPR *によって0にクリアされる。即ち、リセットカウンタ231のカウント値NC1は比較部233に供給され、値m+2と比較される。リングカウンタ232が、移動指令値Pk *が受信される毎に、リセットパルスPR *によってリセットされるときには、リセットカウンタ231のカウント値NC1は値m+1を越えることがなく、このカウント値NC1がm+2以上となると、移動指令値Pk *が受信されなくなってリングカウンタ232がリセットされなくなったことを意味することになる。そのときには、比較部233から“H”(ハイレベル)の信号が出力され、ANDゲート234に供給される。即ち、ANDゲート234への比較部233からの入力は、移動指令値Pk *が受信されなくなると、ON状態に保持されることになる。その後、移動指令値Pk *の受信が始まると、その最初のリセットパルスPR *がON状態にあるANDゲート234を通過し、クリアパルスとしてリングカウンタ232に供給される。これにより、リングカウンタ232はそのカウント値NC2が0にクリアされ、そこからカウントを始めることになる。これとともに、リセットカウンタ231もこの最初のリセットパルスPR *によってリセットされ、そこからカウントを始めることになる。これにより、比較部233は、リセットカウンタ231のカウント値NC1が値m+1以下となるので、その出力信号が“L”(ローレベル)となり、ANDゲート234はOFF状態となる。従って、その後の移動指令値Pk *の順次の受信によって生成されるリセットパルスPR *はリングカウンタ232に供給されず、リングカウンタ232は0〜mの値を繰り返しカウントすることになる。
このようにして、移動指令値Pk *が規定の受信周期tchgで受信されている限り、リセットカウンタ231とリングカウンタ232とから同時に出力されるカウント値NC1,NC2は等しい値となる。
移動指令値Pk *の受信周期tchgの変動の有無は、カウント値判定部235により、リセットパルスPR *のタイミングでのリングカウンタ232のカウント値NC2をもとに判定される。
即ち、移動指令値Pk *の受信周期の変動量は、高々1サーボ処理周期tschg程度であるが、かかる変動がなく、移動指令値Pk *が規定の受信周期tchgで受信されるときには、図17(a)に示すように、移動指令値Pk *の受信タイミング、即ち、リセットパルスPR *のタイミングはリングカウンタ232のカウント値NC2がmのときである。そこで、カウント値判定部235は、リセットパルスPR *のタイミングでのリングカウンタ232のカウント値NC2がmのとき、移動指令値Pk *が規定の受信周期tchgで受信されているものと判定し、切替スイッチ236をB端子側に閉じて、リングカウンタ232のカウント値NC2をバッファb(0)〜b(m)の指定値として選択する。これにより、図17(a)に示すように、リングカウンタ232の出力カウント値NC2により、移動平均処理用バッファ212(図15)において、バッファb(i)がb(0),b(1),b(2),……,b(m)の順に繰り返し指定されることになる。なお、この場合、不足バッファ補正処理部216も、また、超過バッファ補正処理部217も動作させない。
また、移動指令値Pk *の受信周期が規定の受信周期tchgよりも1サーボ処理周期tschg程度短くなったものとすると、図17(b)に示すように、このときの移動指令値Pk *の受信タイミング、即ち、リセットパルスPR *のタイミングはリングカウンタ232のカウント値NC2がm−1のときである。そこで、カウント値判定部235は、リセットパルスPR *のタイミングでのリングカウンタ232のカウント値NC2がm−1のとき、移動指令値Pk *が規定の受信周期tchgよりも1サーボ処理周期tschg程度短い周期で受信されているものと判定し、切替スイッチ236をA端子側に閉じて、リセットカウンタ231のカウント値NC1をバッファb(0)〜b(m)の指定値として選択する。これにより、図17(b)に示すように、これまでリングカウンタ232のカウント値NC2で移動平均処理用バッファ212(図15)のバッファb(i)が指定されていたのが、このカウント値NC2が値m−1のとき、例えば、移動指令値P3 *が規定の受信周期tchgよりも1サーボ処理周期tschg程度短い周期で受信されると、リセットカウンタ231の値0からのカウント値NC1により、移動平均処理用バッファ212(図15)のバッファb(i)がb(0),b(1),b(2),……の順で指定されることになる。なお、次の移動指令値P4 *が規定の受信周期tchgで受信された場合には、図17(b)に示すように、リングカウンタ232のカウント値NC2が値mのときに移動指令値P4 *が受信されることになるので、切替スイッチ236がB端子に切り替わり、リングカウンタ232のカウント値NC2が移動平均処理用バッファ212(図15)のバッファb(i)を指定するようにする。また、この場合、不足バッファ補正処理部216を動作させ、先の図7,図8で示した実施形態と同様にして、移動指令値P3 *の受信によって指定されなかった移動平均処理用バッファ212での最後のバッファb(m)に格納されている移動指令値Pk *の補正処理を行う。
また、図17(c)に示すように、移動指令値Pk *の受信周期が規定の受信周期tchgよりも1サーボ処理周期tschg程度長くなったものとすると、このときの移動指令値Pk *の受信タイミング、即ち、リセットパルスPR *のタイミングはリングカウンタ232のカウント値NC2が0のときである。そこで、カウント値判定部235は、リセットパルスPR *のタイミングでのリングカウンタ232のカウント値NC2が0のとき、移動指令値Pk *が規定の受信周期tchgよりも1サーボ処理周期tschg程度長い周期で受信されているものと判定し、切替スイッチ236をB端子側に閉じた状態として、リングカウンタ232のカウント値NC2をバッファb(0)〜b(m)の指定値として選択する。この場合、超過バッファ補正処理部217を動作させ、先の図12〜図14で示した実施形態と同様にして、移動平均処理用バッファ212での最初のバッファb(0)に格納されている移動指令値Pk *の補正処理を行う。