PWM helps control devices like motors or lights smoothly by turning power on and off very fast. This makes them act like they get different power levels, even though the power is just on or off.
Why PWM is needed for analog-like control in Raspberry Pi
import RPi.GPIO as GPIO import time pin_number = 18 frequency = 1000 gpio.setmode(GPIO.BCM) gpio.setup(pin_number, GPIO.OUT) pwm = GPIO.PWM(pin_number, frequency) pwm.start(0) # Change duty cycle to control power pwm.ChangeDutyCycle(50) # Stop PWM when done pwm.stop() GPIO.cleanup()
pin_number is the GPIO pin connected to your device.
frequency is how fast the PWM signal switches on and off (in Hz).
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT) pwm = GPIO.PWM(18, 1000) # 1 kHz frequency pwm.start(50) # 50% duty cycle # Run for 5 seconds time.sleep(5) pwm.stop() GPIO.cleanup()
pwm.ChangeDutyCycle(75) # Increase power to 75%
This program slowly increases the power to a device connected to pin 18 in steps, showing how PWM changes the power level smoothly.
import RPi.GPIO as GPIO import time # Setup pin = 18 GPIO.setmode(GPIO.BCM) GPIO.setup(pin, GPIO.OUT) # Create PWM instance at 500 Hz pwm = GPIO.PWM(pin, 500) # Start PWM at 0% duty cycle (off) pwm.start(0) # Gradually increase brightness for dc in range(0, 101, 20): # 0%, 20%, 40%, 60%, 80%, 100% print(f"Setting duty cycle to {dc}%") pwm.ChangeDutyCycle(dc) time.sleep(1) # Stop PWM and cleanup pwm.stop() GPIO.cleanup()
PWM does not change voltage but changes how long the power is on in each cycle.
Devices like LEDs or motors respond to the average power they get, so PWM makes them act like they get different power levels.
Always clean up GPIO pins after use to avoid warnings or errors.
PWM lets you control power smoothly by switching it on and off quickly.
This helps devices behave like they get different power levels without needing special hardware.
Using PWM on Raspberry Pi is easy with the RPi.GPIO library.
Practice
Solution
Step 1: Understand what PWM does
PWM switches power on and off very fast to create the effect of different power levels.Step 2: Compare PWM to simple on/off
Simple on/off only gives full power or no power, so devices can't appear dim or partially powered.Final Answer:
Because PWM simulates different power levels by switching on and off quickly, making devices appear dimmer or brighter. -> Option CQuick Check:
PWM simulates analog power = Because PWM simulates different power levels by switching on and off quickly, making devices appear dimmer or brighter. [OK]
- Thinking PWM makes the Pi run faster
- Believing PWM is only for turning devices fully on
- Assuming PWM always saves electricity
Solution
Step 1: Recall RPi.GPIO PWM syntax
The correct syntax is to create a PWM object with GPIO.PWM(pin, frequency) and then start it with pwm.start(duty_cycle).Step 2: Check each option's method names
Only pwm = GPIO.PWM(pin, frequency); pwm.start(duty_cycle) uses the correct method names and order as per RPi.GPIO documentation.Final Answer:
pwm = GPIO.PWM(pin, frequency); pwm.start(duty_cycle) -> Option AQuick Check:
RPi.GPIO PWM start = pwm = GPIO.PWM(pin, frequency); pwm.start(duty_cycle) [OK]
- Using incorrect method names like startPWM or beginPWM
- Mixing frequency and duty cycle in wrong order
- Trying to set frequency after starting PWM
Solution
Step 1: Understand duty cycle meaning
A 25% duty cycle means the LED is on 25% of the time and off 75% of the time in each cycle.Step 2: Relate duty cycle to brightness
Because the LED is on only a quarter of the time, it appears dimmer, roughly 25% brightness.Final Answer:
The LED will be dim, about one quarter brightness. -> Option AQuick Check:
25% duty cycle = dim LED = The LED will be dim, about one quarter brightness. [OK]
- Thinking LED will be fully off at 25% duty cycle
- Assuming LED blinks slowly instead of fast
- Confusing frequency with brightness
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) pin = 18 GPIO.setup(pin, GPIO.OUT) pwm = GPIO.PWM(pin, 100) pwm.start(100)What is the likely mistake?
Solution
Step 1: Check the duty cycle value
The code uses pwm.start(100), which means 100% duty cycle (always on).Step 2: Understand effect of 100% duty cycle
At 100% duty cycle, the LED receives full power constantly, so it stays fully on.Final Answer:
The duty cycle is set to 100%, so the LED is always fully on. -> Option DQuick Check:
100% duty cycle = LED fully on = The duty cycle is set to 100%, so the LED is always fully on. [OK]
- Thinking frequency 100 is too low to work
- Believing GPIO.cleanup() is needed before PWM start
- Assuming pin 18 can't do PWM
Solution
Step 1: Understand motor voltage control with PWM
Varying the duty cycle changes the average voltage the motor receives, controlling speed smoothly.Step 2: Choose frequency and duty cycle range
High frequency PWM (like 1 kHz) avoids motor jerks and noise; duty cycle must vary from 0% (off) to 100% (full speed).Final Answer:
Use a high frequency (e.g., 1 kHz) PWM with varying duty cycle from 0% to 100%. -> Option BQuick Check:
High freq + variable duty = smooth motor speed [OK]
- Using low frequency causes jerky motor movement
- Fixing duty cycle prevents speed control
- Using 0% or 100% duty cycle only gives off or full speed
Ready to prove it?
Pass the test and this pattern moves unknown
