树莓派 PWM 调光实战全解析
PWM(脉冲宽度调制)是智能设备实现无级调光的核心技术。本文通过树莓派、LED 和 Python 代码,演示如何实现硬件 PWM 控制。
为什么选树莓派做 PWM 实验?
树莓派运行完整的 Linux 系统,支持使用 Python 直接操控 GPIO。更重要的是,它支持真正的硬件 PWM,由专用电路生成稳定方波信号,不受系统负载影响。
本次目标:让一颗普通 LED 从暗到亮再从亮到暗,平滑过渡。
硬件准备与接线指南
材料清单:
- 树莓派(推荐 4B 或更高版本)
- LED 灯 ×1
- 限流电阻 ×1(220Ω~1kΩ,常用 270Ω 或 330Ω)
- 杜邦线若干
关键引脚选择
只有特定引脚支持硬件 PWM 输出。在树莓派上,常用引脚如下:
| BCM 编号 | 功能 | 所属通道 |
|---|---|---|
| GPIO12 | PWM0 或 PWM1 | PWM0 |
| GPIO13 | PWM1 | PWM1 |
| GPIO18 | PWM0 | PWM0 ✅ |
| GPIO19 | PWM1 | PWM1 |
推荐使用 GPIO18,绑定到 PWM0 通道,稳定性好且资源占用少。
注意:GPIO12/13 同时是音频输出引脚,易受干扰,建议优先使用 GPIO18。
接线图解
树莓派 GPIO18 → 限流电阻一端
限流电阻另一端 → LED 正极(长脚)
LED 负极(短脚) → GND(可选 PIN6、PIN9 等)
⚠️ 注意事项:
- 必须加限流电阻!否则可能烧毁 LED 或损伤 GPIO。
- LED 有极性,接反了不会亮,但不会损坏(只要电阻存在)。
- 使用 3.3V 供电逻辑电平,不要误接到 5V 电源!
PWM 原理与参数
PWM 通过高速开关数字信号来模拟不同的电压等级。人眼视觉暂留效应使得快速闪烁的灯光看起来亮度恒定。
两个关键参数
- 频率(Frequency):单位 Hz。LED 调光一般设置为 1kHz 左右。太低会闪,太高可能超出驱动能力。
- 占空比(Duty Cycle):高电平所占时间比例。0% 为灭,100% 为全亮。
Python 实战:RPi.GPIO 库
我们将使用 RPi.GPIO 库完成控制。
安装依赖库
sudo apt update
sudo apt install python3-rpi.gpio
完整代码示例
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
LED_PIN =
GPIO.setup(LED_PIN, GPIO.OUT)
pwm = GPIO.PWM(LED_PIN, )
:
pwm.start()
()
:
duty (, ):
pwm.ChangeDutyCycle(duty)
time.sleep()
duty (, -, -):
pwm.ChangeDutyCycle(duty)
time.sleep()
KeyboardInterrupt:
()
:
pwm.stop()
GPIO.cleanup()
()

