Funpack5-2 - 基于 PIC32CM LS00 的触摸输入与 LED 控制项目总结报告
该项目使用了EV41C56A,实现了触摸输入与 LED 控制的设计,它的主要功能为:通过板载电容式触摸按键控制 LED 的点亮与熄灭。
标签
Funpack活动
MPLAB
PIC32
bigzhu
更新2026-06-22
23

基于 PIC32CM LS00 的触摸输入与 LED 控制项目总结报告

一、项目介绍

本项目基于 Microchip Technology 推出的 EV41C56A(PIC32CM LS00 Curiosity Nano+ Touch Evaluation Kit)开发板,完成一个最基础但具有代表性的触摸交互应用:通过板载电容式触摸按键控制 LED 的点亮与熄灭。

项目目标如下:

  • 实现单次触摸 → LED 点亮
  • 再次触摸 → LED 熄灭
  • 确保触摸输入稳定,无误触发
  • 正确初始化触摸模块(PTC)

虽然功能看似简单,但该项目完整覆盖了触摸外设(PTC)、时钟依赖、GPIO 控制以及 Harmony/MCC 工具链的使用,对于初学者理解 Microchip 触摸方案具有较高实践价值。


二、硬件介绍

本项目主要使用以下硬件资源:

1. 主控开发板:EV41C56A

  • MCU:PIC32CM5164LS00048(基于 ARM Cortex-M23 内核)
  • 内置 PTC(Peripheral Touch Controller)触摸控制器
  • 支持 TrustZone 安全架构
  • 低功耗设计

2. 板载资源

  • 电容触摸按键(连接至 PA22)
  • LED 指示灯(连接至 PA15)
  • USB 调试接口(Curiosity Nano)

3. 关键外设说明

PTC(触摸控制器)

PTC 是 Microchip 提供的硬件级电容触摸解决方案,能够实现:

  • 按键(Button)
  • 滑条(Slider)
  • 滚轮(Wheel)

本项目仅使用单个 Button。

RTC(实时时钟)

触摸模块依赖 RTC 作为时间基准(用于采样周期),这一点是本项目调试的关键难点之一。


三、方案设计与整体架构

1. 系统框图

       +----------------------+
| PIC32CM MCU |
| |
| +---------------+ |
Touch->| | PTC模块 | |
(PA22) | +---------------+ |
| | |
| touch_process() |
| | |
| get_sensor_state() |
| | |
| 控制逻辑判断 |
| | |
| +---------------+ |
| | GPIO控制LED | |
| +---------------+ |
| (PA15) |
+----------------------+

2. 设计思路

系统采用典型的“输入-处理-输出”模型:

  1. 输入:触摸按键(PTC采样)
  2. 处理:触摸状态判断
  3. 输出:LED 控制

核心逻辑流程:

  • 初始化系统(包含 RTC + PTC + GPIO)
  • 周期调用 touch_process() 更新触摸状态
  • 读取触摸状态
  • 控制 LED 开关

四、软件设计与开发过程

1. 开发工具

  • MPLAB X IDE
  • MPLAB Harmony v3
  • MCC(Microchip Code Configurator)

2. 软件配置流程

(1)添加 Touch Library

通过 MCC 添加:

  • 选择 Touch Library
  • 启用 Touch Configuration 插件

(2)配置触摸按键

  • 类型:Button

  • 引脚:PA22(根据原理图)

(3)配置 LED 引脚

  • GPIO:PA15
  • 命名:LED

⚠️ 注意:触摸引脚已由 Touch Library 接管,不能重复配置。



3. 关键问题:RTC 初始化顺序

在调试过程中遇到一个关键问题:

👉 触摸功能始终无法正常工作

最终定位原因:

MCC 自动生成代码中,RTC 初始化在 touch_init() 之后执行

但实际情况是:

Touch 模块依赖 RTC 提供时间基准

解决方案:

手动调整初始化顺序:

RTC_Initialize();
touch_init();

这个问题卡了较长时间,最终通过社区交流解决。


4. 主程序流程

主程序结构如下:

    uint8_t key_status0 = 0;
uint8_t key_down_flag = 0u;
uint8_t key_updata_flag = 0u;

while (true)
{
touch_process(); // update touch state

if(measurement_done_touch == 1u) {
measurement_done_touch = 0u;

key_status0 = get_sensor_state(0) & 0x80;
if (0u != key_status0) {
if (key_updata_flag == 0) key_down_flag = 1;
} else {
if (key_down_flag == 1) {
key_down_flag = 0;
key_updata_flag = 1;
}
}
}

if (key_updata_flag == 1) {
key_updata_flag = 0;
GPIO_PA15_Toggle(); // toggle LED on a new touch press
}
}

5. 软件流程图

系统启动

SYS_Initialize()

RTC 初始化(手动调整)

Touch 初始化

进入主循环

touch_process()

读取触摸状态

是否被触摸?

翻转LED

循环执行

五、功能展示与效果说明

1. 功能表现

操作

LED 状态

初始状态

熄灭

手指触摸

点亮

再次触摸

熄灭

2. 实际效果

  • 响应迅速(毫秒级)
  • 无明显抖动
  • 无误触发
  • 触摸体验良好



六、项目难点与解决方法

难点一:触摸无响应

现象:

  • LED 无法响应触摸

原因:

  • RTC 初始化顺序错误

解决:

  • 手动调整 RTC 初始化顺序

七、优化方向

1. 增加去抖处理

  • 软件滤波
  • 状态机处理

1. 低功耗优化

  • 使用 sleep 模式
  • 触摸唤醒

八、心得体会

1. 工具不是万能的

MCC 虽然大大提高开发效率,但:

  • 自动生成代码不一定正确
  • 必须理解底层原理

👉 这次 RTC 初始化问题就是典型案例


2. 多查资料 + 多交流

本次问题最终通过社区解决:

  • 群友经验非常重要
  • 官方 demo 也很关键

3. 触摸方案比想象复杂

原本以为触摸只是“读取一个IO”,但实际涉及:

  • 电容采样
  • 时间基准(RTC)
  • 滤波算法

4. Microchip 生态特点

优点:

  • 工具链完整(MCC + Harmony)
  • 触摸方案成熟

缺点:

  • 学习曲线较陡
  • 自动生成代码“黑盒”较多

九、总结

本项目成功实现了:

✅ 触摸按键控制 LED
✅ 正确初始化 PTC 模块
✅ 系统稳定运行,无误触发

并解决了关键问题:

👉 RTC 与 Touch 初始化依赖问题

该项目虽然简单,但完整覆盖了:

  • 外设初始化
  • 工具链使用
  • 调试分析能力

对于后续开发更复杂触摸应用(滑条、UI交互)具有良好的基础。

附件下载
ptc-test-v2.zip
工程源码
production.zip
可以使用的固件
团队介绍
个人电子爱好者
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号