我正在开展一个项目,要求我使用彼此独立运行的2个独立的Arduinos。现在,这两个Arduino都运行相同的代码,但我注意到,在10分钟左右之后,其中一个落后,这个时间差随着时间的推移而不断增加。就像我已经提到的那样,Arduino是相同的,我同时买了它们,并且它们正在运行相同的程序副本。任何可能导致此问题的想法以及如何解决?
谢谢。
以下是我购买的Arduino的链接以防万一。 My Arduino modules on Amazon
答案 0 :(得分:1)
晶体振荡器的容差高达100ppm(极端情况),这意味着您每秒可能获得16Mhz * 100ppm = 1600个时钟脉冲差。此外,运行时间的差异可能是由小的电压差引起的。即使电路板上有一个电压调节器,它的公差也很小,根据事实,它可以在MHz范围内工作,这可以爬升到一个可识别的偏移。
可能的解决方案是两个微控制器的同步。我不是专家,所以以下解决方案是一个可能而且简单的解决方案,但绝对不是最好的解决方案。 如果它们彼此靠近,则可以使用每个控制器的两个引脚。一个作为输入,一个作为输出。在你的代码中写下这样的东西(如果你使用相同的Pins,两者都相同):
digitalWrite(outPin, LOW);
while(digitalRead(inPin)){};
digitalWrite(outPin, HIGH);
将第一个输出连接到第二个输入,第二个连接到第一个输入。 这导致较快控制器的每个循环的等待状态,直到较慢的控制器到达相同的程序部分。 但要小心,如果其中一个卡住某个地方,它也会停止第二个。所以没有冗余!如果这是您的目标,请不要使用此方法并搜索其他同步方法。
答案 1 :(得分:1)
也许您可以使用一些RTC(实时时钟)硬件来帮助您保持同步。它们非常便宜且易于使用。