一.引言
The Digital Abstraction
数电的全称是数字电子电路基础,从名字上就能直观的看出来,数电的课程肯定也像模电一样离不开电路的实现.
换句话说,在前面两章中,我们仅仅只是将不同事物抽象成为0和1两个二进制数字(逻辑代数),并研究它们之间的逻辑函数关系(相比于事物的内容,更关注事件与事件之间的关系是什么)
比如说,我们用1表示开关接通,小灯泡发光;0表示开关断开,小灯泡熄灭
此时S1,S2开关和F灯泡是串联的关系,只有S1,S2同时接通,即都为1,才为1(小灯泡发光),其余都为0.
开关闭合与灯泡亮灭,两者之间的逻辑函数关系可以表示为F = S1 * S2 = S1S2.
而不仅仅只有这个例子,只要**同时满足,就输出逻辑"1"**的任意两个事件,都可以用与运算来表达,这就是抽象的魅力所在。
1.1 Making bits concrete
但是抽象归抽象,我们总归要回到现实
此时我们就面临一个很严峻的问题,那就是如何在电路中产生数字信号0和1呢?
从直观上来说,电路中要么是电压,要么是电流,从简单的情况开始考虑,应该就是采用两者中的一个,而不是混着用
那选用电压还是电流来作为我们的数字信号呢?
但这个时候,假如我们只做二选一,其实就陷入了一个非黑即白的思维误区,因为无论是选择电压还是电流作为数字信号,它都有它们自己的好处和坏处,并不是绝对的
假如用电压作为数字信号,优势也很明显,比如易于测量,观测;有电压可以没电流,低功耗等
缺点也有很多,比如远距离传输,易受干扰;假如电路中有电容,RC充放电,就会带来延迟,冲激波等一系列问题
所以,我们说既可以采取电压,也可以采取电流作为数字信号,要根据我们具体的需求来进行确定
当然,在我们学习的这门课当中,都是以电压来作为数字信号来表达信息,这其中的一大原因,是因为我们希望数字信号容易直接观测和测量,电流很多时候则不具备这样的优势
1.2 Getting bits under contract
既然我们确定了电压作为数字信号,来产生0和1
第一步需要做的就是建立共识,签订"协议"
你不能说你想要高电平作为0,而我用低电平作为0,这样就算给你同样一张真值表,双方分析出来的逻辑关系也绝对是不一样的
通常来说,有两种逻辑关系
第一种是正逻辑:用高电平表示数字信号1,低电平表示数字信号0
第二种是负逻辑:用低电平表示数字信号1,高电平表示数字信号0
而在我们下面的讲述中,统一都采用正逻辑来进行描述
1.3 What makes a good bit
但是这样随之就会引发第二个问题
多大的电压才算高电平呢?多小的电压才算低电平?
假如我认为高电平至少要10V,而你认为高电平大于4V就足够
则同样电压是5V,我们得出来的数字信号也是完全不同的,我抽象出1,而你抽象出0
此时再继续讨论下去,也就没有任何意义,同样一件事物,我们编码的方式要具有唯一性
所以,直观上来说,我们约定VCC电源电压为高电平,而地电位为低电平,当输入电位达到VCC时,输出逻辑"1";输入电位为地电位时,输出逻辑“0”
总结一下:
整个逻辑代数抽象变具体的过程,实际是一个约定的过程
电压信号便于观测测量,所以我们约定电压信号来作为信号传输的媒介(数字信号)——Making bits concrete
为了使电压信号的高低与数字信号"0",“1"一一对应,即电压信号的编码具有唯一性
我们约定采用正逻辑,用高电平表示"1”,用低电平表示"0"——Getting bits under contract
同时,约定理想的比特输出,我们能够输出的最高质量的高电平为VCC电源电压,最高质量的低电平为地——What makes a good bit
二.开关
2.1 Single pole switch
有了上述的铺垫,我们可以将其抽象化成下面的模型
当输入信号为高电平时,开关S断开,输出信号直接和VCC相接,输出我们约定好的"1"
当输入信号为低电平时,开关S闭合,输出信号和地直接相连,拉低输出我们约定好的“0”
这就是获得高低电平的基本原理
为什么会有一个电阻?
原因一.电路中很多时候并不是只有一个开关,而是有多个开关
对于下一级来说,我们这级的输出可以等效为一个电压源
如果后级直接取这个信号,电源输入电阻又很小,电源就要承受很大的压力,还没用多久,电压源可能就会直接烧掉
原因二.输出低电平的时候,我们可以发现,假如不接一个电阻,其实有一条通路,是电压源直接和地相接,这样带来的电流将是非常大的,电压源也会直接烧掉
所以,加上一个电阻的直接一大作用是起限流作用
那这个电阻是越大越好,还是越小越好呢?
按照我们之前的分析,应该是越大越好,限流作用越强,保护作用越强,但是真的是这样吗?
我们希望输出的是高质量的高电平,即往下一级输出高质量高电平VCC,但是电压源内阻越大,往后输出电压其实就越小(分压),此时就根本谈不上输出高质量的高电平这一说法
所以,从这里我们也可以总结一个很关键的信息,我们需要允许输入输出的高低电平有一定的变化范围,只有这样,我们才能保证上一级的输出(不是VCC或者地),到下一级时,依旧能够判断为高电平或者低电平输入
2.2 Complementary switch
并且,经过我们上述的分析,其实我们发现一个很矛盾的真相
输出高电平的时候,我们希望该电阻越小越好,这样输出的高电平质量就越高
输出低电平的时候,我们希望该电阻越大越好,这样起到的(限流)保护作用越强,电压源越不容易烧坏
但是一个电阻哪有可能自动调节自己的阻值大小,更何况这又不是一个滑动变阻器
因此,我们抽象出来的开关模型还是有很大缺陷的,我们要对其进行调整
这就是双刀开关(更常见称为互补开关电路)的由来
当输入高电平的时候,S1开关打开,S2开关关闭,此时输出的电压就直接为VCC,理想的高电平
当输入低电平的时候,S1开关关闭,S2开关打开
由于S1开关没有闭合,所以我们根本不需要考虑限流,保护电压源的问题
此时输出的电压就直接为地,理想的低电平
三.二极管(Single pole switch)
3.1 二极管开关
但我们上述的开关是什么器件呢?有什么器件是通过电压来控制导通与否的?
一个最简单的器件,就是我们的二极管
只有外部接上正向电压的时候,并且大于开启电压Uon(一般为0.7V),二极管才会被导通,相当于开关闭合
否则,外部接上反向电压的时候,耗尽层会进一步扩大,内电场和外电场两者叠加,使得电子几乎不可能跨越耗尽层,此时电流将会很小,相当于开关断开
对应二极管的伏安特性(电压和电流关系图)曲线如下图所示:
不考虑二极管被反向击穿,只有U > Uon,才会有电流i输出
有了二极管来充当我们的开关,此时我们的模型就可以变得更加具体了
当我们输入电平v1为高电平VCC时,二极管截止,相当于开关断开,此时输出电压vo就为电源电压VCC
当我们输入低电平时,二极管导通,输出电压被钳位在0.7V,此时输出电压vo就为低电平
总结一下
3.2 二极管与门,或门
同样的,采用多个二极管来作为开关,我们就可以实现对应的与逻辑,或逻辑
现在我们假设输入的高电平为3V,输入的低电平为0V
不难得出下面的结论
当且仅当A,B输入都为高电平(3V)时,输出电压会被钳位在3.7V
其它情况下,输出电压都小于0.7V
假如我们规定3V以上为逻辑"1",0.7V以下为逻辑"0",就成功实现了逻辑与的功能(允许输入输出的高低电平有一定的变化范围)
二极管或门也是同样的分析思路
现在我们同样假设输入的高电平为3V,输入的低电平为0V
不难得出下面的结论
当且仅当A,B输入都为低电平(0.7V)时,输出直接接地,输出电压为0V
其它情况下,二极管都至少有一个导通,输出电压会被钳位在2.3V
假如我们规定2.3V以上为逻辑"1",0.7V以下为逻辑"0",就成功实现了逻辑或的功能(允许输入输出的高低电平有一定的变化范围)
但是虽然实现了门电路,二极管充当开关的缺陷也是非常明显的
本质上二极管充当开关实现的电路,就是我们前面提到的单刀开关电路,所以之前单刀开关有的毛病,二极管实现的门电路一个都不能少
第一.它有着电平偏移问题
就简单拿与门来说,我输入的低电平是0V,最后输出的低电平却是0.7V,输入和输出的游戏规则是不同的,两者相差一个二极管的导通电压Uon,这是我们想要的吗?
明显不是,假如多个与门串联在一起,输出的低电平不断被抬高,最后输出竟然被判定为高电平,那就很好笑了
第二.这样二极管构成的门电路带负载能力也很差
本质上就是R是不可能自由根据情况调整自己的阻值
当负载Rl阻值(和R相比)较小时,负载Rl分到的电压就比较小
当负载Rl阻值(和R相比)较大时,负载Rl分到的电压就比较大
由于这两个缺陷,所以一般二极管开关电路也仅仅用在IC内部