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.
Practice
Solution
Step 1: Understand duty cycle meaning
The duty cycle is the fraction of one cycle when the signal is ON (high).Step 2: Differentiate from frequency
Frequency controls how fast cycles repeat, not how long signal stays ON.Final Answer:
The percentage of time the signal is ON during one cycle -> Option AQuick Check:
Duty cycle = ON time percentage [OK]
- Confusing duty cycle with frequency
- Thinking duty cycle controls voltage
- Assuming duty cycle affects total signal duration
Solution
Step 1: Recall RPi.GPIO PWM syntax
The correct way to create a PWM instance is GPIO.PWM(pin, frequency).Step 2: Check options for correct method and parameters
pwm = GPIO.PWM(pin, 1000) matches the correct syntax; others use invalid methods or chaining.Final Answer:
pwm = GPIO.PWM(pin, 1000) -> Option AQuick Check:
GPIO.PWM(pin, freq) creates PWM [OK]
- Using non-existent methods like setPWM or frequency()
- Trying to set frequency after creating PWM without parameters
- Confusing method chaining syntax
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) pin = 18 GPIO.setup(pin, GPIO.OUT) pwm = GPIO.PWM(pin, 500) pwm.start(0) pwm.ChangeDutyCycle(75)
What is the effect of setting the duty cycle to 75%?
Solution
Step 1: Understand duty cycle effect on LED brightness
Duty cycle of 75% means LED is ON 75% of the time, so brightness is about 75%.Step 2: Confirm frequency and duty cycle usage
Frequency 500 Hz controls pulse speed; duty cycle controls brightness level.Final Answer:
LED will be at 75% brightness -> Option DQuick Check:
Duty cycle 75% = 75% brightness [OK]
- Confusing frequency with blinking count
- Thinking duty cycle 75 means LED off
- Assuming full brightness only at 100% duty cycle
pwm = GPIO.PWM(18, 1000) pwm.start(50) pwm.changeFrequency(2000)
What is the error and how to fix it?
Solution
Step 1: Identify method name case sensitivity
RPi.GPIO does not provide a method to change frequency after PWM object creation.Step 2: Correct approach to change frequency
To change frequency, stop PWM and create a new PWM instance with the new frequency.Final Answer:
Frequency cannot be changed after PWM.start(); recreate PWM object -> Option CQuick Check:
RPi.GPIO PWM frequency fixed at creation [OK]
- Using wrong method name spelling
- Ignoring case sensitivity in Python
- Trying to change frequency by creating new PWM instance
Solution
Step 1: Understand frequency vs duty cycle effect on motor speed
Motor speed depends mainly on duty cycle (power ON time), not frequency.Step 2: Analyze frequency change with constant duty cycle
Increasing frequency while keeping duty cycle constant keeps average power same, so speed stays similar.Final Answer:
Motor speed stays roughly the same because duty cycle is unchanged -> Option BQuick Check:
Speed ~ duty cycle, frequency affects smoothness [OK]
- Assuming frequency change affects speed directly
- Thinking doubling frequency doubles speed
- Ignoring duty cycle's role in power delivery
Ready to prove it?
Pass the test and this pattern moves unknown
