开漏输出

今天给大家分享的是微控制器浮动输入和开漏输出。

一、浮动输入

首先,考虑双向(单刀双掷)开关情况当开关打开时,为控制输入将连接到 +3.3V,即高电平。当开关关闭时,微控制器输入将连接到 0V(即低电平)。但是,如果只有一个按钮怎么办?

1.png

开关打开

当按下按钮时,微控制器输入将连接到 0V(即低电平)。

2.png

按下按钮

然而,当未按下按钮时,微控制器输入并没有真正连接到组件:

3.png

未按下按钮

就好像没有连接一样:

4.png

等效

在这种情况下,输入电平是多少?高还是低?因为它没有真正连接到任何东西,所以输入可以是任何东西,具体取决于环境中的静电或电磁辐射。

它可能只是简单地接收无线电波(如天线)并在弱定义的高状态和低状态之间来回翻转。这种状态,其中微控制器输入没有明确定义并且可以是任何东西(随机),称为浮动。

二、上拉和下拉电阻

为了解决这个问题,需要在输入端添加一个上拉电阻或下拉电阻(上拉电阻如下图所示):

5.png

上拉电阻

当按钮未被按下时,上拉电阻会将微控制器输入拉至+3.3V,提供明确定义的高电平。当按下按钮时,微控制器输入将直接连接(短路)至地 (0V),提供明确定义的低电平。在这种情况下,一些电流将流过上拉电阻,但由于电阻值相对较高,因此电流量很小。

这里可以发现电阻符号看起来像一个小弹簧,这是它在这种情况下的功能。比如自动关闭的门,除非你主动打开门,不然的话,会有机制门会自动关闭。如果没有自动关闭机制(假设门没有闩锁机制),门会被进出的人移动,不会默认特定的位置。

上拉(或下拉)电阻类似于这些门上的自动关闭机制,因为它在未主动驱动时将输入保持在特定电平。

情况可以反过来,因为按钮可以连接到+3.3V(高),并且可以使用下拉电阻来保持输入低。不过,上拉电阻配置比较常见。

6.png

下拉电阻

三、开漏输出

一些微控制器输出可以设置为漏极开路(或仅可用作漏极开路)。开漏输出是只能驱动为低电平而不能驱动为高电平的输出;输出为低电平或浮动。

本质上,输出只是连接到晶体管的漏极引脚(因此称为开漏)。

7.png

开漏

当控制线被驱动为高电平时,晶体管将输出短路至地 (0V),将其拉低。当控制线被驱动为低电平时,晶体管处于高阻抗(高电阻)并且输出处于浮动状态。

一些通信方案,例如 I2C 和 CAN,使用它来允许多个设备通过相同的通信线路进行通信,而不会出现短路(冲突,即一个设备试图将线路驱动为高电平,而另一个设备试图将线路驱动为高电平)。它很低)。

在这些情况下,上拉电阻用于在未主动将线路驱动为低电平时将线路保持为高电平。

来源:电路一点通

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 35

GPIO的功能,简单说就是可以根据自己的需要去配置为输入或输出。但是在配置GPIO管脚的时候,常会见到两种模式:开漏(open-drain,漏极开路)和推挽(push-pull)。

Push-Pull推挽输出

输出的器件是指输出脚内部集成有一对互补的MOSFET,当Q1导通、Q2截止时输出高电平;而当Q1截止导通、Q2导通时输出低电平

Push-pull输出,实际上内部是用了两个晶体管(transistor),此处分别称为top transistor和bottom transistor。通过开关对应的晶体管,输出对应的电平。top transistor打开(bottom transistor关闭),输出为高电平;bottom transistor打开(top transistor关闭),输出低电平。Push-pull即能够漏电流(sink current),又可以集电流(source current)。其也许有,也许没有另外一个状态:高阻抗(high impedance)状态。除非Push-pull需要支持额外的高阻抗状态,否则不需要额外的上拉电阻。

Open-Drain开漏输出

开漏电路就是指以MOSFET的漏极为输出的电路。指内部输出和地之间有个N沟道的MOSFET(Q1),这些器件可以用于电平转换的应用。输出电压由Vcc'决定。Vcc'可以大于输入高电平电压VCC(up-translate)也可以低于输入高电平电压VCC(down-translate)。

