회전식 인코더 및 Arduino 보드와의 인코더 병용 방법

게시자

버튼 입력이나 슬라이더 입력 같은 구성 요소를 사용해서 많은 프로젝트를 조정할 수 있지만, 빌드에 노브가 필요하다면 어떻게 될까요? 프로젝트에 회전 입력이 필요하다면 가변저항기나 회전식 인코더 중 하나가 선택지로 남습니다.

 가변저항기는 노브 위치에 따라 저항이 바뀌므로 더 손쉬우면서도 대개는 확실한 선택지이지만, (지금까지는) 시계 방향이나 반시계방향으로만 노브를 돌릴 수 있습니다. 둘 중 한 방향으로 연속해서 회전할 수 있는 것이 필요하다면 단언컨대 회전식 인코더가 가장 확실합니다. 둘 중 하나로 결정하는 데에 도움이 필요하다면 인코더와 가변저항기에 관한 비교 논의로 더 쉽게 그 해답을 찾을 수 있습니다.

인코더는 다음 2가지 형태로 출시됩니다.

1. 증분형 인코더는 위상 직교로 배열된 일련의 펄스를 사용해서 샤프트가 회전한 정도와 방향을 나타냅니다.

2. 절대형 인코더는 해당 각위치에 대한 정보를 내재합니다.

본질적으로 이 기사는 가장 흔히 눈에 띄는 인코더 유형인 증분형 인코더에 중점을 둡니다. 단일 출력 인코더(이른바 회전속도계)도 있기는 하지만, 샤프트가 움직이는 방향이 아니라 거리만 표시하므로 그 쓰임새는 훨씬 작습니다. 더 자세한 논의 내용은 인코더 유형에 관한 해당 기사에서 알아볼 수 있으며, 지금은 증분형 인코더의 작동 원리 및 Arduino 보드와의 인터페이스 정합 방법에 관한 기본 내용을 다루겠습니다.

쿼드러처 인코더 설명

캡션: 부호기 신호 A와 B의 쿼드러처 다이어그램. B의 상승 에지와 A의 Low 신호는 이 패턴에서 오른쪽으로의 이동을 나타내는 한편, B가 High 상태인 하강 에지는 왼쪽으로의 이동을 나타냅니다.

대부분의 인코더에서 중요한 것은 끊임없이 증분 형태로 맥동하는 “A” 및 “B” 출력입니다. 이러한 출력은 필요에 따라 전력과 접지와 결합됩니다. A 및 B 출력은 "직교 부호화" 되는데, 이는 각 신호의 부하 주기가 50%(시간의 절반 동안 출력 지속, 나머지 절반에는 없음)라는 것을 뜻합니다. 작동 원리는 다음과 같습니다.

- 각 부하 주기는 서로 90° 어긋난 역상이며, 이로써 한쪽 출력은 다른 한 쪽의 상태 변화가 절반쯤 진행되었을 때 변합니다.

- 연결된 마이크로컨트롤러 또는 전용 보드는 이러한 펄스를 회전의 증분으로 변환하며, 펄스 시퀀스는 샤프트가 회전한 방향에 대한 정보를 담고 있습니다.

위의 다이어그램에서 알 수 있듯이 A 신호가 Low 상태일 때 B 신호가 상승하면 이 패턴에 따라 그 위치는 오른쪽으로 옮아 나아갔습니다. 하지만 A가 이미 High 상태일 때 B 신호가 상승하면 위치는 왼쪽으로 옮아갑니다. A 신호의 상승과 하강을 아울러 보았을 때 이는 회로별로 저마다 다른 다음 4개 상태를 나타냅니다.

신호 A의 패턴도 마찬가지이며, 방향별로 저마다 다른 8개의 가능한 전환과 4개 상태를 나타낼 수 있습니다. 이 패턴이 랩(wrap; 일단락) 되고 순환을 반복하면 독자는 어느새 위상 직교 회전식 인코더의 기초를 습득하게 됩니다.

1. B 상승, A Low

2. B 하강, A High

3. B 상승, A High

4. B 하강, A Low

인코더와 Arduino 병용

 이제 Arduino와 다음 2개 유형의 인코더를 페어링하겠습니다.

- 접촉식 인코더: 작은 쪽이며, 주로 인터페이스 장치로 사용됩니다.

- 광학 인코더(LPD3806-600BM-G5-24C): 큰 쪽으로 베어링 지지대를 포함하며, 주로 모터 속도 측정에 사용됩니다.

작은 쪽 인코더를 사용하고 있다면 다음의 단계별 절차를 수행하십시오.

1. 접지에 중간 선을 연결합니다.

2. D2에 한쪽 외측 연결부를 달고 D3에는 남은 한쪽을 달되, 양 전압은 필요하지 않습니다.

큰 쪽 인코더의 경우 다음의 단계별 절차를 따르십시오.

1.  +5V에 빨간색 전력선을 연결하고 접지에 검은색 선을 연결합니다.

