我使用ATtiny44微控制器为我的硕士论文设计了一个小型传感器 PCB 。我的应用程序需要大约 200 个这样的板,其中 16 个总是本地连接到控制器板。整个网络是这样的:
为了在控制器和传感器板之间进行通信,我编写了自己的 1 针总线(基于时序)。唯一的问题是,当我将传感器板的数据发送到控制器板时,传感器板必须有一个地址才能知道它在网络中的位置。
由于我在阁楼上只剩下 1 个引脚,我想出了一个基于跳线的 DAC 电路,它应该根据四个跳线的设置生成模拟电压。由于传感器电路使用值(47、470、1k、3k、4k7、10k、100k 和 220k)并且我想针对生产进行优化,因此我为 DAC 使用了以下值(基本上是 100k、50k、20k 和 10k )。根据跳线设置,这应该会给我一个介于 0 V 和 760 mV 之间的不错的值。正是我需要通过 ATtiny 的内部 1.1 V 参考读取的模拟电压。在启动时,阁楼会读取这个电压并且应该知道它的位置。
从理论上讲,这很好用。我什至在LTspice中进行了蒙特卡洛分析,以确认在考虑电阻器的容差时没有重叠区域(均为 1% BTW)。您可以在下面找到此分析的图片。
现在我生产了几块(幸运的是不是 200 个)这样的板,但有些板的地址没有得到正确的读数(特别是在所有公差同时发挥作用的更高地址区域)。我测量了所有可能的解决方案,最终找出了我的问题。我最初的分析不包括 5 V 电源电压的容差,它是在每个控制器板上使用MC7805从 12 V 本地生成的。根据数据表,MC7805 的输出电压介于 4.8 和 5.2 V 之间。
在我弄清楚这一点后,我修改了蒙特卡洛分析。现在看起来像这样:
正如你所看到的,有很好的重叠区域,我不能肯定地说这个电压只能表示这个地址。基本上所有地址都以 no 开头。8 可以得到错误读数(更高地址错误读数的可能性更高)。
我不想添加与板上已经使用的电阻值不同的电阻值(至于我想为生产优化的论文)。
我不想添加一个电压参考(例如齐纳二极管)来为 DAC 电阻网络供电。
我不能再修改控制器板(并在那里使用更精确的电压调节器)。
我仍然可以修改传感器板的 PCB 设计/原理图!
如何确保始终获得正确的地址读数(通过程序或通过更改电路)?