# 보통 180도 범위의 서보 모터는 0도 0.5ms ~ 180도 2.5ms의 값을 갖는다.
# 보통 90도 범위의 서보 모터는 0도 1ms ~ 90도 2ms의 값을 갖는다.
from machine import Pin,ADC,PWM
import time
motor = PWM(Pin(15)) # PWM OUTPUT 선언
motor.freq(50) # 1초에 50회 진동. 펄스 파장 : 20ms
# 펄스 폭 0.5ms, 즉 0.5/20인 2.5% duty cycle에서는 0도
# 펼스 폭 2.4ms, 즉, 2.4/20인 12% duty cycle에서는 180도이다.
# n도에서는 ( n*(2.4-0.5)/180 + 0.5 )ms가 된다.
# Pico 보드의 100%에 해당하는 duty cycle 값은 65535.
# 시간의 펄스 폭에서 duty cycle 값으로 변환하면...
# duty_u16 값으로는 ( 0도 : 1638 ~ 180도 : 7864)
# min 0도 : ns 값은 500000, u16 값은 1638
# max 180도 : ns 값은 2400000, u16 값은 7864
# 특정 각도에서의 duty_u16 값 : deg*(max - min)/180 + min
while True: # 모터 사양에 근거
for deg in [0,90,180]:
# motor.duty_u16(deg*(7864-1638)//180 + 1638)
motor.duty_ns(deg*(2400000-500000)//180 + 500000)
time.sleep(2)