Ich arbeite an einem Forschungsprojekt, und für einen Teil davon muss ich ein analoges Signal in ein digitales umwandeln. Nun, Elektronik ist nicht meine Stärke, also weiß ich nicht, was ich tue und tappe im Dunkeln. Ich habe gestern und heute recherchiert, um die spezifische Art und Weise zu beantworten, wie ich diese Konvertierung durchführen möchte, und ich glaube, ich habe eine Antwort, aber ich weiß nicht, was für mein Projekt am besten ist.
Gerät 1 gibt ein analoges Signal aus. Dieses analoge Signal bleibt auf Spannung low
, bis es für einige Zeit t
auf pulsiert high
. Dann geht es wieder auf Spannung low
. Dieses analoge Signal wird immer entweder auf Spannung low
oder sein high
.
Gerät 2 möchte dieses Signal lesen. Es kann jedoch nur Signale mit einem UART-Protokoll mit seiner internen Baudrate empfangen. Die Art und Weise, wie Gerät 2 dieses Signal versteht, besteht darin, dass ein Interpreter die Informationen dafür in regelmäßigen Abständen in Bits zerlegt b0
und „ in diesem Moment“ und „ in diesem Moment“ b1
darstellt .high
low
Dolmetscher ist, was ich will. Der Interpreter sollte die von Gerät 1 ausgegebene Spannung alle 100 Nanosekunden (idealerweise alle 2 Nanosekunden) überprüfen. Wenn die Spannung anliegt, high
sollte der Interpreter ein Signal aufzeichnen b1
. Wenn die Spannung anliegt, low
sollte der Interpreter ein Signal aufzeichnen b0
. Es sollte diese Bits in einem UART-Protokoll verpackt an Gerät 2 senden, damit Gerät 2 die Bits interpretieren kann. Gerät 2 verfügt über Software, um die Bits von dort zu verarbeiten.
Ich weiß nicht, welches Gerät ich für Interpreter verwenden soll. Ich weiß, dass alles, was ich codiere, zu langsam wäre, also hoffte ich, ein Gerät zu verwenden, das es schneller machen könnte. Zuerst habe ich versucht, einen Low-Bit-ADC mit einer hohen Geschwindigkeit im Bereich von> 500 MSPS zu finden, aber ich denke, dass ein Komparator auch funktionieren würde. Trotz meiner Recherchen konnte ich mich jedoch nicht für ein Produkt entscheiden, da ich nicht weiß, welches Teil für mein System am besten geeignet ist. Die einzigen schnellen ADCs sind teuer und ich weiß nicht, ob ein Komparator schnell genug für mich ist oder mit einem UART-Protokoll ausgibt. Oder ich weiß nicht, ob es ein Teil gibt, das ich kaufen könnte, das die Arbeit besser macht als beide. Wenn also jemand gute Vorschläge hat, werde ich sie recherchieren.
Danke schön.
EDIT: Wusste nicht, dass TTL kein Protokoll ist, und mir wurde klar, dass ich ein UART-Protokoll wollte. TTL durch UART in der Post ersetzt.
EDIT: Wenn ich eine Abtastrate von 10 MHz habe, ist es ausreichend, aber eine Abtastrate von 500 MHz ist erwünscht, wenn es erschwinglich ist.
BEARBEITEN: Wenn Sie meine Frage ablehnen, teilen Sie mir bitte mit, warum Sie dies getan haben. Ich lerne und möchte konstruktives Feedback.
BEARBEITEN: Der Beitrag wurde zur Verdeutlichung umgeschrieben und Bilder unten eingefügt, um zu verdeutlichen, was ich frage.
t
(so gut ich konnte).start
Zeile 2 oben zeigt, was der Interpreter vor dem Packen und den Bits tun kann stop
. Beachten Sie, dass jede Spannung mit den blauen Linien übereinstimmt. Ich verwende die blauen Linien, um die Intervalle anzuzeigen.start
Zeile 3 oben zeigt, was der Interpreter nach dem Einfügen von / -Bits an Gerät 2 ausgeben soll stop
.Ich glaube, ich verstehe vielleicht , was du vorhast. Sie wollen:
Wenn das stimmt, hier ist mein Schaltungsvorschlag:
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
und meine vorgeschlagene Theorie der Operation:
Einige Notizen:
Sie haben die Frage grob geändert, also schreibe ich eine ganz neue Antwort. Obwohl die neue Version einige Dinge klärt, lässt sie immer noch viele Fragen unbeantwortet (obwohl sie von mehreren Personen ausdrücklich gestellt wurden) und weist weiterhin Missverständnisse auf. Der einfachste Weg, dies zu tun, besteht darin, auf einzelne Teile Ihrer Frage zu antworten:
Gerät 1 gibt ein analoges Signal aus.
Nein, das tut es eindeutig nicht.
Dieses analoge Signal bleibt auf niedriger Spannung, bis es für einige Zeit t auf hoch pulsiert. Dann wird es auf niedrige Spannung zurückkehren. Dieses analoge Signal wird immer entweder auf niedriger oder hoher Spannung sein.
Dann ist es kein analoges Signal. Es hat eindeutig nur zwei mögliche Zustände. Sie sagten vorher, dass T fest ist. Dies ist eine Folge von Impulsen.
Die wichtige Frage, die Ihnen wiederholt gestellt wurde, ist die Bedeutung dieses Signals. Die Spannungspegel sind fest, die Puls-High-Zeit ist fest, sodass Informationen nur in der Puls-Low-Zeit codiert werden können. Sie sagten zuvor, dass das Timing dieser Impulse "zufällig" ist (Ihr Wort). Wenn das stimmt, enthält diese Pulssequenz überhaupt keine Informationen, in diesem Fall ist diese ganze Übung sinnlos. Ich nehme an, Sie meinten, dass die Pulszeiten unvorhersehbar sind, was sich sehr von zufällig unterscheidet. Bleibt noch die Frage, welche Daten diese Impulsfolge enthält und wie genau sie kodiert ist?
Gerät 2 möchte dieses Signal lesen. Es kann jedoch nur Signale mit einem UART-Protokoll mit seiner internen Baudrate empfangen.
OK, was ist diese Baudrate? Beachten Sie, dass dies die Bandbreite der Informationen begrenzt, die Gerät 2 empfangen kann. Die schnellste gemeinsame UART-Geschwindigkeit beträgt 115,2 kBaud, kann aber schneller sein. Alles über 1 Mbit/s ist jedoch sehr unwahrscheinlich.
Dolmetscher ist, was ich will.
Nein, dieser Dolmetscher ist das, was Sie sich als Lösung vorstellen. Sie möchten anscheinend die im Impulsstrom codierten Informationen über einen UART an Gerät 2 übertragen. Ich überspringe den Rest Ihrer Frage, da es sich um sinnlose Details zu Ihrer imaginären Lösung anstelle des tatsächlichen Problems handelt.
Nun, da das eigentliche Problem etwas klarer ist, ist auch klarer, was wir wissen müssen. Um etwas zu finden, das zwischen dem Impulsstrom und dem UART liegt, müssen wir wissen:
Ich erwarte klare und spezifische Antworten auf jede dieser Fragen, sonst bin ich hier raus. Diese werden alle nach einem Grund gefragt. Sie müssen alle beantwortet werden, unabhängig davon, ob Sie verstehen, warum sie gefragt werden oder nicht. Und nein, Sie können diese Fragen nicht „interpretieren“ und fragen, was ich Ihrer Meinung nach wissen möchte oder was Sie mir lieber sagen möchten.
Sie haben jetzt echte Spezifikationen für den eingehenden Impulsstrom angegeben. Es kommt von einem Photonendetektor, und jeder Impuls repräsentiert ein Photon. Das Signal ist TTL digital, mit Low ≤ 800 mV und High ≥ 3,5 V. Jeder Impuls dauert 30 ns, und zwischen aufeinanderfolgenden Impulsen liegen mindestens 50 ns. Damit beträgt die minimale Pulsperiode 80 ns und die maximale Pulsfrequenz 12,5 MHz.
Die Aufgabe besteht darin, die Informationen in diesem Impulsstrom irgendwie über eine UART-Verbindung an ein zweites Gerät zu übermitteln. Die UART-Baudrate ist nicht bekannt, daher gehe ich vorerst von der schnellsten gängigen Rate von 115,2 kBaud aus.
Der elektrische Empfang des Impulssignals ist einfach, da alles mit einem TTL-kompatiblen Eingang direkt funktioniert. Dies könnte beispielsweise ein beliebiges 74HCTxxx-Gate sein, das mit 5 V betrieben wird. Gewöhnliche CMOS-Eingänge funktionieren möglicherweise nicht, je nachdem, was ihr minimaler garantierter logischer High-Pegel ist. Das Datenblatt dessen, was dieses Signal empfängt, muss überprüft werden, aber es wird kein Problem sein, etwas Kompatibles zu finden. Außer der Auswahl des richtigen Digitaleingangs für den Empfang dieses Signals ist nichts Besonderes zu tun.
Um das Ding zwischen dem Impulsstrom und dem UART zu entwerfen, müssen wir wissen, welche Informationen aus dem Impulsstrom relevant sind. Interessieren Sie sich nur für die durchschnittliche Lichtstärke? Wenn ja, was ist die höchste Frequenz des Lichtniveaus, das Ihnen wichtig ist? Oder müssen Sie wissen, wann einzelne Impulse auftreten? Das wäre viel schwerer. Das grundlegende Problem besteht darin, dass der Impulsstrom viel mehr Informationen enthält, als Sie möglicherweise über die UART-Verbindung kommunizieren können. Daher muss eine gewisse Datenreduktion durchgeführt werden.
Werfen wir einen ersten Blick auf das Ausmaß der Datenreduktion. Angenommen, Sie müssten nur die Anzahl der Photonen pro Zeitintervall kennen. Jedes UART-Byte benötigt bei 115,2 kBaud 10 Bitzeiten, also 87 µs. Bei der maximalen Impulsrate von 12,5 MHz sind bis zu 1085 Impulse pro UART-Byte möglich. Da ein Byte 0-255 ausdrücken kann, könnten Sie die Anzahl der Impulse, die jedes Byte-Zeitintervall beobachtet werden, um 0,235 skalieren. Das würde Ihnen den Lichtpegel geben, der auf ungefähr 4 Photonen aufgelöst ist, die bei 11,5 kHz abgetastet werden. Die maximale Lichtpegelfrequenz beträgt daher 5,7 kHz. Ist das gut genug?
Ein möglicher Trick besteht darin, den Fehler vom vorherigen Byte auf das nächste Byte zu übertragen. Das gibt Ihnen den langfristigen Countdown auf einzelne Photonen auf Kosten von etwas Rauschen bei jeder Messung.
Eine andere Möglichkeit besteht darin, in jedem Zählintervall zwei Bytes zu senden. Jetzt können Sie bis zu 2170 Zählungen pro Abtastintervall haben, aber das kann direkt in zwei Bytes übertragen werden. Sie erhalten die volle Auflösung, aber die maximale Frequenz sinkt auf 2,9 kHz. Mit ein wenig Geschick können Sie zwei Messwerte in 3 Bytes packen, um die volle Auflösung bei einer höheren Frequenz zu erhalten, wenn auch mit mehr Latenz.
Es gibt viele mögliche Datenreduktionsschemata. Es ist unmöglich, eine auszuwählen, ohne zu wissen, welcher Aspekt der Daten Sie interessiert.
high
ist der Wert von nicht wichtig. Das Photon sind die Daten und werden als Impuls aufgezeichnet. 5) Ich kenne die Baudrate nicht, aber ich kann sie herausfinden. Ich weiß von meinem Vorgesetzten, dass wir ein Teil in dem Bereich brauchen, den ich angefragt habe, 10MHz-500MHz.Es gibt zu viel Verwirrung, um es hier realistisch zu klären, also nur ein paar Punkte:
Ich würde eine MCU mit einem Hardware-Timer verwenden, der auf die Bitrate des Eingangssignals abgestimmt ist, zusammen mit einer Art Pegelumwandlung (Schmitt-Trigger-Puffer usw.), um das Signal auf Masse und Vcc der MCU zu verschieben.
Der Zeitgeber wird verwendet, um das Signal abzutasten, unmittelbar nachdem ein 1-Übergang hätte auftreten sollen. Ein Interrupt kann verwendet werden, um den Timer zunächst zu synchronisieren, wonach er basierend auf den Eigenschaften des Eingangssignals selbst möglicherweise frei läuft.
Sobald 8 Bits abgetastet wurden, wird der UART der MCU verwendet, um das Ergebnis stromaufwärts zu übertragen.
pjc50
Peter Bennett
Zulu
Ignacio Vazquez-Abrams
Zulu
Zulu
Olin Lathrop
pjc50
pjc50
Olin Lathrop
Olin Lathrop
pjc50
pjc50
Zulu
Paul Terwiller
t0
zu Zeit geändert hatt1
. So kann ich zum Beispiel ein Teil haben, das die Spannung alleT
Sekunden überprüft, einenhigh
Impuls oderlow
Impuls sendet, wenn die Spannung hoch oder niedrig ist, das alle 8 Mal mit Stopp- und Startspannungen bündeltT
und diese Spannungen seriell an das System sendet das will die Pulse "lesen". Ist das klar? Ich verliere etwas Auflösung, aber das ist zu erwarten.Paul Terwiller
Wouter van Ooijen
Quark