To miniaturize the HTC Vive tracker, we needed to make our own board, and went through several ideas, here is a summary:
To achieve accurate timestamps of several photodiode signals in an MCU, using interrupts would not be ideal as they would add delays and we would miss some of them.
We 1st thought about using the tiny FPGA by Lattice (iCE40UL-1K), it's only 10 x 10 mm and can be flashed with the Ice Storm open source tool-chain: clifford.at/IceStorm
...but we were planning to use the nRF52 radio-MCU by Nordic, and remembered that it has a very practical feature that would allow doing those timestamps in parallel without interrupt.
This feature is called PPI Programmable Peripheral Interconnect:
To verify that the timings were possible, we enjoyed the great talk* by Valve's engineer Alan Yates:
This video helped us simplifying our feasibility estimation, below are the quick & dirty numbers:
- Max base to tracker distance = 5m (5000mm) and we want an accuracy 0.25 mm = Ad
- Motor speed = 60 turns/sec => 1 turn takes 1/60 = 16.667 ms = T
- During T, the travelled distance = 2 Pi R = 31.415 m = D
- Time accuracy = T / (D/A) = (1/60) / (2 Pi * 5 / 0.00025) = 132.6 ns = At
- PPI sync @ 16MHz => 62.5 ns = Tppi
=> Theoretical accuracy = Ad / (At / Tppi) = 0.25 / (132.6 / 62.5) = 0.118mm!