The servo does not move however, this is my code:
Code: Select all
from machine import Pin, PWM
import utime
pin_no = 23
servo = PWM(Pin(23, Pin.OUT), freq=50, duty=77)
PAUSE = 0.05
dc_min = 50
dc_max = 100
while True:
# Sweep duty-cycle forward
for duty in range(dc_min, dc_max):
servo.duty(duty)
dc_percent = float(duty) / 1024.0 * 1e2
duty_time_ns = float(servo.duty_ns())
print(f"Duty cycle: {dc_percent:.2f} [%], on-time: {duty_time_ns} ns")
utime.sleep_ms(int(PAUSE * 1e3))
# Sweep duty-cycle back
for duty in range(dc_max, dc_min, -1):
servo.duty(duty)
dc_percent = float(duty) / 1024.0 * 1e2
duty_time_ns = float(servo.duty_ns())
print(f"Duty cycle: {dc_percent:.2f} [%], on-time: {duty_time_ns} ns")
utime.sleep_ms(int(PAUSE * 1e3))
Code: Select all
Duty cycle: 4.88 [%], on-time: 0.0 ns
Duty cycle: 4.98 [%], on-time: 0.0 ns
Duty cycle: 5.08 [%], on-time: 0.0 ns
Duty cycle: 5.18 [%], on-time: 0.0 ns
Duty cycle: 5.27 [%], on-time: 0.0 ns
Duty cycle: 5.37 [%], on-time: 0.0 ns
Duty cycle: 5.47 [%], on-time: 0.0 ns
Duty cycle: 5.57 [%], on-time: 0.0 ns
Duty cycle: 5.66 [%], on-time: 0.0 ns
Duty cycle: 5.76 [%], on-time: 0.0 ns
I'm using a 9g Micro Servo which needs a pulse width between 1000 and 2000 us.
I've tried to connect to the servo directly and using a level converter to convert from 3.3V to 5V. I've tried to power the servo from the 5V from the ESP. I've tied all the grouns together. What can I still look for?
Thanks!