这是,其中包含(第15页,图4-4)一个有趣的应用电路,该电路由具有伪对数增益设置的Dpot控制放大器组成。但是,正如Microchip文本中所解释的那样,当电位器的控制设置接近0或256时,该电路实现的增益会开始发生根本性变化,Microchip文本中写道:“当电位器接近任一端子时,增益计算中的步长都会急剧增加。建议将此电路用于0.1至10V/V之间的增益。”
这是个好建议。遗憾的是,如果按照这个建议去做,实际上会放弃256个8位电位器设置中的48个,相当于损失了近20%的可用分辨率。图1中所示的简单修改可以消除这一限制。
图1:添加两个固定电阻器,将增益范围限制在建议的限值内,同时保持完整的8位分辨率。
这就得到了图2中的增益与红色的关系曲线。
图2:通过图1所示的简单修改,伪对数增益曲线略有改善。
然而,尽管有了这样的改进,关键项仍然是伪对数。它仍然不是一个真正的对数函数,事实上,从数量上看,它甚至没有那么接近对数函数,在某些地方偏差了近两倍。那么我们能做得更好吗?答案是,当然!
简单的(软件)技巧是准备一个257字节的对数查找表,将0.1到10.0的增益范围设置转换为对数生成这些增益所需的Dpot代码。
我们将表索引变量称为J。然后,对于(abs)增益G从0.1到10.0(含)的257字节表,
J(G) = (128 LOG10(abs(G)) + 128)
例如
J(0.1) = 0,
J(0.5) = 89,
J(1.0) = 128,
J(10.0) = 256,
等等……
观察图1中的增益表达式可以发现,(绝对)增益G所需的Dpot十进制代码N为:
N(G) = (284.4G – 28.4)/(G + 1)
因此N(.1) = (28.4 – 28.4)/(.1 + 1) = 0/1.1 = 0,
N(.5) = (142 – 28.4)/(.5 + 1) = 114/1.5 = 76,
N(1.0) = (284.4 – 28.4)/(1 + 1) = (256)/2 = 128,
N(10.0) = (2844 – 28.4)/(10 + 1) = 2816/11 = 256,
等等。
图3总结了G、J和N之间的最终关系。
图3:Dpot设置[N(J)]与对数表索引[J(G)],总结了G、J和N之间的关系。
对数增益表可在此Excel表中找到。最终结果具有8位所允许的尽可能好的对数一致性如图4中的绿线所示。
图4:绝对增益[Gabs=10(J/128-1)]与十进制码(J)的关系。
(原文刊登于EDN美国版,参考链接:Dpot pseudolog + log lookup table = actual logarithmic gain,由Ricardo Xie编译)