TTL反相器
这是一个TTL反相器,这是经过了很多工程师多种设计最终沉淀出来的电路,这个电路是比较成熟的。我们只需要对这个电路进行解析即可,不需要再去研究当初是如何设计出来的。
学过CMOS应该知道,右侧的输出级其实也是个推挽输出,因为长得像图腾柱,因此也有人称呼它为图腾柱。推挽输出的好处就是T4和T5是独立的,要么T4导通T5截止、要么T4截止T5导通。
对于输入级,比较简单,就是从T1的发射极传入,往后传。
对于倒相级,叫这个名字,是跟集电极和发射极电压的变化有关系的。T2集电极电压升高时,发射极电压降低。发射极电压升高,集电极电压就降低,这是一个相反的过程,所以叫做倒相级。
通常情况下,我们讲数字电路的时候用的是一个定性的说法,就是高低电平。而对于这个电路来说,我们需要用定量的方法来分析一下。
我们假设:
- Vcc=5V
- Vpn=0.7V
- Vce=0.1V
- ViH=3.4V
- ViL=0.2V
当A输入0.2V时,因为T1接了4k电阻拉到了Vcc,T1的PN结就被打通了,因为Vpn=0.7V,所以T1的基极会被钳位在0.9V(0.2+0.7)。
T1的集电极就是T2的基极。要了解这个点的电压,我们要知道T1的工作状态。T1的集电极电阻恰好等于1.6k加上一个反向PN结的阻值。这个节电阻会非常大。有这么大的电阻,饱和电流就会非常低,就非常容易进入饱和状态。T1进入饱和之后,Vce之间的压差通常在0.1V左右,所以此时T1的集电极为0.3V。
T2的基极如果是0.3V,那么T2是截止的状态,如果T2截止,那么T4基极的电位就是高电平。那么T4导通。
那么电流就从R4、T4、D2、Y流出来了。
当输入3.4V时,R1被上拉到5V,T1的PN结还是能打通,打通的话,T1集电极的电压应该是4.1V(3.4+0.7),T1的等效电阻还是非常大,进入深度饱和,那么T2的基极就是3.5V(3.4+0.1),如果是3.5V的话,T2的管子就可以导通了,如果T2基极是3.5V的话,T2就可以导通,T2的E极应有2.8V,那么T5的管子也就导通了。
现在开始倒推,如果T5导通,BE之间被锁定在0.7V,所以T5的基极现在是0.7V。如果T5的基极是0.7V,T2的基极就不会是3.5V,它也被钳位了,就会变成1.4V。因为T1是一个NPN的半导体,那么基极就是一个P型半导体,集电极就是一个N型半导体。P型半导体有4.1V,N型半导体有1.4V,相当于一个二极管又被打通了。那么这个4.1V也无法保持,它会掉到2.1V。
此时T1发射极是3.4V,基极是2.1V,集电极是1.4V。
有两个需要注意的地方,首先是T1:因为基极是P型半导体,集电极是N型半导体,PN结被打通,那么1.4V和4.1V的压差保持不住,一定会往下掉。只要这个二极管导通,那么压降就是固定的,就会钳位在2.1V。
还有就是T2的集电极:如果T2达到深度饱和,那么T2的集电极应该是0.8V左右,如果是0.7V以上,按道理T4的BE之间就能导通,但我这里多了一个D2,如果D2也想要导通的话,那么T2就垫起来一个0.7V。也就是说,T4的基极要达到1.4V,才能让T4的CE导通。而现在0.8V,T4是没办法导通的。
T5和T2导通时,T4就截止了。因为T5是导通的状态,所以此时Y输出的就是接地,接近于0的信号。由于D2的存在,会让T4可靠地截止。如果没有D2,那么T4也会导通,T4,T5都导通的话,Y电压就不固定了。
输入级的D1的作用是保护T1这跟管子。如果电压扰动的话,A点电压可能出现负值,流经T1的电流会非常大。为了保护T1管子,我们接入了D1这个二极管。如果A点电压太低的话,尤其是到了-0.7V以下。D1这个管子会有电流从下往上流过去,就可以保护T1的管子。
OC门![image.png](https://ucc.alicdn.com/qbzlkckkdraku_20230630_698a44ba0d5945e69ce6d785159082ca.png?x-oss-process=image/resize,w_1400/format,webp)
这个TTL电路存在一些局限:
- 高电平电压不够高:R4、T4、D3都会分压。
- 不能直接线与:电流太大,会对三极管造成损伤。
为了解决第两个问题,我们将上面的电路和下面的电路的反相器都给去掉一部分,此时的电路只能输出低电平,我们需要再额外给它挂一个电阻和Vcc',Vcc'就可以给它提供高电平了。
在上面的电路中,Vcc和Vcc'是独立的,我们不需要Vcc提供高电平,Vcc'可以是5V,也可以更高。通过这样一个改变方式,我们甚至可以用TTL电路来推动CMOS电路,因为TTL和CMOS电压是不匹配的,而我们现在电压是可以外置的,我们可以让Vcc'高一点,也可以让它低一点,就看我们后面电路的需要了。这样,第一个问题也就被解决了。
这样的电路结构有一个专有名词,叫OC门。OC就是Open Collector
集电极开路。与OC对应的还有一个OD,也就是Open Drain
漏极开路,功能与OC门类似。
OC门指的是框起来的这一部分。
OC门只是习惯上的叫法,如果搜索Open Collector Gate
,基本上是搜不到的。因为OC门对应的是Open Collector Output
,就是OC输出。虽然叫OC门,但不属于门电路,和与或非门不是一个东西。
在此灵感基础上,飞利浦公司发明了I2C协议:
TS门
上一小节出现了线与,这一节说一下线或的接法。
必须使用OC门和外接电压来实现线与。线或的实现比较简单粗暴。只要加两个二极管,保证1来了不能从另一条路跑回去就可以。
如果使用TTL电路,左边的应使用OC门搭建,但右边的线或不能使用OC门,因为TTL电路输出时只有三点几伏,又要过一个二极管,可能只剩二点几伏。尽管仍在TTL电路对高压的识别范围内,但还是很少有人会用到这种接法。
对于上一节末尾提到的I2C总线协议。很多个从机仅仅是物理上连接在一起的,主机很难判断信息是从哪台设备发过来的,如果此时有一个开关,可以指定某台设备发送信息,其他的设备都不能开,就可以解决这个问题。
我们知道,多发射极之间是一个与门的关系,我们通过新增加的橙线来控制设备的输出状态。只有当橙线输入为0时,理想状态是设备将不起作用。而事实是输入0时,T4是可以导通的,Y将输出1。我们再加一部分电路,就可以使T4停止导通。
此时T1的集电极将是0,T4和T5都处于截止状态,Y既不是1也不是0,处于一个断路的状态,这就起到了一个开关的作用。
此时控制端输入0,能使设备停止工作,但如果将0改为1,T4和T5都将导通,如果外接电压过大,还有可能烧坏T2,解决方法就是加一个二极管,在使能信号为1时不去干扰T4。
EN是使能端,通常传递取反后的信号,传入时需要再取一次反。
GPIO输出模式
GPIO(英语:General-purpose input/output),通用型之输入输出的简称。
这是一个GPIO配置为输出时的内部示意图,我们要关注的其实就是这两个MOS管的开关状态。排列组合一下,一共就只有四种状态:
- 上面的MOS管打开,下面的MOS管关闭时,输出高电平。
- 上面的MOS管关闭,下面的MOS管打开时,输出低电平。
- 两个MOS管都关闭时,输出处于一个浮空的状态,此时他对其他点的电阻时无穷大的,所以这个状态也被称为高阻态。
- 当两个MOS管都打开时,电源直接对地短路,MOS管就被烧毁了。所以这种个状态并不存在。
当GPIO输出高电平时,电流流出去,给右边的MOS管的栅极充电,这个过程被称为“推”,把电流推出去。
当GPIO输出低电平时,电流流进来,给右边的MOS管的栅极放电,这个过程被称为“挽”,把电流挽回来。
所以所谓的推挽,其实就是描述了MOS管输出高低电平时电流的一个动作而已。
我们再把下面两种状态拿出来组成一个组合。在这个组合里,上面的MOS管始终是关闭的,所以可以认为它就是不存在的,那么这个时候,下面的MOS管的漏极就等于啥也没接,处于一个开路状态,所以这个模式被称为开漏模式。
如果我们想用这个GPIO去控制一个芯片的引脚,但是这个GPIO输出的是5V,而后面的芯片的enable只支持3.3V输入。如果用推挽的话
复用输出
如果我们要点亮一颗LED灯,只需要单片机内部输出高电平即可,那么单片机内部如何控制引脚输出高电平呢?
右侧的两个二极管只是起保护作用,为了便于理解,我们暂时不理它。
它一共有4种输出模式:
- 推挽输出
- 开漏输出
- 复用推挽输出
- 复用开漏输出
推挽输出
如果它处于推挽输出模式,则可以控制PMOS和NMOS,如果要输出高电平,则PMOS导通、NMOS不导通;如果要输出低电平,则NMOS导通、PMOS不导通。开漏输出
当处于开漏输出时,PMOS永远都是截止的,当NMOS导通时,输出低电平。当NMOS截止时,它输出的是高阻态。
这是因为这两个晶体管都处于截止状态,它的电阻可以看作无穷大,此时它的引脚就相当于连着一个无穷大的电阻,所以此时对外呈现的是高阻态。它正常工作时必须接一个上拉电阻,一般工作在电平不匹配的场合。比如STM32输出的是3.3V,如果要输出5V,就要接一个5V的上拉电阻。
当NMOS截止时,它就会输出5V高电平。这是因为内部阻抗无穷大,而这个上拉电阻阻值有限,所以引脚上输出的就接近5V。它还具有“线与”的特性。比如多个开漏输出引脚连接在一起,只有他们都输出高电平,也就是开漏输出的高阻态,最终才能输出高电平。但凡有一个开漏输出低电平,所有的引脚电压都被这一个拉低了
因为MOS管的漏极相当于开路,所以被称作“开漏输出”,与OC门的命名方式相同:OC门是集电极开路。复用推挽/开漏输出
我们的推挽输出和开漏输出通过的是上面的那条线。我们直接对这跟线编程,就可以控制它输出高低电平了。
而复用推挽输出和复用开漏输出用的是下面那条线。它连接的是单片机和内部外设,比如PWM、USART、I2C,因为这些通信的频率很高,每秒钟电平变化上万次。如果使用推挽或者开漏输出的话,那我们就需要通过对上面的引脚编程,来控制它的输出。而如果我们使用它的复用功能,它的这些模块直接控制它的引脚输出,方便了我们的编程。
具体看哪一个工作模式,要看它的工作方式。
如果是I2C这种需要线与的场合,就需要用到单片机的复用开漏输出,而PWM、串口通讯这些,则需要用到它的复用推挽输出模式。