Open-drain输出,则是比push-pull少了个top transistor,只有那个bottom transistor。(就像push-pull中的那样)当bottom transistor关闭,则输出为高电平。此处没法输出高电平,想要输出高电平,必须外部再接一个上拉电阻(pull-up resistor)。Open-drain只能够漏电流(sink current),如果想要集电流(source current),则需要加一个上拉电阻。

老外的理解

常见的GPIO的模式可以配置为open-drain或push-pull,具体实现上,常为通过配置对应的寄存器的某些位来配置为open-drain或是push-pull。当我们通过CPU去设置那些GPIO的配置寄存器的某位(bit)的时候,其GPIO硬件IC内部的实现是,会去打开或关闭对应的top transistor。相应地,如果设置为了open-d模式的话,是需要上拉电阻才能实现,也能够输出高电平的。因此,如果硬件内部(internal)本身包含了对应的上拉电阻的话,此时会去关闭或打开对应的上拉电阻。如果GPIO硬件IC内部没有对应的上拉电阻的话,那么你的硬件电路中,必须自己提供对应的外部(external)的上拉电阻。而push-pull输出的优势是速度快,因为线路(line)是以两种方式驱动的。而带了上拉电阻的线路,即使以最快的速度去提升电压,最快也要一个常量的R×C的时间。其中R是电阻,C是寄生电容(parasitic capacitance),包括了pin脚的电容和板子的电容。但是,push-pull相对的缺点是往往需要消耗更多的电流,即功耗相对大。而open-drain所消耗的电流相对较小,由电阻R所限制,而R不能太小,因为当输出为低电平的时候,需要sink更低的transistor,这意味着更高的功耗。(此段原文:because the lower transistor has to sink that current when the output is low; that means higher power consumption.)而open-drain的好处之一是,允许你cshort(?)多个open-drain的电路,公用一个上拉电阻,此种做法称为wired-OR连接,此时可以通过拉低任何一个IO的pin脚使得输出为低电平。为了输出高电平,则所有的都输出高电平。此种逻辑,就是“线与”的功能,可以不需要额外的门(gate)电路来实现此部分逻辑。

图表 4 open-drain“线与”功能

GPIO的推挽输出和开漏输出

GPIO的推挽输出和开漏输出

优点

Push-Pull推挽输出

(1)可以吸电流,也可以贯电流;

(2)和开漏输出相比,push-pull的高低电平由IC的电源低定,不能简单的做逻辑操作等。

Open-Drain开漏输出

(1)对于各种电压节点间的电平转换非常有用,可以用于各种电压节点的Up-translate和down-translate转换

(2)可以将多个开漏输出的Pin脚,连接到一条线上,形成“与逻辑”关系,即“线与”功能,任意一个变低后,开漏线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的原理。

(3)利用 外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。

(4)可以利用改变上拉电源的电压,改变传输电平:图表 5 open-drain输出电平的原理,IC的逻辑电平由电源Vcc1决定,而输出高电平则由Vcc2决定。这样我们就可以用低电平逻辑控制输出高电平逻辑了。

GPIO的推挽输出和开漏输出

缺点

Push-Pull推挽输出

一条总线上只能有一个push-pull输出的器件;

在CMOS电路里面应该叫CMOS输出更合适,因为在CMOS里面的push-pull输出能力不可能做得双极那么大。输出能力看IC内部输出极N管P管的面积。push-pull是现在CMOS电路里面用得最多的输出级设计方式

Open-Drain开漏输出

开漏Pin不连接外部的上拉电阻,则只能输出低电平。当输出电平为低时,N沟道三极管是导通的,这样在Vcc'和GND之间有一个持续的电流流过上拉电阻R和三极管Q1。这会影响整个系统的功耗。采用较大值的上拉电阻可以减小电流。但是,但是大的阻值会使输出信号的上升时间变慢。即上拉电阻R pull-up的阻值 决定了逻辑电平转换的沿的速度。阻值越大,速度越低功耗越小。反之亦然。

转自: wair-博客

围观 1033

本文主要介绍集电极开路输出、开漏输出、推挽输出的基本概念:

集电极开路(OC)输出:

集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所以叫做集电极开路(左边的三极管为反相之用,使输入为"0"时,输出也为"0")。对于图1,当左端的输入为“0”时,前面的三极管截止(即集电极C跟发射极E之间相当于断开),所以5V电源通过1K电阻加到右边的三极管上,右边的三极管导通(即相当于一个开关闭合);当左端的输入为“1”时,前面的三极管导通,而后面的三极管截止(相当于开关断开)。

