cmmSxSetCorrection


SYNOPSYS

VT_I4 cmmSxSetCorrection(
    [in] VT_I4 Axis, [in] VT_I4 CorrMode, [in] VT_R8 CorrAmount, [in] VT_R8 CorrVel, [in] VT_I4 CntrMask
    )

DESCRIPTION

  • cmmSxSetCorrection() 함수는 백래쉬(Backlash) 또는 슬립(Slip)에 대한 보정을 설정하는 함수입니다. 구조적으로 백래쉬나 슬립 현상이 심하게 일어나는 경우에는 이에 대한 보정이 필요할 수 있습니다. 백래쉬는 일반적으로 모터의 구동 방향이 바뀔 때 발생됩니다. 따라서 ㈜커미조아 모션컨트롤러의 백래쉬 보정은 모터의 제어 방향이 바뀔때에만 적용됩니다. 백래쉬 보정을 활성화하면 모션컨트롤러에서 지령되는 이동 명령의 이동 방향이 이전의 이동 방향과 다른 경우에 자동적으로 백래쉬 보정 설정에 따라 보정 펄스가 출력된 후에 지정된 이동을 수행합니다. 이 설정은 단축구동뿐 아니라, 다축구동, 보간구동에서도 적용됩니다. 슬립은 일반적으로 정지 후 재기동시에 발생합니다. 따라서 슬립보정은 이동방향에 상관없이 기동시에 보정 펄스가 출력됩니다. 슬립보정을 활성화한 후에 이동명령이 하달되면 모션컨트롤러는 슬립 보정 설정에 따라 보정 펄스가 출력된 후에 지정된 이동을 수행합니다.

PARAMETER

  • Axis: 축번호. 축번호는 상수값으로 [cmX1] 부터 0 번째 축을 기준 축으로 임의의 축을 설정할 수 있습니다.

  • CorrMode : cmmSxSetCorrection 함수의 인자이며, 보정 모드의 설정값은 다음과 같습니다.

BIT No.

Meaning

0 (cmCORR_DIS)

보정기능을 비활성화합니다.

1 (cmCORR_BACK)

보정모드를 백래쉬 보정모드로 설정합니다.

2 (cmCORR_SLIP)

보정모드를 슬립 보정모드로 설정합니다.

  • CorrAmount : cmmSxSetCorrection 함수의 인자이며, 보정 펄스의 수를 결정합니다. 단, 이 값은 논리적 거리 단위로 설정해야 합니다. 따라서 “Unit distance”(Du)를 1 이 아닌 값으로 설정한 경우에 실제 출력되는 보정 펄스수(Nc)는 다음과 같습니다.

    Nc = CorrAmount * Du

    그리고 보정펄스의 수(Nc)는 0 ~ 4095 의 값이어야 합니다.

  • CorrVel : cmmSxSetCorrection 함수의 인자이며, 보정펄스의 출력 주파수를 결정합니다. 단, 이 값은 논리적 속도 단위로 설정해야 합니다. 따라서 “Unit speed”(Vu)를 1 이 아닌 값으로 설정한 경우에 실제 출력 주파수(Fc)는 다음과 같습니다.

    Fc (PPS) = CorrVel * Vu

    그리고, 하드웨어적으로 보정펄스 출력 주파수를 설정하는 레지스터는 원점복귀시의 Reverse Velocity (Vr)과 같은 레지스터를 사용합니다. 따라서 원점복귀시의 Vr 이 보정펄스 출력시의 속도와 다른 경우에는 원점복귀를 수행한 후에 이 함수를 다시 수행해주어야 합니다.

  • CntrMask : : cmmSxSetCorrection 함수의 인자이며, 보정펄스가 출력되는 동안에 각 카운터의 동작여부를 아래의 표와 같이 각 비트별로 설정하여 결정합니다. 예를 들어 이 값의 BIT0 을 1 로 하면 보정펄스가 출력되는 동안에도 Command Counter 의 값은 증가 또는 감소합니다. 그리고 BIT0 을 0 으로 하면 보정펄스가 출력되는 동안에는 Command Counter 의 값이 변화하지 않습니다.

