====== 스탭 모터 제어 ====== 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 목차로 돌아가기]]