How to make synchronization between two different Arduino board.

Hello,

I am designing a ground tracking system, the on-board transmitting side will have a Arduino board , a RTC module RS3231 and a radio module on rocket.
For the receiving side, there will also have nearly the same devices.

By comparing the Time Difference Of Arrival (TDOA) between transmitting and the receiving signal, the distance between rocket and ground station would be able to infer.

The biggest question is I don’t know how to make the on-board and ground devices to be synchronized with microseconds unit.

It would be nice if I can get any idea here.

Thanks in advance!

The biggest question is I don't know how to make the on-board and ground devices to be synchronized with microseconds unit.

It is simply not possible.

Even if you could, the clocks on the Arduinos drift so rapidly that the synchronization would be quickly irrelevant.

So at 200m apogee, that is about 67 microseconds.

Many Arduinos don’t even use crystals, instead using ceramic resonators. So I’d start with replacing the oscillator with something much stabler. I found some 16MHz crystal oscillator modules rated for something like 0.5ppm stability from Digikey.

They are called TCXO as in Temperature Controlled Crystal Oscillator.

Under $3.50 each in small quantities, 16MHz oscillator module is accurate to ±0.5ppm. For those exacting requirements.

http://www.digikey.com/product-detail/en/ASVTX-09-16.000MHZ-T/535-9336-1-ND/675757

Note that this is rated to run from 3V ±5%, not 5V. And the output is 0.8Vp-p minimum clipped sine wave.

So I’m going to make a little board with a 3V regulator on board, and something like a 4050 CMOS buffer biased to 2.5V on the input, AC coupled to the TCXO to get a nice clean 5V clock signal.

The base station records the time and pings the rocket. The rocket pings back. When the base station receives the message it looks at the current time, subtracts the send time, and that value halved is the time of flight. No time sync needed.

There will be some offset of course. A number of pings should be performed when the rocket is on the ground to find out what that baseline time is.

You could have the rocket just ping continuously. The ping phase will shift as the rocket travels further away.

So at 200m apogee, that is about 67 microseconds.

Missing a decimal point .67 microseconds.

Keep in mind that radio waves travel one meter in about 3 nanoseconds.

Doh! Stupid calculator... ok, stupid finger... slipped. Rather difficult to measure 0.67us with an Arduino.