Sehr genaue Zeitmessung


13

Ich werde sehr kurze Zeiten so genau wie möglich messen. Das Gerät erhält zunächst einen Impuls und innerhalb von 150 Mikrosekunden sechs weitere Impulse, die jeweils auf eigenen Drähten liegen. Die Zeit zwischen dem ersten Signal und jedem der sechs anderen Signale muss so genau wie möglich gemessen werden. Die Genauigkeit sollte mindestens 100 Nanosekunden betragen, aber mehr ist besser.

Welcher Mikrocontroller wäre dafür am besten geeignet? Ich habe festgestellt , diese . Sie scheinen einen Timer mit einer Periode von 4 Nanosekunden zu haben. Es wäre genau genug für mich.

Wäre ein anderer Mikrocontroller besser dafür? Kann das mit AVR gemacht werden?


2
Ich denke, Sie sprechen von Präzision, nicht von Genauigkeit. Was ist, wenn Sie eine Genauigkeit von Nanosekunden haben, die zugrunde liegende Uhr jedoch um 10% abweicht? Dann sind die Messungen nicht genau.
Kaz

Wie weit sind die sechs Impulse voneinander entfernt? Treffen sie auf einem gemeinsamen Eingang oder auf sechs getrennten ein?
Starblue

Sie haben alle ihre eigenen Eingänge. Impulse können manchmal alle zur gleichen Zeit kommen, aber normalerweise kommen sie zu verschiedenen Zeiten.
Kestis

Antworten:


8

Die Geschwindigkeit des Mikrocontrollers ist nicht immer der begrenzende Faktor. Der MSP430 kann eine geeignete Lösung sein, nicht weil er nur mit bis zu 25 MHz arbeitet, sondern weil mehrere MSP430-Geräte über die Timer-D-Peripherie verfügen, die eine Zeitspanne von bis zu 4 ns (256 MHz) ermöglicht. Dies ist schneller als bei fast allen anderen Mikrocontrollern. Sogar der STM32 in seiner neuesten Version (F4) kann nur 180MHz.

Timer D ist bei MSP430F51x1- und MSP43051x2-Geräten wie dem MSP430F5131 verfügbar.

Dies löst jedoch nur das Erfassen der Zeit. Die große Frage ist, was Sie damit machen, weil die Verarbeitung selbst langsamer sein wird. Sie könnten die Zeit zwischen zwei Impulsen abtasten, aber Sie werden keine Verarbeitung zwischen ihnen durchführen können, wenn Sie das meinen.


Meine schlechte, hatte nicht vollständig RTFM der MSP430, vor allem, weil TIs Website pavlovian Konvulsionen des Hasses auslöst.
John U

@ JohnU: Hatte noch nie diese Reaktion. Die Wahrheit ist, dass das OP nicht viele Informationen darüber spezifiziert hat, was er tut, daher ist es schwierig, einen richtigen Vorschlag zu machen.
Gustavo Litovsky

Die Verarbeitung ist kein Problem. Es gibt viele Sekunden, um die Berechnungen durchzuführen, sobald die Zeiten erfasst wurden und die Algorithmen nicht einmal komplex sind. Kann ein MSP430 alle sechs Impulse verarbeiten oder sollten mehrere vorhanden sein?
Kestis

@Kestis: Der Timer D enthält 6 Capture-Vergleichsregister, und einige MSP430 verfügen über mehr als nur ein Timer D-Modul, sodass es Ihren Anforderungen entspricht.
Gustavo Litovsky

4

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:

  1. 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.

  2. 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.

6 Timer PSoC Cypress

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.


Dieser PSoC scheint sehr interessant zu sein. Allerdings würde ich AVR oder MSP430 vorziehen, weil sie viel häufiger sind.
Kestis

0

Überarbeitete Antwort : Ein schnelles digitales Speicheroszilloskop oder möglicherweise ein Frequenzzähler.

Alte Antwort :

Einfach ausgedrückt: "Der schnellste Mikrocontroller, den Sie finden können", da Sie umso genauer sind, je schneller Sie takten / abtasten. MSP430 sind keine schnellen Geräte.

STM32-Geräte sind 32-Bit-fähig und werden schneller ausgeführt. Außerdem sind ähnlich günstige Entwicklungsboards und -tools verfügbar, aber selbst das ist im Vergleich zu einigen der leistungsstärkeren Geräte (Raspberry Pi @ 800MHz - 1GHz (Übertaktet)) recht langsam. Im Allgemeinen ist der Prozessor jedoch umso komplizierter, je schneller Sie vorgehen, sodass die Lernkurve einen Kompromiss eingehen kann.

Hinzugefügt: Benji hat recht, Sie benötigen (möglicherweise) auch einen genauen Oszillator für das Mikro, wenn Sie sehr genaue Messungen wünschen (Sie geben in Ihrer Frage nicht wirklich Fehlergrenzen an).


Grundsätzlich gibt es andere Arten von Timern als Mikrocontroller, die das Signal in einer Schleife abtasten.
Nick Alexeev

Und es würde helfen, wenn der Mikrocontroller einen sehr genauen externen Oszillator / Quarz hat.
BenjiWiebe

Sie haben beide Recht, ich habe bearbeitet.
John U
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.