PIC18F26K40使用mTouch库实现CVD电容触摸按键无检测响应问题求助
问题解答
1. 什么是差分CVD?
差分CVD是普通电容分压检测的增强实现,工作时会同时采集触摸感应引脚和参考引脚的电容参数,通过差值计算抵消电源波动、温度漂移、环境电磁干扰等共模干扰,检测稳定性远高于单端CVD模式。
2. 什么是driver shield?我是否需要使用该功能?
driver shield是驱动屏蔽功能,原理是输出与触摸引脚电平完全同步的驱动信号,连接到触摸走线周围的屏蔽层或相邻闲置走线,避免触摸走线和周围导体产生寄生电容消耗电荷、降低检测灵敏度。如果你的触摸走线长度超过2cm、或周围存在高频走线、电源层,建议开启;如果是短走线的极简测试场景可以不用,优先排查其他问题。
3. 我是否需要使用2个模拟通道?
如果使用单端CVD模式,仅1个模拟通道接RB0即可满足单按键检测需求;只有开启差分CVD模式时,才需要额外增加1个模拟通道接参考电容或悬空做参考输入,你当前的单按键测试场景用单通道足够。
4. 之前开发过PIC18F26K22的CTMU模式,CVD是否可以像CTMU一样使用?
两者上层应用逻辑完全一致,都是通过检测引脚的电容变化判断触摸状态,你之前CTMU项目用到的触摸阈值校准、消抖、多按键扫描逻辑都可以直接复用。仅底层检测原理不同:CTMU靠恒流源给感应电容充电计时计算电容值,CVD靠电容分压后ADC采样换算电容值。
5. 可行解决方案
基于mTouch库的排查修复步骤
- 配置检查:确认MCC中RB0的模拟功能已开启,无上拉下拉,TRIS位默认配置为输入;mTouch的按键触发阈值先从默认值调低到30~50,大部分初次调试触发失败都是因为阈值设置过高。
- 调试验证:在主循环中添加串口打印逻辑,输出
MTOUCH_Button_GetRawValue(0)(触摸原始值)和MTOUCH_Button_GetThreshold(0)(触发阈值),观察触摸时原始值的变化幅度,手动将阈值设为变化幅度的60%左右即可。 - 硬件检查:触摸按键覆铜面积建议保持在0.5~1.5cm²,走线长度尽量短,不要跨电源层走线,RB0引脚不要外接任何上拉/下拉电容、电阻。
不依赖mTouch库的简易CVD实现
#include <xc.h> #define HIGH 1 #define LOW 0 #define OUTPUT 0 #define INPUT 1 #define LED_TRIS TRISAbits.TRISA0 // 按需修改为你的LED对应TRIS位 #define LED_LAT LATAbits.LATA0 // 按需修改为你的LED对应LAT位 // RB0对应的ADC通道号,PIC18F26K40的RB0对应AN12 #define TOUCH_ADC_CH 12 uint16_t touch_base_val = 0; // 无触摸时的基准采样值 // 单次触摸采样函数 uint16_t touch_sample(void) { uint16_t sample_res; // 放电阶段 LATBbits.LATB0 = LOW; TRISBbits.TRISB0 = OUTPUT; __delay_us(10); // 切换为浮空输入待采样 TRISBbits.TRISB0 = INPUT; ADCON0bits.CHS = TOUCH_ADC_CH; // 启动ADC采样 ADCON0bits.GO_nDONE = 1; while(ADCON0bits.GO_nDONE); sample_res = ADRES; return sample_res; } void main(void) { SYSTEM_Initialize(); INTERRUPT_GlobalInterruptEnable(); INTERRUPT_PeripheralInterruptEnable(); LED_TRIS = OUTPUT; // 上电校准基准值,采样10次取平均 for(uint8_t i = 0; i < 10; i++) { touch_base_val += touch_sample(); __delay_ms(10); } touch_base_val = touch_base_val / 10; while (1) { uint16_t current_val = touch_sample(); // 触摸时感应电容变大,采样值会低于基准值,差值超过20判定为按下,可按需调整 if((touch_base_val - current_val) > 20) { LED_LAT = HIGH; } else { LED_LAT = LOW; } __delay_ms(10); } }
内容的提问来源于stack exchange,提问作者Tushar Yadav
相关产品推荐
相关产品推荐

