news 2026/3/28 20:29:22

树莓派4b引脚功能图配置PWM输出:Raspberry Pi OS实战案例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派4b引脚功能图配置PWM输出:Raspberry Pi OS实战案例

用树莓派4B的GPIO玩转PWM:从引脚图到实战调光,一次讲透

你有没有试过在树莓派上控制LED亮度,却发现它只能“开”或“关”,没法像台灯那样缓缓变亮?又或者想驱动一个直流电机调速,结果一启动就抖得像震动模式?

问题不在于你的代码写错了——而很可能是因为你用了不支持硬件PWM的引脚

别急。今天我们就来彻底搞清楚一件事:如何根据树莓派4B的真实引脚功能图,正确配置并使用PWM输出。我们不会堆砌术语,而是带你一步步从原理、选脚、接线到编程,完整走通整个流程。哪怕你是第一次接触PWM,也能照着做出来。


为什么树莓派需要PWM?因为它没有DAC

树莓派是数字系统,它的GPIO口只有两种状态:高电平(3.3V)和低电平(0V)。不像Arduino那样有模拟输入/输出引脚(ADC/DAC),所以如果你想让某个设备获得“中间值”电压——比如给LED供电1.65V让它半亮——直接靠GPIO做不到。

那怎么办?

答案就是:用数字的方式模拟出模拟效果,这就是PWM的精髓。

PWM是怎么“骗”负载的?

想象你在快速开关水龙头,每秒开关100次,其中60%的时间开着,40%的时间关着。虽然水流是一断一续的,但从平均来看,相当于持续流出60%的水量。

PWM干的就是这事:

  • 频率:每秒开关多少次(Hz)
  • 占空比:每次周期里高电平占的比例(0% ~ 100%)

例如,在3.3V下,如果你设置占空比为50%,那么等效电压就是:

3.3V × 50% =1.65V

这个“平均电压”足以让LED看起来半亮、电机慢转、舵机停在中间位置。

关键来了:要实现这种精准控制,必须依赖硬件PWM通道,而不是自己用Python循环去翻转IO——后者叫软件PWM,容易受系统卡顿影响,波形抖动严重,根本带不动电机。


树莓派4B哪些引脚能输出真正的PWM?

这是最容易踩坑的地方。很多人随便找一个GPIO开始实验,结果发现没反应、波形不对、频率漂移……归根结底,是没看懂这张图:

树莓派4B引脚功能图

但注意!不是所有引脚都能输出硬件PWM。只有连接到专用PWM控制器的几个特定引脚才行。

硬件PWM到底有几个?在哪?

树莓派4B有两个独立的硬件PWM通道:

PWM通道支持的GPIO物理引脚
PWM0GPIO12引脚32
GPIO18引脚12
PWM1GPIO13引脚33
GPIO19引脚35

📌重点推荐使用 GPIO18 和 GPIO19,因为它们默认启用,兼容性最好,而且物理位置也方便布线。

其他GPIO虽然可以通过RPi.GPIO库设置为PWM模式,但其实是软件模拟,不适合对稳定性要求高的场景。

⚠️ 小贴士:
不要迷信“任何GPIO都能PWM”。如果你要用H桥驱动大功率电机、做音频发生器、或闭环调速,一定要上硬件PWM


实战:用Python控制LED呼吸灯

我们现在就动手做一个经典的“呼吸灯”效果——LED亮度缓慢上升再下降,像人在呼吸一样。

第一步:接线

准备材料:
- 树莓派4B
- LED一个
- 限流电阻(220Ω~1kΩ)
- 杜邦线若干

连接方式:
- LED正极 → 通过电阻接到GPIO18(物理引脚12)
- LED负极 → 接GND(可用物理引脚14)

🔌 安全提醒:小功率LED可以直接由GPIO供电;若驱动灯带或电机,请务必外接电源,并通过MOSFET隔离!

第二步:环境准备

确保你运行的是标准版 Raspberry Pi OS(32位或64位均可)。

打开终端,更新系统并安装GPIO库:

sudo apt update sudo apt install python3-rpi.gpio -y

注:wiringPi已被官方弃用,不要再用了!

第三步:编写PWM程序

创建文件breathing_led.py

import RPi.GPIO as GPIO import time # 使用BCM编号(芯片级编号) GPIO.setmode(GPIO.BCM) # 设置PWM引脚和频率 PWM_PIN = 18 # 必须是支持硬件PWM的引脚 FREQ = 1000 # 1kHz频率,适合LED调光 # 初始化 GPIO.setup(PWM_PIN, GPIO.OUT) pwm = GPIO.PWM(PWM_PIN, FREQ) # 创建PWM实例 try: pwm.start(0) # 初始占空比为0% print("呼吸灯启动 (Ctrl+C退出)") while True: # 渐亮:0% → 100% for duty in range(0, 101): pwm.ChangeDutyCycle(duty) time.sleep(0.02) # 渐暗:100% → 0% for duty in range(100, -1, -1): pwm.ChangeDutyCycle(duty) time.sleep(0.02) except KeyboardInterrupt: print("\n收到中断,停止输出") finally: pwm.stop() GPIO.cleanup() # 释放资源

保存后运行:

python3 breathing_led.py

看到LED慢慢亮起又熄灭了吗?恭喜你,已经成功驾驭了树莓派的硬件PWM!


背后发生了什么?深入一点看看

