标签:
最近画的一块板子中用到了六路同相门芯片74HC07作为电平转换,将FPGA产生的3.3V信号转换为5V,但是没有注意到74HC07的输出是开漏结构(以为给74HC07一个5V电源就可以将输入的3.3V电平转换为5V电平输出……囧……,好吧我承认我是菜鸟),结果可想而知,板子拿回来完全不能用,只好用飞线给74HC07的几个输出口接了1K的上拉电阻,这样板子才正常工作了,但是板子上接了一堆的飞线,怎么看都觉得不爽,哎,都是这个开漏结构给害的……
于是乎,在做下一版之前,我仔细研究了一下这个开漏输出结构,发现芯片的IO口结构还是很有学问的,下面以51单片机的输出口结构为例,介绍一下常见的几种输出口结构:
1. 准双向口结构
准双向口,也就是说不是真正的双向口,真正意义上的双向口是需要通过设置专门的“输入输出方向寄存器”将IO口设为输入模式或者输出模式,才能实现对应的输入输出功能。而准双向口则不需要设置,作为输出时直接向口线寄存器写;作为输入时则需要先向IO口写1再去读。准双向口的内部电路结构如下如所示:
图1 准双向口内部电路结构
由图可以看出当口线寄存器为1时,左边的场效应管断开,右边的场效应管导通,于是输出被电源上拉为1,输出高电平;当口线寄存器为0时,左边的管子导通,右边的管子截止,输出管脚相当于直接通过左边的管子接地,输出低电平。在读取数据时,如果口线寄存器的值为1,当管脚接低电平时,采集到时输入数据为1,反之为0,这种情况下是可以正确的读取数据的,但是如果口线寄存器的值为0 ,则左边的场效应管导通,输出相当于直接与地线相连,此时无论外部输入为高电平还是低电平,采集到的输入数据都是0,这样就不能正确的读取数据了。所以对于准双向口,作为输入口使用时,必须先向该IO口写1,再读取,这就是准双向口的特点。
2.开漏输出结构
开漏(open drain),这里的“漏”指的是场效应管的漏极(drain),对应于三极管的集电极(collector),开漏就是指场效应管的漏极保持开路,直接接出作为输出口,如下图所示:
图2 开漏输出结构
从图中可以看出,当口线寄存器为0时,管子导通,输出直接通过管子接地,输出低电平;当口线寄存器为1时,管子截止,输出脚相当于悬空,为高阻态,因此开漏输出接口不能够正确的输出高低电平。对于开漏输出结构,输出必须接上拉电阻,才能够正常使用,如下图所示:
图3 开漏输出结构加上拉电阻
外接了上拉电阻后,当口线寄存器为0时,输出被电源上拉为高电平,口线寄存器为0时,输出口通过管子直接接地,为低电平,这样就可以正确的读取外部数据了。
很多芯片都提供开漏输出结构,这是因为开漏输出结构有很多优点:
a. 充分利用外部电路的驱动能力,减小芯片内部的驱动,从而降低芯片的功耗,提高芯片工作稳定性
b. 可以通过改变上拉电源的电压,改变信号的传输电平,比如某芯片的输出为3.3V电平,其输出口的上拉电源可以为5V,这样就很方便的实现了电平转换。
当然,开漏输出也存在明显的缺点:在输出脉冲信号时,在脉冲的上升沿,电源通过上拉无源电阻对负载充电,其速度较慢,导致上升时间变长,因而会导致脉冲上升沿变坏,上拉电阻阻值越大,充电时间就越长,因此其速度越慢,而阻值较小时,其功耗又会变大,因此在设计时要兼顾速度和功耗。而对于下降沿,电源通过芯片内部的场效应管放电,其速度较快,所以上拉电阻对脉冲的下降沿影响不大,某些情况下可以考虑用下降沿输出。
3.推挽输出
推挽输出也是一种很常见的输出结构,其内部电路结构如图所示:
图4 推挽输出结构
与准双向口类似,只是右边的场效应管为强上拉作用,因而输出电流较大,适用于需要大电流驱动的场合。在使用推挽结构时,要注意不要将两个IO口短接,因为如果一个IO口为高电平而另外一个为低电平时,会有很大的电流流入芯片,可能烧坏芯片。
总之呢,在使用一些不熟悉的芯片时,一定要注意其IO口的结构,根据IO口结构设计合适的电路,以免出现一些意想不到的错误。
标签:
原文地址:http://www.cnblogs.com/xiaoxie2014/p/4206934.html