I am currently working on a large scale data collection project which involves collecting a large amount of data over a long distance. I am producing a data logger using the ADS131E08 24-bit ADC. I will run the ADCs at either a sample rate of 8ksps or 1ksps. To effectively synchronize them I plan to run their clock from a PLL based clock from the GPS PPS and use the PPS to initiate the conversions.
The ADC clock rate is relatively high at 2.048MHz, this clock needs to be very accurate to ensure a constant sample rate across all devices and ensure they are sampling all at the same time.
I have thought of multiple ways to overcome the problem:
- DPLL based of FPGA
- Second GPS UBLOX NEO-7M GPS
- Analog PLL using VCXO
The DPLL from the FPGA seemed flawed as it wouldn't have enough resolution to accurately lock the signal to the PPS as it is very high frequency. There was not an FPGA on the board so this would need to be added if used.
The UBLOX NEO-7M GPS has inbuilt PLL functionality which can generate any frequency, this would be an easy solution if it is accurate and low enough jitter as it wouldn't be an integer division of its 48MHz clock. The second GPS would also add an incredible extra cost to the boards. This is a personal project so the funding is limited. Also, the main source for these GPS is Chinese markets such as Aliexpress which are littered with fakes so this would be a gamble in itself.
Another thought was to develop my own PLL loop on the board. I don't have any experience with this I understand how PLLs work but this would be a new experience for me. I want a robust solution as I am time-limited. My thought was to use a VCXO oscillator like this one
https://www.digikey.co.uk/product-detail/en/VTEUPCJANF-2.048000/1664-1355-1-ND/6126651. It oscillates at the desired clock of 2.048MHz and has an APR of +/- 50ppm. This would be a cheap solution but I have no experience with it and I need to ensure it would work, so any help and comments on this are welcome.
My last stupid thought was to use a precise enough oscillator to get a constant sample rate and then measure the time from the GPS pulse to the first data ready pulse using a timer on the microcontroller then send that time back with the data to the raspberry pi and use sin x / x interpolation to shift the sample time base to remove the time error.
That was my thought process of trying to solve this problem, I'm open to any suggestions it's a major wall in this project.