我正在使用取自这个 instructable的 DIY 力敏电阻器 (FSR) 制作应用程序。该传感器的电阻通常从静止时的 20kOhm 到按下时的 9kOhm 不等。
我如何将这些电阻值转换为信号,其中 0v 对应于静止条件,5v 对应于“按下”条件,以便我可以用 Arduino 读取它?
我正在使用取自这个 instructable的 DIY 力敏电阻器 (FSR) 制作应用程序。该传感器的电阻通常从静止时的 20kOhm 到按下时的 9kOhm 不等。
我如何将这些电阻值转换为信号,其中 0v 对应于静止条件,5v 对应于“按下”条件,以便我可以用 Arduino 读取它?
您需要一个从 0V 到 5V 的信号范围。我们不都是:-)吗?让我们采用一种不同的方法,看看它对我们有什么帮助。
起点:最便宜和最简单的解决方案。
那将是一个串联电阻来创建分压器。这是绝对最低限度。我注意到人们并没有过多考虑这个电阻,只是选择一个不错的整数值,比如 10k\$\Omega\$。但我发现这有一个最佳值。
该曲线显示了最小和最大读数之间的电压差(分别为 9k\$\Omega\$ 和 20k\$\Omega\$)作为串联电阻的函数(以 k\$\Omega\$ 为单位)。看,它确实有一个最大值。如果你记得那很容易找到
\$ \left(\dfrac{f(x)}{g(x)}\right)' = \dfrac{f'(x)\cdot g(x) - f(x) \cdot g'(x) }{g^2(x)} \$
差值 \$V_{MAX}\$- \$V_{MIN}\$ 有一个极值
\$ \dfrac{d}{d R_X} \left(\dfrac{R_{MAX}}{R_{MAX} + R_X} - \dfrac{R_{MIN}}{R_{MIN} + R_X}\right) = 0 \$
求解 \$R_X\$ 给出
\$ R_X = \sqrt{R_{MIN} \cdot R_{MAX}} \$
一个美女!
所以在我们的例子中,串联电阻为 13.42k\$\Omega\$,您可以在图表上查看。将电阻器置于 0V 和 +5V 之间,这将为我们提供 [2V, 3V] 的输出范围。这是使用 1 个电阻 (*) 可以获得的最大范围。
够了吗?Arduino 有一个 10 位 ADC,因此这个范围将为您提供 200 个离散级别的范围。这应该为 DIY 传感器提供足够的精度。所以不需要像运算放大器这样的其他组件。
(*) 接受的答案给出了 1.9V 的范围,但它有错误的方程式。使用 1 个电阻和仅 +5V 电源,不可能获得高于 1V 的范围。
您需要一个负电压才能使电阻分压器变为 0V。我假设您有 +5V 和 -5V 可用。
将可变电阻 \$R_X\$ 放在 +5V 和 GND 之间。现在您需要找到 GND 和 -5V 之间的下拉电阻值。现在这很容易;当可变电阻为 20k\$\Omega\$ 时,您希望输出 0V,因此下拉也必须为 20k\$\Omega\$,因为整个事物是对称的。
接下来我们要找出当 \$R_X\$ 为 9k\$\Omega\$ 时分压器的输出电压是多少。我们注意到通过 \$R_X\$ 的电流与通过下拉电阻的电流相同,所以
\$ \dfrac{5V - V_O}{9k\Omega} = \dfrac{V_O - (-5V)}{20k\Omega} \$
算出这个给我们\$ V_O = 1.9V \$。现在剩下要做的就是将 0V..1.9V 缩放到 0V..5V。为此,我们使用RRIO(轨到轨 I/O)运算放大器作为同相放大器
如果您选择 \$R1 = 18k\Omega\$ 和 \$R2 = 47k\Omega\$,对于 20k\$\Omega\$ 的 \$R_X\$,您将获得 0V..5V 的输出电压范围。 .9k\$\欧米茄\$。
我认为最简单的方法是分压器,它在 9k 时为您提供 5V,并随着电阻的增加而减小。您可以在此分压器计算器中使用各种电阻器组合。然而,这将是一个线性进展。