PWM helps control devices by turning power on and off quickly. Frequency and duty cycle decide how fast and how long the power is on.
PWM frequency and duty cycle relationship in Raspberry Pi
import RPi.GPIO as GPIO import time pin = 18 GPIO.setmode(GPIO.BCM) GPIO.setup(pin, GPIO.OUT) pwm = GPIO.PWM(pin, frequency) # frequency in Hz pwm.start(duty_cycle) # duty_cycle in percent (0-100) # To change duty cycle later: pwm.ChangeDutyCycle(new_duty_cycle) # To change frequency later: pwm.ChangeFrequency(new_frequency) # Stop PWM pwm.stop() GPIO.cleanup()
Frequency is how many times the signal repeats per second (Hz).
Duty cycle is the percentage of time the signal is ON in each cycle.
pwm = GPIO.PWM(18, 1000) # 1000 Hz frequency pwm.start(50) # 50% duty cycle
pwm.ChangeDutyCycle(75) # Change duty cycle to 75%
pwm.ChangeFrequency(500) # Change frequency to 500 Hz
This program starts PWM on pin 18 at 1000 Hz with 10% duty cycle. It then increases the duty cycle in steps, making the device get brighter or faster. After that, it changes the frequency to 500 Hz and waits before cleaning up.
import RPi.GPIO as GPIO import time pin = 18 GPIO.setmode(GPIO.BCM) GPIO.setup(pin, GPIO.OUT) pwm = GPIO.PWM(pin, 1000) # 1000 Hz frequency pwm.start(10) # Start with 10% duty cycle try: for dc in range(10, 101, 30): # Increase duty cycle from 10% to 100% print(f"Setting duty cycle to {dc}%") pwm.ChangeDutyCycle(dc) time.sleep(1) pwm.ChangeFrequency(500) # Change frequency to 500 Hz print("Frequency changed to 500 Hz") time.sleep(2) finally: pwm.stop() GPIO.cleanup()
Higher frequency means faster pulses, which can make motors run smoother or LEDs flicker less.
Changing duty cycle changes how much power the device gets without changing frequency.
Always clean up GPIO pins to avoid warnings or errors on next run.
PWM frequency controls how fast the power pulses repeat.
Duty cycle controls how long the power stays ON in each pulse.
Changing frequency or duty cycle changes device behavior like brightness or speed.