이하, 본 발명의 예시적인 실시 예에 대해서, 도면을 참조하면서 설명한다.
본 실시 예의 검출장치는, 피검출물의 위치를 나타내는 코사인 함수 및 사인 함수로 근사되는 2개의 신호에 포함된 오차 성분을 검출하는 검출장치이다. 본 실 시 예의 검출장치는, 각 위치신호에 포함된 고차 성분에 기인하는 검출 오차를 억제한다.
본 실시 예는, 복잡한 신호 처리를 포함하기 때문에, 디지털 연산기를 이용해서 구성되는 것이 바람직하다. 이 때문에, 아날로그 신호로서 출력된 위치 신호는, 우선, A/D 변환기에 의해 디지털 신호로 변환된다. A/D 변환기의 비트폭은, 요구되는 분해능에 따라 선택될 수 있지만, 일반적으로는 8~18비트의 폭을 갖는 A/D 변환기가 사용된다.
본 실시 예에 있어서는, 검출기의 위상 θ이 0~2π 사이에서 변화하는 동안에, 다수의 검출값이 필요하다. 이 때문에, A/D 변환기의 변환 속도(즉, 샘플링 주파수)는, 검출값들의 대부분을 검출하는 데에 있어서 충분히 고속인 것이 바람직하다. 일반적으로, 피검출물이 저속으로 이동하고 있는 동안에 고정밀한 검출이 요구된다. 이 때문에, A/D 변환이 이동속도를 추종할 수 없는 동안에는 오차의 보정을 중지해도 실용상은 문제가 없다.
그렇지만, 통상은, 보다 넓은 범위에서 오차 보정을 행하는 것이 바람직하다. 이 때문에, 본 실시 예의 검출장치에 이용되는 A/D 변환기로서는, 예를 들면, 축차 비교형(successive-approximation) A/D 변환기 등의 고속 A/D 변환기가 사용된다. 또, 본 실시 예에 있어서, A/D 변환 주파수는 100kHz 이상으로 설정되는 것이 바람직하지만, 이것에 한정되는 것은 아니다.
A/D 변환기로부터 출력되는 디지털 신호는, MPU(micro processing unit)나 DSP(digital signal processor)를 이용해 처리될 수 있다. 다만, 본 실시 예와 같 은 고속 처리는, 게이트 어레이를 이용한 파이프라인 처리에 의해 실행되는 것이 현실적이다.
최근에는, 각종 프로그램 재기록가능한(programmably rewritable) FPGA(Field Programmable Gate Arrays)도 취득 가능하다. FPGA를 이용하면, 작은 로트(lot)의 생산의 경우에도, 게이트 어레이를 이용한 고속의 파이프라인 디지털 신호 프로세서를 구성하는 것이 가능하다.
신호 처리 전에, 디지털화된 위치 신호에 포함되는 오차 성분을 제거한다. 이것은, 푸리에 계수를 이용한 각도의 보정이 근사적이어서, 대량의 오차를 포함하는 경우, 고정밀하게 오차를 보정하는 것이 곤란하기 때문이다. 이 오차의 제거는, 예를 들면 식(3) 및 (4)을 산출하기 위한 논리 회로를 구성하는 것에 의해 행해진다.
A*=A/G-ZA-gcosθ-hsinθ … (3)
B*=B/G-ZB + gsinθ-hcosθ … (4)
여기서, G, ZA, ZB, g 및 h(오차 예상값)의 초기값으로서는, 적당한 값을 이용할 수가 있다. 적당한 값이 알려져 있지 않은 경우에는, 이러한 초기값을 0으로 설정할 수가 있다. 이러한 초기값은, 후술하는 1차 및 2차의 푸리에 계수를 이용해서 보정(갱신)될 수 있다.
위상 θ은, 이전에 얻은 위상 θ에 대한 위상 θ의 시간 회귀 계수의 경사를 이용해서 다음의 샘플링 시각에 있어서의 위상 θ의 값을 예상함으로써 주어질 수 있다. 사인 함수와 코사인 함수는, ROM를 이용한 테이블 룩업(table lookup)에 의해 실현된다.
그 다음에, 위상 θ은, (상기의 식(3) 및 (4)로부터) A*와 B*를 이용해서 아크탄젠트 연산을 행함으로써 취득된다. 아크탄젠트 연산에서는, 0~2π의 범위에 걸쳐서 값을 얻을 필요가 있다.
이러한 알고리즘은, 예를 들면 C언어에 있어서의 ATAN2 함수 등의 함수로서 널리 알려져 있다. 그 알고리즘의 개요는 다음과 같다. 우선, 각각의 부호와 대소 관계를 기억하고, 쌍방을 절대값으로 변환한 후에, 작은 신호를 큰 신호로 분할한다. 이 분할 결과를 인덱스로서 처리하고, 0~π/4의 범위에서 아크탄젠트 테이블을 이용해서 이들 간의 각도를 얻는다. 먼저 기억된 부호와 대소 관계에 근거해서, 0~2π의 범위로 확장하는 알고리즘을 구성할 수가 있다.
A* 및 B*는, 푸리에 변환을 FFT 알고리즘으로 실행하기 때문에, 신호의 1주기를 2M(M≥3)으로 균등하게 분할하는 점(point)에서 샘플링함으로써 산출되는 것이 바람직하다. A/D 변환기의 속도가 위치 신호의 변동 주기보다 충분히 고속이면, 이상적인 점에 가장 가까운 점의 신호값을 이용하는 것이 가능하다. 그러나, 본 실시 예에 있어서, 노이즈를 확실히 억제하기 위해서는, 이하의 방법을 실행하는 것이 바람직하다.
오차를 보정하기 위해서 사용되는 각도 θ을 취득하기 위한 회귀 연산은, 이전의 다수(즉, 한 묶음)의 값을 보유해서 실행하는 것이 가능하다. 그러나, 회귀 연산을 용이하게 실행하기 위해서는, 칼만(Kalman) 필터를 이용하는 것이 바람직하다. 칼만 필터에 의한 방법은 공지되어 있지만, 그 알고리즘에 대해서는 이하에 간단히 설명한다.
독립변수 θ, A* 및 B*를 x로서 나타낸다. 이러한 값은, 제한없이 증가 또는 감소할 가능성이 있기 때문에, 이러한 값을 그대로 사용하면, 이러한 값을 유지하기 위해 필요한 레지스터의 폭이 거대하게 된다. 따라서, 이러한 값을 최신의 값 x0에 대한 차로서 취급하는 것이 바람직하다.
이 시각은, 현재의 시각을 제로로 하는 조건으로, 이전의 샘플링 인터벌마다, 한 개씩 증가하는 값으로서 표현하는 것이 바람직하다. 이러한 표현 방법을 채용했을 때의 회귀식은, 이하의 식(5)으로 주어지고, 여기서, c 및 b는 회귀 계수이다.
p(x-x0) = c+bkp … (5)
여기서, p는 2-N(N:자연수)이며, 회귀에 사용되는 샘플의 크기에 대응한다. 샘플수가 너무 큰 경우, 회귀에 의해 취득되는 직선으로부터 값이 크게 달라서, 회귀 오차가 커진다. 이러한 현상은, 고속으로 이동했을 때에 생긴다. 회귀 연산은, 개개의 값에 포함되는 노이즈를 억제하는 효과가 있다. 그러나, p의 값이 크고 샘플수가 적은 경우에는, 이 효과가 충분히 발휘될 수 없다. p의 값이 서로 다른 복수의 칼만 필터를 준비하고, 이동 속도에 따라 사용하는 회귀 계수를 전환하는 장치를 구성하면, 항상 최적의 샘플 사이즈로 연산을 실행할 수가 있다.
회귀 계수는, 새로운 데이터를 얻을 때마다, 이하의 식(6)~(10)를 이용해서 반복 연산함으로써 취득된다.
q=f'x-pΔx … (6)
b=V'x,k+pq … (7)
Vx,k=(1-p)b … (8)
fx=(1-p)q … (9)
c=fx-Vx,k … (10)
여기서, q는 작업용의 신호선 또는 작업용의 레지스터이며, fx 및 Vx,k는 장치 내부에 유지된 필터값이며, 대시(')를 부착한 각 필터값은 이전에 산출된 결과인 필터값이다.
식(6)~(10)를 이용한 연산에 의해 b 및 c의 값이 취득되면, 상기의 회귀식에 이러한 계수를 적용시키는 것으로, 임의의 시각에 있어서의 위상 θ, A 및 B의 값을 산출할 수 있다. 또, 위상 θ이 특정의 값을 나타낼 때 시각 k도 산출할 수 있다(이 경우의 k는, 분수값(fractional value)을 포함한다).
본 실시 예에서는, 위상 θ의 0~2π의 범위를 2M(M≥3)으로 균등하게 분할하는 점에 있어서의 A* 및 B*의 각각의 값이 되는 Aj* 및 Bj*가 기억된다. 이 경우, 이전에 기억된 값을 완전하게 재기록하는 것도 가능하지만, 다음의 식(11) 및 (12) 를 이용한 연산에 의해, 그 일부만 변경하는 것도 가능하다. 이러한 처리를 실행함으로써, 노이즈의 영향을 억제한 검출장치를 제공할 수가 있다.
Aj* = Aj'+r(Aj-Aj') … (11)
Bj* =Bj'+r(Bj-Bj') … (12)
본 실시 예에 있어서, 이동 속도에 따라 p의 값을 전환하는 검출장치의 구성을 채용했을 경우, p의 값의 전환과 동기해서 r의 값을 변경하는 것이 바람직하다. 즉, 이동 속도가 느리고, 큰 샘플 사이즈가 선택되는 경우, Aj 및 Bj에 포함되는 노이즈가 충분히 억제될 것으로 기대되기 때문에, r의 값을 큰 값으로 설정하는 것이 가능하다. 따라서, 오차의 변동에 대한 추종성을 개선할 수가 있다.
본 실시 예에 있어서, 위상 θ은, 0~2π의 범위에서 축적되어야만 한다. 그러나, 2회 반사형 레이저 간섭계의 신호에서 보여지는 바와 같이, 신호의 2주기마다 1주기의 오차 성분이 포함되는 경우에는, 위상 θ을 0~4π의 범위에서 축적하는 것이 바람직하다. 이와 같이 함으로써, 통상의 고차 성분 이외에, 1/2 주기의 오차 성분을 분리해서 관측할 수가 있고, 또 이 오차 성분에 대해서도 상기와 같은 알고리즘으로 보정하는 것이 가능하다.
상기 방법에 의해 기억된 Aj 및 Bj에 대해서 FFT(Fast Fourier Transform) 연산을 행하는 것으로, 다음의 식(13) 및 (14)에 있어서의 A* 및 B*를 나타내기 위한 푸리에 계수αk,βk,γk,δk의 조합을 얻을 수 있다.
A* = α0+α1cosθ+β1sinθ+α2cos2θ+β2sin2θ+ … +αkcoskθ+βksinkθ … (13)
B* = γ0+γ1cosθ+δ1sinθ+γ2cos2θ+δ2sin2θ+ … +γkcoskθ+δksinkθ … (14)
이것에 의해, A* 및 B*에 포함되는 오차를 다음의 식(15) 및 (16)으로 보정하는 것이 가능하다.
A^ = (A*-α0-β1'sinθ-α2cos2θ-β2sin2θ- … -αkcoskθ-βksinkθ)/α1 … (15)
B^ = (B*-γ0-γ1'sinθ-γ2cos2θ-δ2sin2θ- … -γkcoskθ-δksinkθ)/δ1 … (16)
여기서, β1'=γ1'=(β1+γ1)/2이 충족된다. 이것은, β1'- γ1'이 제로가 아닌 경우, A^및 B^로부터 연산되는 위상이 변화해 버리기 때문이다.
입력단에서의 오차 보정에 이용되는 계수 G, g, ZA, ZB, h(오차 예상값)는, 상기 계수를 이용해서 다음의 식(17)~(21)와 같이 보정(갱신)된다.
G=G+w(α1+δ1) … (17)
g=g+w(α1-δ1) … (18)
ZA=ZA+wα0 … (19)
ZB=ZB+wγ0 … (20)
h=h+w(β1+γ1)/2 … (21)
여기서, w는 완화 계수이며, 0~1의 범위에 있어서의 소정의 정수이다. 완화 계수 w의 값을 크게 하면, 입력단에서의 오차 보정 계수의 적정화가 신속하게 실행된다. 다만, 이 경우에는, 노이즈 등의 영향을 받기 쉬워진다. 신호 왜곡은 후단에서도 보정될 수 있기 때문에, 입력단에서의 오차 보정은 완전히 행해질 필요가 없다. 이 때문에, 본 실시 예에 있어서, 완화 계수 w의 값은 0.01~0.1의 범위로 설정하는 것이 바람직하다.
다음에, 본 실시 예의 검출장치에 있어서의 검출 오차의 보정방법에 대해서 설명한다. 도 1은, 본 실시 예에 있어서의 검출장치의 검출 블럭도이다.
도 1에 있어서, 참조번호 20은 피검출물의 위치를 검출해서 2개의 위치 신호 A, B를 출력하는 검출부이다. 검출부(20)는 예를 들면 인코더이며, 위상이 서로 90도 다른 2상(相)의 위치 신호를 출력한다. 2상의 위치 신호 A, B는, 이상적으로는, 각각 Gcosθ 및 Gsinθ(G:진폭, θ:위상)로 표현된다.
검출부(20)로부터 출력된 위치 신호 A 및 B는 아날로그 신호이며, 각각, A/D 변환기 1 및 2에 입력된다. A/D 변환기 1 및 2는, 아날로그 신호인 위치 신호 A 및 B를 디지털 신호로 변환해서 출력한다.
이러한 디지털 신호는, 각각, 연산기 3, 4(연산부)에 입력된다. 연산기 3, 4 는, 오차 예상값을 결정하고, 오차 예상값에 근거해서 이러한 디지털 신호에 포함되는 오차 성분을 제거해서, 출력 신호 A* 및 B*(2개의 오차 보정 신호)를 생성한다.
연산기 3으로부터 출력된 신호 A*(오차 보정 신호)는, 또한 제1의 아크탄젠트 연산기(5) 및 회귀 연산기(7)에 입력된다. 또, 연산기 4로부터 출력된 신호 B*(오차 보정 신호)는, (위상 연산부인) 제1의 아크탄젠트 연산기(5) 및 회귀 연산기(8)에 입력된다.
제1의 아크탄젠트 연산기(5)(위상 연산부)는, 연산기 3, 4로부터 입력된 신호 A*, B*(2개의 오차 보정 신호)에 근거해서, 피검출물의 위치를 나타내는 위상θ을 산출해서 출력한다. 제1의 아크탄젠트 연산기(5)로부터 출력된 위상 θ은, 회귀 연산기(6)에 입력된다.
회귀 연산기(6)는, 위상θ의 회귀 계수를 산출하는 1차 회귀 연산기이다. 또, 회귀 연산기 7, 8은, 신호 A*, B*의 회귀 계수를 산출하는 2차 회귀 연산기이다. 회귀 연산기 6, 7로 산출된 신호 A* 및 위상θ의 회귀 계수는, 연산 기억장치 9(기억부)에 입력된다. 또, 회귀 연산기 6, 8에 의해 산출된 신호 B* 및 위상θ의 회귀 계수는, 연산 기억장치 10(기억부)에 입력된다.
연산 기억장치 9는, 위상 jπ/8(0≤j≤15)에 있어서의 신호 A* 및 위상 θ의 값을 샘플링해서, 샘플링에 의해 취득된 복수의 샘플링값의 조합을 기억한다. 마찬가지로, 연산 기억장치 10은, 위상 jπ/8(0≤j≤15)에 있어서의 신호 B* 및 위상 θ의 값을 샘플링해서, 샘플링에 의해 취득된 복수의 샘플링값의 조합을 기억한 다.
본 실시 예에 있어서, j는 0~15의 범위로 설정되어 있지만, 본 실시 예는 이것에 한정되는 것은 아니다. 요구되는 정밀도에 따라, j의 최대값을 15미만의 값으로 설정하거나, 16이상의 값으로 설정해도 된다. 본 실시 예에서는, 후술한 것과 같이 푸리에 변환을 실시하지만, 이 경우, 2π를 2M(M≥3)으로 균등하게 분할하는 위상에서 샘플링을 행하는 것이 바람직하다. 연산 기억장치 9, 10은, 소정의 위상에 있어서의 샘플링된 신호 Aj*, Bj*를, 각각, FFT 연산기 11, 12(푸리에 변환부)에 출력한다.
FFT 연산기 11은, 연산 기억장치 9로부터 입력된 신호 Aj*(샘플링값)를 이용해서 푸리에 변환을 행함으로써, 상기의 식(13)에 있어서의 각 차수의 각 항(코사인 및 사인의 항)의 계수αk 및 βk를 산출한다. 마찬가지로, FFT 연산기 12는, 연산 기억장치 10으로부터 입력된 신호 Bj*(샘플링값)를 이용해서 푸리에 변환을 행함으로써, 상기의 식(14)에 있어서의 각 차수의 각 항(코사인 및 사인의 항)의 계수 γk 및 δk를 산출한다.
이와 같이, FFT 연산기 11, 12는, 연산 기억장치 9, 10에 의해 샘플링된 복수의 샘플링값을 이용해서, 식(13) 및 (14)로 나타낸 2개의 식을 얻도록 푸리에 변환을 행해서, 2개의 식에 있어서의 각 항의 계수αk,βk,γk,δk를 얻는다. A*(및 b*)에 대한 복수의 값을 취득하는 것은, FFT 연산기 11(12)의 출력으로부터 연산기 3(4)의 입력으로 되돌아가는 도 1의 화살표로 나타나 있다.
FFT 연산기 11로 산출된 계수는, 보정 연산기 13(보정부)에 입력된다. 또, 보정 연산기 13에는, (도 1의 화살표로 나타낸 바와 같이) 연산기 3의 출력 신호인 신호 A*가 입력된다. 보정 연산기 13은, FFT 연산기 11에 의해 산출된 각 항의 계수를 이용해서, 신호 A*에 포함되는 오차를 작게 하도록 신호 A*를 보정해서, 보정된 신호 A^를 출력한다.
마찬가지로, FFT 연산기 12에 의해 산출된 계수는, 보정 연산기 14(보정부)에 입력된다. 또, 보정 연산기 14에는, 연산기 4의 출력 신호인 신호 B*가 입력된다. 보정 연산기 14는, FFT 연산기 12에 의해 산출된 각 항의 계수를 이용해서, 신호 B*에 포함되는 오차를 작게 하도록 신호 B*를 보정해서, 보정된 신호 B^를 출력한다.
이와 같이, 보정 연산기 13, 14는, 계수 αk,βk,γk,δk를 이용해서, 2개의 신호 A*, B*를 각각 보정한다.
FFT 연산기 11, 12에 의해 산출된 각 차수의 코사인 및 사인의 항의 계수는, 각 신호 Aj*, Bj*에 포함되는 오차의 양에 대응하고 있다. 이 때문에, 본 실시 예의 검출장치는, 이러한 계수를 연산기 3, 4의 각각으로 피드백해서, 이들 계수를 이용하여 연산기 3, 4에 보존되어 있는 오차 예상값을 갱신함으로써 이들 계수를 줄이도록 제어한다. 보정 계수 αk,βk,γk,δk의 피드백 및 반복 향상(feedback and iterative improvement)은 FFT 연산기 11 및 12의 출력으로부터 연산기 3 및 4의 입력으로 되돌아가는 화살표로 도 1에 나타나 있다.
보정 연산기 13 및 14에 의해 보정된 신호 A^ 및 B^는, 제2의 아크탄젠트 연산기 15에 입력되고, 제2의 아크탄젠트 연산기 15에 의해, 위상 θ*이 산출된다. 제2의 아크탄젠트 연산기 15에 의해 산출된 위상 θ*은, 검출 오차가 보정되어 있는 위상이며, 본 실시 예의 검출장치는, 이 보정된 값을 측정값으로서 처리해서 피검출물의 위치 검출을 행한다.
본 실시 예의 검출장치는, 위치 또는 각도를 검출할 때, 위치 신호에 포함되는 각종 오차 성분을 효율적으로 예측해서, 이 오차 성분을 보정할 수가 있다. 이 때문에, 위치 또는 각도의 검출 및 제어의 폭넓은 공업 분야에서 이용 가능하다.
상술한 바와 같이, 본 실시 예에 의하면, 고차 성분에 의한 검출 오차를 보정하기 때문에, 고정밀한 검출장치를 제공할 수가 있다.
또, 본 실시 예에 의하면, 코사인 함수 및 사인 함수에 의해 근사되는 2개의 위치 신호에 포함되는 신호의 왜곡을 자동적으로 검출하여, 이 왜곡에 의한 위치 또는 각도에 포함되는 오차를 추정하는 것이 가능하다. 이 때문에, 이 추정 오차를 공제하는 것으로, 위치 또는 각도를 높은 정밀도로 검출할 수가 있다.
본 실시 예에서 이용되는 알고리즘은 푸리에 변환이며, 차수를 선택함으로써, 산업계의 폭넓은 목적에 최적인 장치를 구성할 수가 있다. 즉, 고차의 항까지 사용함으로써 높은 정밀도를 얻을 수 있는 한편, 정밀도가 그다지 요구되지 않는 경우에는 저차의 항만을 사용하는 것으로 간소한 장치를 구성하는 것도 가능하다.
이상, 본 발명을 예시적인 실시 예를 참조하면서 설명했지만, 본 발명은 상 기 예시적인 실시 예에 한정되는 것은 아니다. 이하의 특허청구범위는 모든 변형과 균등 구조 및 기능을 포함하도록 가장 넓게 해석될 것이다.
예를 들면, 본 실시 예에서는, 2개의 신호 A* 및 B*를 보정하는 보정 연산기 13, 14를 이용하고 있지만, 이것에 한정되는 것은 아니다. 이것을 대신해서, 위상θ을 보정하는 보정 연산기를 이용할 수도 있다. 이 경우, 제1의 아크탄젠트 연산기 5로부터 출력되는 위상 θ, 및 FFT 연산기 11, 12로부터 출력되는 각 계수를 입력하는 다른 보정 연산기가 이용된다. 이 보정 연산기로부터 출력되는 보정된 위상 θ*을 이용해서 피검출물을 검출할 수 있다.