当你调用GPIO.PWM()时,RPi.GPIO 库会与内核模块pwm-bcm2835通信,请求分配对应的PWM通道。这个模块负责管理树莓派SoC内部的PWM控制器,设定时钟分频、计数周期和比较值,最终生成稳定的方波信号。

这意味着:
- 即使你的Python脚本暂停了几毫秒,PWM仍在后台稳定运行;
- CPU占用率极低,不影响其他任务;
- 波形精度高,不受系统负载干扰。

这正是硬件PWM的强大之处。


常见问题排查清单

❌ 没有输出?先查这些

  1. 是否用了正确的引脚?
    - 错误示例:用GPIO21、GPIO26等非PWM引脚。
    - 正确选择:GPIO18 或 GPIO19。

  2. 是否加载了PWM模块?

执行命令检查:

bash lsmod | grep pwm

如果看不到pwm_bcm2835,手动加载:

bash sudo modprobe pwm-bcm2835

通常不需要手动操作,只要启用了GPIO就会自动加载。

  1. 权限问题?

确保以普通用户身份运行(如pi用户),不要用root。RPi.GPIO依赖sysfs接口访问GPIO,普通用户即可操作。

  1. 程序崩溃后引脚锁死?

运行完记得执行GPIO.cleanup(),否则下次运行可能报错“Channel already in use”。


进阶应用思路

一旦掌握了基础PWM,你可以轻松扩展以下项目:

🌀 直流电机调速

  • 使用GPIO19输出PWM → 控制MOSFET栅极
  • 频率设为10kHz以上,避免听到高频啸叫
  • 加续流二极管保护电路

🎯 舵机角度控制

  • 舵机需要50Hz PWM(周期20ms)
  • 占空比对应角度:
  • 2.5% ≈ 0°
  • 7.5% ≈ 90°
  • 12.5% ≈ 180°
  • 推荐使用gpiozero库简化控制:

python from gpiozero import Servo servo = Servo(18) servo.value = 0.5 # 中间位置

🌡️ 智能风扇温控

  • 读取CPU温度
  • 根据温度动态调整PWM占空比
  • 实现静音与散热的平衡

最佳实践建议

项目推荐做法
引脚选择固定使用GPIO18(PWM0)、GPIO19(PWM1)
PWM频率LED:1kHz;电机:1~20kHz;舵机:50Hz
编程库优先选RPi.GPIOgpiozero
大功率负载必须外接电源 + MOSFET/H桥驱动
调试工具用万用表测平均电压,用逻辑分析仪看波形
安全设计加保险丝、TVS二极管防反接和浪涌

写在最后:别再乱试引脚了

很多初学者花几小时调试PWM失败,最后才发现只是引脚选错了。记住一句话:

树莓派4B的硬件PWM只存在于少数几个引脚上,且必须参考真实引脚功能图来确认。

掌握这一点,你就已经超过了80%的入门者。

PWM不仅是调光调速的技术,更是通往嵌入式控制世界的大门。下一步,你可以尝试结合PID算法做闭环调速,或者把PWM接入Web界面远程调节亮度。

技术的魅力就在于:一点点知识,就能点亮一片光

如果你正在做类似的项目,欢迎留言交流经验。遇到具体问题也可以贴出来,我们一起解决。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 15:52:39

YOLOv5目标检测智能辅助系统:深度学习技术提升操作体验的完整指南

YOLOv5目标检测智能辅助系统:深度学习技术提升操作体验的完整指南 【免费下载链接】aimcf_yolov5 使用yolov5算法实现cf的自瞄 项目地址: https://gitcode.com/gh_mirrors/ai/aimcf_yolov5 基于YOLOv5深度学习框架的智能辅助系统为技术爱好者和游戏玩家提供了…

作者头像 李华
网站建设 2026/3/27 7:10:42

Typora官网主题推荐:搭配IndexTTS2语音输出提升写作体验

Typora 与 IndexTTS2:构建本地化智能写作新范式 在内容创作日益追求效率与表达精准的今天,写作者不再满足于“能写”,而是希望“写得好、改得准、读得顺”。然而,一个长期被忽视的问题是——我们太容易忽略自己文字中的语病、节奏…

作者头像 李华
网站建设 2026/3/15 20:43:27

HunterPie终极指南:怪物猎人世界智能覆盖插件的完整使用手册

还在为《怪物猎人:世界》复杂的战斗数据而困扰吗?HunterPie这款革命性的智能覆盖插件将彻底改变你的游戏体验。无论你是追求极致输出的资深猎人,还是刚踏入新大陆的新手玩家,这个免费工具都能为你提供专业级的战斗辅助支持。 【免…

作者头像 李华
网站建设 2026/3/28 11:12:33

终极游戏体验升级指南:200+插件一键安装教程

终极游戏体验升级指南:200插件一键安装教程 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为游戏中的各种技术限制而困扰吗?角色卡…

作者头像 李华
网站建设 2026/3/26 22:01:37

Mac鼠标滚动优化神器Mos:告别卡顿的终极解决方案

Mac鼠标滚动优化神器Mos:告别卡顿的终极解决方案 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction independently for yo…

作者头像 李华
网站建设 2026/3/27 9:41:22

Tsukimi播放器终极指南:从零开始打造你的专属媒体中心

还在为复杂的媒体播放器配置而烦恼吗?Tsukimi播放器作为一款简洁优雅的第三方Jellyfin客户端,专为追求高品质播放体验的用户而生。这款开源播放器不仅支持Emby服务,更以其出色的性能和易用性赢得了广泛赞誉。 【免费下载链接】tsukimi A simp…

作者头像 李华