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에 따른 회전각

duty

회전각

40

-90도

77

0도

115

+90도




만약 gpio12에 서보모터의 신호선이 연결되어 있다면 다음과 같이 PWM객체인 servo를 생성하여 제어할 수 있다.


from machine import Pin, PWM
servo=PWM(Pin(12), freq=50)

만약 0도로 맞출려면 다음과 같이 하면 된다.


servo.duty(77)

단 주파수가 바뀌면 각도를 제어하기 위한 duty값도 다시 계산하여 사용해야 한다.

Posted by 살레시오

댓글을 달아 주세요