2.6 pwm 기능으로 서보모터 제어하기 c{mpy0206}
서보모터는 R/C카의 조향장치나 마이크로로봇의 구동장치로 쓰이는 모터로서 신호선 한 가닥으로 0도~180도의 각도를 조절할 수 있는 것이다.
[그림] 서보 모터의 외형
위 그림에서 보듯이 전원선인 Vcc/GND와 신호선 세 가닥이 인터페이스의 전부이다. 모터축의 각도는 신호선으로 인가되는 펄스폭으로 조정된다.
[그림] 서보 모터의 신호선으로 인가되는 펄스(pulse)
위 그림에 서보모터의 신호선으로 인가되는 펄스를 도시하였다. 주기 B는 3ms~20ms 의 범위를 가지며 주기가 짧을 수록 모터축의 회전 속도가 빨라진다. 펄스의 폭 A는 1.5ms 일때 중심각도인 0도를 가리키게 되고 1ms(최소값 0.7ms)일때 –90도, 2ms(최대값 2.3ms)일 때 +90도를 갖는다. 즉, 이 펄스폭을 조절하여 –90도에서 90도 사이의 원하는 각도를 가지도록 제어할 수 있다.
이것을 pwm기능으로 구현하려면 다음과 같이 하면 된다. 일단 주기는 50 Hz~330Hz 정도의 범위를 가지며 주파수가 높을 수록 회전속도는 빨라진다. 만약 50Hz를 사용한다면 펄스폭이 20ms이므로 1.5ms를 만드려면 듀티를 77(정확한 값은 76.8)로 설정하면 되며 40~115의 값을 주면 정해진 각도로 회전하게 된다.
[표] freq=50일경우 duty에 따른 회전각
|
만약 gpio12에 서보모터의 신호선이 연결되어 있다면 다음과 같이 PWM객체인 servo를 생성하여 제어할 수 있다.
from machine import Pin, PWMservo=PWM(Pin(12), freq=50) |
만약 0도로 맞출려면 다음과 같이 하면 된다.
servo.duty(77) |
단 주파수가 바뀌면 각도를 제어하기 위한 duty값도 다시 계산하여 사용해야 한다.
'하드웨어 > ESP8266' 카테고리의 다른 글
WeMos d1 mini 보드 (0) | 2016.10.13 |
---|---|
MicroPython으로 아날로그입력 받기 (0) | 2016.10.12 |
NodeMCU를 이용한 LED의 fading 예제 (0) | 2016.10.11 |
NodeMCU보드에서 PWM파형 생성하기 (0) | 2016.10.05 |
ESP8266 외부인터럽트 (0) | 2016.10.04 |