IO输出类型的细分与区别

分享到:

I/O输入/输出(Input/Output)分为IO设备和IO接口两个部分。在POSIX兼容的系统上,比如Linux系统,可以采用多种方式进行I/O操作,如DIO(Direct I/O,直接I/O)、AIO(Asynchronous I/O,异步I/O)、Memory-Mapped I/O(内存映射I/O)等。不同的I/O方式有不同的实现方式和性能,可以根据具体应用的需求选择适合的I/O方式。那么,如何区分各种I/O输出的类型呢?
一、各种I/O输出的类型-集电极开路(OC)
集电极开路输出的结构如图1所示。右边的三极管集电极未连接任何元件,因此被称为集电极开路。左边的三极管用于反相作用,使得输入为“0”时,输出也为“0”。对于图1,当左端的输入为“0”时,前面的三极管截止,因此5V电源通过1k电阻加到右边的三极管上,使右边的三极管导通;当左端的输入为“1”时,前面的三极管导通,而后面的三极管截止。
我们可以将图1简化为图2的形式。显然可以看出,当开关闭合时,输出直接接地,因此输出电平为0。而当开关断开时,输出端悬空,即处于高阻态。此时,输出电平的状态是未知的。如果后面接了一个电阻负载到地,那么输出端的电平就会被这个负载拉低,因此这个电路无法输出高电平。
图3中的1k电阻被称为上拉电阻。当开关合上时,电流通过1k电阻和开关流过。由于开关接近零电阻(在讨论中假设为零,实际情况中开关电阻不为零,还需考虑三极管的饱和压降),所以开关上的电压为零,即输出电平为零。当开关断开时,由于开关电阻为无穷大(同样不考虑实际中的漏电流),电流为零,因此1k电阻上的电压也为零,输出端的电压就是5V,从而实现了高电平输出。
然而,这种输出方式的内部电阻较大,即1kΩ。如果接入一个负载电阻为r,通过分压计算,最终输出电压为5r/(r+1000)伏特。因此,要达到一定的输出电压,r不能太小。如果r过小导致输出电压不够,我们只能通过减小1k上拉电阻的值来增加驱动能力。但上拉电阻也不能取得太小,因为当开关合上时,将产生电流,而开关能够承受的电流是有限的,因此限制了上拉电阻的取值范围。此外,还需考虑到当输出为低电平时,负载可能会提供一部分电流通过开关,因此需要综合考虑这些电流来选择合适的上拉电阻。
当我们将一个用于数据读取的输入端连接到输出端时,就形成了一个IO口。例如,51单片机的IO口采用了这种结构,其中P0口没有内部上拉电阻,而其他三个口具有内部上拉电阻。当需要使用输入功能时,只需将输出口设置为1,相当于开关断开,对于P0口来说,它处于高阻态。
对于漏极开路(OD)输出,与集电极开路输出非常类似,只需将三极管替换为场效应管即可。这样集电极就变成了漏极,OC就变成了OD,原理分析是一样的。漏极开路电路主要用于以下三个方面:实现与、或、非逻辑;用作电平转换;用作驱动器。
漏极开路电路具有以下特点:
  1. 利用外部电路的驱动能力,减少集成电路内部的驱动或驱动比芯片电源电压高的负载。
 
  1. 可以将多个漏极开路输出引脚连接到同一条线上。通过上拉电阻,不需要增加任何元件,可以形成"与逻辑"关系。这也是I2C、SMBus等总线判断总线占用状态的原理。
 
  1. 由于漏极开路,后级电路必须连接上拉电阻,上拉电阻的电源电压可以确定输出电平,实现任意电平的转换。
 
  1. 漏极开路提供了灵活的输出方式,但也有其缺点,即上升沿延时较长。因为上升沿是通过外部上拉无源电阻对负载进行充电,所以当电阻选择较小时,延时较小但功耗较大;反之,延时较大但功耗较小。因此,如果对延时有要求,建议使用下降沿输出方式。