Value

Meaning

BIT0

1: 보정펄스 출력시에 Command Counter 가 동작합니다.

BIT1

1: 보정펄스 출력시에 FeedBack Counter 가 동작합니다.

BIT2

1: 보정펄스 출력시에 Deviation Counter 가 동작합니다.

BIT3

1: 보정펄스 출력시에 General Counter 가 동작합니다.

RETURN VALUE

Value

Meaning

음수

수행 실패

cmERR_NONE

수행 성공

EXAMPLE 1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
C/C++

다음의 예제는 백래쉬 보정을 적용할 때의 동작에 대한 설명입니다. 본 예에서는 “Unit distance”와 “Unit speed”가
각각 1 로 설정되었음을 가정합니다.

   // 백래쉬보정 모드로 설정 (보정펄스수:1000, 보정펄스출력속도:1000 PPS) //
   cmmSxSetCorrection (cmX1, cmCORR_BACK, 1000, 1000, 0x0);

   ////////////////////////////////////////////////////////////////
   // 이전에 (-)방향 이동을 수행하였다면 아래에서 백래쉬 보정을 수행합니다.
   // 1000 PPS 의 속도로 (+)1000 펄스를 출력한 후에 지정한 SxMove()가 수행됩니다.
   cmmSxMove(cmX1, 10000);

   // 이동방향이 이전과 동일하므로 아래에서는 백래쉬보정을 하지 않습니다.
   cmmSxMove(cmX1, 10000);

   // 이동방향이 이전과 동일하므로 아래에서는 백래쉬보정을 하지 않습니다.
   cmmSxMove(cmX1, 10000);

   ////////////////////////////////////////////////////////////////
   // 이동방향이 전환되므로 아래에서 백래쉬 보정을 수행합니다. 1000 PPS 의 속도로 (-)1000 펄스를 출력한
   // 후에 지정한 SxMove()가 수행됩니다.
   cmmSxMove(cmX1, -10000);

   // 이동방향이 이전과 동일하므로 아래에서는 백래쉬보정을 하지 않습니다.
   cmmSxMove(cmX1, -10000)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Visual Basic

