Für eine Auflösung von 100 ns ist ein Timer mit 10 MHz erforderlich. Viele Mikrocontroller sollten in der Lage sein, einen Timer so schnell auszuführen.
Das Problem tritt auf, wenn Sie versuchen, die Ankunft von 6 Signalen zeitlich festzulegen. Befinden sich diese Signale alle auf derselben Leitung oder auf einer anderen Leitung?
Wenn sich alle auf demselben Kabel befinden, kann dies möglicherweise auf jeder MCU mit einem einzelnen 10-MHz-Timer genau durchgeführt werden. Naiv würde der Code dazu ungefähr so aussehen:
wait for trigger signal
reset timer
wait for first signal
save timer value
reset timer
....
wait for sixth signal
save timer value
reset timer
Das Problem ist, dass das Zurücksetzen des Timers nur eine begrenzte Zeit dauert. Dies verursacht zwei Probleme:
Die gemessenen Zeiten wären abhängig von Ihrer Implementierung um einige 100 ns falsch. Sie sollten jedoch durchweg falsch sein. IE falsch um genau den gleichen Betrag jedes Mal. Dies bedeutet, dass Sie dies leicht kompensieren können, indem Sie jeder Messung eine kleine Menge hinzufügen.
Es würde eine Mindestzeit geben, die Sie messen könnten. Wenn ein Impuls 100 ns nach dem vorherigen eintritt, werden Sie ihn wahrscheinlich verpassen. Ich weiß nicht, ob Sie in der Software etwas dagegen tun können. Sie müssen einen Mikrocontroller finden, der mehrere Impulse in der Hardware verarbeiten kann.
Welcher Mikrocontroller kann mehrere Impulse in der Hardware verarbeiten? Die Cypress PSoC ! Dies ist ein Mikrocontroller, der auch konfigurierbare digitale Blöcke enthält. Dies bedeutet, dass Sie problemlos 6 separate Timer mit jeweils 60 MHz verwenden können, um eine Auflösung von mehr als 20 ns zu erzielen.
Hier ist ein Beispiel, das ich Ihnen schnell gezeigt habe, wie Sie damit umgehen können. Ich habe 6 separate Timer, die alle von der Bustaktung abhängig sind und bis zu 67MHz erreichen können. Es gibt einen Trigger-Pin, der alle Timer startet, und 6 weitere Pins, von denen jeder ein Capture-Ereignis im Timer auslöst. Über ein Statusregister kann Ihr Code überwachen, welche Timer einen Impuls erfasst haben. Der Code kann die Werte aus den Timern auslesen.