Funpack4-2 -基于SAME51J20A的呼吸灯控制
该项目使用了SAME51J20A,实现了呼吸灯控制的设计,它的主要功能为:按键和滑动控制呼吸灯速率。
标签
Microchip
SAME51J20A
Funpack4-2
EV76S68A
孤独的单行者
更新2025-07-02
13

任务介绍

本次任务基于 Microchip 的 SAME51J20A Curiosity Nano核心板进行的功能实现,核心任务是使用MPLAB开发,尝试让部分管脚实现触摸功能,可搭配触摸扩展面板,并通过按键和滑动实现呼吸灯速率切换,可自行设计触摸板。

任务分析

我们可以在任务介绍中可以分析出一下内容:

1、最终的目标是实现呼吸灯速率的切换,所以至少需要2种呼吸灯速率;

2、控制方法有两种,一个是按键控制,一个是滑动控制;

3、可以配合触摸板实现;

硬件介绍

SAME51J20A Curiosity Nano 评估套件(EV76S68A)是用于评估 SAME51J20A 微控制器(MCU)的硬件平台,由 MPLAB® X 集成开发环境(IDE)提供支持,支持MPLAB Harmony开发框架,集成低功耗与高性能特性,支持TrustZone安全技术和丰富外设。板载调试器支持数据可视化分析,适用于物联网终端、工业控制及人机交互场景。Curiosity Nano 评估平台提供了一组可访问大多数单片机I/O 的小型电路板。该平台包含一系列低引脚数单片机(MCU)电路板,相关的用户指南、应用笔记、数据手册和示例代码由MPLAB X IDE 提供。该平台配有一个用于与主机PC 进行串行通信的虚拟COM 端口(CDC)以及一个数据网关接口(Data Gateway Interface,DGI)GPIO。


0

特性:

• SAME51J20A 单片机

• 一个用户LED(黄色)

• 一个机械用户开关

• 板上调试器

软件平台介绍

MPLAB X IDE是Microchip Technology公司开发的集成开发环境,用于嵌入式系统设计。该软件支持多种操作系统,提供源代码级调试、项目管理及可视化工具,并与MPLAB生态系统协同工作。其高度可配置界面满足不同开发者需求,支持从仿真到硬件测试的开发流程。广泛应用于汽车电子、工业自动化等领域。支持多种单片机,从8位到32位都有。

原理分析与设计思虑

本次是通过开发板实现触摸控制呼吸灯速率,这里可以看出我们需要需要实现的内容:

板卡led的呼吸灯控,这里可以通过PWM去控制,一般属于高级定时器的扩展功能,注意这里设计到具体引脚的输出控制;

触摸控制的实现,触摸一般都是对电容量的采集,本次想要实现一个滑动的动作,至少需要3个引脚的配合,不过看到了本次使用的开发板后,实际上就不用外接滑条了,直接使用板子上外引出的接口就可以了;

速率的调节,我们再试下呼吸灯的时候就是在不断的调节占空比,这个时候我们就可以把调节的速度改变一下就是了。

软件流程图

流程图:


0

我们通过初始化阶段对定时器、按键对应引脚的外部中断进行初始化,然后就是进行按键和滑动动作的采集,来改变PWM占空比的控制,比如原本的呼吸灯频率是0.5Hz,也就是一呼一吸用2s,这个时候我们改变速率后变成1Hz,也就是一呼一吸1s完成。

关键功能模块介绍

1、定时器PWM的输出控制

呼吸灯效果的实现实际上就是PWM占空比的不断改变,这是一个规律性的变化,从而产生呼吸灯的效果,我们通过对SAME51J20A功能模块的了解,TCC模块是可以产生PWM的,注意配置完TCC模块后要打开对应的引脚,想要规律的变化就要在定时器中进行了,定时操作可以是PWM占空比的改变更加顺滑。

定时中断处理代码如下:

void TC0_TIMER_CALLBACK(TC_TIMER_STATUS status, uintptr_t context) {
if(LEDPWM_cnt < LED_speed/2)
{
LEDPWM_cnt++;
TCC1_PWM24bitDutySet(TCC1_CHANNEL2, 30000/LED_speed*LEDPWM_cnt*2);
}
else if(LEDPWM_cnt >= LED_speed/2 && LEDPWM_cnt < LED_speed)
{
LEDPWM_cnt++;
TCC1_PWM24bitDutySet(TCC1_CHANNEL2, 30000/LED_speed*(LED_speed-LEDPWM_cnt)*2);
}
else if(LEDPWM_cnt >= LED_speed)
{
LEDPWM_cnt = 0;
}

}

2、滑动控制的实现

添加 Touchbar 模块,其附带的几个模块都会自动摆放上。在 [Project Graph] -> [Plugins] -> [Touch Configuration] 内进行配置。先添加一个滑条,之后将传感器与 PIN 绑定。

我们需要结合一下核心板的引脚分布,必须对应的是支持ADC采集的引脚:


0

接下来配置滑块,最终选择的是PB7、PB6、PB5:


0

然后就可以在工程中直接使用使用一下代码进行滑条的检测:

touch_process();
if (measurement_done_touch == 1u)
{
measurement_done_touch = 0u;
if (SLIDER_CONTACTED_MASK == (get_scroller_state(0) & SLIDER_CONTACTED_MASK))
{
if ((qtm_scroller_data1[0].right_hyst & 0x08) == 0x08)
{
if(LED_Mode == 0)
{
LED_Mode = 1;
LED_speed = LED_speed_1;
}
else if(LED_Mode == 1)
{
LED_Mode = 2;
LED_speed = LED_speed_2;
}
else if(LED_Mode == 2)
{
LED_Mode = 0;
LED_speed = LED_speed_3;
}
}

}
}

3、按键采集

按键的采集这里使用的是EIT模块,也就是引脚外部中断,配置EIT模块实现下降沿触发中断,然后在外部中断处理程中实现和滑动一样的控制效果:

void EIC_KEY_Handler(uintptr_t context)
{
if(LED_Mode == 0)
{
LED_Mode = 1;
LED_speed = LED_speed_1;
}
else if(LED_Mode == 1)
{
LED_Mode = 2;
LED_speed = LED_speed_2;
}
else if(LED_Mode == 2)
{
LED_Mode = 0;
LED_speed = LED_speed_3;
}

}

效果展示

可以看到我们通过外接接口直接可以实现触摸滑动的效果,具体效果参见视频:


0

心得体会

非常感谢这次活动,尤其是对touch应用让我最记忆犹新,不过在进行固件升级的时候有点慢,下载到本地就非常顺滑了,希望多出一点这种干可视化的应用配置,让开发更加便捷,MPLAB的多类型支持也是非常不错的选择,可以对Microchip的8位单片机到32位单片机进行全方位的支持。

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