“Funpack3-5”BeagleBone® Black 的pru控制LED呼吸灯
该项目使用了BeagleBone Black,实现了pru控制LED呼吸灯的设计,它的主要功能为:该项目使用了MobaXterm软件,C语言,实现了控制lLED的闪烁频率,它的主要功能为:基于BeagleBone Black板卡上的pru功能,通过按键去改变LED灯闪速的频率大小。
标签
嵌入式系统
Funpack活动
开发板
Y_HT
更新2025-01-15
福州大学
11

BeagleBone® Black 是一款功能强大的开源硬件平台,采用了 ARM Cortex-A8 处理器,配备了丰富的 I/O 接口,适合用于嵌入式开发和快速原型设计。PRUProgrammable Real-time Unit)是 BeagleBone Black 上的一个特殊硬件模块,用于实现高效、低延迟的实时控制。通过 PRU 可以实现对外设的精确控制,尤其适用于要求实时响应的场景。

本项目的目标是利用 BeagleBone® Black 通过 PRU 控制一个 LED 实现呼吸灯效果,并且通过一个外部按键来调节 LED 的闪烁速度。呼吸灯效果是指 LED 的亮度逐渐增加、减小,模拟类似人体呼吸的渐变效果,而闪烁速度的调节则通过按键的按下与松开来实现。通过此项目,不仅可以熟悉 PRU 的基本使用,还能实践嵌入式开发中的硬件控制。

一、项目目标

  1. 实现呼吸灯效果:通过 PRU 来控制 LED 的亮度逐渐变化,模拟呼吸灯效果。
  2. 按键控制闪烁速度使用一个按键的按下操作切换 LED 的闪烁速度,可以选择不同的闪烁间隔。
  3. 实现实时控制通过 PRU 实现对 LED 的实时控制,保证效果的平滑性和响应的即时性。

二、硬件介绍

1.BeagleBone® Black

  • 处理器ARM Cortex-A8 处理器,主频为 1 GHz
  • 内存512 MB DDR3 RAM
  • 存储4 GB eMMC 存储,可扩展至 SD 卡。
  • I/O 接口GPIOUARTI2CSPI 等多种接口,支持丰富的外设连接。
  • PRUProgrammable Real-time UnitBeagleBone Black 拥有两个 PRU 模块(PRU-0 PRU-1),可以在不干扰主处理器的情况下独立运行高效的实时任务。

2.LED 模块

  • 采用普通的 5mm 3mm LED
  • 控制方式:通过 GPIO 接口来控制 LED 的开关。

3.按键模块

  • 一般使用简单的机械按键模块。
  • 控制方式:通过 GPIO 接口读取按键的状态,当按键被按下时切换闪烁速度。

三、设计思路

本项目的设计思路分为几个部分:硬件连接、PRU 控制 LED、按键状态读取以及程序的整体框架。

1. 硬件连接

  • LED 控制LED 的控制通过 BeagleBone Black 的一个 GPIO 引脚进行。具体来说,通过设置该引脚的电平来控制 LED 的开与关。为了实现呼吸灯效果,需要逐渐调整 GPIO 输出的 PWM 信号,从而控制 LED 的亮度。
  • 按键输入:按键连接到 BeagleBone 的另一个 GPIO 引脚,通过该引脚的电平变化(按下与松开)来控制 LED 闪烁的速度。按下按键时,可以切换闪烁的频率。

2. PRU 控制 LED

PRU 的优势在于能够在不依赖主 CPU 的情况下,高效地控制硬件并执行实时任务。在本项目中,PRU 将负责生成 PWM 信号,用于控制 LED 的亮度。

PRU 中的程序将通过调整 PWM 信号的占空比来模拟 LED 的亮度变化。通过调整占空比,LED 的亮度会逐渐从暗到亮,再从亮到暗,形成呼吸灯效果。

具体来说,PRU 程序将按照以下步骤工作:

  • PWM 生成PRU 每隔一定的时间调整 GPIO 引脚的输出状态,从而改变 LED 的亮度。
  • 周期性变化:通过不断增加和减少占空比,达到渐变的效果。一般来说,呼吸灯的亮度变化是平滑的,因此需要精确控制占空比的变化速度。

3. 按键切换闪烁速度

为了控制 LED 的闪烁速度,我们可以通过外部按键来实现。当按键按下时,程序将切换 LED 闪烁的周期,例如从较慢的闪烁变为较快的闪烁。具体实现方法如下:

  • 按键扫描:使用 GPIO 引脚读取按键的状态,当按键按下时,切换 LED 闪烁的速度。
  • 速度切换:当按键被按下时,程序记录当前的闪烁周期,并根据当前周期选择下一个周期。例如,可以设置三种速度:慢速、中速、快速,分别对应不同的闪烁频率。

4. 软件框架

在软件方面,BeagleBone Black 主要运行 Linux 操作系统,而 PRU 运行的是专门的固件程序。软件流程图可参考下图,项目的软件框架分为以下几部分:

  • PRU 程序:用于控制 LED PWM 输出,产生呼吸灯效果。
  • 主程序:运行在 BeagleBone Black Linux 上,负责读取按键状态,切换闪烁速度,并通过通信接口与 PRU 交互。
  • GPIO 控制Linux 程序将通过 BeagleBone Black GPIO 引脚来控制 LED 和读取按键输入。

  image.png

while里面的函数

// 循环执行
    while (1)
    {
        // 切换P9_30 GPIO的状态(假设P9_30用于控制LED等输出)
        __R30 ^= P9_30;


        // 调用延时函数,传入当前的延时时间
        delay(delay_time);


       
        if(!Flag)
        {
            // 如果按钮被按下,读取按钮状态并检查是否按下
            if (!read_button_state()) {
                // 按钮按下时,增加延时
                delay_time += step;
                Key = 1;  // 标记按钮按下
                // 限制最大延时时间,防止超出最大值
                if (delay_time > max_delay) {
                    delay_time = min_delay;  
                }
            }
        }
        else // (Flag = 1)
        {
            // 如果按钮已释放,恢复按钮状态
            if(read_button_state())
            {
                Flag = 0;  // 标记按钮已释放
            }
        }
    }
// 读取按钮状态函数
uint32_t read_button_state(void)
{
    // 读取按钮的状态,假设按钮按下时GPIO的值为0
    return (__R31 & BUTTON_GPIO) == 0;
}
// 延时函数,输入参数为延时计数
void delay(uint32_t count)
{
    int i;
    // 延时计数,简单的循环来消耗时间
    for (i = 0; i < count; i++)
    {
        __R31 = i;  // 使用 __R31 寄存器来创建延时
    }
}

这是整个的项目工程图

IMG_20241106_164646.jpg


希望电子森林能多出类似活动。

附件下载
LED_blink.pru0.c
团队介绍
无团队,个人开发
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号