GPIO基礎知識以及上下拉電阻(Pull up/down)
一、GPIO的基础知识
GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。GPIO口一是个比较重要的概念,用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。几乎所有的CPU、MCU都会具GPIO功能,以下是作者统计的GPIO的种类,几乎囊括了所有的MCU的GPIO类型。
- 输入浮空(Floating):即输入端口既不上拉(Pull up)也不下拉(Pull down),电平由外部输入决定;这种模式较少,一般模拟量输入、按键扫描输入使用该模式。
- 输入上拉(Pull up):即输入端口配置一个电阻接到电源(Power)端,该电阻可以使用芯片内置,也可以是外部电阻。
- 输入下拉(Pull down):即输入端口配置一个电阻到地(Ground),该电阻可以使用芯片内置,也可以是外部电阻。
- 模拟输入:模拟量信号输入,需要芯片内部支持AD转换功能才可以。
- 开漏输出: 漏极开路输出(OD) 和集电极开路输出(OC)十分相似,都是无法输出高电平,只能输出低电平,需要高电平时需要外接上拉电阻。
- 推挽式输出:推挽输出既可以输出高电平也可以输出低电平,无需外配置电阻。
- 推挽式复用功能:即推挽式输出和输入功能,使用时需要配置具体使用哪一种(雙方向端口,需要首先配置方向)。
- 开漏复用功能:即开漏输出和输入功能,使用时需要配置具体使用哪一种。
二、上下拉电阻作用
- 上拉(Pull up)就是将不确定的信号(X態)通过一个电阻嵌位在高电平(High),电阻同时起限流作用;下拉同理,下拉(Pull down)就是将不确定的信号(X態)通过一个电阻嵌位在低电平(Low),电阻同时起限流作用。
- 上拉(Pull Up)是对器件注入电流,下拉(Pull down)是输出电流。
- 弱强只是上拉电阻的阻值不同,没有什么严格区分。
- 对于非集电极(或漏极)开路输出型电路(如普通门电路)提升电流和电压的能力是有限的,上拉电阻(Pull-up resistor)的功能主要是为集电极开路输出(OC)型电路输出电流通道。
- 一般作单键触发使用时,如果IC本身没有内接电阻,为了使单键维持在不被触发的状态或是触发后回到原状态,必须在IC外部另接一电阻。
- 数字电路有三种状态:高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下拉电阻的方式使处于稳定状态,具体视设计要求而定!
- 一般说的是I/O端口,有的可以设置,有的不可以设置,有的是内置,有的是需要外接。
- 上拉电阻是用来解决总线驱动能力不足时提供电流的。一般说法是拉电流,下拉电阻是用来吸收电流的,也就是我们通常所说的灌电流。
- 在I/O引脚悬空时,接电阻就是为了防止输入端悬空,从而提高系统的抗干扰能力。减弱外部电流对芯片产生的干扰。
- 通过上拉或下拉来增加或减小驱动电流。
- 上下拉电阻改变电平的电位,常用在TTL-CMOS匹配。
- 上拉电阻可以为OC门或者OD门提供电流。
三、上拉电阻的应用场景
- 当TTL电路驱动COMS电路时,若TTL电路输出的高电平低于COMS电路的最低高电平(一般为3.5V),这时就需要在TTL的输出端接上拉电阻,以提高输出高电平值。注:此时上拉电阻连接的电压值应不低于CMOS电路的最低高电压,同时又要考虑TTL电路方电流(如某端口最大输入或输出电流)的影响。
- OC门或者OD门电路必须加上拉电阻,才能使用。
- 为加大输出引脚的驱动能力,有的单片机管脚上也常使用上拉电阻。
- 在COMS芯片上,为了防止静电造成损坏,不用的管脚不能悬空,一般接上拉电阻,降低输入阻抗,提供泄荷通路。
- 芯片的管脚加上拉电阻来提高输出电平,从而提高芯片输入信号的噪声容限增强抗干扰能力。
- 长线传输中电阻不匹配容易引起反射波干扰,加上下拉电阻是电阻匹配,有效的抑制反射波干扰。
- 在数字电路中不用的输入脚都要接固定电平,通过1k电阻接高电平或接地。
四、上拉电阻阻值选择原则
- 从节约功耗及芯片的灌电流能力考虑---上拉電阻应当足够大(电阻大,电流小)。
- 从确保足够的驱动电流考虑---上拉電阻应当足够小;电阻小,电流大。
- 对于高速电路,过大的上拉电阻可能边沿变平缓。综合考虑以上三点,上拉電阻阻值通常在1k到10k之间选取。对下拉电阻也有类似道理。
- 对上拉电阻和下拉电阻的选择应结合开关管特性和下级电路的输入特性进行设定,主要需要考虑以下几个因素:
(a)驱动能力与功耗的平衡。以上拉电阻为例,一般地说,上拉电阻越小,驱动能力越强,但功耗越大,设计是应注意两者之间的
均衡(tradeoff)。
(b)下级电路的驱动需求。同样以上拉电阻为例,当输出高电平时,开关管断开,上拉电阻应适当选择以能够向下级电路提供足够的电流。
(c)高低电平的设定。不同电路的高低电平的门槛电平会有不同,电阻应适当设定以确保能输出正确的电平。以上拉电阻为例,当输出低电平
时,开关管导通,上拉电阻和开关管导通电阻分压值应确保在零电平门槛之下。
(d)频率特性。以上拉电阻为例,上拉电阻和开关管漏源级之间的电容和下级电路之间的输入电容会形成RC延迟,电阻越大,延迟越大。上拉
电阻的设定应考虑电路在这方面的需求。
(e)关于电阻的参数不能一概而定,要看电路其他参数而定,比如通常用在输入脚上的上拉电阻如果是为了抬高峰峰值,就要参考该引脚
的内阻来定电阻值的!
(d)一般LED的电流有几个mA就够了,最大不超过20mA,根据这个你就应该可以算出上拉电阻值来了。
- 对于驱动晶体管,又分为PNP和NPN管两种情况:
a) 对于NPN:毫无疑问NPN管是高电平有效的,因此上拉电阻的阻值用2K~20K之间的。具体的大小还要看晶体管的集电极接的是什么负载,对于LED类负载,由于发管电流很小,因此上拉电阻的阻值可以用20k的,但是对于管子的集电极为继电器负载时,由于集电极电流大,因此上拉电阻的阻值最好不要大于4.7K,有时候甚至用2K的。
b) 对于PNP管:毫无疑问PNP管是低电平有效的,因此上拉电阻的阻值用100K以上的就行了,且管子的基极必须串接一个1~10K的电阻,阻值的大小要看管子集电极的负载是什么,对于LED类负载,由于发光电流很小,因此基极串接的电阻的阻值可以用20k的,但是对于管子的集电极为继电器负载时,由于集电极电流大,因此基极电阻的阻值最好不要大于4.7K。
- 对于驱动TTL集成电路,上拉电阻的阻值要用1~10K之间的,有时候电阻太大的话是拉不起来的,因此用的阻值较小。但是对于CMOS集成电路,上拉电阻的阻值就可以用的很大,一般不小于20K,通常用100K的。
- 关于I2C的上拉电阻:因为I2C接口的输出端是漏极开路或集电极开路,所以必须在接口外接上拉。上拉电阻的取值和I2C总线的频率有关,工作在standard mode时,其典型值为10K。在FAST mode时,为减少时钟上升时间,满足上升时间的要求,一般为1K。电阻的大小对时序有一定影响,对信号的上升时间和下降时间也有影响。总之一般情况下电压在5V时选4.7K左右,3.3V在3.3K左右.这样可加大驱动能力和加速边沿的翻转
五、實用場景詳解
5.1、拉电阻用于输入信号引脚
通常的作用是将信号线强制箝位至某个电平,以防止信号线因悬空而出现不确定的状态,继而导致系统出现不期望的状态,如下图所示:
- 在实际应用中,10K欧姆的电阻是使用数量最多的拉电阻。需要使用上拉电阻还是下拉电阻,主要取决于电路系统本身的需要,比如,对于高有效的使能控制信号(EN),我们希望电路系统在上电后应处于无效状态,则会使用下拉电阻。
- 假设这个使能信号是用来控制电机的,如果悬空的话,此信号线可能在上电后(或在运行中)受到其它噪声干扰而误触发为高电平,从而导致电机出现不期望的转动,这肯定不是我们想要的,此时可以增加一个下拉电阻。
- 而相应的,对于低有效的复位控制信号(RST#),我们希望上电复位后处于无效状态,则应使用上拉电阻。