from machine import Pin, PWM
from time import sleep_ms, time_ns
###########################################################
#Servo: horn angle depends on absolute PWM pulse duration
# (not relative duty!)
# 0,5 ms = 500 µs = 500.000 ns ==> 0 degrees
# ...
# 2,5 ms = 2500 µs = 2.500.000 ns ==> 180 degrees
#PWM frequency may be adjusted from 40 Hz and 400 Hz,
#but not more than 400 Hz,
#for T = 1/f at 400 Hz is exactly 2,5 ms (!!!!)
#which means a 100% duty setting
#At higher frequencies behaviour is undefined.
#----------------------------------------------------------
def set_angle(device, angle):
while angle < 0:
angle += 180
while angle > 180:
angle -= 180
duty = int(500_000 + angle * 2_000_000 / 180)
device.duty_ns(duty)
###########################################################
servo = PWM(Pin(0), freq=40)
servo.duty_ns(500_000)
while True:
for i in range(180):
print(f"{i} Grad")
set_angle(servo, i)
sleep_ms(50)
for i in range(180, 0, -1):
print(f"{i} Grad")
set_angle(servo, i)
sleep_ms(50)