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