我们会经常听到弱上拉、弱下拉,还有与之相对应的强上拉、强下拉。强、弱到底是什么概念?阻值多大算是强和弱?
当开关闭合时,MCU IO检测到0,但是当时开关开启时,IO引脚处于floating状态,容易受干扰而处于未知状态。
那么这个阻值该用多大呢?
首先阻值不能太小,因为太小,开关闭合时会产生较大的电流,会引起一来功耗大,二来也不安全。试想一下电阻为0是什么后果。
另外阻值也不能太大,阻值太大,上拉/下拉的作用就变弱,越大越接近于开路,开关断开时IO就越接近于浮空状态,就越容易受干扰。试想一下阻值无穷大是什么效果。
所以这个电阻既不太大,也不太小,一般是几K到几十K大小,兼顾了功耗和上下拉作用。
这里就引入了强弱的概念,弱就是阻值大,强就是阻值小。
上拉 | 下拉 | |
弱 | 电阻大,电流小,上拉效果弱 | 电阻大,电流小,下拉效果弱 |
强 | 电阻小,电流大,上拉效果强 | 电阻小,电流大,下拉效果强 |
注意这只是个相对概念。
这个上拉电阻的阻值选取也是有讲究的,也是既不能太小,也不能太大。因为太小的话,IO口上就会承受较大的输入电流,而IO的输入电流是有限制的。太大的话,会影响IIC的通信速度,因为总线上还有负载电容,电阻太大,电容充放电时间就会久,影响上升沿、下降沿时间。关于这个具体计算,可以参考TI的一篇文档:https://www.ti.com/lit/ml/slva689/slva689.pdf?ts=1679814584051