我们将图1简化成图2的样子。图2中的开关受软件控制,“1”时断开,“0”时闭合。很明显可以看出,当开关闭合时,输出直接接地,所以输出电平为0。而当开关断开时,则输出端悬空了,即高阻态。这时电平状态未知,如果后面一个电阻负载(即使很轻的负载)到地,那么输出端的电平就被这个负载拉到低电平了,所以这个电路是不能输出高电平的。

再看图三。图三中那个1K的电阻即是上拉电阻。如果开关闭合,则有电流从1K电阻及开关上流过,但由于开关闭和时电阻为0(方便我们的讨论,实际情况中开关电阻不为0,另外对于三极管还存在饱和压降),所以在开关上的电压为0,即输出电平为0。如果开关断开,则由于开关电阻为无穷大(同上,不考虑实际中的漏电流),所以流过的电流为0,因此在1K电阻上的压降也为0,所以输出端的电压就是5V了,这样就能输出高电平了。但是这个输出的内阻是比较大的(即1KΩ),如果接一个电阻为R的负载,通过分压计算,就可以算得最后的输出电压为5*R/(R+1000)伏,即5/(1+1000/R)伏。所以,如果要达到一定的电压的话,R就不能太小。如果R真的太小,而导致输出电压不够的话,那我们只有通过减小那个1K的上拉电阻来增加驱动能力。但是,上拉电阻又不能取得太小,因为当开关闭合时,将产生电流,由于开关能流过的电流是有限的,因此限制了上拉电阻的取值,另外还需要考虑到,当输出低电平时,负载可能还会给提供一部分电流从开关流过,因此要综合这些电流考虑来选择合适的上拉电阻。

漏极开路(OD)输出:

漏极开路(OD)输出,跟集电极开路输出是十分类似的。将上面的三极管换成场效应管即可。这样集电极就变成了漏极,OC就变成了OD,原理分析是一样的。对于漏极开路(OD)来说,必须在漏极输出端接上拉电阻,否则只能输出低电平。

推挽(Push-Pull)输出:

一般指两三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个三极管截止,就刚好形成了推挽相连。这样的电路也称为推拉式或Totem-pole电路。推挽电路适用于低电压大电流的场合,广泛应用于开关电源和功放电路中。简化电路图如下所示:

简单理解:推挽输出的结构就是把上面的上拉电阻也换成一个开关,当要输出高电平时,上面的开关通,下面的开关断;而要输出低电平时,则刚好相反。比起OC或者OD来说,这样的推挽结构高、低电平驱动能力都很强。如果两个输出不同电平的输出口接在一起的话,就会产生很大的电流,有可能将输出口烧坏。而上面说的OC或OD输出则不会有这样的情况,因为上拉电阻提供的电流比较小。如果是推挽输出的要设置为高阻态时,则两个开关必须同时断开(或者在输出口上使用一个传输门),这样可作为输入状态。

推挽输出举例:传统8051单片机的I/O接口只可以作为标准双向输入/输出接口,如果用其来驱动LED则只能用灌电流的方式或是用三极管外扩驱动电路。灌电流方式是将LED正极接在VCC上,负极接在I/O接口上,当I/O接口为高电平时LED两极的电平相同,没有电流,LED为熄灭状态。当I/O接口为低电平时,电流从VCC流入I/O接口,LED点亮。当把LED正极接在I/O接口,负极接在GND,将I/O接口置于高电平时,LED会点亮,但因为I/O接口上拉能力不足而使亮度不理想。推挽工作方式就是具有强上拉能力的工作方式,它可以实现高电平驱动LED。

惊喜出现了,把LED正负极分别接在两个I/O接口上,然后设置正极的I/O接口为推挽输出,负极的I/O接口为标准双向灌电流输入,结果会怎么样呢?非常好,我们可以直接用I/O接口驱动LED而不需要VCC和GND。LED点阵屏就是多个LED的阵列连接,只要把LED点阵屏的所有引脚接在I/O接口上,然后根据LED点阵屏的引脚定义,将对应正极的I/O接口设置成推挽,将对应负极的I/O接口设置成标准双向输入,余下的就是把将要点亮的LED点阵屏上的点所对应的行列线分别给予高低电平,那么一切就尽在掌握之中。

文章来源:博客园

(直接点击图片可进入调查页面)

开发板测评图片
围观 309
订阅 RSS - 开漏输出