[로터리 엔코더] 엔코더의 작동 원리 및 사용 방법

임베디드 2016. 7. 31. 19:25


 모종의 일로 엔코더를 접하게 된 기회가 생겨 관련 내용을 조사해 보았는데 엔코더를 완전히 처음 접하게 되는 저의 입장에서 인터넷 상에 올라온 엔코더에 대한 정보를 이해하는데 상당히 많은 시간이 들어 애를 먹었던 기억이 있어 이후 저와 같이 엔코더에 대해 알아보고자 하는 분들에게 좀 더 쉬운 이해를 드리고자 나름의 방법으로 엔코더의 원리와 사용법에 대해 간단히 설명해보고자 이 포스팅을 작성하게 되었습니다. 초심자의 입장에서 이해를 할 수 있도록 하는 방향으로 포스팅을 작성하였으나 여전히 궁금한 점이 있으신 분이라면 부담없이 이 포스팅의 답글로 질문을 해주신다면 환영합니다!


 -2019년 12월 16일 추가사항

 엔코더의 동작 원리를 시각적으로 쉽게 설명하는 동영상 자료를 추가하였습니다. 아래의 포스팅에서 동영상을 보실 수 있습니다.

2019/12/16 - [임베디드] - 동영상으로 보는 엔코더의 작동 원리



 ※이 포스팅은 오토닉스社의 로터리 엔코더인 E20S시리즈(E20S-2-360-3-N-5-S)를 기준으로 작성하였으며 엔코더 제작사에 따라 회로 구조 및 동작 방식이 다소 차이가 있을 수 있음을 알립니다.


  엔코더는 회전하는 물체의 회전속도(각속도 등)을 측정하기 위해 사용되는 기기로서 엔코더의 회전축에 측정하고자 하는 회전체의 축을 서로 연결하여 돌아가는 방향과 횟수를 정밀하게 측정하는 것을 목표로 사용됩니다.(전자공학에서 디지털 논리 과목에서 듣게되는 Encoder와는 철자만 같을 뿐 전혀 다릅니다. 여기서 설명하는 엔코더는 주로 '로터리 엔코더'로 칭합니다.)


1. 엔코더의 종류

 회전축이 돌아가는 정도를 측정하는 방식으로는 인크리멘탈(Incremental, 증분) 방식과 앱솔루트(Absolute, 절대) 방식이 존재합니다.
 인크리멘탈 방식은 말 그대로 점진적으로 증가하는(더하는) 형식을 쓰는 것으로 엔코더가 돌아갈 때 발생되는 파형의 횟수를 통해 회전축의 회전 속도를 측정합니다. 이는 일정한 방향으로 회전하는 기기에 사용하기 적합한 방식으로 DC모터와 같이 돌아가는 기기의 속도를 정밀하게 측정하기에 적합한 방식입니다.

위 그림은 인크리멘탈 방식의 원리를 간단한 그림으로 나타낸 것입니다. 각 발광소자를 통해 나오는 빛이 A상, B상, Z상을 주기적으로 비추게 되는데 엔코더가 회전을 하게 되었을 때 회전 슬릿으로 나오는 빛이 각 상에 비추었다가 가려지는 식으로 회전축이 돌아가는 속도를 측정하는 방식이라 할 수 있겠습니다.

 한편, 앱솔루트 방식은 이름 그대로 각 지점의 절대값을 설정하여 엔코더가 축을 중심으로 돌던 도중 측정되는 해당 위치에서의 값을 전달하는 방식입니다. 이 방식은 인크리멘탈 방식과는 달리 1바퀴 이상 돌아가지 않는 기기, 즉 특정 각도로 미세하게 움직여야 하는 기기에 사용하기 적합한 방식이라 할 수 있습니다.

앱솔루트 방식의 원리를 그림으로 나타내었을 때 회전 슬릿이 인크리멘탈 방식과 확연히 다르다는 것을 알 수 있습니다. 회전축이 움직이던 도중 특정 위치에서 이동한 만큼의 위치값이 전달되는데 해당 각도에 대한 값이 회전 슬릿의 구멍을 통해 나타내었으며 해당 슬릿을 통과한 빛의 위치 및 가중치를 고려하여 해당 엔코더가 회전한 위치값을 전달하게 됩니다.


2. 분해능

 분해능은 엔코더의 성능 중 가장 중요한 요소로서 사용되는 기기의 특성 및 사양에 따라 달리 사용될 수 있습니다. 분해능이 높을수록 축의 회전 속도 및 위치를 미세하게 측정할 수 있는데 엔코더가 1회 회전하였을 때 발생신호는 분해능의 갯수만큼 출력됩니다.


 예를 들어 인크리멘탈형 엔코더의 경우 분해능이 360인 엔코더에 연결된 기기가 1바퀴를 정확히 돌았을 때 총 360개의 펄스가 발생합니다. 즉, 한 바퀴를 정확히 회전하였을 때 360°이므로 360/360 =1° 이동할 때 마다 1개의 펄스가 발생되는 것이지요. MCU에 연결된 기기에 타이머를 설정하여 특정 시간동안 MCU에 입력된 횟수를 토대로 엔코더의 회전 각속도를 측정해낼 수 있습니다.


 반면 앱솔루트형 엔코더의 경우 회전체가 회전한 위치를 알아내는 것이 목표로서 만약 분해능이 360일 경우 현재 회전체가 회전한 정도를 실제 도수 단위인 1° 단위로 위치를 측정합니다. 만약 90° 정도에 위치했던 회전체가 시계 방향으로 30° 이동하게 되면 엔코더의 출력값이 90°에서 120°로 출력되는 방식입니다.


