天气: 晴朗
心情: 高兴
关于集电极开路(
OC)或漏极开路(
OD)输出的结构:
我们先来说说集电极开路输出的结构。集电极开路输出的结构如图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的上拉电阻
来增加驱动能力。但是,上拉电阻又不能取得太小,因为当开关闭合时,将产生电流,由于开关能流过的电流是有限的,
因此限制了上拉电阻的取值,另外还需要考虑到,当输出低电平时,负载可能还会给提供一部分电流从开关流过,因此要
综合这些电流考虑来选择合适的上拉电阻。
如果我们将一个读数据用的输入端接在输出端,这样就是一个IO口了(51的IO口就是这样的结构,其中P0口内部不带上拉,
而其它三个口带内部上拉),当我们要使用输入功能时,只要将输出口设置为1即可,这样就相当于那个开关断开,而对于P0口来说,
就是高阻态了。
另一种输出结构是推挽输出。推挽输出的结构就是把上面的上拉电阻也换成一个开关,当要输出高电平时,上面的开关通,
下面的开关断;而要输出低电平时,则刚好相反。比起
OC或者
OD来说,这样的推挽结构高、低电平驱动能力都很强。如果两个输出
不同电平的输出口接在一起的话,就会产生很大的电流,有可能将输出口烧坏。而上面说的
OC或
OD输出则不会有这样的情况,因为
上拉电阻提供的电流比较小。如果是推挽输出的要设置为高阻态时,则两个开关必须同时断开(或者在输出口上使用一个传输门),
这样可作为输入状态,
AVR单片机的一些IO口就是这种结构。
OC门, 又称集电极开路(漏极开路)与非门门电路,Open Collector(Open Drain)。为什么引入OC门?实际使用中,有时需要两个或两个以上与非门的输出端连接在同一条导线上,将这些与非门上的数据(状态电平)用同一条导线 输送出去。因此,需要一种新的与非门电路--OC门来实现“线与逻辑”。OC门主要用于3个方面:实现与或非逻辑,用做电平转换,用做驱动器。由于OC门 电路的输出管的集电极悬空,使用时需外接一个上拉电阻Rp到电源VCC。OC门使用上拉电阻以输出高电平,此外为了加大输出引脚的驱动能力,上拉电阻阻值 的选择原则,从降低功耗及芯片的灌电流能力考虑应当足够大;从确保足够的驱动电流考虑应当足够小。
线与逻辑, 即两个输出端(包括两个以上)直接互连就可以实现“AND”的逻辑功能。在总线传输等实际应用中需要多个门的输出端并联连接使用,而一般TTL门输出端并 不能直接并接使用,否则这些门的输出管之间由于低阻抗形成很大的短路电流(灌电流),而烧坏器件。在硬件上,可用OC门或三态门(ST门)来实现。用OC 门实现线与,应同时在输出端口应加一个上拉电阻。
三态门(ST门)主要用在应用于多个门输出共享数据总线,为避免多个门输出同时占用数据总线,这 些门的使能信号(EN)中只允许有一个为有效电平(如高电平),由于三态门的输出是推拉式的低阻输出,且不需接上拉(负载)电阻,所以开关速度比 OC门快,常用三态门作为输出缓冲器。