from machine import Pin, PWM
from time import sleep
def ms(x):
duty = int(1023/20*x)
print("duty=",duty, duty/1023)
return duty
pwm = PWM(Pin(2), freq=50, duty=0) # create and configure in one go
while True:
pwm.duty(ms(1))
sleep(1)
pwm.duty(ms(1.5))
sleep(1)
pwm.duty(ms(2.0))
sleep(1)
print("\n\n")
sleep(10)
# 1. duty_u16(waarde)
#
# De Nieuwe Standaard (Aanrader!)
# Dit is de methode die je altijd zou moeten gebruiken.
# Betekenis: "Duty cycle als unsigned 16-bit integer".
# Bereik: Altijd 0 tot 65535.
# Waarom: Dit is de "Unified API". Of je nu een ESP32, een Raspberry Pi Pico of een STM32 gebruikt, 65535 is altijd 100%. MicroPython rekent dit op de achtergrond zelf om naar wat de hardware echt aankan.
# Documentatie: MicroPython docs - machine.PWM
#
# 2. duty_ns(waarde)
#
# Voor Tijd-precisie
# Betekenis: "Duty cycle in nanoseconden".
# Bereik: Tijd in nanoseconden dat de puls "hoog" is.
# Gebruik: Vooral handig voor Servo motoren. Een servo wil bijvoorbeeld een puls van precies 1500µs (1.500.000ns) hebben om in het midden te staan. Met duty_ns stel je die tijd exact in, ongeacht de frequentie.
#
# 3. duty(waarde)
#
# De Oude Manier (Legacy)
# Betekenis: De "oude" manier om duty cycle in te stellen, oorspronkelijk gemaakt voor de ESP8266.
# Bereik: Op de ESP32 is dit standaard 0 tot 1023 (10-bit).
# Het probleem: Je vindt nergens een instelling om die resolutie te wijzigen, omdat deze hardcoded is in de MicroPython firmware voor ESP32 om compatibel te blijven met oude scripts.
# Nadeel: Als je code verhuist naar een ander bordje (zoals een Arduino Nano Connect), kan het bereik daar ineens anders zijn. Daarom wordt duty() afgeraden.