Час дозволу до 100ns вимагає таймера, що працює на частоті 10 МГц. Багато мікроконтролерів повинні бути здатні запускати таймер так швидко.
Проблема виникає, коли ви намагаєтесь вчасно отримати 6 сигналів. Це всі сигнали на одному дроті чи кожен на іншому дроті?
Якщо вони всі на одному дроті, можливо, це можливо зробити точно в будь-якому MCU з одним таймером 10 МГц. Наївно, код для цього виглядав би приблизно так:
wait for trigger signal
reset timer
wait for first signal
save timer value
reset timer
....
wait for sixth signal
save timer value
reset timer
Проблема полягає в тому, що для скидання таймера потрібно обмежений час. Це спричиняє дві проблеми:
Виміряний час було б неправильним на кілька 100с, залежно від вашої реалізації. Однак вони повинні постійно помилятися. IE помиляється точно однаковою кількістю кожного разу. Це означає, що ви можете легко компенсувати це, додавши невелику кількість до кожного вимірювання.
Існував би мінімальний час, який ви могли б виміряти. Якщо який-небудь імпульс прибув на 100н після попереднього, то ви, ймовірно, його пропустите. Я не знаю, чи можна щось зробити з цим програмним забезпеченням. Вам доведеться знайти мікроконтролер, який може обробляти декілька імпульсів апаратного забезпечення.
Який мікроконтролер може обробляти декілька імпульсів апаратних засобів? Cypress PSoC ! Це мікроконтролер, який також містить настроювані цифрові блоки, це означає, що ви можете легко працювати з 6 окремими таймерами, кожен з частотою 60 МГц, що дає вам краще роздільну здатність, ніж 20 секунд.
Ось приклад, який я швидко зібрав, щоб показати вам те, що ви можете зробити з ним. У мене є 6 окремих таймерів, усі працюють на тактовій шині, яка може досягати 67 МГц. Існує тригерний штифт, який запускає всі запущені таймери, та 6 інших штифтів, кожен з яких викликає в таймері подію захоплення. Реєстр статусу дозволяє вашому коду відстежувати, які таймери фіксують імпульс. Код може читати значення з таймерів.