触摸按键用MCU直接做,自电容和互电容选错灵敏度过不去
前阵子有个学员跟我吐槽说用STM32做触摸按键灵敏度怎么调都不对。阈值设小了容易误触发设大了又按不动换了几个电容值都不行。他都快怀疑人生了——是不是芯片坏了我问他用的什么方案他说就普通的单按键检测。我一看他的PCB好家伙明明是个需要多点触控的场景结果用的是自电容方案。这问题就出在这儿了自电容和互电容的选择搞错了调试就是在做无用功。自电容简单粗暴单点按键的首选先说自电容。这个方案的原理挺好理解的——每个触摸电极单独测量手指靠近电极时人体作为地极和电极之间形成一个电容这个电容值会变大ADC一检测就知道有没有人按。自电容原理手指触摸改变电极与地之间的耦合电容自电容最大的优点是灵敏度高。手指和电极之间的耦合本来就比较强信号变化幅度大用普通的MCU内部ADC就能稳定检测。所以如果你只需要做几个独立的按键比如家电面板上的电源键、模式键、-键用自电容完全够用而且调试特别简单。但是自电容有个硬伤——不支持真正的多点触控。两个电极靠得近的时候手指会同时影响两个电极产生所谓的鬼点问题。所以如果你想做滑条、手势识别或者类似手机触摸屏那种东西自电容就歇菜了。另外自电容对走线要求相对宽松一点但也不是随便走。走线太长的话寄生电容太大信噪比会变差。所以电极到MCU的距离尽量短别绕来绕去的。互电容复杂但强大多点触控离不开它再说互电容。这个方案的思路不太一样——用TX发射极和RX接收极两组电极形成网格测量的是TX和RX交叉点处的耦合电容。手指放在交叉点上会改变该点局部区域的耦合情况。互电容原理TX与RX交叉网格测量点对点耦合电容变化互电容的核心优势是支持多点触控和手势识别。滑条、触控板、触摸屏这些应用场景离开互电容根本玩不转。而且互电容可以做成更大的触摸区域灵敏度分布更均匀。但是互电容的灵敏度天生就比自电容低。为什么因为测量的是两个电极之间的耦合信号变化幅度本来就小。加上走线更长、寄生参数更多噪声问题也更突出。我见过不少工程师把互电容用在简单按键上结果怎么调灵敏度都不对——设大了按不动设小了噪声都能触发。这不是因为代码写得烂是因为方案本身就不适合这个场景。选错了会怎样踩坑实录这个问题在工作中太常见了我总结了几种典型的踩坑场景坑1把互电容用在简单按键上。做了5个独立按键选了互电容方案调试的时候发现灵敏度死活上不去阈值抖动厉害还动不动误触发。其实换个自电容问题迎刃而解还省了TX/RX布线的麻烦。坑2需要滑条却用了自电容。想做电动牙刷上的滑动调档以为多加几个电极就行了。结果滑过去的时候数值跳来跳去根本不能线性变化。这是因为自电容检测的是每个电极的绝对电容值手指滑动时会影响相邻好几个电极。坑3走线方式不匹配方案特性。自电容方案走了很长的蛇形线结果寄生电容太大信号基线漂移调试的时候怀疑是环境温湿度问题。互电容TX/RX走线没有保持等间距网格区域电容分布不均。怎么选按需决策说了这么多到底怎么选我画了个简单的决策逻辑只需要几个独立按键→ 选自电容需要滑条/触控板/多点触控→ 选互电容看起来很简单对吧但实际操作中很多人会犯迷糊。我个人的经验是在方案设计阶段就把这个问题想清楚不要等到PCB打样回来调试才发现不对。还要考虑MCU的资源消耗。自电容方案每个按键占一个ADC通道扫描速度快CPU开销小。互电容需要扫描整个TX/RX矩阵扫描时间更长对实时性要求高的场景要注意。PCB设计要点不管选哪种方案PCB设计都有一些共性的注意事项触摸按键PCB布局示例注意电极周围的铺铜和走线规划自电容PCB要点• 电极到MCU的走线尽量短控制在5cm以内• 走线宽度别太细0.2mm以上比较稳• 远离大电流走线和开关电源• 电极周围可以铺地但别铺太近会影响灵敏度互电容PCB要点• TX和RX走线保持等间距形成均匀网格• 走线用45度角或圆弧避免直角转弯• TX/RX交叉区域是敏感区这个区域别铺地• 整个触摸区域下面最好有一层完整的地平面实战建议如果你现在正在做触摸按键项目有几点建议第一需求先定义清楚。到底是单点按键还是需要多点触控这个必须在项目一开始就定下来后期改方案代价很大。第二先用模块验证再定制PCB。很多MCU原厂有触摸按键评估板先拿这个验证方案可行性确认灵敏度、稳定性都OK再投钱打样。第三调试的时候先测信噪比。很多人的问题是阈值不知道怎么设其实你应该先测出无触摸时的噪声幅度最大值然后按这个值留出足够裕量来设阈值。说实话触摸按键这个技术现在已经很成熟了坑大多都是早期选型的时候埋下的。希望这篇文章能帮你绕开那些常见的弯弯绕绕。