当前位置: 首页 > news >正文

树莓派PWM控制LED灯

目录

    • 一、什么是PWM
    • 二、树莓派引脚图
    • 三、命令行控制LED灯
    • 四、PWM控制LED呼吸灯

一、什么是PWM

PWM(Pulse Width Modulation,脉冲宽度调制)是一种通过调节数字信号的占空比(Duty Cycle)来模拟模拟信号的技术。它通过快速开关LED的电源,利用人眼的视觉暂留效应,实现对LED亮度的精确控制。

二、树莓派引脚图

快速查找引脚

在这里插入图片描述

三、命令行控制LED灯

第一步,启用pwm:

# vim打开/boot/config.txt
# 在最后一行加入: dtoverlay=pwm
# 保存退出,重启wan@pi:~ $ sudo vim /boot/config.txt 
wan@pi:~ $ sudo reboot# 重启之后,有两种方式确认pwm已启用
wan@pi:~ $ lsmod | grep pwm
pwm_bcm2835            16384  1 # 方式1: 加载了官方pwm驱动wan@pi:~ $ ls /sys/class/pwm/
pwmchip0                        # 方式2: sysfs里可以看到pwmchip0目录

第二步,硬件搭建:
LED的正极接一个PWM通道(GPIO18),负极接GND

第三步,命令行控制PWM

根据之前的硬件接线,LED与树莓派的PWM0通道相连,所以使能pwm0即可点亮led,大体步骤为:

  1. 请求pwm0资源
  2. 设置脉冲周期
  3. List item
  4. 设置占空比
  5. 打开pwm0
wan@pi:~ $ cd /sys/class/pwm/pwmchip0/    # 进入pwm资源目录wan@pi:~ $ echo 0 > export                # 加载pwm0资源
wan@pi:~ $ echo 10000000 > pwm0/period    # 设置脉冲周期为10ms(100Hz)
wan@pi:~ $ echo 8000000 > pwm0/duty_cycle # 设置占空比为8ms
wan@pi:~ $ echo 1 > pwm0/enable           # 开始输出# 可以自行调整脉冲周期和占空比,得到不同的亮度
# 如果玩够了,记得释放资源
philon@rpi:~ $ echo 0 > pwm0/enable           # 关闭输出
philon@rpi:~ $ echo 0 > unexport              # 卸载pwm0资源

调节亮度

  1. 通过改变占空比,可以控制LED的平均电流。
    i. 占空比越高(如100%),LED越亮(持续导通)。
    ii. 占空比越低(如0%),LED越暗(完全关闭)。
    例如,占空比为50%时,LED在半个周期内导通,半个周期内关闭,人眼会感知为“半亮”。

四、PWM控制LED呼吸灯

import RPi.GPIO as GPIO
import time# 设置编码方式
GPIO.setmode(GPIO.BOARD)# 设置引脚
OUT1 = 11
GPIO.setup(OUT1, GPIO.OUT)# 实例化PWM(频率提高至100Hz)
pwm1 = GPIO.PWM(OUT1, 100)
pwm1.start(0)  # 初始占空比为0%try:while True:  # 无限循环# 亮度逐渐增加(0% → 100%)for dc in range(0, 101, 3):  # 步长改为3%pwm1.ChangeDutyCycle(dc)time.sleep(0.05)  # 延时缩短至0.05秒# 亮度逐渐减少(100% → 0%)for dc in range(100, -1, -3):pwm1.ChangeDutyCycle(dc)time.sleep(0.05)
except KeyboardInterrupt:# 按下Ctrl+C时停止PWM并清理GPIOpwm1.stop()GPIO.cleanup()

树莓派PWMLED呼吸灯

http://www.xdnf.cn/news/748315.html

相关文章:

  • 使用arthas热替换在线运行的java class文件
  • 描述性统计的可视化分析
  • Java弱引用与软引用的核心区别
  • ubuntu20.04.5-arm64版安装robotjs
  • 牛客周赛94
  • 使用Java实现简单的计算机案例
  • uv:一个现代化的 Python 依赖管理工具
  • AMBER软件介绍
  • JS和TS的区别
  • 姜老师MBTI课程:ISTP和ISFP
  • Vue事件处理
  • 【razor】采集模块设置了窗体句柄但并不能直接渲染
  • 《C 盘清理技巧分享》
  • 经济法-7-上市公司首次发行、配股增发条件
  • 【数据治理】要点整理-信息技术数据质量评价指标-GB/T36344-2018
  • 【数据集】30 m空间/1 h时间分辨率地表温度LST数据集
  • 投稿Cover Letter怎么写
  • C语言 — 自定义类型(结构体,联合体,枚举)
  • stm32默认复位刚开始由hsi作为主时钟源而后来才换成的pll
  • 【HTML-15.2】HTML表单按钮全面指南:从基础到高级实践
  • 第十四章 MQTT订阅
  • Wireshark 使用教程:让抓包不再神秘
  • 2025最新版在Windows上安装Redis(仅限开发环境)
  • 【Netty系列】Protobuf编码解码:客户端、服务端
  • 【判断数字递增】2021-12-19
  • C++:指针(Pointers)
  • 11.3JVM调优
  • 零基础SEO优化操作全解析
  • 2006-2024年 上市公司-企业战略联盟数据-社科经管实证数据
  • 打开NRODIC SDK编译不过怎么处理,keil与segger studio