목차
스탭 모터 제어
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을 실행하는 방식으로 사용할 수 있습니다.
