====== 스탭 모터 제어 ======
CUBLOC2는 스탭모터 제어를 위한 고성능 백그라운드 스탭 명령을 제공합니다. 본 시스템은 2축 을 지원하며, 각 축의 출력포트는 아래와 같이 고정되어 있습니다.
^ axis ^ Pulse 핀 ^ Direction 핀 ^
| 0 | 10 | 11 |
| 1 | 12 | 13 |
지원 명령:
* 정속 제어 Steppulse
* 가감속 제어 Stepaccel
본 명령 실행 시 해당 핀은 BASIC으로 소유권이 넘어옵니다. ''Freepin''을 사용하여 포트 소유권을 설정할 필요는 없습니다.
Steppulse와 Stepaccel은 현재 위치를 기준으로 지정한 펄스 수만큼 이동하는 상대 이동 명령입니다. 절대 위치 이동 및 원점 복귀 기능은 제공하지 않습니다.
----
===== Steppulse =====
''Steppulse axis, pulseCount, targetSpeed''
^ 파라미터 ^ 설명 ^
| //axis// | 축 번호 (0, 1) |
| //pulseCount// | 이동할 총 펄스 수 (음수 입력 시 반대 방향 이동) |
| //targetSpeed// | 목표 속도 (Hz, pulses per second), 100Hz ~ 200KHz |
지정한 축에 대해 스텝 모터를 정속 제어로 구동합니다. (가감속 없음)
----
===== Stepaccel =====
''Stepaccel axis, pulseCount, targetSpeed'' \\
''Stepaccel axis, pulseCount, targetSpeed, accTime, decTime''
^ 파라미터 ^ 설명 ^
| //axis// | 축 번호 (0, 1) |
| //pulseCount// | 이동할 총 펄스 수 (음수 입력 시 반대 방향 이동) |
| //targetSpeed// | 목표 속도 (Hz, pulses per second), 100Hz ~ 200KHz |
| //accTime// (생략 가능) | 가속 시간 (ms 단위) |
| //decTime// (생략 가능) | 감속 시간 (ms 단위) |
지정한 축에 대해 스텝 모터를 가감속 제어로 구동합니다.
==== 동작 방식 ====
accTime과 decTime을 지정하지 않은 경우, 전체 이동 구간을 다음과 같이 분할하여 동작합니다.
* 가속 구간: 전체 펄스의 20%
* 정속 구간: 전체 펄스의 60%
* 감속 구간: 전체 펄스의 20%
속도는 다음 규칙으로 자동 설정됩니다.
* 시작 속도 = 목표 속도의 10% (최소 50Hz)
* 종료 속도 = 시작 속도와 동일
* 최고 속도 = //targetSpeed//
accTime과 decTime을 지정한 경우, 해당 시간(ms)을 기준으로 가속 및 감속이 수행됩니다.
* accTime: 시작 속도에서 목표 속도까지 도달하는 시간
* decTime: 목표 속도에서 종료 속도까지 감소하는 시간
==== 예제 ====
Stepaccel 0, 10000, 1000
Stepaccel 1, -5000, 2000
Stepaccel 0, 10000, 5000, 100, 100 ' 가속 100ms, 감속 100ms
==== 특징 ====
* 축 번호만으로 자동 핀 매핑
* 가감속 자동 적용
* pulseCount의 부호로 방향 제어
* 시간 기반(accTime, decTime) 가속 제어 지원
* 간단한 명령으로 모션 제어 가능
===== Axisbusy =====
''result = Axisbusy(axis)''
^ 파라미터 ^ 설명 ^
| //result// | 축 동작 상태 (1=동작중, 0=정지) |
| //axis// | 축 번호 (0 또는 1) |
지정한 축이 현재 동작 중인지 확인합니다.
동작 중에는 1, 완료 시 0을 반환합니다.
==== 예제 ====
Stepaccel 0, 10000, 1000
Do
If Axisbusy(0) = 0 Then Exit Do
Loop
==== 주의사항 ====
* Busy 상태에서 동일 축에 다시 명령을 실행하면 무시되거나 오류가 발생할 수 있습니다.
----
===== Axisstop =====
''Axisstop axis''
^ 파라미터 ^ 설명 ^
| //axis// | 축 번호 (0 또는 1) |
지정한 축의 동작을 즉시 정지합니다.
==== 동작 설명 ====
* 현재 진행 중인 모션을 즉시 중단합니다.
* 펄스 출력이 중지되며, 축은 현재 위치에서 정지합니다.
* 정지 후 ''Axisbusy''는 0을 반환합니다.
==== 예제 ====
Stepaccel 0, 10000, 1000
If In(0) = 1 Then
Axisstop 0
EndIf
==== 주의사항 ====
* 감속 없이 즉시 정지하므로 기계적 충격이 발생할 수 있습니다.
* 재동작 시에는 새로운 명령을 사용해야 합니다.
----
===== Axisdec =====
''Axisdec axis, decTime''
''Axisdec axis''
^ 파라미터 ^ 설명 ^
| //axis// | 축 번호 (0 또는 1) |
| //decTime// (생략 가능) | 감속 시간 (ms 단위) |
지정한 축의 동작을 감속하여 정지합니다. 갑자기 모터를 정지시킬 수 없는 경우에 사용하세요.
==== 동작 설명 ====
* 현재 속도에서 0까지 지정한 시간 동안 감속 후 정지합니다.
* 감속 중에도 펄스 출력은 계속되며, 속도가 점차 감소합니다.
decTime을 생략한 경우:
* ''Stepaccel'' 동작 중이면 해당 명령의 감속 조건을 사용합니다.
* ''Steppulse'' 동작 중이면 내부 기본 감속 시간(약 100ms)을 사용합니다.
==== 예제 ====
Stepaccel 0, 10000, 5000
Wait 1000
Axisdec 0 ' 현재 감속 조건으로 정지
Stepaccel 0, 10000, 5000
Wait 1000
Axisdec 0, 200 ' 200ms 동안 감속 후 정지
==== 특징 ====
* 부드러운 정지 동작 제공
* 기계적 충격 최소화
* 현재 모션 상태를 유지한 채 자연스럽게 정지
==== 주의사항 ====
* 너무 짧은 decTime 설정 시 급정지에 가까운 동작이 될 수 있습니다.
* 감속 중에는 새로운 모션 명령 실행이 제한될 수 있습니다.
----
==== 예제 프로그램 ====
Dim prevIn4 As Byte
Dim curIn4 As Byte
prevIn4 = In(4)
Do
curIn4 = In(4)
If curIn4 = 1 And prevIn4 = 0 Then ' 4번 포트에 High를 주면 Stepaccel 출력 시작됩니다.
Stepaccel 0, -5000,6000
End If
prevIn4 = curIn4
Loop
==== LD와의 연동 ====
스탭모터 제어 명령은 BASIC 전용 명령입니다.
LD에서는 직접 실행할 수 없으며, 필요한 경우 M 릴레이를 이용하여 BASIC 프로그램과 연동할 수 있습니다.
예를 들어 LD에서 M0을 ON하면 BASIC에서 이를 감지하여 ''Stepaccel''을 실행하는 방식으로 사용할 수 있습니다.
[[..:index|← CUBLOC2 목차로 돌아가기]]