2. Arduino D2 및 D3에 A 선과 B 선(녹색과 흰색)을 연결합니다.

3. 단, 연결부와 전압 요구 사항과 색 구성표는 구현에 따라 달라질 수 있습니다.

Arduino 부호기 코드

이미지: Jeremy S. Cook

인코더의 A 선과 B 선이 회전 상태에서 펄스를 일으키는 과정을 이해하였다면 유용한 결과의 산출 여부는 이 입력을 코드로 변환하는 일에 달렸습니다. 이 단계는 이론상 간단하지만, 실무에서는 신중을 요할 수 있습니다. 찾아보면 여기에 예제 코드(테스트에 도움이 되도록 3D 프린트 가능한 상부 포함)가 나옵니다. 상부가 완전하지는 않지만, 바른 방향을 제시하면서도 인코더의 작동 원리를 잘 보여 줍니다. Arduino의 마이크로컨트롤러는 어느 한쪽 선에서 High 및 Low 신호 간 전환을 감지하면 양쪽 선 상태를 비교한 후 필요에 따라 증분을 가감합니다.

인터럽트를 발생시킬 수 있는 많은 Arduino 보드에 탑재된 ATmega328의 입력은 D2와 D3, 단 2개뿐이므로 반드시 D2와 D3를 선택해야 합니다. 다시 말해서 이와 같은 전환이 확인되면 프로그램의 논리에 의한 판독 루틴을 기다리지 않고 즉시 해당 루틴으로 전환됩니다.

전환 도중에 순식간에 변경되는 입력에 적응하고 동시에 단시간에 빨리 연결 및 해제할 수 있는 millis() debounce 코드도 늘 염두에 두십시오. 이 코드는 일부 애플리케이션에서 만족스럽게 작동하면서도 인코더의 작동 원리에 대한 이해의 폭을 넓혀 줄 수 있지만, 100% 정확한 판독 값을 얻기란 쉽지 않습니다.

쉬운 길: 인코더 라이브러리

Arduino 부호기 코드는 인코더의 작동 원리를 이해하는 데 유용하지만, 프로젝트에 사용하고자 하는 것이 전부라면 Paul Stoffregen을 통해 기성 라이브러리를 활용할 수 있습니다. 시작 방법은 다음과 같습니다.

1. GitHub에서 인코더 라이브러리를 다운로드합니다.

2. Arduino IDE에서 Sketch ==> Include Library ==> Add .ZIP Library로 이동한 후 “Encoder-master.zip을 추가합니다.

3. 설치 후 File ==> Examples ==> Encoder에서 보면 4개의 프로그램이 나열되어 있습니다. “Basic” 예제를 전부 로드하고 Arduino 보드에 전송합니다.

4. 앞서와 같이 정극과 부극에 해당 인코더를 연결하되, 이번에는 D5와 D6에 이르도록 A 및 B 신호 선의 경로를 정합니다.

5. 9600보(baud)로 직렬 모니터를 열면 위치 증분과 감분은 정확하게 표시됩니다.

광학 인코더의 경우 위치는 어떤 식으로든 조작 없이 변경되어야 합니다. 같은 보(baud)의 전송률로 Arduino IDE의 직렬 플로터를 열면 재미를 더 할 수 있습니다. 위치 번호를 알려 주는 데에 그치지 않고 자동으로 값의 그래프는 생성될 것입니다.

사용자 지정 인터페이스로 사용하든, 속도와 거리를 측정하고자 사용하든 인코더는 Arduino 프로젝트에 알맞은 훌륭한 회전식 입력 수단입니다. 설정에 있어서 많은 다른 유형의 장치보다 좀 더 손이 가긴 하지만, 결과에는 그만한 보상이 따를 것입니다.

최신 뉴스

Sorry, your filter selection returned no results.

개인정보 보호정책이 업데이트되었습니다. 잠시 시간을 내어 변경사항을 검토하시기 바랍니다. 동의를 클릭하면 Arrow Electronics 개인정보 보호정책 및 이용 조건에 동의하는 것입니다.

당사의 웹사이트에서는 사용자의 경험 향상과 사이트 개선을 위해 사용자의 기기에 쿠키를 저장합니다. 당사에서 사용하는 쿠키 및 쿠키 비활성화 방법에 대해 자세히 알아보십시오. 쿠키와 추적 기술은 마케팅 목적으로 사용될 수 있습니다. '동의'를 클릭하면 기기에 쿠키를 배치하고 추적 기술을 사용하는 데 동의하는 것입니다. 쿠키 및 추적 기술을 해제하는 방법에 대한 자세한 내용과 지침을 알아보려면 아래의 '자세히 알아보기'를 클릭하십시오. 쿠키 및 추적 기술 수락은 사용자의 자발적 선택이지만, 웹사이트가 제대로 작동하지 않을 수 있으며 사용자와 관련이 적은 광고가 표시될 수 있습니다. Arrow는 사용자의 개인정보를 존중합니다. 여기에서 당사의 개인정보 보호정책을 읽을 수 있습니다.