近期绘制了一块esp32的开发板,上面集成了一些基本外设以及功能,其中包含了两个独立按键。但是这两个独立按键在焊好后只能使用一天,这就很奇怪了,简单的独立按键就是上拉和下拉,我使用了下拉的方式,原理图如下。
因为之前设计过相关电路是可以长期使用的,串联一个电阻对io口进行外部上拉,按下按钮实现下拉检测。
使用arduino简单测试代码,测试直接ADC读取,发现读出的电压为0,用外用表测电压发现是1.45v。测试io口的内部电阻上拉,发现电压还是不变,正常来说应该是3.3v。并且无论怎么设置io口的模式,io口的电平都稳定在1.45v,那么就是外部干扰了。
回到原理图去分析发现,上拉时将两个io口并联在一个电阻后面,导致按下按钮时会受到另一个io口上电压的影响。根据这个推测,将两个io口都设置成同一个输入模式,两个按钮分别控制一个LED的亮灭。果然,两个按钮分别按下时对LED的控制是一样的,那么就可以确定是两个按钮的被上拉的电压相互影响了,正确的做法是两个按钮分别串联两个按钮。
而这个开发版已经焊好了并且其他的功能的正常的,重新打板焊接又需要等一段时间,于是我发现,直接断开两个按钮之间的通路就可以不影响对方了。刚好我使用的按钮是4脚的,直接剪断其中连接的引脚就行,最后测试能正常使用。