3. 출력 방식

 인크리멘탈형 엔코더의 경우 증분 방식으로 회전수를 측정하는 것이 목표이므로 MCU 측에서는 Rising-Edge 입력 인터럽트를 통해 회전율을 측정하게 됩니다.

 위 그림은 인크리멘탈형 엔코더의 출력 방식을 그림으로 나타낸 것으로 시계방향(CW : Clockwise)으로 회전시의 모습입니다. A상과 B상의 주기는 같으나 회전 방향에 따라 위상차가 생겨 이를 사용하여 엔코더의 회전 방향을 예측할 수 있습니다. 반면 Z상의 경우 B상보다 주기가 2배이며 회전 방향을 식별하지 않아도 되는 경우, 즉 엔코더가 한쪽 방향으로만 돌기 때문에 이를 굳이 구분할 필요가 없을 경우 Z상만 사용해도 될 듯 합니다.


시계방향(CW)

반시계방향(CCW)

  위 그림은 A상과 B상의 위상을 통해 엔코더의 회전 방향을 분석하는 방법을 타나낸 것입니다. 엔코더의 축이 시계방향(CW)으로 돌 경우 A상이 B상보다 90° 앞서고 있으며 반시계방향(CCW)으로 돌 경우 반대로 B상이 A상보다 90° 앞서게 되는 것을 보실 수 있습니다. 이러한 A상과 B상의 위상차를 사용하여 엔코더의 축이 돌아가는 방향을 알아내는 방법은 다음과 같습니다.


1) 소트프웨어 방식

 A상을 GPIO Input 모드로 연결하고 B상을 Rising Edge 방식의 Interrupt로 설정합니다. B상에 의해 Interrupt 발생시 A상의 입력값이 1일 경우 시계방향(CW)으로, 0일 경우 반시계방향(CCW)으로 회전함을 확인할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
unsigned char rotate_direction;
 
void Interrupt_InputB(){
    unsigned char state = IfxPort_getPinState(&MODULE_P33, 0); // identify phase A
    if(state){
        rotate_direction = 1;
    }else{
        rotate_direction = 0;
    }
}
cs


2) 하드웨어 방식

 간단한 D플립플롭을 사용하여 회전 방향을 알 수 있는 회로를 보도록 합니다.

 위 그림은 A상을 입력 D에, B상을 클록에 연결하여 출력 Q값을 통해 방향을 확인할 수 있습니다. D 플립플롭의 특성상 클록이 rising edge가 입력될 때 까지 출력값 Q가 고정되었다가 rising edge가 입력된 순간 A상의 위상을 출력하게 됩니다. 축의 회전방향에 따라 A상과 B상의 위상이 바뀌는 특성을 이용하여 위에서 보시는 바와 같이 회전방향을 출력해 내는 것을 확인하실 수 있습니다.


 한편, 앱솔루트 방식의 엔코더를 사용할 경우 엔코더의 위치값이 그대로 출력되므로 MCU의 GPIO Input모드로 각 값을 받아들여 값을 처리하면 됩니다.

위 그림은 앱솔루트형 엔코더의 파형을 나타낸 것입니다. 이 엔코더의 분해능은 6으로 빨간색으로 표시한 부분을 통해 엔코더가 회전한 위치를 알 수 있습니다. 분해능이 6인 앱솔루트형 엔코더를 통해 기기의 회전체가 60°, 120°, 180°, 240°, 300°, 360° 위치로 움직였음을 알 수 있습니다.


4. 회로 설계방법

 엔코더의 물리적 사용법에 따라 인크리멘탈형과 앱솔루트형을 선택한후 다음으로 엔코더를 설치할 회로의 특성에 따라 토템폴 방식, NPN오픈콜렉터 방식, PNP오픈콜렉터 방식 라인드라이버 방식이 있습니다. 각 방식의 장점은 다음과 같습니다.


토템폴(Totem Pole) 방식       - 파형의 왜곡 및 노이즈의 영향을 적게 받고 엔코더와 회로의 거리가 멀 때 사용하기 좋다.

NPN(PNP)오픈콜렉터 방식     - 엔코더의 전원전압과 회로의 전원전압이 다를 경우 사용하기 좋다.

라인드라이버(Line Driver)방식 - 엔코더로부터 회로의 위치가 멀리 떨어져있을 경우 빠른 응답속도로 동작할수 있다.


 엔코더를 사용하고자 하는 목적에 따라 회전횟수를 측정하여야 하는 경우 인크리멘탈형으로, 회전체의 미세한 이동각도를 측정하고자 하는 경우 앱솔루트형 엔코더를 사용하며 자신의 회로에 맞는 특성을 고려하여 엔코더를 고르신다면 제작에 큰 도움이 되시리라 기대합니다.


참고자료 : 오토닉스社 제품 사용 설명서
http://autonics.co.kr/products/products_2.php?big=01&mid=01/06


동영상자료: 

2019/12/16 - [임베디드] - 동영상으로 보는 엔코더의 작동 원리

https://elecs.tistory.com/346


300x250