Robot / AI Robot Hand with Raspberry Pi - 2. 전자제어 연구
모터의 종류
DC모터
DC모터는 말 그대로 DC(직류, Direct Current)를 전원으로 사용하는 전기모터이다. 외부의 고정된 부분인 고정자에 영구자석을 배치하고 내부의 회전체에 코일을 사용하여 구성한다. 회전체 (회전자/전기자)에 흐르는 전류의 방향을 전환함으로써 발생하는 자기장과 자석 자기장의 상호 반발력을 이용하여 회전력을 얻는다. DC모터는 (+)극과 (-)극에 전원을 입력하여 작동시킬 수 있으며, 극을 반대로 연결하면 회전 방향을 바꿀 수 있다. 전기 자동차, 선풍기, RC카와 같이 빠르고 연속적인 회전이 필요할 때 사용한다. 하지만 로봇손과 같이 일정 각도만큼 회전시키거나 정확한 제어를 필요한 장치에서는 사용하기 어렵다.
서보모터
그래서 나온 것이 서보모터(Servo Motor)이다. 서보(Servo)란 서보 메커니즘(Servo Mechnism)의 줄임말로서 일본 공업 규격(Japanese Industrial Standards, JIS)에서는 물체의 위치, 방위, 자세 등을 제어량으로 하고 목표치의 임의 변화에 추종하도록 구성된 제어계라고 정의되어 있다. 또한 서보(Servo)는 라틴어의 Servue(노예)라는 단어에 기인하였다고 하는데, 이는 주인에 충실한이라는 의미를 가지고 있다. 즉 서보모터란 주인의 명령에 충실하게 동작하는 모터를 나타내며 동작이란 위치, 속도 및 가속도의 3요소를 말하지만 실제로 서보 모터의 적용에 있어서 위치 제어를 위한 적용처와 속도 제어를 위한 적용처의 두가지로 나타내어질 수 있다. 위치 제어에는 속도를 제어하여 위치를 추종하게 되고 속도 제어에는 순간 가속도를 제어하여 추종하게 된다. 서보모터는 일반 모터와는 달리 빈번하게 변화하는 위치나 속도의 명령치에 대하여 신속하고 정확하게 추종할 수 있도록 설계된 모터를 의미한다. 서보 모터는 급가속 및 급제동에 대하여 대응할 수 있는 구조를 가지고 있어야 한다. 따라서 서모 모터는 다음과 같은 두가지의 조건을 만족해야 한다.
- 큰 회전력(토크, Torque)을 가질 것
- 회전자(Rotor)의 관성 모멘트가 작을 것
이와 같이 서보모터는 모터와 기어박스 그리고 제어회로로 구성되어있어, 특정 위치로 이동하거나, 특정한 수치(속도 등)만큼 가동시킬 때, 모터로 부터의 피드백을 통해 정확하게 제어할 수 있는 구조를 갖추고 있는 모터로 자동화 생산 시스템, 로봇, 장난감, 가전제품 등 광범위하게 쓰이고 있다.
모터제어
PWM(Pulse Width Modulation) 개요
PWM이란
서보모터를 구동시키는 방법은 PWM을 이용한 제어이다. 펄스 폭 변조라고 불리는 PWM은 펄스의 폭을 컨트롤하는 주기 제어방법이다.
신호에는 아날로그 신호와 디지털 신호가 있다. 아날로그 신호의 그래프는 정현파와 같이 곡선 형태로 연결되어 있지만, 디지털 신호의 그래프는 0
과 1
의 두가지 값만 가지고 있어 $y=0$, $y=1$의 두 함수가 시간($x$)축에 연결된 형태이다.
$[Fig.\,1]$ 아날로그 신호(a)와 디지털 신호(b)
아날로그는 높낮이가 변함과 동시에 곡선 위의 무수한 점들이 연속적으로 연결되어 있는 반면, 디지털 신호는 0
또는 1
의 두가지 값만 가지며 0
에서 1
또는 1
에서 0
으로 변할 때 중간 값들을 가지지 않는다. 예를 들어 LED의 빛이 들어와 있는 상태를 1
, 들어와 있지 않은 상태를 0
으로 표시한다. 하지만 빛의 세기는 0
과 1
이 아닌 그 사이의 무수한 값들로 이루어져 있는데, 이러한 신호를 제어해야 할 경우에는 아날로그 신호가 적합할 것이다. 모터의 속도 제어에도 똑같이 적용된다. 보통 DC 5V
의 전압이 걸리는 라즈베리파이에 전압이 걸린 상태를 1
로 두고, 걸리지 않은 상태를 0
으로 둔다.
이를 위해 디지털 신호를 아날로그 신호로 변경하려면 DA변환이 이루어져야 하는데 DAC(Digital Analog Converter)를 사용하는 방법과, PWM(Pulse Width Modulation) 방법을 사용할 수 있다. PWM은 실제로 아날로그로 변환하는 것이 아닌 디지털 신호를 아날로그처럼 보이도록 해주는 일종의 눈속임 방법이다.
PWM의 원리
PWM을 이용해 모터를 제어하는 원리를 알아보자. 모터 제어에 있어서의 디지털 신호는 $5V$의 전압이 걸려있을 때를 1
, 걸려있지 않을 때를 0
의 두 가지 상태만 가질 수 있다는 것을 기억하자.
예를들어 DC 5V
의 전압을 DC모터에 10초동안 걸었을 때의 회전수가 총 100회라고 가정하자. 5초동안 걸면 회전수는 총 50회, 1초동안 걸면 회전수는 총 10회이다.
$[Fig.\,2]$ DC $5V$의 전압을 10초동안 걸었을 때
그러면, 1초씩 번갈아가면서 전압을 걸었다 풀었다 하면서 10초동안 반복해보자. 결론적으로는 5V
의 전압을 5초동안 걸었을 때와 같다. 따라서 회전수는 총 50회가 된다.
$[Fig.\,3]$ DC $5V$의 전압을 1초씩 번갈아가면서 걸었다 풀었다 10초동안 반복했을 때
이번에는 0.01초씩 번갈아가면서 10초동안 반복해보자. 이것 또한 위의 예시같이 5V
의 전압을 5초동안 걸었을 때와 똑같이 된다. 또한 이것은 2.5V
의 전압을 10초동안 건 것과 같다. 이렇게 되면 5V
- 10s
가 2.5V
- 10s
가 되므로 DC모터에서는 회전속도가 절반으로 줄어든 효과가 나온다.
$[Fig.\,4]$ DC $5V$의 전압을 0.01초씩 번갈아가면서 걸었다 풀었다 10초동안 반복했을 때
이와 같이 5V
의 전압을 거는 시간과 0V
의 전압을 거는 시간의 비율을 1:1로 하면 평균 2.5V
의 전압을 거는 효과를 낼 수 있다. 따라서 이 비율을 적절히 조절하면 다양한 전압을 줄 수 있게 된다.
예를들어 5V
의 전압을 거는 시간과 0V
의 전압을 거는 시간의 비율을 1:4로 한다면 평균 1V
의 전압을 거는 것과 같은 효과를 낼 수 있다. 전압을 걸고 푸는 간격이 길다면 끊겨서 돌아가지만 이 사이의 간격이 매우 짧기에 일정한 속도로 돌아가는 것 처럼 보이게 된다.
$[Fig.\,5]$ DC $5V$의 전압을 1:4의 비율로 번갈아가면서 걸었다 풀었다 10초동안 반복했을 때
PWM을 통한 서보모터 제어
보통 $180^\circ$까지 회전할 수 있는 서보모터를 제어하기 위해서 PWM을 사용하는데 위에서 설명한 DC모터와는 다르게 서보모터는 주파수가 정해져있다. 서보모터를 제어하기 위해서는 50Hz
의 주파수를 가진 신호가 입력되어야 한다. 즉, $T=1/f$에 의해서 한 주기당 20ms
의 시간을 가진다. 정리하면 20ms
의 주기 안에서 HIGH
신호의 폭(=지속시간)에 따라 서보모터의 회전 각도가 변화한다.
서보모터의 종류에 따라 다르지만 보통 1.0ms
에서 $0^\circ$, 1.5ms
에서 $90^\circ$, 2.0ms
에서 $180^\circ$의 각도를 가진다. 세부적인 사항은 서보모터의 데이터시트를 보면 나와있다. 정확히는 1.5ms
일 때가 정중앙이고, 1.5ms
보다 작으면 시계 반대방향, 1.5ms
보다 크면 시계 방향으로 이동한다.
서보모터는 GND(-)
, VCC(+)
, SIGNAL(PWM)
의 세가지로 이루어져 있으며, SIGNAL
에 아래와 같은 신호가 입력되면 해당하는 각도로 모터가 이동한다.
$[Fig.\,6]$ 시간에 따른 서보모터의 각도
서보모터는 특정 위치로의 이동에 목적이 있기 때문에 그 위치를 계속 유지하기 위해서는 위와 같은 일정한 신호를 계속 내보내야한다. 그렇지 않으면 모터는 각도를 유지하지 못하고 이상하게 돌아가버린다.