7 第七章 压控振荡器
春水碧于天,画船听雨眠。
压控振荡是指用电压调控振荡频率,但实际电路中主要是用电流控制,利用电流对电容充放电产生波形,之后再通过其它电路对波形进行变换。
7.1 简易振荡电路
我们可以从一个简单的例子入手,讲运放的时候提到过运算放大器具有很高的开环增益,输入端微小的电压也可以导致输出端输出到最高饱和电压或最低饱和电压,这一特性使运放可以作为比较器来使用:
运放反相端电压被固定在了\(V_{\text{bias}}\),称为阈值电压,当输入\(V_{\text{in}}\)大于\(V_{\text{bias}}\),\(V_{\text{out}}\)输出到最高饱和电压(有些运放输出范围可以十分接近\(V_{CC}\)和\(V_{EE}\),称为轨到轨运放),当输入小于\(V_{\text{bias}}\),输出被拉到最低饱和电压。\(V_{\text{bias}}\)也可以固定到同相端,这样输入输出行为和上面的相反。
当输出被反馈到同相端(正反馈),可以构成迟滞比较器:
迟滞比较器的阈值会因输出不同而不同,假设比较器可以输出到正负电源电压(实际达不到),当输出是\(V_{CC}\)时,同相端电压为\(\frac{R_1}{R_1 + R_2}V_{CC}\)(上阈值电压\(V_{T+}\)),只有当\(V_{\text{in}}\)在变化过程中超过\(V_{T+}\),输出才会翻转变为\(V_{EE}\),当输出是\(V_{EE}\)时,同相端电压为\(\frac{R_1}{R_1 + R_2}V_{EE}\)(下阈值电压\(V_{T-}\)),\(V_{\text{in}}\)需要低于\(V_{T-}\)输出才会翻转变为\(V_{CC}\)。
由于阈值电压依赖于输出,那对于实际器件来说,上电瞬间该如何判断输出为正还是为负?
实际上在上电瞬间,正负供电电源无法做到同时供电,因此输出端会因为电源上电循序不一致而被随机拉到\(V_{CC}\)或\(V_{EE}\),若输出为\(V_{CC}\),\(V_{\text{in}}\)大于\(V_{T+}\)输出才会翻转,同样若输出为\(V_{EE}\),\(V_{\text{in}}\)小于\(V_{T-}\)输出翻转,其它时候输出保持不变。
假设 图 7.2 的比较器初始时刻输出为\(V_{CC}\),对于输入\(V_{\text{in}}\),输出如下:
可以自行尝试画出初始时输出为\(V_{EE}\)的图形。 图 7.2 的迟滞比较器也叫反相施密特触发器,“反相”二字着重于强调当输入大于上限阈值时,输出变为最低饱和电压,输入低于下限阈值输出变为最高饱和电压。
虽然可以用运算放大器搭建比较器,但在需要低成本高效率的情况下,使用专门的集成器件是更好的选择,本小节的简易振荡电路将使用CD40106。40106诞生在上世纪70年代,它内部包含了6个反相施密特触发器:
如 图 7.4 所示,芯片引脚编号一般会从标记点或缺口处开始按逆时针排序,对于不同厂商的40106芯片,需要去查看对应的数据手册才能知道每个引脚连接的是什么。图中14号和7号引脚用于给芯片供电,其它引脚成对地构成反相触发器。
与 图 7.2 不同的是,40106的触发器只有一个输入,这是因为在每个触发器内部已经定义好了上下限阈值电压,这些电压会根据供电电压\(V_{DD}\)的变化而变化,典型情况如下表:
| 供电电压 \(V_{DD}\) | 上限阈值电压 \(V_{T+}\) | 下限阈值电压 \(V_{T-}\) |
|---|---|---|
| 5V | 2.9V | 1.9V |
| 10V | 5.9V | 3.9V |
| 15V | 8.8V | 5.8V |
表7.1典型电压-上下阈值关系
每个触发器的输出电压可以接近\(V_{DD}\)和GND(0伏),为了让它振荡起来,需要加入电阻和电容,通过输出端可以做到对电容充放电:
电路上电瞬间,假设电容\(C_{1}\)没有电荷积累,因此输入端电压为0,即使触发器因为上电顺序输出被拉到最低饱和电压(接近0伏),因为输入端电压低于下限阈值电压,供电稳定后输出也会迅速翻转到最高饱和电压(接近\(V_{DD}\)),这样输出通过电阻\(R_{1}\)对电容进行充电,因此触发器输入端电压也在不断上升,当充电至上限阈值电压,输出翻转到接近0伏,由于\(C_{1}\)电压更高,同样会有电流流过\(R_{1}\)并流入触发器输出端对电容放电,直到放电到下限阈值电压,输出再次翻转。
这样循环下去,在触发器输出端就可以看到一个方波波形,为了让人可以听到声音,还得再估算一下方波频率。假设触发器在12伏\(V_{DD}\)供电下,上限阈值电压为8伏,下限阈值电压为5伏,稳定后电容从5伏到8伏充电过程中,输出为最高饱和电压,电容从8伏到5伏放电过程中,输出为最低饱和电压:
因此方波的频率和电容充放电的频率一致,而电容充放电的过程大致等效为如下两部分(假设输出达到了\(V_{DD}\)和GND):
图 7.7 说明在\(V_{DD}\)下从5伏到8伏的充电过程等效为\(V_{DD}\)减去5伏(7伏)下电容从0伏到3伏,放电则是电容初始为8伏放掉3伏。
回顾第一章电容通过电阻充电,电容会在 \(\tau = RC\) 的时间里充电到电源电压的63%,7伏电压下充电3伏或8伏下放电3伏,一起花费的时间大约为 \(1.2\tau\),因此方波周期为 \(1.2\tau\)。需要满足:
\[ 20 < \frac{1}{1.2\tau} < 20\text{k} \Rightarrow 0.041 > \tau > 4.16 \times 10^{-5} \tag{7.1}\]
如果电容容值为100nF,电阻根据 式 7.1 需要在410欧到410千欧之间。
7.2 实物准备
如果想在现实中得到结果,这一小节的内容可以帮助把电路搭建起来。
I.面包板
面包板也叫洞洞板,它可以为我们提供工作平台而不用直接把芯片放在桌子上,面包板一般为白色长条形,上面有很多孔洞可以用来放置元器件:
如果你把它背面的胶撕下来,就会看见有很多排列整齐的金属片,把引脚插入面包板就是和这些金属片接触,它们起到导线作用,因此面包板上很多孔洞电位是相同的,它们连接在同一个金属片上:
面包板上下两侧的孔洞下是一根长的水平的金属片,常用于接电源和接地,中间的竖直排列,这样就很方便我们把元件接到电路中去。连接元器件需要用到杜邦线,杜邦线分为公头和母头,接面包板需要把导线插进去,所以我们需要公头杜邦线。
II.电源
电源用于供电,模拟合成器需要双电源供电(正负电源),最简单的办法是去购买一个双通道的直流可调稳压电压源:
这样可以分别调整两个通道的输出电压,再接到面包板上,或者使用别人开源的交流转直流PCB,印刷出来后自己焊接元件。但无论用什么方法,供电过程中电器都有可能出现漏电,因此一定要小心操作。
III.示波器
示波器的作用是看到输出波形,并可以测量出周期和频率,大部分情况下单通道示波器就足够了,但双通道示波器会更方便一点,现在市面上早已用数字示波器代替了模拟示波器,数字示波器有两个很重要的性能指标:带宽和采样频率,一般会标在显示屏上方。
例如假设为60MHZ,1GSa/s,表示示波器对于输入的正弦波,在60兆赫兹的时候测量到的幅度会变为原始信号的0.7左右,选择示波器带宽可以遵循“5倍规则”,示波器带宽需要达到测量信号最高频率的5倍以上。对于声音信号,最高是20千赫兹左右,因此示波器带宽至少需要0.1兆赫兹才能准确测出信号,而60兆赫兹远远大于0.1兆赫兹。市面上示波器基本都是50兆赫兹起步,所以一款便宜的二手示波器足以满足我们的需求。
IV.万用表
顾名思义,万用表的功能接近于“万用”,基本上电路里的东西都能测量,虽然不能测波形,但高级一点的万用表可以测量频率,更常用一点的功能是测量电压和电阻大小,大多数电路不正常工作可能是因为导线没有接好,测量电压可以很方便地让我们找出问题在哪儿。
V.其它元件
这里面的东西包含太多了,各种阻值的电阻、各种容值的电容、二极管、三极管、各类芯片…,这里无法做到一次性全部讲完,等需要用到的时候再做介绍。
7.3 线性电压电流转换器
图 7.5 改变频率只能更换电阻,想要依靠电压改变频率,需要有可以把电压转换为电流的转换器,正如前面提到过的,转换的电流需要有电流源的特性以排除负载的影响,转换包括线性转换和指数型转换。
首先让我们来看看线性电压电流转换器吧:
图 7.13 电路名字叫Howland电流泵,于20世纪60年代被创造出来,它既有正反馈,也有负反馈,第一次看到它似乎并不容易分析出到底是怎样的工作状态,我们需要重新审视什么情况下负反馈可以正常工作,考虑以下情形:
\(V^+\) 在什么输入范围内负反馈可以按照预期正常发挥作用?因为运放的输出不会超过供电电压,因此通过反馈回路到反相端的电压一定在 \(fV_{EE}\) 到 \(fV_{CC}\) 之间,把 \(V^+\) 在 \(fV_{EE}\) 和 \(fV_{CC}\) 范围内的情况称为情形①:
初始上电时,运算放大器输出端会因上电顺序被随机地拉到 \(V_{CC}\) 或 \(V_{EE}\),反相端电压大小也为 \(fV_{CC}\) 或 \(fV_{EE}\)。假设初始时刻为 \(fV_{CC}\),则运算放大器输入电压为 \(V^+ - fV_{CC} < 0\),输出应为 \(V_{EE} < 0\),而在现实世界中信号没有办法做到突然跳变,因此输出电压一定是从 \(V_{CC}\) 到 \(V_{EE}\) 连续变化的,从 图 7.15 中表现出来就是反相端电压从 \(fV_{CC}\) 连续地往左移动(即使移动速度很快),而不是突然跳到 \(fV_{EE}\)。在移动过程中一定会存在某个时刻反相端电压大小恰好也是 \(V^+\),假如继续减小往 \(fV_{EE}\) 移动,会导致输入电压 \(V^+ - (V^+ - \Delta V) > 0\),输入电压此时又会迫使反相端电压往 \(fV_{CC}\) 移动,就像一个在碗里面滚动的小球,最终会慢慢停在碗底,反相端电压最终也会处在 \(V^+\),运算放大器会输出一个非零电压以保持反相端稳定在 \(V^+\),这正是第5章讲的“虚短”。只要同相端的大小在 \(fV_{CC}\) 和 \(fV_{EE}\) 之间,负反馈就可以发挥作用。
当 \(V^+\) 超出了这个范围,如 图 7.15 的情形②,即使反相端电压到最小值 \(fV_{EE}\),依旧有输入电压 \(V^+ - fV_{EE} < 0\),运算放大器输出维持在 \(V_{EE}\),负反馈失效。
综合起来可以得到一个结论,为了让负反馈按照预期正常工作,同相端的电压必须要在反相端的电压范围内,否则运算放大器一定会输出到\(V_{CC}\)或\(V_{EE}\)。
在正反馈下同样成立:
即使有正反馈和输入 \(V_{\text{in}}\),只要同相端 \(V^+\) 能够在负反馈电压范围内,依然会有“虚短”。更简单的办法是假设负反馈成立,验证是否存在一个具有有限值的输出使同相端和反相端电压相同,有的话则假设正确(但如果实际运放供电电压达不到这个输出要求,也会使负反馈失效)。大概这也算是验证比求解更容易的一种体现。
回到 图 7.13,假设它工作在负反馈下,输出电压\(V_{A}\)大小为:
\[ V_A = \left( 1 + \frac{R_2}{R_1} \right) V_P \tag{7.2}\]
流过\(R_{4}\)电流为:
\[ \frac{R_2 V_P}{R_1 R_4} \tag{7.3}\]
从\(R_{3}\)流过的电流是:
\[ \frac{V_{\text{in}} - V_P}{R_3} \tag{7.4}\]
这两股电流一起流向负载:
\[ I_{\text{load}} = \frac{R_2 V_P}{R_1 R_4} + \frac{V_{\text{in}} - V_P}{R_3} = \left( \frac{R_2}{R_1 R_4} - \frac{1}{R_3} \right)V_P + \frac{V_{\text{in}}}{R_3} \tag{7.5}\]
当 \(\frac{R_2}{R_1 R_4} - \frac{1}{R_3} = 0\)(\(\frac{R_4}{R_3} = \frac{R_2}{R_1}\))时,电流大小只与 \(V_{\text{in}}\) 和 \(R_3\) 有关,为 \(\frac{V_{\text{in}}}{R_3}\),为满足条件一般让这四个电阻相等即可,同时需要它们阻值都比较大,因为负载挂在正反馈端,如果负载阻抗低的话,运算放大器反馈到同相端的比例就可以变得很低(负载低阻并联高阻\(R_{3}\)),使负反馈更不容易被破坏。
在 式 7.2 里假设了电路整体为负反馈,当带入具体数值求解出的\(V_{A}\)在运放输出范围内,则假设是成立的。
在 图 7.13 里,若\(V_{\text{in}}\)为正,电流方向往下,在下一节中我们需要一个输入为正时电流方向相反的电流源,只需要把输入接在\(R_{1}\),\(R_{3}\)接地就可以实现电流方向改变。
7.4 锯齿波核心
所谓“核心”就是产生锯齿波的电路,与第1小节类似,都是通过对电容充放电完成的,不同的是可以通过改变电流大小来改变频率。
电流可以用Howland电流泵产生,这个锯齿波电路来自于Hal Chamberlin在80年代出版的一本书《Musical Applications of Microprocessors》,书里介绍了很多有用的电路,感兴趣的话大家可以去网上找来看看。
首先\(M_{1}\)是一个NMOS管:
它被当做开关使用,当 \(V_{gs} \ge V_{th}\)(阈值电压,分立器件一般在0.8伏到2.5伏特之间),NMOS导通,只要 \(V_{ds} > 0\) 就有电流通过,如果有 \(V_{gs} > 2V_{ds}\),那此时NMOS可以等效为一个阻值很小的电阻,当 \(V_{gs} < V_{th}\),NMOS关断可以看成断路。
op-2是一个比较器,用于控制 \(M_1\) 的开启和关闭,初始时刻 \(M_1\) 关闭,电流 \(I\) 对 \(C_1\) 充电使 op-1 的输出匀速上升,同时这个电压也会通过 \(R\) 对 \(C_2\) 充电,当 \(C_2\) 左侧的电压高于 \(V_{\text{bias}}\),op-2输出翻转使 \(M_1\) 导通,电容 \(C_1\) 开始放电,\(C_2\) 这时也会放电来维持 op-2 的输出,维持大约一个 \(\tau = RC_2\) 的时间,这段时间内电容 \(C_1\) 被放至接近0伏,接着 \(M_1\) 再次被关断,重复充电过程。
在稳定振荡时,基本上锯齿波电压峰值等于\(V_{\text{bias}}\),要计算合适的电容\(C_{1}\)大小,假设Howland输入电压在0到5伏,四个电阻都为10千欧,则 图 7.17 电流\(I\)最大为0.5毫安,取\(V_{\text{bias}}\)等于5伏,锯齿波周期\(T\)满足:
\[ \begin{aligned} \frac{1}{C_1}\int_{t_0}^{t_0 + T} I \, d\tau &= V_{\text{bias}} = 5 \\ \frac{1}{T} &\leq 20\text{k} \end{aligned} \tag{7.6}\]
可以得到 \(C_1\) 不能超过5纳法(\(< 5\text{nF}\)),\(R\) 和 \(C_2\) 可以简单地取为40千欧和20皮法(需要仿真或实际测试下不断调整)。
7.5 555定时器
如果你觉得用\(R\)和\(C_{2}\)来维持\(M_{1}\)导通有些过于粗糙,想要寻找更好的办法,那555定时器是一个不错的选择。
555内部机制如图所示:
它因内部有3个5千欧电阻而被命名为555,从1972年诞生起,每年在全球范围有着数以亿计的销量。
\(CMP_1\)和\(CMP_2\)是两个比较器,输出会被送到RS触发器的输入端,RS触发器是数字电路里面的重要器件,它有输出\(Q\)和\(\overline{Q}\)(数字电路只有高电平\(V_{CC}\)(数字1)和低电平GND(数字0)两种输入输出模式,\(\overline{Q}\)代表对当前输出信号\(Q\)取反)。
RS触发器中R指Reset对\(Q\)置0,S指Set对\(Q\)置1,它的输入输出可以总结为表7.2:
| 输入端 R | 输入端 S | 输出端 \(Q\) | 输出端 \(\overline{Q}\) |
|---|---|---|---|
| 0 | 0 | 保持 | 保持 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 0(无效状态) | 0(无效状态) |
表7.2 RS触发器真值表
从表7.2可以看到,当R和S输入相同时,\(Q\)和\(\overline{Q}\)保持不变,其余时候根据R或S置1分别使输出\(Q\)置0或置1,而\(\overline{Q}\)的输出总是与\(Q\)相反。
555芯片内部RS触发器的\(\overline{Q}\)连接到PNP三极管\(Q_{2}\)的集电极,同时也连接到了NPN三极管\(Q_{1}\)的基极和一个反相功率放大器(简单理解就是对\(\overline{Q}\)再取反变为\(Q\))。
当\(\overline{Q}\)=1时,三极管\(Q_{1}\)导通(作为开关),形成通路对7号引脚放电(放电电流可达几十到一两百毫安,这时7号引脚可以看成串联了一个小电阻到地,差不多算是短路),3号引脚输出端为0。\(\overline{Q}\)=0时\(Q_{1}\)关断,输出端为1。4号引脚低电平输入下用于重置555芯片,一般情况下4号引脚接高电平(连接到8号引脚\(V_{CC}\)),\(Q_{2}\)此时无任何作用。
这样就还剩下2号、5号和6号引脚,它们分别是两个比较器的输入端,当5号引脚没有输入的时候,电压根据电阻分压固定在\(\frac{2}{3}V_{CC}\),\(CMP_2\)的同相端绑定在\(\frac{1}{3}V_{CC}\)。对于2号引脚和6号引脚不同的输入情况,输出端和\(Q_{1}\)或7号引脚可以总结为表7.3:
| 2号引脚(Trigger) | 6号引脚(Threshold) | 输出端(3号引脚) | 7号引脚(放电端 \(Q_1\)) |
|---|---|---|---|
| \(< \frac{1}{3}V_{cc}\) | 任意 | 高电平 | 截止(断开) |
| \(> \frac{1}{3}V_{cc}\) | \(> \frac{2}{3}V_{cc}\) | 低电平 | 导通(接地) |
| \(> \frac{1}{3}V_{cc}\) | \(< \frac{2}{3}V_{cc}\) | 保持之前状态 | 保持之前状态 |
表7.3 555输入输出状态
表格有点麻烦,记不住没关系,重要的是理解 图 7.20 和RS触发器行为模式,之后再来看表格就简单了。
7.6 555锯齿波核心
一枚555定时器有8个引脚,分别对应着 图 7.20 的引脚编号。我们可以很轻易地以不超过一块钱的价格购买到一块芯片,随便翻开一本介绍555的书,里面至少包含了几十种应用,世界离不开这些微小的东西,可能就像人们也离不开小狗一样。
555锯齿波发生器很简单,甚至说的上简陋,利用电容充电到\(Q_{1}\)导通然后放电直到\(Q_{1}\)关闭(对,仅仅就是这样):
上电时,2号引脚和6号引脚电压为0,\(CMP_1\)输出到GND(R=0),\(CMP_2\)输出到\(V_{CC}\)(S=1),\(\overline{Q}\)为低电平,三极管\(Q_{1}\)关闭, 图 7.22 中电流\(I\)向电容\(C_{1}\)充电使电容上极板电压不断升高,当电压超过\(\frac{1}{3}V_{CC}\),\(CMP_2\)输出变为0,RS触发器输出保持不变,\(Q_{1}\)继续关闭,当电容电压达到\(\frac{2}{3}V_{CC}\),\(CMP_1\)输出从GND变为\(V_{CC}\),\(\overline{Q}\)也输出到高电平使\(Q_{1}\)导通,导通后的\(Q_{1}\)近似于一根导线对电容放电,使电容电压快速下降,直到降低到\(\frac{1}{3}V_{CC}\),这时\(Q_{1}\)再次关闭,电流\(I\)继续对电容充电。这样在稳定时电容电压在\(\frac{1}{3}V_{CC}\)
到\(\frac{2}{3}V_{CC}\)之间不断循环,形成锯齿波。
锯齿波周期\(T\)满足:
\[ \begin{aligned} \frac{1}{3}V_{CC} &= \frac{1}{C_1}\int_{t_0}^{t_0 + T} I \, d\tau \\ \frac{1}{T} &\leq 20\text{k} \end{aligned} \tag{7.7}\]
这样在给定\(I\)下可以计算出合适的电容值。如果想在面包板上搭建, 图 7.22 的3号引脚和5号引脚最好不要悬空,3号引脚输出端可以通过一个大电阻接地,5号引脚可以接一个0.1微法的旁路电容稳压用。
图中0.1微法的电容在直流下稳定后没有电流流过,电容电压维持在\(\frac{1}{3}V_{CC}\),当\(V_{CC}\)有高频噪声的时候,电容对噪声相当于短路,因而噪声不会影响直流,电压依旧保持在\(\frac{1}{3}V_{CC}\),起到稳压作用。
一般情况下所有芯片在实际搭建电路时,都需要在供电引脚处放置一个电容来过滤电源噪声。
7.7 指数电压电流转换器
从 式 7.7 可以看出要想把频率增加一倍,电流大小也需要增加一倍,Howland电流泵电流大小和输入电压呈线性关系,输入电压每变为原来的两倍,输出电流也变为原来的两倍。例如在3伏输入下如果电流大小为 \(I\),\(2I\) 则需要6伏输入,\(4I\) 需要12伏。从 \(I\) 到 \(4I\) 频率跨越两个八度(一个八度频率增加一倍),电压变为原来 \(2^2\) 倍,要跨越N个八度,电压需要变为原来的 \(2^N\) 倍,这意味着线性电压电流转换器能处理的频率范围比较窄,毕竟电源电压也就12伏左右。
为了应对线性电压电流带来的局限性,Bob Moog在60年代提出了1伏/8度(1V/Oct)的标准,意思是电压每增加1伏,频率增加一个八度,这也意味着电压每增加1伏电流增加一倍。同样的例子3伏下电流为\(I\),那4伏输入电流变为2\(I\),5伏输入电流变为4\(I\),以此类推。这个标准在模拟合成器上一直延续到了今天,本小节将介绍指数电压电流转换电路以实现这个目的。
首先来看到下面这个结构:
\(Q_{1}\)和\(Q_{2}\)组成了一个类似于差分的结构,但\(Q_{2}\)的基极固定在了GND,电压为0,参考电流\(I_{\text{ref}}\)流入\(Q_{1}\)集电极,\(i_{c1}\)大小等于\(I_{\text{ref}}\),此时\(i_{c2}\)和\(i_{c1}\)之间比值关系为:
\[ \frac{i_{c2}}{i_{c1}} = \frac{I_S e^{\frac{0 - V_e}{V_T}}}{I_S e^{\frac{V_{b1} - V_e}{V_T}}} = e^{\frac{-V_{b1}}{V_T}} \tag{7.8}\]
那么 \(i_{c2} = e^{\frac{-V_{b1}}{V_T}} i_{c1} = e^{\frac{-V_{b1}}{V_T}} I_{\text{ref}}\),这样 \(I_{\text{ref}}\) 确定时,\(i_{c2}\) 的大小完全由 \(V_{b1}\) 决定,\(V_{b1}\) 输入为0时,\(i_{c2} = I_{\text{ref}}\),\(V_{b1}\) 小于0的时候,\(i_{c2}\) 会呈指数放大,这样我们就可以先得到一个有指数关系的结构。
但图2.26电路是非常不完整的,因为还需要一个东西让\(V_{e}\)跟随\(V_{b1}\)的变化,才能让\(i_{c1}\)大小和\(I_{\text{ref}}\)匹配,这通过一个运算放大器来实现:
运放op-1处在负反馈连接下,所以稳定时同相端和反相端电压相同都为GND,则\(V_{c1} = 0\),那么\(I_{\text{ref}}\)的大小固定为:
\[ I_{\text{ref}} = \frac{V_{CC} - V_{C1}}{R} = \frac{V_{CC}}{R} \tag{7.9}\]
当\(V_{b1}\)变化时,运放的输出端会跟随\(V_{b1}\)的变化来保证\(V_{c1}\)电压和同相端电压相同(否则其它时候都不会稳定)。至于10千欧的电阻,大概是用于增加\(Q_{1}\)和\(Q_{2}\)之间匹配度的(其实我也不是很清楚),去掉它不会产生很大影响。
很好,那么目前只剩下了一个问题还没解决,输入增加1伏如何刚好让\(i_{c2}\)变成两倍。
回到 式 7.8,\(i_{c2} = e^{\frac{-V_{b1}}{V_T}} I_{\text{ref}}\),\(V_{b1}\) 越低电流越大,假设 \(V_{b1}\) 每改变 \(\Delta V\) 电流变为两倍:
\[ \frac{2i_{c2}}{i_{c2}} = \frac{e^{\frac{-(V_{b1} + \Delta V)}{V_T}} I_{\text{ref}}}{e^{\frac{-V_{b1}}{V_T}} I_{\text{ref}}} \tag{7.10}\]
可以解出 \(\Delta V = V_T \ln 2\),\(V_T\) 在室温下约25毫伏,\(\Delta V\) 约为17.5毫伏,因此 \(V_{b1}\) 每降低17.5毫伏,\(i_{c2}\) 电流会变为原来两倍,我们可以用一个反向放大器实现输入 \(V_{\text{in}}\) 每增加1伏,输出就降低0.0175伏:
op-2配置为反向放大器,电阻\(R_{1}\)和\(R_{f}\)可以把输入电压变为\(- \frac{R_f}{C}\),之后再由\(R_{2}\)和\(R_{3}\)分压,只要满足\(\frac{R_f}{R_1}\*\frac{R_3}{R_2 + R_3} = V_T\ln 2 \approx 0.0175\),这样当输入\(V_{\text{in}}\)每增加1伏,\(V_{b1}\)下降17.5毫伏,电流\(i_{c2}\)增大1倍。
例如可以取 \(R_1 = 100\text{k}\Omega\),\(R_f = 2\text{k}\Omega\),\(R_2 = 100\Omega\),微调电阻 \(R_3 = 500\Omega\)。op-1处100皮法的电容是一颗补偿电容用于高频(远超声音的频率)下运算放大器稳定,大多运放在反馈回路上并联一颗电容(通常小于100皮法)都是用于高频稳定的。
有了 图 7.28 的电路,可以用它代替 图 7.23 锯齿波的电流源\(I\),需要注意的是电流方向,用一对PNP管电流镜转换一下就可以了。
7.8 锯齿波转矩形波
有了锯齿波波形之后,可以很方便地得到矩形波,不需要用到什么特殊的东西,只需要一个比较器。给比较器设定阈值,当锯齿波输入高于阈值,比较器输出到最高电压,低于阈值输出到最低电压。
那么第一步就是对锯齿波信号进行检测(取样或者复制),一般来说我们不能直接拿一根导线就把输出信号连接到其它电路,因为这样可能会破坏原始电路行为:
当信号输出端什么都没接的时候,可以把它当成 图 7.30 中的情况①,相当于外接了一个阻值为无穷大的电阻(电流流不过去)。
而当我们直接用导线(灰色)连接输出端接一个负载 \(R_L\) 时(情况②),此时等效电阻为 \(R \parallel R_L\),而电阻并联的总阻值会小于任何单个被并联电阻的阻值,特别是当 \(R_L\) 很小的时候(例如一个耳机的等效电阻也就几十欧姆),并联总电阻也会变得很小,因此电流可以通过这个等效电阻流向地,这样毫无疑问会破坏掉原始锯齿波发生器的行为。
所以就像在前面章节讲述的,我们需要一个缓冲器(buffer)来隔离,缓冲器输入阻抗足够大以至于电流无法流入,这样就不会破坏电路行为(毕竟对电路来说它不知道自己接了个什么东西,但是输入阻抗足够大也就相当于断路或者没有接),同时又能检测到电压信号并复制过来:
我们可以搭建出来的最方便高效的缓冲器就是一个单位负反馈的运放(还记得吗?前面提到过的),集成运放的价格今天已经相当便宜了,因此电路里面可以放心大胆地添加缓冲级用于隔离。
在加了一级缓冲器得到电压信号的复制后,我们对这个复制信号的操作同样不会影响到原始信号,为了得到矩形波,可以把它输入到一个比较器里面,如图所示:
这里我们有两个问题需要解决:首先是\(V_{\text{bias}}\)应该是多少,还有就是比较器的\(V_{CC1}\)和\(V_{EE1}\)电压应该为多少?
锯齿波信号在稳定振荡时电压在555定时器电源电压的\(\frac{1}{3}\)到\(\frac{2}{3}\)之间,如果定时器输入12伏,那锯齿波将会在4伏到8伏之间,\(V_{\text{bias}}\)也可以设定在这个范围内,选择用可变电阻分压可以动态地调节\(V_{\text{bias}}\)大小。当输入高于\(V_{\text{bias}}\),比较器输出到\(V_{CC1}\),低于\(V_{\text{bias}}\)输出到\(V_{EE1}\),一般而言我们希望波形的输出信号最低电压在0伏,最高5伏左右是合适的,所以让\(V_{CC1}\)连接5伏,\(V_{EE1}\)接地是不错的选择。
解决了上面两个问题,锯齿波又出现了新的情况,它是在4到8伏之间的,最低电压没有到0。也许应该先把它电平整体往下搬移再送入比较器:
用什么办法可以方便地实现这个目的?运算放大器,正如名字里面“运算”二字,运算放大器可以对信号进行加减乘除操作,当原信号这样接入运放:
接入放大器同相端,由于无电流输入,它首先起到了一个缓冲器的作用,同时因为也配置了负反馈,根据叠加原理最终输出为:
\[ V_{\text{out}} = -\frac{R_f}{R_1} V_{CC} + \left( 1 + \frac{R_f}{R_1} \right) V_{\text{in}} \tag{7.11}\]
\(-\frac{R_f}{R_1} V_{CC}\) 项(\(V_{CC}\) 接到电源12伏电压)可以把 \(\left( 1 + \frac{R_f}{R_1} \right) V_{\text{in}}\) 向下拉,求解 式 7.11,会发现无法同时满足输入为4伏时输出为0,输入为8伏时输出到4伏,所以退而求其次,先把最低电压拉低到0伏,这样会求解出来 \(\frac{R_f}{R_1}\) 等于 \(\frac{1}{2}\),取 \(R_f\) 等于1千欧,\(R_1\) 等于2千欧(为什么不让 \(R_f\) 等于100欧,\(R_1\) 等于200欧呢?是因为反馈通路上有电流流过,最终流进运放输出端被吸收掉,而运放输出端电流承载能力一般在十几个毫安左右,因此路径上的电阻不能设置得太小)。并计算当输入为8伏时,会输出到6伏,最终新的锯齿波信号会在0到6伏之间。之后再把这个变换后信号送入比较器,就能得到想要的矩形波了。
图中输出端是断路(负载无穷大)的理想情况,而实际后面会接一个负载,如果负载阻抗很低,可能会看到矩形波峰值达不到5伏,原因正是运放的输出电流是有限的,5伏输出到50欧姆的负载需要的电流大小为100毫安,运放输出如果达不到那么高的要求,峰值电压会下降,若想有足够的负载驱动力,可以选择高输出电流运放。
7.9 整流电路
同样锯齿波也可以变化成三角波,只需要把一半的信号翻转过来,这种行为被称为整流,整流生活中很多,比如手机充电器就是一个整流器,从发电机产生的电是正弦交流电,充电器可以把它转换成稳定的直流电,毕竟既然能把信号翻转一半,那也可以让它变得很平整。简单的整流器从一个二极管开始:
为了有足够的驱动力,电阻 \(R\) 通常会比较大(特别是当信号源能提供的电流较小的时候),假设 \(V_{\text{in}}\) 是偏置在0伏的正弦波信号,由于二极管的单向导通性,只有在 \(V_{\text{in}} > 0\) 时输入可以传递到输出,其它时候二极管截止,输出端没有电流,电压为0。这种行为很像一个开关,可以完美地把小于0的电压信号屏蔽掉只保留大于0的电压信号。但二极管导通时总是存在一个压降约0.6伏,即使锗二极管也有0.3伏,所以当 \(V_{\text{in}} < 0.6\text{伏}\) 时,二极管依然关闭,这会让正半周期图形出现失真:
暂且先不考虑失真问题,我们应该如何把下半周期翻转过来?给它一个类似的支路:
在 \(V_{\text{in}} < -0.6\text{伏}\) 时,左边的二极管导通,右边二极管截止,\(V_{\text{out+}}\) 输出为0,\(V_{\text{out-}}\) 输出为负值,\(V_{\text{out}} = V_{\text{out+}} - V_{\text{out-}} > 0\),实现把下方信号翻转过来。
理论上如此,实际上它可以正常工作吗?可以,前提是负载阻值远大于图中的两个100千欧的电阻,倘若负载很低,来看一下会发生什么情况:
如上图所示,假设此时 \(V_{\text{in}} > 0\),右侧二极管 \(Q_2\) 导通,\(Q_1\) 关闭,灰色箭头代表上方电流流向,它必须通过负载 \(R_L\) 和100千欧电阻流向地,当 \(R_L\) 阻值远小于100千欧时,\(V_{\text{out+}}\) 的大部分电压会落在 \(V_{\text{out-}}\) 上,此时 \(R_L\) 两边的电压接近于0,整流电路已经失去了作用。为什么会这样?因为我们在分析 图 7.39 的时候 \(V_{\text{out}}\) 处是断开的,这相当于接了一个阻值为无穷大的电阻,这样100千欧电阻上分到的电压为0而不是低负载下接近全部 \(V_{\text{out+}}\)。这同样是一个低阻抗破坏电路行为的例子。解决办法就是电流流过 \(R_L\) 之后不要去流过100千欧的电阻而是另一条阻值很低的到地的通路(或者用两个缓冲器也可以):
如图所示,这样电流在流过负载之后可以从\(Q_{3}\)流向地,\(Q_{3}\)的存在是必要的,否则\(Q_{1}\)将永远无法导通,同理\(Q_{4}\)用于下半周期,这样就形成了一个完整的全波整流电路。但依然存在二极管压降导致失真的问题,所以接下来我们将搭建出一个超级二极管来解决失真。
7.10 超级二极管
超级二极管就是没有压降的二极管,但它并不是什么先进工艺下的新型二极管,而是利用了运放的负反馈:
在输出端加入一个二极管后,电流只能从上往下流过电阻 \(R\),所以 \(V_{\text{out}}\) 不会小于0伏,反相端只能跟随 \(V_{\text{in}} \ge 0\) 的情况。而放大器输出端会自动调节以克服二极管跨压让 \(V_{\text{out}} = V_{\text{in}} \ge 0\),在 \(V_{\text{in}} < 0\) 的时候 \(R\) 没有电流流过,\(V_{\text{out}} = 0\),输入输出关系为:
虽然导通后输入和输出电压相同,这看起来很像一根导线或某种新材料二极管,但我们不能随意把它当导线和二极管用!因为\(V_{\text{in}}\)端电流流不进去,更好的办法是看成一个只对正电压有效的缓冲器,而它真正的名字叫做有源整流器(active rectifier)。
但是只有超级二极管是不完备的,我们需要另一种结构实现当输入为负时,把信号翻转上去且不会造成明显失真,我们可以把这种结构称为反相超级二极管(inverse super diode)。
和超级二极管一样需要借助运放实现目标,基本想法是在反相放大时会有一个负号产生:
\(V_{\text{in}}\) 不同输入情况下电流方向会有区别:\(V_{\text{in}} \le 0\) 时,电流方向是灰色箭头①,两个电阻 \(R\) 大小一样,\(V_{\text{out}} = -V_{\text{in}}\);\(V_{\text{in}} > 0\) 的电流方向是箭头②,此时反馈回路上的电阻没有电流,\(V_{\text{out}}\) 大小和反相端电压相同,因为都处于负反馈,\(V_{\text{out}} = 0\)。
输入电压和输出电压关系有:
不同于 图 7.42 里电流无法流入, 图 7.44 的信号源是需要产生电流才能让电路正常运行,可以通过把R设置得比较大来减小电流消耗。
最后把这两个东西组合起来,就可以得到一个失真很小的全波整流电路了,还是要记得从别处来的信号要加一个缓冲器隔离一下:
两个\(V_{\text{bias}}\)的电压要一样,它们表示的是信号翻转处的电压。
7.11 三角波核心
除了通过整流获得三角波,还可以使用独立的三角波发生器。回想一下锯齿波产生的情景,一个恒定大小的电流对电容充电,电容电压线性上升,到达某个阈值的时候被快速放电,因为放电时电流足够大以至于锯齿波后半段接近垂直下降。
如果能让放电电流和充电电流大小一样,放电时电压也会呈线性下降,就可以由锯齿波转为三角波:
关键角色在于“开关”,开关用于切换电流方向,我们在7.4节见到过用NMOS当做开关,这儿将会详细介绍有关NMOS的特性。
离散NMOS常见为一个三端口器件,包括栅极(gate)、源极(source)和漏极(drain):
它以P型半导体为衬底,参杂两块N型半导体分别作为源极和漏极,并由一块绝缘板(例如二氧化硅)覆盖在上面作为栅极。无电压的情况下漏源之间因为PN节的存在无法导通。
栅极施加一定电压后,二氧化硅处类似一个带正电的电容极板,它会吸引P型半导体中的电子靠近绝缘板,当电压足够高时绝缘板下面电子浓度将远高于空穴浓度,形成类似于N型半导体的区域,被称为反型层:
这样漏源之间就被接通了,只要 \(V_{DS} > 0\),电流就可以从漏极流到源极。形成反型层的条件是栅极电位要比衬底电位高一个固定的电压大小(阈值电压 \(V_{th}\))。在分立器件上衬底电位一般和源极电位相同,所以当 \(V_{GS} \ge V_{th}\) 时认为NMOS导通(大多数型号的NMOS阈值电压 \(V_{th}\) 在0.8到3伏之间)。
NMOS是真正意义上可以作为开关的器件:在 \(V_{GS} < V_{th}\) 时NMOS截止相当于开关断开。\(V_{GS} \ge V_{th}\),即使 \(V_{DS} = 0\),NMOS依然能够在没有电流流过的情况下保持导通(三极管做不到这一点),像开关打开后形成的导线(同时根据器件特性还需要满足 \(V_{GS} > 2V_{DS}\) 才能看作性能良好的开关)。
为了得到 图 7.48 里两个大小相同的反向电流,我们还是会用到Howland电流泵,它只需要\(V_{\text{in}}\)变为\(-V_{\text{in}}\)就能产生反方向的电流。\(V_{\text{in}}\)和\(-V_{\text{in}}\)的切换我们可以使用极性转换器:
图 7.51 里开关断开时,运放同相端和反相端输入都是\(V_{\text{in}}\),用叠加定理可以知道输出也是\(V_{\text{in}}\),开关接通后同相端接地,输出变成\(-V_{\text{in}}\)。我们只需要选择开关的打开和关闭就可以实现电压信号的翻转,结合前面讲的内容,极性转换器会变成这样:
\(V_{\text{con}}\)是控制信号,\(V_{\text{con}} = 0\) NMOS关闭,\(V_{\text{out}} = V_{\text{in}}\)。
\(V_{\text{con}} = V_{CC}\)(\(V_{\text{in}}\) 常在0到6伏之间,\(V_{GS} > 2V_{DS}\)),NMOS导通,作为开关导通后的NMOS可以看成一根理想导线或者一个带很小电阻的导线,\(V_{\text{out}} = -V_{\text{in}}\)。
把 图 7.52 的输出端连接到Howland电流泵的输入,就能获得由\(V_{\text{con}}\)控制电流方向的电流极性转换器:
有了它就可以控制电容充放电的电流大小了,为了实现\(V_{\text{con}}\)的自动切换,可以把电容电压送到迟滞比较器去,设定好不同的阈值,电容电压将会在阈值范围内振荡:
迟滞比较器输出的\(V_{CC}\)(12伏)和\(V_{EE}\)(-12伏)能够开启或关闭NMOS,但阈值设定有一些讲究,不是随便设置的。
比较器没有负反馈,它的输出要么是\(V_{CC}\)或者\(V_{EE}\)。在电路上电瞬间,因为供电顺序比较器会被随机地拉到\(V_{CC}\)或\(V_{EE}\),这就让NMOS处于不同的状态,此时电流方向也是不确定的,电容可能会开始充电,也可能开始放电。输出\(V_{CC}\)时,NMOS导通,极性转换器输出是\(-V_{\text{in}}\),Howland电流向上对电容放电,电容电压从0开始降低(电容初始0伏)。而 图 7.2 的迟滞比较器在输出正电压时,输入要高于上阈值输出才会翻转,但现在电容电压却会不断降低,比较器输出永远不会翻转,所以 图 7.54 的电流方向是不符合要求的(比较器输出为\(V_{EE}\)电流方向也不符合要求)。
有两种改进方法,要么改变 图 7.53 的电路让电流方向再次相反,要么修改迟滞比较器。前者只需要把Howland电流泵同相端和反相端的输入交换一下,后者可以在比较器后面再加上一个单位增益的反向放大器。
修改后就可以满足初始上电时无论比较器输出到什么都可以实现自动翻转。
假设选择上下阈值分别是2伏和-2伏(NMOS切换需要花费时间,三角波电压会存在过冲),最终的三角波电路如图所示:
不同的电容值可以调整三角波的频率。
同样地三角波频率和电流直接相关,Howland电流泵是一个线性的电压-电流转换器,但是 图 7.28 的指数电压-电流转换器又无法翻转电流方向,所以它不能用在三角波电路上。为了得到指数型关系(1V/Oct),下面我们将介绍电压指数转换器。
7.12 电压指数转换器
基本想法还是使用Howland电流泵,并在前面多添加一个转换器让输入每增加1伏,输出可以让Howland电流泵电流增大1倍。
假设转换器当前输入是\(V_{\text{in}}\),输出是\(V_{\text{out}}\),电流大小则为 \(\frac{V_{\text{out}}}{R}\),为了获得2倍电流,输入是\(V_{\text{in}} + 1\)时输出应该为\(2V_{\text{out}}\),这样可以得到\(V_{\text{out}}\)和\(V_{\text{in}}\)的关系:
\[ V_{\text{out}} = e^{V_{\text{in}} \ln 2} \tag{7.12}\]
为了实现这个目标,我们要使用电压指数转换器:
\(Q_{1}\)、\(Q_{2}\)是一对封装在同一枚芯片里的三极管对,当然我们也挑选一对匹配度很好的分立三极管,两个运放都处在负反馈下,假设\(Q_{1}\)和\(Q_{2}\)的发射极电压是\(V_{p}\),根据三极管电压电流公式列出:
\[ \begin{aligned} I_{C1} &= I_S e^{\left( V_{\text{in}} \frac{R_3}{R_2 + R_3} - V_p \right) / V_T} \\ I_{C2} &= I_S e^{-V_p / V_T} \end{aligned} \tag{7.13}\]
把\(I_{C1}\)带入\(I_{C2}\):
\[ I_{C2} = I_{C1} e^{\frac{-V_{\text{in}}}{V_T} \frac{R_3}{R_2 + R_3}} \tag{7.14}\]
带入 图 7.57 中具体数值:
\[ \begin{aligned} \frac{V_{\text{out}}}{10\text{k}} &= \frac{12}{120\text{k}} e^{\frac{-V_{\text{in}}}{V_T} \frac{R_3}{R_2 + R_3}} \\ \Rightarrow V_{\text{out}} &= e^{\frac{-V_{\text{in}}}{V_T} \frac{R_3}{R_2 + R_3}} \end{aligned} \tag{7.15}\]
\(V_{T}\)在常温下约25毫伏,为了匹配 式 7.12,让\(\frac{R_3}{{(R}_2 + R_3)V_T} = \ln 2\),可以得到\(\frac{R_3}{R_2 + R_3} = 0.0173\)。
这样 式 7.15 输入每减小1伏,输出电压\(V_{\text{out}}\)变成\(2V_{\text{out}}\),在输入为0时\(V_{\text{out}}\)等于1伏。因为从其它地方来的控制电压总是大于0伏的,所以要用反相放大器把信号反相后再输入到电压指数转换器:
把 图 7.58 的\(V_{\text{out}}\)和 图 7.55 的\(V_{\text{in}}\)接一起就能创造出1伏/8度的三角波震荡器,注意在新的电路中\(V_{\text{in}} = 0\)的时候是有信号产生的(因为有1伏电压输入到 图 7.55)。
7.13 Buchla 259三角波核心
Buchla 259在1970年第一次发行,是Buchla 200系列家族中的一员,它内部有一个三角波产生模块,原理和上一节是一样的,用同样的电流大小对电容充放电,但电流方向改变是用其它结构完成的。
\(Q_{1}\)、\(Q_{2}\)是差分输入对,下面连接着一个受控电流源,\(Q_{1}\)基极被绑定在2.7伏,这个数字并没有什么特别的意义,\(Q_{2}\)的基极是迟滞比较器op-2的输出,要么是5伏要么是0伏。对一个差分对来说,基极电压相差3\(V_{T}\)时电流基本上全都通过某只三极管,而另一只被关闭,5伏和0伏与2.7伏的差值要远大于3\(V_{T}\),所以\(Q_{1}\)基极在2.7伏或者3伏并不重要,\(Q_{1}\)和\(Q_{2}\)永远工作在一只导通另一只就截止的状态。
\(Q_{3}\)和\(Q_{4}\)组成一个电流镜,\(Q_{4}\)会复制\(Q_{3}\)电流大小,当\(Q_{1}\)导通时,\(Q_{2}\)截止,\(Q_{1}\)流过的电流大小和\(Q_{3}\)一样是\(i\),因此\(Q_{4}\)的电流大小也是\(i\),但\(Q_{2}\)截止使电流只能流向op-1为电容充电。
在\(Q_{2}\)导通时,\(Q_{1}\)截止,\(Q_{3}\)也没有电流,所以\(Q_{4}\)也不会有电流,但是电流源需要有大小为\(i\)的电流从\(Q_{2}\)流过来,所以这个电流只能由运放op-1来提供,它会流过电容对电容放电。
可见这个电路是通过一对带电流镜的差分对实现电流改变方向的,控制信号同样由一个迟滞比较器op-2给出。28千欧和5千欧的作用是为了设定三角波电压范围(和上一节一样,还要保证比较器触发条件和电容充放电匹配)。可以得到\(V_{\text{out}}\)的电压范围在-2.7伏到3.2伏之间,峰值时op-2的反相端分别会在0伏和5伏,实现迟滞比较器输出电压翻转。
7.14 正弦波震荡器
正弦波作为自然界里最纯的一类波,它有着非常干净和漂亮的数学特性,但在模拟合成器的世界里它算得上是非常麻烦的一种波形了,对比三角波直直地上升和下降,正弦波是带有弧度的,这意味着在一个周期内都需要不同大小的电流对电容充放电。
我们基本上无法实现这样的要求,正弦波产生方法主要有两种,一是环路振荡,还有就是LC电路振荡。这一小节简单说一下LC振荡电路。
对一个理想的电容电感并联组成的电路,正弦波可以在频率为\(\frac{1}{2\pi\sqrt{LC}}\)处稳定振荡,然而世界上没有绝对理想的东西,一个电感内部会存在寄生电容和电阻:
电容\(C\)是电感内部因各种效应等效出的电容,\(R_{P}\)是信号流过电感后所有损失的等效,因为这样的非理想性,电感专门有一个参数,叫品质因子(\(Q\)值)来衡量一个电感的性能,\(Q\)值越大电感性能越好。电感内部的\(R_{P}\)是一个和\(Q\)与电感输入信号频率有关的参数,有:
\[ R_P = 2\pi Q f L \tag{7.16}\]
\(f\)是输入的正弦波频率,\(L\) 是电感大小,\(R_{P}\)随着输入频率越大而越大,假设忽略电感内部电容的影响,当一个并联\(R_{P}\)的非理想电感和外部电容\(C_{1}\)并联,这个非理想的LC电路依然会有频率为\(\frac{1}{2\pi\sqrt{LC}}\)的正弦波产生,但因为\(R_{P}\)的存在会不断消耗能量,使正弦波幅度越来越小直到消失:
\(R_{P}\)就像一个损耗因子,振荡器里面的“空气阻力”,消除它的办法也很简单,再并联一个\(-R_P\),一个负电阻的电流方向与正电阻的电流方向相反,正电阻消耗能量,负电阻可以提供能量,\(-R_P\)加入电路里面就能把\(R_{P}\)损耗掉的那部分补充回来,使得正弦波幅度不会衰减:
正弦波的振动幅度取决于一开始电容\(C_{1}\)两端的电压,为了得到\(-R_P\),再次翻遍桌子上的电子原件,最后一无所获。因为电阻本质上是一个被动器件,因此它只能消耗能量,想要用它来提供能量是做不到的。所以这里的负电阻是某种意义上等效的负电阻,为了得到它,我们需要了解一下米勒效应(miller effect)。
叫米勒效应、密勒效应或密勒近似都可以,这个现象在1920年就已经被发现了,考虑如下一个情景:
当一个电阻R架在放大倍率为A的放大器两端,那此时从输入端看进去的等效电阻有多大?为了计算等效电阻,在左侧输入端施加一个测试电压\(V_{\text{in}}\),再计算流入电流\(i\)的大小。
首先这样就有放大器输入电压为\(V_{\text{in}}\),因为它的电压增益是A,所以输出端电压\(V_{\text{out}} = A V_{\text{in}}\)。而放大器没有电流流入,所以\(i\)会全部流过电阻R:
\[ i = \frac{V_{\text{in}} - A V_{\text{in}}}{R} = (1 - A) \frac{V_{\text{in}}}{R} \tag{7.17}\]
输入端等效电阻为:
\[ R_{\text{equ}} = \frac{V_{\text{in}}}{V_{\text{out}}} = \frac{1}{1 - A} R \tag{7.18}\]
如果 \(A = 0\),那看进去电阻大小就是原来的 \(R\);考虑当 \(A > 1\) 的情况,\(A > 1\) 的话 \(R_{\text{equ}}\) 是一个负值,输入的 \(V_{\text{in}}\) 越大电流反过来流出的越多,直观理解是因为输出端 \(V_{\text{out}}\) 总会被放大到比 \(V_{\text{in}}\) 还大,电流总是反过来从输出端流向输入端。
当\(A = 2\) 的时候 \(R_{\text{equ}} = -R\),这样我们就能创造出一个负电阻了。
要实现放大器增益为2也很简单,用一个同相放大器就可以:
上 图 7.64 化简一下就得到了和 图 7.63 放大器一样的拓扑结构,最后再把一个电阻\(R\)架在输入和输出上,就得到了一个从输入端看进去是\(-R\)的等效电阻了。
把这样一个负电阻接入到LC振荡电路里:
如果 \(R\) 选的合适,这样的电路是完全可以正常运行的。“合适”是指 \(R = R_P\),如果 \(R > R_P\),正弦波最终还是会消失。但 \(R_P\) 具体是多少很难精确得出, 式 7.16 只能计算出大约的一个范围。
幸运的是我们可以取值 \(R < R_P\),当 \(R\) 来得更小的时候,它还帮我们解决了电路一开始起振的问题,因为在上文都是假设电容具有初始电压起振的。\(R\) 更小一开始就会给电路提供能量让正弦波振幅越来越大,当振幅电压到达某一程度时,放大器整体的负电阻会变成等于 \(R_P\)(因为运放失真),这个时候就能保持稳定幅度的振荡。
如果电感大小是1毫亨,\(Q\)为35,在1千赫兹处\(R_{P}\)通过 式 7.16 可以得到大约是226欧。这个\(R_{P}\)已经有点太小了,我们很难选出一个比226欧还小的\(R\),运放也很难为如此小的\(R\)提供足够的电流。
因此LC振荡器不太适合用于低频振荡,至少 图 7.66 的结构并不适合用于产生低频信号,介绍它的目的也并不是用于制作压控振荡器,更有可能的场景是在电路板上制作出几个固定了频率的正弦波源。
但如果选择\(Q\)值更大电感值也更大的电感呢?依然很难制作成压控振荡器,因为电感固定后,为了实现振荡在声音频率下,需要一个可以跨越好几个数量级的压控电容,虽然并不是没办法,但效果不好。模拟合成器里面的正弦波主要还是依靠三角波变形而来的。
7.15 三角波转正弦波
三角波转为正弦波也叫正弦整形,概念上和锯齿波转三角波一样,都是波形变换。关于这部分变换会使用到跨导运算放大器(OTA),OTA就是第4章介绍过的,本质上它是电流放大器,在这一小节我们将对它作更近一步的介绍。
去网上翻看模拟合成器OTA的文章,会发现OTA的电器符号基本上都长这样:
\(i_{abc}\)是输入偏置电流,当然它和普通运放一样需要电压供电,不同之处在于普通运放差分对下面连接的电流源电流大小是固定的,但是OTA差分对的电流源电流大小是\(i_{abc}\)。作为电流放大器,OTA输出端也是电流,以常见的LM13700跨导运放为例,通过内部电路示意图我们来了解它的行为:
其实它和左侧的5管OTA没有什么差别,只是LM13700把电流镜换成了威尔逊电流镜(圆圈圈出来的),目的都是为了把差分输入下\(Q_{1}\)和\(Q_{2}\)变化的电流从\(i_{out}\)输出,其实只要看得懂5管OTA,右侧的也就很好理解了。
那\(i_{out}\)具体是多少呢?因为电流镜只是单纯复制电流,所以我们可以从简单的5管OTA分析,在小信号下,画出小信号模型:
在差模输入 \(V^+\) 和 \(V^-\) 下,流过 \(r_m\) 的电流大小为:
\[ i = \frac{V_{\text{in}}}{2r_m} = \frac{1}{2} V_{\text{in}} g_m \tag{7.19}\]
上方电流镜会复制\(Q_{1}\)电流大小和方向,两股电流汇聚在右侧输出:
\[ i_{\text{out}} = i + \alpha i \approx 2i = V_{\text{in}} g_m \tag{7.20}\]
\(g_{m}\)是三极管跨导,根据三极管公式和偏置电流\(i_{abc}\):
\[ g_m = \frac{dI_D}{dV_{BE}} = \frac{i_{\text{abc}}}{2V_T} \tag{7.21}\]
所以\(i_{abc}\)越大,相同电压输入下输出电流越大,但是\(i_{abc}\)不能无限大,芯片内部的三极管无法承受过大的偏置电流,一般\(i_{abc}\)会小于2毫安,常为1毫安。
\(V_{T}\)是我们熟悉的热电压,常温下约25毫伏。然而小信号模型是在输入差模信号足够小,小到不足以改变三极管基本偏置下作出的简化模型。当输入电压\(V_{\text{in}}\)足够大时,偏置电流\(i_{abc}\)可能完全偏到某一边去而另一边截止,此时输出\(i_{out}\)z最大也就是\(i_{abc}\),所以我们可以画出一个粗略的输入电压-输出电流曲线图:
小信号模型只有在中间线性的一小部分区域满足(在 \(V_{\text{in}} < 10\text{mV}\) 范围内),当 \(V_{\text{in}}\) 大到2个或3个 \(V_T\) 时,电流早就全部偏到某一方去了。 图 7.71 一般可以用以下公式描述:
\[ i_{\text{out}} \approx i_{\text{abc}} \tanh\left( \frac{V_{\text{in}}}{2V_T} \right) \tag{7.22}\]
\(\tanh\) 是双曲正切函数。三角波转正弦波需要用到 图 7.71 的非线性部分,只需要把它当成一条映射曲线就知道为什么了,三角波尖尖的头部和底部可以被非线性部分拉平整:
上图可以用一个很简单的电路实现:
\(R_{1}\)和可调电阻\(R_{2}\)分压把三角波信号幅度压缩到2~3\(V_{T}\)内,1兆欧电阻提供大约1毫安的\(i_{abc}\)(\(\frac{12 - 1.4}{1M}\)),负载\(R_{L}\)把电流变化转化成电压变化,\(R_{L}\)架在\(\frac{1}{2}V_{CC}\)是为了让电流流入OTA时差分对右侧三极管保持在放大区。
更多有关三角波转正弦波的电路,大家可以去看这篇文章《An Improved Sine Shaper Circuit》,它在里面提出来了一些改进方案减小正弦波失真。其实很多关于模拟电路技术细节的讨论是出现在不同作者网站、博客或论坛上的,它们零零散散地存在于世界上各个角落,没有谁能把所有的东西都记录下来,花时间去寻找阅读这些散落的东西是一件值得去做的事情。
7.16 电子元件
到目前为止我们已经对模拟合成器里常见波形有了大致的了解,这一小节是对7.2的补充,将会更详细地介绍常用的器件。
用到最多的首先是电阻,电阻常见有碳膜电阻、金属膜电阻和可变电阻。所谓“膜”是指一层非常薄的材料,碳膜和金属膜电阻内部有一根绝缘陶瓷,导电材料环绕并贴在陶瓷上,碳和金属强调不同类型的导电材料。大多数场景下碳膜电阻已经足够我们使用了,它的误差范围在5%~10%之间。
金属膜电阻有着更高的电阻精度和成本,它的精度可以达到1%或0.1%,且对温度变化不敏感,在需要精确数值的场合,应该优先选择金属膜电阻,除了精度更高外,金属膜还伴随着更小的电路噪声,有着十分优异的性能。
滑动变阻器大致分为两类,一类只能粗调,如上图所示,它有三个端口A、B、C,A到C之间为总阻值大小,例如上图标注的10千欧,它上方有一个可以旋转的旋钮,旋转范围约0到270度之间,顺时针旋转A和B之间的电压从0逐渐增大到10千欧(或者由大到小逐渐减小)。
另一种是可以微调的滑动变阻器:
它同样有可以旋转的金属帽来调整1和2之间的阻值,不同的是这个金属帽可以重复旋转很多圈,使电阻以更慢的速度变化。
接下来就是电容,和电阻类似,电容也没有那么地简单,它可以分为有极性和无极性两类,有极性的主要是电解电容,无极性常见有陶瓷电容和薄膜电容。
电解电容的两个引脚有明显的差别,长的表示正极(+),短的表示负极(-),因其特殊的内部构造,电解电容需要正极电压高于负极电压才能正常工作,反过来会导致电流过大出现爆炸的风险。电解电容常用在需要高容值的场合,它能提供更大的电流。
陶瓷电容和薄膜电容没有正极和负极的区分,它们是无极性的。陶瓷电容以陶瓷材料作为电解质,它们体积可以做得很小且价格低廉,但相应的容值也比较低,误差比薄膜电容更大,也容易受其它因素影响。陶瓷电容主要用在高频领域,电路里常作为旁路电容(0.1微法)和补偿电容(100皮法)用于过滤电源噪声和频率稳定。
薄膜电容体积会比陶瓷电容大上一些,它的制造成本更高,精度也更高,适用于高精度的场合,我们合成器里信号产生处的电容应该选择薄膜电容。
最后是常用器件选型,从二极管开始吧,常见型号是1N4148,这是一款小信号二极管,小信号二极管不能承受太大电流,1N4148能连续承受最高200~300毫安电流大小,相比起功率二极管(能连续承受安培级别的电流)虽然电流承载能力下降很多,但有着更快的开关速度。1N4148是硅二极管,导通压降在0.7伏左右,对于我们已经介绍过的电路来说,不太会出现电流超过100毫安的情况,所以它是满足我们使用需求的。
NPN和PNP三极管可以用到2N3904和2N3906,它们最大集电极电流也在200毫安左右,集电极和发射极之间最高能承受40伏压降(在正负12伏电压源的情况下不会出现电压击穿)。2N3904和2N3906的封装外观看起来都是一样的:
我们只能通过背后打印的型号区分不同类型的三极管,然后再去找到器件的说明书(数据表)确认每个引脚连接到三极管的什么。
同样封装的还有我们需要的NMOS开关(外观上几乎看不出来差别),可以选择2N7000系列,它的\(V_{GS}\)最高能承受20伏,可以使用在12伏电压下。如果想用专门的模拟开关,也可以选择CD4066,它里面集成了四个开关,有专门的控制引脚控制开关的打开和关闭。
运算放大器包括普通运放和OTA,OTA还能比较方便买到的就是LM13700,一枚LM13700里面有两颗OTA,如果我们只用到了其中一个,芯片里剩下的另一个可以把它输入端都接地,输出端悬空,运放也是如此,没用上的配制成缓冲器或者把输入都接地,防止电路不稳定。运放具体型号可以很简单地选择TL07系列,TL071表示一枚芯片里只有1颗运算放大器,TL074表示一枚芯片里有4颗运算放大器,TL07系列都是FET类型的差分输入对,在低频时有无穷大的输入阻抗。
再次强调一下,无论是运放、OTA或者555定时器,这些芯片在实际搭建的时候都需要在供电引脚旁放上一颗旁路电容过滤电源噪声。
7.17 噪声电路
电路里的噪声通常指那些无法消除的干扰,这些干扰会带来随机的能量变化,反映在电路里就是电压和电流的随机波动。尽管这些波动幅度很小,但人们的基本愿望是尽量避免噪声的出现,避免它带给我们不必要的信息。
然而从声音上讲,噪声算不上那么讨人厌,特别是带有颜色的噪声:白噪、粉红噪等,它们听起来不会让人觉得很难受(或许有些人会讨厌)同时也可以丰富声音效果,所以噪声电路的出现也没什么好奇怪的,它只是成了一个比较特别的声源。
那我们应该怎么去描述噪声呢?单纯用频率来描述是不行的,噪声是无规律信号,或者正是因为它的无规律性,才被称为噪声。看一个例子:噪声广泛存在于各种电子元件中,虽然有很多产生原因,但都会以电压或电流波动的形式出现,电阻同样会产生噪声,主要是因为内部电子的随机运动,给电阻施加电压,理想情况下电阻电压应该是稳定的:
但有噪声下实际输出会是这样的:
可以认为输出是在理想的\(V_{1}\)上叠加了一个\(V_{\text{noise}}\),不过\(V_{\text{noise}}\)的波动幅度不会有图上那么大,甚至小到普通示波器也观测不到(微伏级别)。
对这样随机的信号,我们只能从统计的意义上去描述它。电路里所有连续变化的电信号都可以被分解为不同频率、幅度和相位的正弦波的无限叠加(傅立叶变换):
对噪声进行分解并只关注我们能听见的频率范围(更高频的信号叠加上去我们也听不出差别),计算不同频率下正弦波的能量大小(与电压的平方正相关)。会发现白色噪声在不同频率下能量(或者电压)保持不变,粉红噪声随着频率升高能量逐渐降低:
棕色噪声相比粉红噪声下降速度更快,而蓝噪随着频率升高能量也越高。这些颜色噪声都可以通过白噪滤波得到,因此有了白噪也就能得到其他噪声了。
大多数白噪电路会用到齐纳二极管,齐纳二极管和普通二极管类似,它可以正向导通,反向截止,但是当二极管反向电压很大时,二极管可能会被击穿导致电流产生,齐纳二极管就是被专门设计成工作在反向击穿下的特殊二极管:
上图左侧的符号就是齐纳二极管,它的电压-电流曲线如右侧所示,当反向电压小于(绝对值大于)\(V_{Z.min}\)时齐纳二极管被击穿,被称为齐纳击穿,此时有反向电流产生。因为曲线足够陡峭,在很大的电流范围内电压可以保持相对稳定,所以齐纳二极管常用于电路稳压。
当发生齐纳击穿时,反向电流的噪声具有很平坦的能量分布,类似于白噪,这个噪声经过放大器放大后就可以被我们听见。
下面这个电路来自于Ray Wilson的网站,作者写过一本关于模拟合成器的书《Make:Analog Synthesizers》,里面介绍了很多关于制作模拟合成器的知识和所需技能,今天我们依然可以在网上买到这本书的实体版本。可惜的是Ray在2016年因为生病离开了人世,但他留下了很多东西例如这个电路让我们得以不断地探索世界上可以发生的美好的事情。
上图里2N3904的集电极是断开的,它基极和发射极之间的PN结被当成了一个齐纳二极管,\(C_{31}\)是在电路运行时稳压用的,齐纳二极管的击穿电压在5~6伏左右,根据图中2个470千欧的电阻,齐纳二极管的直流偏置电流约在20毫安左右,电流白噪声也会添加在这个直流偏置上通过\(R_{141}\)和\(R_{142}\)转化成电压。
\(C_{32}\)是解耦电容,因为\(C_{32}\)左右两侧电压的直流偏置水平不一样,右侧通过\(R_{143}\)偏置在0伏,而电容只对交流信号敏感,因此\(C_{32}\)可以把左侧的直流和交流信号分开,只把交流信号叠加到右侧直流上。
然后偏置在0伏的噪声信号通过第一级放大,配置为同相放大器,\(R_{146}\)和\(R_{148}\)设置增益为100,所以第一级把噪声信号放大100倍,22皮法电容用于放大回路稳定。
再通过解耦电容\(C_{33}\)把放大后的噪声进行第二次放大,第二级放大增益可以在2~20之间调整,直到我们能听见声音。这两级总增益在200~2000之间,运放型号是TL074,所以在一枚芯片上就可以完成电路搭建(别忘了TL074的电源旁路电容)。最后噪声通过\(C_{34}\)耦合到\(R_{151}\)上分压输出。
搭建这个电路的时候还需要用不同的2N3904不断尝试找到输出听起来比较好的一根三极管,更多的细节也可以直接到他的网站去看。
如果打算直接使用齐纳二极管,也可以这样接:
R的选择根据想要的直流电流不同而不同(通过查询齐纳二极管数据手册计算)。关于如何把白噪声滤波成其他颜色的噪声,这部分会放到后面压控滤波器的章节讲。
7.18 修饰电路
修饰电路就是一个非线性电路或非线性映射,映射是指输入输出关系,线性映射输入后输出形状保持不变,最多有幅度上的变化,非线性映射可以创造更多的折叠,让输出图案不同于输入,就像三角波转正弦波一样。
首先前两个电路在ECE4450中都有提到,第一个是死区电路:
在负反馈还能维持住“虚短”时,\(V_{\text{out}} = 0\),电流方向如上图所示全部被运放输出端吸收。
在运放输出达到\(V_{CC}\)或\(V_{EE}\)之后,如果\(V_{\text{in}}\)还继续变小或变大,反相端电压将无法继续维持和同相端相等,\(V_{\text{out}}\)的大小开始成为与\(V_{\text{in}}\)有关的函数:
\[ \frac{V_{\text{in}} - V_{\text{out}}}{R_I} = \frac{V_{\text{out}} - V_{EE} (V_{CC})}{R_F} + \frac{V_{\text{out}}}{R_L} \tag{7.23}\]
画出\(V_{\text{in}}\)-\(V_{\text{out}}\)关系曲线:
可以从 式 7.23 中计算出转折点和斜率,输入在两个转折点中间输出恒为0,超过转折点的输入和输出呈线性关系。
下一个电路和极性转换器类似:
两个二极管充当了开关的角色,输入\(V_{\text{in}}\)大于或小于\(\pm 0.7\text{伏}\) 时,二极管导通,运放增益约为-1,其它时候二极管关闭,运放增益为1。
关于非线性映射,神经网络算是最为人所知的应用了,我们可以在模拟电路中尝试做出一个可以调整参数的非线性电路。但在此之前我们还需要对单层网络有一定的认识。
一个单层网络是指只有一个隐藏层的网络,这个网络是从输入 \(x\) 到输出 \(y\) 的映射 \(y = f(x, \phi)\),其中 \(\phi\) 是参数集,包含了这个映射里所有可以调整的参数。对于 图 7.90,映射满足:
\[ y = \phi_0 + \phi_1 a[h_1] + \phi_2 a[h_2] + \phi_3 a[h_3] + \phi_4 a[h_4] \tag{7.24}\]
\(\phi_0\) 是偏置项或截距(图中没有画出),\(h_i\) 代表隐藏层第 \(i\) 个单元(图中圆圈)的值,分别满足:
\[ h_i = \theta_{i1}x + b_i \tag{7.25}\]
\(x\) 是输入,\(\theta_{i1}\) 代表斜率,\(b_i\) 代表截距。 式 7.24 里的 \(a[\cdot]\) 被称为激活函数,我们可以发现整个网络里面除了 \(a[\cdot]\),其它都是线性的。
但神奇的是数学上可以证明当隐藏层的单元足够多的时候,单层网络也可以逼近任意形状的\(x\) 到 \(y\) 的映射。
该怎么理解上面这一堆东西呢?更好的办法是通过图形展示。每个隐藏单元 \(h_i\) 满足 式 7.25,它是我们熟悉的线性一次函数,不同的 \(\theta\) 和 \(b\) 的情形如下:
对于激活函数 \(a[\cdot]\),常见为:
\[ a[x] = \begin{cases} 0, & x < 0 \\ x, & x \ge 0 \end{cases} \tag{7.26}\]
所以当 \(h_i\) 经过 \(a[\cdot]\) 后,小于0的值都会被截断,\(h_i\) 的形状看起来会是这样的:
假设 式 7.24 中 \(\phi_1\) 到 \(\phi_4\) 等于 1,\(h_1\) 到 \(h_4\) 如上图所示,那么最后可以得到 \(x\) 与 \(y\) 之间满足 \(y = h_1 + h_2 + h_3 + h_4 + \phi_0\):
最终的曲线会根据 \(\phi_0\) 的不同而上下移动,它的转折点就是 \(h_1\) 到 \(h_4\) 被激活函数截断的点。
可以想像,当有更多的隐藏单元的时候,最终的输入输出曲线也会有更多的转折点,从而实现逼近任意形状的目标(还需要合适的参数集)。
利用这一想法,我们就能制作出可以调整参数的非线性电路了,只需要实现 式 7.25、求和以及激活函数 \(a[\cdot]\) 的运算(波形电压当作输入 \(x\))。
好消息是 \(a[\cdot]\) 的形状和我们已经看到过的超级二极管输入输出关系一模一样!
那该如何实现 式 7.25 的乘法运算?虽然模拟芯片里有专门的乘法器,比如AD633,但它的价格非常感人,大家可以自己去网上搜一下。剩下我们知道的还可以进行乘法运算的只有反相和同相放大器。但同相放大器同样不适合,因为它的放大系数有一个无法消除的“1”。
到最后只有反相放大器可以供我们使用:
\[ V_{\text{out}} = -\frac{R_f}{R_{\text{in}}} V_{\text{in}} \tag{7.27}\]
反馈电阻 \(R_f\) 是一个滑动变阻器,这样可以调整放大系数 \(-\frac{R_f}{R_{\text{in}}}\) 的大小,因为没有负电阻,所以 \(-\frac{R_f}{R_{\text{in}}}\) 永远是一个负数,这意味着电路上的 式 7.25 \(\theta < 0\)。这是无法接受的事情,要让系数大于0,只能把 \(x\) 变成 \(-x\),恰好极性转换器可以做到。我们可以加入一个机械开关人为地控制 \(\theta\) 为正或为负。
截距 \(b\) 同样用一个反相放大器加上去,最后连接到一个超级二极管:
这样我们就获得了单个隐藏单元,机械开关用于控制 \(\theta\) 正负,\(R_f\) 调整 \(\theta\) 大小在0到2之间,因为电路里所有电压在 \(V_{CC}\) 和 \(V_{EE}\) 内,过大的斜率没有多少意义,之后100千欧的滑动变阻器调整截距大小,最后输入到超级二极管。
整个过程用到了4个运放,理论上只需要一枚TL074(运放是很便宜的资源),想要有更多的转折就需要更多的隐藏单元,然后把它们像 式 7.24 描述的那样加起来,我们就得到了一个可调参的非线性电路:
最后输出端的电容把输出直流偏置在0伏。总的来说这是一个启发性的电路,因为相比于用数字芯片实现,模拟上要费劲很多很多倍,效果可能也不尽如人意。但每个事物都有它各自的魅力,无论如何,旅程我们会不断走下去。