内容介绍
内容介绍
DSP实现PCB板电容触摸检测项目报告
一、项目描述
(一)项目介绍
本项目通过dsPIC33CK64MC105 Curiosity Nano开发板实现PCB板上的电容触摸检测功能。电容触摸技术是利用人体与PCB之间的电容变化来检测是否触摸,具有高灵敏度、良好的透光性等优点。我将利用DSP的强大处理能力,结合PWM和ADC技术,并使用UART来进行便捷调参,实现对PCB板上电容触摸信号的精确检测和处理。
(二)设计思路
- 硬件设计:处理器使用了活动所提供的dsPIC33CK64MC105 Curiosity Nano板卡,并设计了一个电容触摸检测PCB板。两者通过杜邦线进行连接。DSP处理器用于处理触摸信号,电容触摸传感器用于检测触摸信号。
- 软件设计:编写DSP程序,实现PWM信号的生成、ADC信号的采集、触摸信号的处理和识别。通过算法优化,提高触摸检测的准确性和响应速度。
- 系统集成:将硬件和软件集成在一起,进行系统调试和优化,确保电容触摸检测功能的稳定性和可靠性。
二、简短的硬件介绍
(一)主要硬件组件
- DSP处理器:选用dsPIC33CK64MC105芯片,其具有强大的数字信号处理能力和丰富的外设接口。
- 电容触摸传感器:采用PCB绘制的电容触摸传感器,设计考虑了人体电容与PCB板之间的交互效应。传感器通过特殊的PCB布局和走线设计,能够精确地检测到人体触摸时引起的电容变化。
(二)硬件连接
DSP的ADC输入引脚连接到电容触摸板的输出,用于采集触摸信号。DSP的PWM输出引脚连接到连接到电容触摸板的输入端,用于控制触摸的灵敏度。
总共需要连接四根线:GND、PWM、ADC1和ADC2
三、软件流程图及各功能对应的主要代码片段及说明
(一)软件流程图
开始
│
├── 初始化DSP和外设
│ ├── 配置PWM
│ ├── 配置ADC
│ └── 配置GPIO
│ └── 配置UART
│ └── 配置TMR
│
├── 进入主循环
│ ├── 生成PWM信号
│ ├── 采集ADC信号
│ ├── 处理触摸信号
│ │ ├── 滤波处理
│ │ ├── 触摸识别
│ └── 串口数据解析(用于调PWM参数)
│
└── 结束
上面是我总结出来的一个流程,用图片表示的话就是下面这样:
:
(二)主要代码片段及说明
1. 初始化DSP外设和指定终端函数
void TMR1_IQR(void)
{
ADC1.SoftwareTriggerEnable();
if(ADC_Select == 0)
{
adc1_value = ADC1.ConversionResultGet(Channel_AN2);
}
else if(ADC_Select == 1)
{
adc2_value = ADC1.ConversionResultGet(Channel_AN9);
}
ADC_Select++;
if(ADC_Select>2)
{
ADC_Select=0;
}
}
void UART1_RXIRQ(void)
{
if (rxIndex < BUF_SIZE - 1) {
rxBuffer[rxIndex] = UART1_Drv.Read();
if(rxBuffer[rxIndex] == 0x0A && rxBuffer[rxIndex-1] == 0x0D){
rxComplete = true;
rxIndex = 0;
return;
}
} else { // 缓冲区溢出
rxIndex = 0;
return;
}
rxIndex++;
}
SYSTEM_Initialize();
UART1_RxCompleteCallbackRegister(UART1_RXIRQ);
TMR1_TimeoutCallbackRegister(TMR1_IQR);
2. 配置PWM参数
if(pwm_enable)
{
PWM1.Enable();
}
else
{
PWM1.Disable();
}
PWM1.PeriodSet(4000000/pwm_period);
PWM1.DutyCycleSet(0.01*4000000/pwm_period*pwm_duty);
四、功能展示图片及说明
(一)功能展示图片
(二)说明
- 触摸前界面:显示PCB板电容触摸检测区域的初始状态,无触摸信号输入。
- 触摸后界面:当用户触摸电容触摸区域时,界面显示触摸坐标,证明触摸检测功能正常工作。
五、项目中遇到的难题和解决方法
(一)难题:触摸信号干扰
问题描述:在电容触摸检测过程中,受到周围环境电磁干扰,导致触摸信号不稳定。
解决方法:采用滤波算法对采集到的ADC信号进行滤波处理,减少噪声干扰。同时,优化PCB板布局,减少电磁干扰源对触摸传感器的影响。
(二)问题:编译下载的时候报Unable to read ID的错误
问题描述:无法下载程序,发现单独编译可以通过就是不能下载
解决方法:重启开发板(断电在上电)
六、对本活动的心得体会
本次项目让我认识到,硬件设计和软件编程是相辅相成的。只有充分理解硬件的工作原理,才能编写出高效的软件程序。
在本次活动中学习了如何使用Microchip 的DSP芯片,掌握了其PWM、ADC、UART、GPIO的使用,以及如何使用UART来调整参数,不用重复的修改下载
附件下载
pwm.X.zip
团队介绍
个人玩家
评论
0 / 100
查看更多
猜你喜欢
Funpack4-2 - 用SAME51J20A Curiosity Nano 触摸控制呼吸灯该项目使用了SAME51J20A Curiosity Nano,实现了触摸控制呼吸灯的设计,它的主要功能为:通过电容触摸模块实现左滑、右滑控制 WS2812B LED 呼吸灯的速率,并且在 OLED 上显示当前速度。
学嵌入式的Momo
32
Funpack4-2 - 用dsPIC33CK64MC105 Curiosity Nano 实现24V稳压电路。该项目使用了dsPIC33CK64MC105 Curiosity Nano,实现了BOOST电路的设计,它的主要功能为:12V输入 24V稳压输出。。
sll
53
Funpack4-2 - 基于dsPIC33CK64MC105 Curiosity Nano实现测量振动的频率使用dsPIC33CK64MC105 Curiosity Nano开发板,搭配振动传感器,使用片内的ADC和高速比较器配合振动传感器,将探头贴在物体外部,敲击后测出振动的固有频率
YYN-DIDIDI
10