简短版:如何制作一个采用两个模拟直流输入的模拟乘法器?
长版:
我发表了一条评论,推荐 Ben Eaters 视频作为另一个问题,同时我最终自己(再次)观看了一些视频并自言自语“嗯……我想知道将某些部分制作成纯粹的模拟会不会更容易”。
总线可能只是一根线,不同的电压电平稍后将通过 ADC 转换为位。
只是弄乱了一点,我走了这么远,理论上可以计算斐波那契数:
链接到模拟器。
在上面的 gif 中,我超出了电压范围,因此很容易看到斐波那契数,实际上我只使用 250 mV = 二进制 1(“设定值”处的 LSB),然后让它通过每个电容器容纳 4 位的 DRAM。
在 gif 中要查看的重要部分是“a+b”文本右侧的运算放大器的输出,它显示了斐波那契数。
在每次操作之间,我会使用 ADC 和 DAC 来量化答案。因此,如果我读取 1.1V,那么 DAC 会将其转换为 1.0V,然后将其存储在 DRAM 中。然后每个 X 时钟一次,整个 DRAM 必须通过量化器以确保电容器不会飘走。
ALU 只能做 +、- 和平均。我正在考虑进行乘法运算并停了下来。我以前制作并看到过基于二极管的乘法器,但我不想使用它们,因为二极管必须匹配。我宁愿使用可以用电位器微调的电阻器。Anywhoo,我想出了一个混合乘法器,半模拟,半数字。
所以我做了第一个,到处都是相同的电阻。
图 2,数字数字和模拟值之间的简单乘数。数字值偏移 1。
然后我用二进制权重变成了这个:
图 3,二进制加权数字和模拟值之间的简单乘数。数字值偏移 1。
这让我想起了 R2/R 梯形图,但我无法让它们与运算放大器一起工作。
但是,我想到了 R2/R 梯形图的工作原理,我记得它们的输出乘以它们的电压源。所以我终于想出了这个设计:
图 4,基于 R2/R 的二进制加权数字和模拟值之间的乘数
我确实喜欢它,但唯一的问题是总线是模拟的,只有一根线。因此,如果我被迫使用上面图 4 中的解决方案,那么我将不得不在混合 CPU 的乘法区域使用另一个 ADC。我不能在量化器区域重用那个。
提问时间:
我应该如何制作一个需要两个模拟输入的乘法器?
- 我不想要基于3 个二极管和 4 个运算放大器的解决方案,因为您无法修剪二极管。我的信念是,如果它们不匹配,那么它们会给出一个偏差超过 250 mV 的答案。我没有在现实世界中尝试过。
- 我已经在链接中尝试了基于 MOS 的乘数,实际上比这个词高一英寸,但我不知道我是否愚蠢。我无法让它在模拟器中工作。有关 MOS 实施失败的信息,请参见下面的 gif。或单击此链接进行模拟。
- 我不想在这个问题上扔一个微控制器。
- 我不想使用旋转的电机并使用一些恶作剧。
- 我正在考虑在低通结构中使用 RC 滤波器来获取 \$e^{\frac{-t}{RC}}\$,充电和放电并使用斜坡 + 测量所需的时间电容达到一定的值。这与二极管的想法相同,只是速度要慢得多,我并不真正关心。虽然我可以使用电阻器来调整 RC 常数。我宁愿不使用这个解决方案,因为它感觉......就像我以错误的方式解决它。
- 精度不一定是完美的,现在每个电容器只有 4 位,如果 VDD 为 4 V,这将给出每个级别 \$\frac{4}{2^4}=0.25\$ V。虽然在未来,每个电容器存储 8 位会很有趣。
- 乘法完成后,它将被带到量化器以确保该值尽可能接近二进制值。所以小错误是可以的。
这是显示我尝试制作基于 MOS 的失败的 gif:
图 5,我从上面的 wiki 链接复制了原理图,但它在模拟器中不起作用。
如果它会起作用,那么当我将参考电压从 5 V 更改为 -5 V 时,我应该在某处看到值 1 V。