Funpack3-5 点灯项目——BeagleBone Black PRU 实现呼吸灯与闪烁速度切换
该项目使用了开源硬件BeagleBone Black,DFRobot 数字按钮模块和 DFRobot 食人鱼红色 LED 模块,实现了硬件电路的设计,它的主要功能为:利用 PRU(Programmable Real-time Unit)控制一个 LED 实现呼吸灯效果,同时使用一个按键切换 LED 闪烁速度。。 该项目使用了BeagleBone Black 系统自带的 cloud9 IDE,实现了软件的设计,它的主要功能为:在线集成开发环境,Cloud9是BeagleBone Black单板计算机上的 IDE 本机。
标签
嵌入式系统
Funpack活动
MPU
天地孤影任我行
更新2025-01-13
河南城建学院
9

Funpack3-5 点灯项目——PRU实现呼吸灯与闪烁速度切换

1. 项目简介

大家好,很高兴参加 Funpack 3-5 活动!我是一名电子爱好者,大家可以叫我苏格拉。本次项目任务是利用 BeagleBone Black 自带的 PRU(Programmable Real-time Unit)控制外部 LED 模块实现呼吸灯效果(PRU 的优势是具备实时性,能精确控制延迟时间),同时使用一个按键来切换 LED 闪烁速度。硬件方面选用开源硬件 BeagleBone Black 简称 BBB作为主控,DFRobot 数字按钮模块DFRobot 食人鱼红色 LED 模块 作为外部设备搭配完成任务。

软件开发直接采用 BeagleBone Black 系统自带的 Cloud9 IDE,可以很边便捷的上传程序到开发板。Cloud9 是 BeagleBone Black 单板计算机上的 IDE 本机。通过 Cloud9 我们可以直接调用 BBB 的 PRU。浏览器地址栏输入:http://192.168.7.2/ide.html 即可进入 Cloud9 IDE,以下是进入 Cloud9 的界面。(点击图片可放大查看)

2

我们可以到 Cloud9 中名为 PRU 的文件夹,里边是有关 PRU 使用的示例程序。我们将修改示例程序来完成按键控制呼吸灯的代码。


2. 硬件介绍

主控板

使用的主控为 BeagleBone Black,搭载 TI 的 AM335x 系列处理器,具备 PRU 子系统用于实时控制。BeagleBone Black 的 PRU(Programmable Real-Time Unit)子系统 是其强大的一部分,专门设计用于实时任务和快速 I/O 操作。PRU 是独立的微处理器单元,不依赖于主 CPU,其可实现 纳秒级 的实时响应,非常适合需要精准时序控制的应用,例如 PWM 生成、信号处理和高速数据采集。


  • 两个 PRU 内核:

BeagleBone Black 的 PRU 子系统包含两个独立的 32 位 RISC 内核 ( PRU0 和 PRU1 ),它们可以独立运行不同的程序,通过共享资源(如内存和寄存器)协同工作。PRU 可以直接控制 BeagleBone Black 的 GPIO 引脚。

PinOut

BeagleBone Black 引脚图


外设

  • DFRobot 食人鱼红色 LED 模块:通过 GPIO 控制亮度变化,实现呼吸灯效果。
  • DFRobot 数字按钮模块:通过 GPIO 读取按键输入,用于切换闪烁速度。


3. 设计思路

使用 PRU 的 GPIO 引脚驱动 LED,根据占空比调节亮度,模拟 PWM 信号形成呼吸灯效果。

利用循环延迟实现定时,按键输入用于切换延迟时间,从而实现快慢两种呼吸灯模式。

设计方案包括以下模块:
LED 呼吸灯控制:根据设定的占空比模拟 PWM 控制 LED 亮度,逐步实现亮度的渐亮与渐暗循环。

按键控制逻辑:检测按键的状态变化,当检测到按键按下时切换延迟时间,实现闪烁速度的快慢切换。

4. 项目功能演示

  • 功能 1:LED 呼吸灯效果:LED 按照一定占空比从暗到亮、再从亮到暗,循环变化。
    功能演示详细可见项目视频
  • 功能 2:按键控制闪烁速度:通过按下按键,切换 LED 呼吸灯模式的速度(慢速与快速)。
    功能演示详细可见项目视频

5. 项目总结报告

5.1 项目描述

本项目目标是通过 PRU 控制 GPIO,实现 LED 的呼吸灯效果,并通过按键控制闪烁速度的切换。主要利用 PRU 高效处理实时任务的特点,实现精确的 LED 占空比控制,并处理按键输入的逻辑。


5.2 软件流程图



5.3 主要代码片段与说明


1. 设置 LED 的占空比: PWM 信号生成(呼吸灯的核心)

基本原理:

  • 使用循环逐步调节 LED 的 占空比,实现亮度从低到高再从高到低的变化。
  • 占空比控制逻辑:
  • 定义 brightness 变量表示当前的占空比百分比。
  • 如果当前循环次数 i 小于 brightness,GPIO 输出高电平(点亮 LED)。
  • 否则,GPIO 输出低电平(熄灭 LED)

    代码片段
for (i = 0; i < MAX_BRIGHTNESS; i++) {

if (i < brightness) {
gpio1[GPIO_SETDATAOUT] = GPIO_PIN; /* 点亮 LED */
} else {
gpio1[GPIO_CLEARDATAOUT] = GPIO_PIN; /* 熄灭 LED */
}
delay_cycles(cycle_delay); /* 控制呼吸灯速度 */
}


2. 按键切换闪烁速度:

按键状态检测:通过读取 GPIO_PIN_BUTTON 引脚的输入状态判断是否按下按键。通过按键输入切换 cycle_delay,间接改变延迟时间,从而调节亮暗变化速度(快/慢)

button_state = gpio1[GPIO_DATAIN] & GPIO_PIN_BUTTON;

if (button_state && !last_button_state) {

if (cycle_delay == CYCLE_DELAY_SLOW) {
cycle_delay = CYCLE_DELAY_FAST;
} else {
cycle_delay = CYCLE_DELAY_SLOW;
}
}

last_button_state = button_state;


5.4 功能展示与说明


功能演示详细可见项目视频

  1. LED 呼吸灯效果
  • 通过占空比调节,LED 从暗到亮再到暗,形成类似“呼吸”的动态变化效果。
  • 实现方式:使用循环控制占空比,同时设置步长 STEP 调整变化幅度。
  1. 闪烁速度切换
  • 按键按下后,切换延迟时间,调整 LED 呼吸灯的速度(快速与慢速)。
  • 实现方式:检测按键输入,根据状态变化动态调整延迟时间。

6. 心得体会

在本次项目中,我对 PRU 的实时处理能力有了更深入的了解,同时学习了如何使用 GPIO 控制外设。特别是在按键控制逻辑的实现过程中,进一步提升了对嵌入式系统中硬件与软件结合的理解。希望未来活动可以加入更多硬件模块的扩展,例如传感器或通信模块,增加项目的趣味性和挑战性。

更多信息可参考:pru-software-support-package/pru-software-support-package - The PRU Software Support Package

如有疑问,欢迎联系我!


附件下载
blinkExternalLED.pru0.c
BeagleBone Black 按键控制呼吸灯源代码
团队介绍
暂无
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号