'다음의 예제는 백래쉬 보정을 적용할 때의 동작에 대한 설명입니다.
'본 예에서는 "Unit distance"와 "Unit speed"가 각각 1 로 설정되었음을 가정합니다.

   '// 백래쉬보정 모드로 설정 (보정펄스수:1000, 보정펄스출력속도:1000 PPS)
   Call cmmSxSetCorrection(cmX1, cmCORR_BACK, 1000, 1000, 0)

   '///////////////////////////////////////////////////////////////
   '// 이전에 (-)방향 이동을 수행하였다면 아래에서 백래쉬 보정을 수행합니다.
   '// 1000 PPS 의 속도로 (+)1000 펄스를 출력한 후에 지정한 SxMove()가
   ‘// 수행됩니다.
   Call cmmSxMove(cmX1, 10000)

   '// 이동방향이 이전과 동일하므로 아래에서는 백래쉬보정을 하지 않습니다.
   Call cmmSxMove(cmX1, 10000)

   '// 이동방향이 이전과 동일하므로 아래에서는 백래쉬보정을 하지 않습니다.
   Call cmmSxMove(cmX1, 10000)

   '///////////////////////////////////////////////////////////////
   '// 이동방향이 전환되므로 아래에서 백래쉬 보정을 수행합니다. 1000 PPS 의
   '속도로(-)1000 펄스를 출력한 후에 지정한 SxMove()가 수행됩니다.
   Call cmmSxMove(cmX1, -10000)

   '// 이동방향이 이전과 동일하므로 아래에서는 백래쉬보정을 하지 않습니다.
   Call cmmSxMove(cmX1, -10000
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Delphi

procedure OnSetSxCorrection ();
begin

   { 해당 축에 대해 백래쉬 보정 모드를 설정 합니다.
   ( 보정 펄스 수 : 1000, 보정 펄스 출력 속도 : 1000 PPS ) }
   cmmSxSetCorrection (cmX1, cmCORR_BACK, 1000, 1000, $1 );

end;

procedure OnMove ();
begin

   { 이전에 (-)방향으로 이동을 수행하였다면 (+)방향으로 이동할 때 (방향이 바뀔 때) 백래쉬 보정을
   수행합니다. 1000 PPS 의 속도로 (+)1000 펄스를 출력한 후에 지정한 SxMove()가 수행됩니다. }
   cmmSxMove (cmX1, 10000, cmFALSE );

   // 이송 방향이 이전과 동일하므로 아래에서는 백래쉬 보정을 하지 않습니다.
   cmmSxMove (cmX1, 10000, cmFALSE );

   { 이송 방향이 전환되므로 백래쉬 보정을 수행합니다.
   1000PPS 의 속도로 (-)1000 펄스를 출력 한 후에 지정한 SxMove()가 수행됩니다. }
   cmmSxMove (cmX1, -10000, cmFALSE )

end;

EXAMPLE 2

다음의 예제는 슬립보정을 적용할 때의 동작에 대한 설명입니다. 본 예에서는 “Unit distance”와 “Unit speed”가 각각 1로 설정되었음을 가정합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
C/C++

   // 슬립보정 모드로 설정 (보정펄스수:1000, 보정펄스출력속도:1000 PPS) //
   cmmSxSetCorrection (cmX1, cmCORR_SLIP, 1000, 1000, 0);

   // (+)1000 펄스의 보정펄스가 출력된 후에 SxMove()가 수행됩니다
   cmmSxMove(cmX1, 10000);

   // (+)1000 펄스의 보정펄스가 출력된 후에 SxMove()가 수행됩니다
   cmmSxMove(cmX1, 10000);

   // (-)1000 펄스의 보정펄스가 출력된 후에 SxMove()가 수행됩니다
   cmmSxMove(cmX1, -10000);

   // (-)1000 펄스의 보정펄스가 출력된 후에 SxMove()가 수행됩니다
   cmmSxMove(cmX1, -10000);
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
Visual Basic

   '// 슬립보정 모드로 설정 (보정펄스수:1000, 보정펄스출력속도:1000 PPS)
   Call cmmSxSetCorrection(cmX1, cmCORR_SLIP, 1000, 1000, 0)

   '// (+)1000 펄스의 보정펄스가 출력된 후에 SxMove()가 수행됩니다
   Call cmmSxMove(cmX1, 10000)

   '// (+)1000 펄스의 보정펄스가 출력된 후에 SxMove()가 수행됩니다
   Call cmmSxMove(cmX1, 10000)

   '// (-)1000 펄스의 보정펄스가 출력된 후에 SxMove()가 수행됩니다
   Call cmmSxMove(cmX1, -10000)

   '// (-)1000 펄스의 보정펄스가 출력된 후에 SxMove()가 수행됩니다
   Call cmmSxMove(cmX1, -10000)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
Delphi

   // 슬립보정 모드로 설정 (보정펄스수:1000, 보정펄스출력속도:1000 PPS)
   cmmSxSetCorrection (cmX1, cmCORR_SLIP, 1000, 1000, 0);

   // (+)1000 펄스의 보정펄스가 출력된 후에 SxMove()가 수행됩니다
   cmmSxMove(cmX1, 10000);

   // (+)1000 펄스의 보정펄스가 출력된 후에 SxMove()가 수행됩니다
   cmmSxMove(cmX1, 10000);

   // (-)1000 펄스의 보정펄스가 출력된 후에 SxMove()가 수행됩니다
   cmmSxMove(cmX1, -10000);

   // (-)1000 펄스의 보정펄스가 출력된 후에 SxMove()가 수행됩니다
   cmmSxMove(cmX1, -10000);

end;