三、各种IO输出的类型-推挽输出
另一种输出结构是推挽输出。推挽输出的结构就是把上面的上拉电阻也换成一个开关,当要输出高电平时,上面的开关通,下面的开关断;而要输出低电平时,则刚好相反。
比起OC或者OD来说,这样的推挽结构高、低电平驱动能力都很强。如果两个输出不同电平的输出口接在一起的话,就会产生很大的电流,有可能将输出口烧坏。而上面说的OC或OD输出则不会有这样的情况,因为上拉电阻提供的电流比较小。如果是推挽输出的要设置为高阻态时,则两个开关必须同时断开(或者在输出口上使用一个传输门),这样可作为输入状态,AVR单片机的一些IO口就是这种结构。
四、各种IO输出的类型-驱动电路的两种形式
单片机内部的逻辑经过内部的逻辑运算后需要输出到外面,外面的器件可能需要较大的电流才能推动,因此在单片机的输出端口必须有一个驱动电路。
1、采用一只N型三极管
其中的一种是采用一只N型三极管 —— NPN或N沟道,以NPN三极管为例,就是e接地,b接内部的逻辑运算,c引出。b受内部驱动可以控制三极管是否导通,但如果三极管的c极一直悬空,尽管b极上发生高低变化,c极上也不会有高低变化,因此在这种条件下必须在外部提供一个电阻,电阻的一端接c(引出脚)另一端接电源,这样当三极管的b有高电压时三极管导通,c电压为低,当b为低电压时三极管不通,c极在电阻的拉动下为高电压。
这种驱动电路有个特点:低电压是三极管驱动的,高电压是电阻驱动的——上下不对称,三极管导通时的ec内阻很小,因此可以提供很大的电流,可以直接驱动led甚至继电器,但电阻的驱动是有限的,最大高电平输出电流=(VCC-Vh)/r。
2、采用两只晶体管
另一种是互补推挽输出,采用两只晶体管,一只在上一只在下,上面的一只是n型,下面为p型(以三极管为例),两只管子的连接为:NPN(上)的c连VCC,PNP(下)的c接地,两只管子的ee,bb相连,其中ee作为输出(引出脚),bb接内部逻辑。这个电路通常用于功率放大点路的末级(音响),当bb接高电压时NPN管导通输出高电压,由于三极管的ec电阻很小,因此输出的高电压有很强的驱动能力,当bb接低电压时NPN截至,PNP导通,由于三极管的ec电阻很小因此输出的低电压有很强的驱动能力。
简单的例子,9013导通时ec电阻不到10欧,以Vh=2.5v,VCC=5v计算,高电平输出电流最大=250MA,短路电流500mA,这个计算同时告诉我们采用推挽输出时一定要小心千万不要出现外部电路短路的可能,否则肯定烧毁芯片,特别是外部驱动三极管时别忘了在三极管的基极加限流电阻。推挽输出电路的形式很多,有些单片机上下都采用n型管,但内部逻辑提供互补输出,以上的说明仅仅为了说明推挽的原理,为了更深的理解可以参考功率放大电路。
五、各种IO输出的类型-上拉电阻和弱上拉
上拉电阻很大,提供的驱动电流很小叫弱上拉,反之叫强上拉。
  1. 为什么要使用上拉电阻?
上拉电阻的作用是将不确定的信号通过一个电阻拉到高电平,并起到限流作用。类似地,下拉电阻则将信号拉到低电平。上拉电阻注入电流,下拉电阻输出电流,弱和强只是上拉电阻的阻值不同,并没有严格的区分。对于非OC(开漏)或OD(开漏)输出电路来说,提升电流和电压的能力有限,上拉电阻的主要功能是为集电极开路输出型电路提供电流通道。
  1. 上拉电阻的主要应用:
  • 当TTL电路驱动CMOS电路时,如果TTL电路输出的高电平低于CMOS电路的最低高电平(一般为3.5V),就需要在TTL的输出端接上拉电阻,以提高输出高电平的值。
  • OC门电路要输出逻辑高电平时,需要加上拉电阻,不加的话基本上无法实现高电平输出。
  • 为了增加输出引脚的驱动能力,有些单片机的引脚上也常常使用上拉电阻。但是,在使用OC门进行驱动(例如控制LED)且注入电流工作时,可以不加上拉电阻。
  • 在CMOS芯片上,为了防止静电造成损坏,不使用的引脚不能悬空,一般接上拉电阻以降低输入阻抗,并提供泄电通路。
  • 提高总线的抗电磁干扰能力。悬空的引脚更容易受到外界的电磁干扰。
  • 在长线传输中,电阻不匹配容易引起反射波干扰,加上上拉或下拉电阻可以实现电阻匹配,有效抑制反射波干扰。
 
  1. 上拉电阻阻值的选择原则包括:
  • 从节约功耗和芯片的注入电流能力考虑,应选择足够大的电阻(电阻大,电流小)。
  • 从确保足够的驱动电流考虑,应选择足够小的电阻(电阻小,电流大)。
  • 对于高速电路,过大的上拉电阻可能导致边沿变得平缓。
综合考虑以上三点,通常在1k到10k之间选择上拉电阻的阻值。对于下拉电阻也有类似的选择原则。
六、各种IO输出的类型-三态门
高阻态时,引脚对地电阻无穷大,此时可以读取真实的电平值。高阻态的主要作用是在输入时读取外部电平的I/O(输入/输出)口。一般门与其他电路的连接只有两种状态,即1或0。但在较复杂的系统中,为了在一条传输线上传送不同部件的信号,研制了相应的逻辑器件,称为三态门。
三态门除了具有1和0两种状态外,还有一个高阻态,即高阻抗状态(电阻很大,相当于开路)。这意味着该门与其连接的电路处于断开状态。三态门是一种扩展逻辑功能的输出级,也是一种控制开关。

三态门主要用于总线的连接,因为总线只允许同时有一个使用者。通常在数据总线上连接多个器件,每个器件通过OE/CE等信号进行选通。如果器件没有被选通,它就处于高阻态,相当于没有连接到总线上,不会影响其他器件的工作。
继续阅读
IO输出类型的细分与区别

I/O输入/输出(Input/Output),分为IO设备和IO接口两个部分。 在POSIX兼容的系统上,例如Linux系统,I/O操作可以有多种方式,比如DIO(Direct I/O),AIO(Asynchronous I/O,异步I/O),Memory-Mapped I/O(内存映射I/O)等,不同的I/O方式有不同的实现方式和性能,在不同的应用中可以按情况选择不同的I/O方式。