====== 엔코더 입력 ====== AB상 엔코더 입력을 통해 펄스를 카운트하며, 회전 방향에 따라 증가 또는 감소합니다. 최대 2채널의 엔코더 입력을 지원하며, 채널당 최대 50kHz의 고속 펄스 입력을 처리할 수 있습니다. * 지원 채널: 0 ~ 1 각 채널의 A상/B상 입력 포트는 아래와 같이 고정되어 있습니다. ^ channel ^ A상 입력 포트 ^ B상 입력 포트 ^ | 0 | 6 | 7 | | 1 | 8 | 9 | ===== Encstart ===== ''Encstart channel'' ^ 파라미터 ^ 설명 ^ | //channel// | 엔코더 채널 번호 (0 또는 1) | 지정한 채널의 엔코더 입력을 시작합니다. A상/B상 입력 포트는 채널 번호에 따라 자동으로 할당됩니다. ===== Encread ===== ''value = Encread(channel)'' ^ 파라미터 ^ 설명 ^ | //value// | 현재 카운트 값 | | //channel// | 엔코더 채널 번호 (0 또는 1) | 현재 엔코더 카운트 값을 반환합니다. ===== Encclear ===== ''Encclear channel'' ^ 파라미터 ^ 설명 ^ | //channel// | 엔코더 채널 번호 (0 또는 1) | 카운트 값을 0으로 초기화합니다. ===== Encstop ===== ''Encstop channel'' ^ 파라미터 ^ 설명 ^ | //channel// | 엔코더 채널 번호 (0 또는 1) | 엔코더 입력을 정지합니다. ==== 동작 설명 ==== * A상과 B상의 위상차를 이용하여 방향을 판단합니다. * 정방향 회전 시 카운트가 증가합니다. * 역방향 회전 시 카운트가 감소합니다. * A상과 B상의 모든 신호 변화에서 카운트가 증가 또는 감소하며, 높은 해상도로 동작합니다. * BASIC/LD 실행과 관계없이 항상 동작합니다. ==== 예제 ==== Dim A As Integer Encstart 1 Do A = Encread(1) Debug Dec A, Cr Wait 100 _DD(0) = A Loop ==== 특징 ==== * 방향 인식 가능 * 증가/감소 카운트 지원 * 고해상도(x4) 카운트 * 백그라운드 동작 * 채널 번호만으로 A상/B상 포트 자동 할당 ==== 주의사항 ==== * 입력 신호는 노이즈의 영향을 받을 수 있으므로, 쉴드 케이블 사용 또는 간단한 RC 필터를 적용하는 것이 좋습니다. * 입력 신호 주파수는 최대 50kHz까지 지원합니다. * 옵토커플러를 사용하는 경우, 옵토커플러의 응답 속도에 따라 실제 사용 가능한 입력 주파수가 낮아질 수 있습니다. * A상과 B상의 배선이 서로 바뀌면 증가/감소 방향도 반대로 동작합니다. ==== 채널 사용 제한 ==== * HSC와 엔코더 입력 기능은 내부적으로 동일한 고속 처리 자원을 공유합니다. * 동일 채널 번호는 두 기능에서 동시에 사용할 수 없습니다. ===== 테스트 프로그램 ===== ==== 엔코더 테스트 예제 ==== 이 예제는 두 개의 출력 포트를 이용하여 A/B상 엔코더 신호를 생성하고, ''Encread'' 명령으로 카운트 동작을 확인하는 테스트 프로그램입니다. * 16번 포트 → A상 * 17번 포트 → B상 프로그램은 쿼드러처(Quadrature) 신호를 생성하여 엔코더 입력을 시뮬레이션합니다. ==== 동작 ==== * 기본 상태에서는 정방향 회전 신호를 생성합니다. * 4번 입력이 HIGH가 되면 역방향 신호로 전환됩니다. * 5번 입력이 HIGH가 되면 다시 정방향으로 전환됩니다. * 현재 엔코더 카운트 값은 ''Encread(1)''로 읽어 ''_DD(0)''에 저장됩니다. * LD로 가서 모니터링한뒤, 데이터뷰에 DD0를 추가하면 엔코더 카운트 값을 실시간으로 볼 수 있습니다. ==== 참고 ==== * 본 예제는 기능 확인용으로, 고속 및 정밀 테스트에는 적합하지 않습니다. * 실제 성능 검증은 외부 엔코더를 사용하는 것을 권장합니다. Dim tm As Integer Dim dir As Byte ' 0 = 정방향, 1 = 역방향 tm = 500 Freepin 16 To 17 Encstart 1 dir = 0 ' 초기: 정방향 Do ' 방향 입력 처리 If In(4) = 1 Then dir = 1 ' 역방향 If In(5) = 1 Then dir = 0 ' 정방향 If dir = 0 Then ' ===== 정방향 ===== High 16 Low 17 uDelay tm High 17 uDelay tm Low 16 uDelay tm Low 17 uDelay tm Else ' ===== 역방향 ===== Low 17 Low 16 uDelay tm High 17 uDelay tm High 16 uDelay tm Low 17 uDelay tm End If _DD(0) = Encread(1) Loop [[..:index|← CUBLOC2 목차로 돌아가기]]