Lesen von mehreren Sensoren und Synchronisieren von Daten

Ich arbeite an einem Projekt, das das gleichzeitige Lesen von vier Sensoren mit Zeitstempeln bis zu einer Millisekunde erfordert.

Im Moment ist das Beste, was ich mir einfallen lassen kann, vier PICs zu verwenden, um von jedem Sensor zu lesen und über vier RS232 an einen Laptop auszugeben. Diese Sensoren stören sich also nicht gegenseitig. Für Zeitstempel verwende ich einen mechanischen Schalter, um einen externen Pin-Spannungswechsel-Interrupt auszulösen, um Timer in allen PICs gleichzeitig zu starten . Timer inkrementieren jede Millisekunde und ich hänge einfach den Wert von Timern am Ende jeder Messung an und gebe sie über serielle Schnittstellen aus.

Es funktioniert, aber ich möchte nur wissen, ob es eine bessere Lösung gibt, da dieses Projekt ziemlich zeitkritisch ist (1000 Messungen pro Sekunde erforderlich). Und auch der interne Zeitgeber für jeden PIC variiert, was den Zweck der Synchronisierung von Zeitgebern zunichte macht.

Ich habe auch darüber nachgedacht, nur den Timer eines zusätzlichen Chips mit SPI zu lesen, damit alle Zeitstempel aus einer Quelle stammen . Ich weiß jedoch nicht, wann diese PICs die Zeit von diesem Quellchip lesen werden. Es könnten vier PICs gleichzeitig davon lesen, was die Zeitstempel durcheinander bringt.

Sensor 1: Quadratur-Encoder (Kanal AB und Index)

Sensor 2: Laser (Rücksendung der Messung über die RS232-Schnittstelle)

Sensor 3: Beschleunigungssensor (analog)

Sensor 4: Neigungsmesser (RS232-Schnittstelle)

Ich verwende vier DSPIC30f4011 -Chips. Sie haben QIEs genug UARTs und unterstützen auch simultanen ADC mit vier Kanälen.

Für den Quadratur-Encoder verwende ich einen On-Chip-QIE, um daraus zu lesen und die Messung über UART an einen Laptop zu senden.

Für Lazer und Neigungsmesser lese ich von ihnen über UART1 und sende Messungen über UART2 an einen Laptop. (ein Chip für jeden von ihnen)

Für den Beschleunigungsmesser werden xy- und z-Informationen im Vierkanal-Simultanmodus erfasst. Die Messungen werden über UART an einen Laptop gesendet.

Ich wollte so ziemlich vorschlagen, was Sie getan haben, bis ich die Frage noch einmal gelesen habe. Wenn sie driften, verwenden Sie vermutlich die interne RC-Uhr? Wenn die Chips alle physisch nahe genug sind, könnten Sie sie alle von einer einzigen Taktquelle aus ansteuern.
Wie geben die Sensoren ihre Daten aus? (zB analog, SPI, I2C, parallel?)
@PeterJ Glaubst du, ein Kristall kann vier Chips ansteuern? Wie nah sollte es normalerweise sein?
@OliGlaser hat die Frage gerade mit weiteren Details zu Sensoren bearbeitet.
@Timtianyang - guter Anruf, Sie sollten in der Lage sein, alle Chips aus einer Quelle zu takten, auch wenn Sie die Geräte verketten, sodass nur 1 Chip vom xtal und die anderen von seinen abgeleiteten Taktimpulsen ausgeführt werden.

Antworten (3)

Okay, wir haben einige Informationen zu den Sensoren.

Dies sollte mit einem der neueren dsPIC33Fs machbar sein. Wie @gbarry richtig feststellt, haben sie Varianten, die 4-Kanal-Simultan-Sampling durchführen können (dh sie haben 4 Samples und Holds).

dsPIC-Sim-Beispiel

Ich verwende derzeit einen davon für einige Experimente, den dsPIC33FJ64GP802 . Es ist ein beeindruckender kleiner Chip, viel besser als die älteren dsPIC30F4011s. Es läuft mit bis zu 40 MIPs und verfügt über einen 8-Kanal-DMA, den Sie für den ADC und andere Peripheriegeräte verwenden können, sodass es nicht so schwierig sein sollte, Ihr Timing innerhalb der Spezifikation zu halten. Der DMA macht das Leben viel einfacher, Sie können ihn plus Interrupts verwenden, um Ihre Hauptschleife so viel Zeit wie möglich zu sparen.
Sie haben auch 2 UARTs und 4 Capture/Compares (für den Quad-Encoder) plus 5 Timer.

Ihnen fehlt 1 UART, sodass Sie weder bitbangen noch einen externen UART-IC hinzufügen müssen, wenn Sie keine Variante mit mehr als 2 UARTs finden.

Es gibt ein paar Versionen zur Auswahl, die, die ich verlinkt habe, ist eine der kleineren in Bezug auf den Speicher (ich war hauptsächlich an ADC und Audio-DAC plus DMA für das Prototyping von Audioideen interessiert), also stöbern Sie durch alle Optionen.

Warum nicht EIN Mikro mit VIER ADCs (nicht schwer zu finden) verwenden, das alle vier Werte auf einmal liest und dann die Daten über EINEN seriellen Link zurückmeldet?

Ohne weitere Details zu Ihrem Setup vermute ich, dass Sie sich über Ihre Fähigkeit täuschen, auch eine Genauigkeit / Synchronisation von 1 ms zu erreichen.

Bearbeitet zum Hinzufügen : Wenn Sie weitere Details zur Anwendung angeben können, gibt es viele andere Lösungen. 1ksps ist leicht über die Laptop-Soundkarte machbar (die meisten werden 96kHz/16-Bit auf 2-Kanälen machen, viele können besser / mehr Kanäle verwalten).

Bearbeiten Sie jetzt, wir haben mehr Informationen:

Sensor 1: Quadratur-Encoder = 3 GPIO-Pins (da A, B, I nur Logikpegel sind)

Sensor 2: Laser = 1 UART

Sensor 3: Beschleunigungsmesser = 4x ADCs

Sensor 4: Neigungsmesser = Ein weiterer UART

Verbindung zur Basis: = Ein weiterer UART

Das sind also 3 GPIO, 4 ADC und 3 UART - was mit EINEM Ihrer aktuellen PIC-Geräte möglich ist, wenn Sie bereit sind, einen zusätzlichen UART-Port zu bit-bangen (viele PIC-Bit-Bang-UART-Routinen auf Google). Es wäre einfacher, einen einzelnen Chip zu verwenden, der einen Ersatz-UART oder einen anderen Anschluss hat, aber vielleicht könnte Ihr Neigungsmesser oder Laser SPI/I2C verwenden? Nur ein Gedanke.

Ich würde Ihre Spezifikation für die Synchronisierung von irgendetwas in Frage stellen (angesichts des Beispiel-> Konvertierung-> UART-> PIC-> UART-Pfads für den Laser und den Neigungsmesser), scheint mir alles unterschiedlich verzögert zu sein , selbst wenn die Daten alle 1 ms mit einem Treffer zurückgemeldet werden , sind sie wahrscheinlich bis zu einem gewissen Grad nicht mit sich selbst synchron.

Ich kann mir keinen gewöhnlichen Mikrocontroller mit vier ADCs vorstellen, sondern nur solche mit vier gemultiplexten analogen Eingängen zu einem einzelnen ADC, die nacheinander Messwerte erfassen. Aber zugegeben, es kann eine Option für 1Ksps sein, je nachdem, welche Verzögerungen zwischen den Messwerten toleriert werden können.
Es hängt davon ab, wie nah Sie es brauchen, viele Mikros da draußen mit gemuxten ADCs, die Messwerte von 4 oder mehr Kanälen innerhalb einer Mikrosekunde voneinander erfassen können, das von uns verwendete Mikro (MCF52259) Spezifikationen: 8x 12-Bit-ADC-Kanäle, bis zu 1,66 Millionen Samples pro Sekunde, Einzelwandlungszeit von 8,5 ADC-Taktzyklen (=1,7 μs), 8 Wandlungen in 26,5 ADC-Takten (=5,3 μs) im Simultanmodus. Und das ist nicht wirklich seine Spezialität, noch ist er besonders schnell (max. 80 MHz).
@JohnU hat gerade die Frage mit weiteren Details zu Sensoren bearbeitet
Es sieht so aus, als hätte die dsPIC33-Leitung Teile, die vier ADC-Messungen gleichzeitig vornehmen können.
Wenn ich einen Chip für alle Sensoren verwende, werden die Messwerte nacheinander erfasst? B. Sensor 1 --> Sensor 2 --> Sensor 3 -->.Sensor 4. Es besteht ein potenzieller Zeitunterschied zwischen dem Lesen vom ersten und letzten Sensor. Ich muss auch gesammelte Daten ausgeben, die die Hauptschleife mehr verlangsamen. Wie löst ihr das?
Nein, schauen Sie sich die Antwort von Oli Glasser an - die Werte werden gleichzeitig abgetastet (eingefroren) und dann erfolgt die ADC-Konvertierung sequentiell . So funktionieren die meisten Mikros (es wird im PIC-Datenblatt stehen).
@JohnU Wenn Sie sagen, dass die Werte gleichzeitig abgetastet werden, meinen Sie ADC? Was ist mit diesen UART/Quadratur-Sensoren?
Wenn Sie über UART mit einem Sensor sprechen, gibt es eine Verzögerung zwischen der Messung durch diesen Sensor (und wir müssen davon ausgehen, dass er auch seine eigene ADC-Wandlung durchführt) und dem Senden dieser Messung an den UART (es sei denn, Ihr UART läuft mit MHz). Geschwindigkeiten ist dies sogar für ein einzelnes Byte von Bedeutung ). Angesichts der Zeitkritik gehe ich auch davon aus, dass Dinge wie ADC-Konvertierungen und UART-Kommunikation als autonome Interrupt-gesteuerte Prozesse im Mikro eingerichtet werden, möglicherweise mit DMA usw. usw. Andernfalls machen Sie sich etwas vor über Ihr Timing / Genauigkeit / Präzision.

Wäre eine FPGA-Lösung möglich? Ich könnte mir vorstellen, dass ein FPGA als echte Multitasking-fähige Hardwarelösung alle vier Signale ganz einfach parallel verarbeiten und codieren könnte. Vier unabhängige PICs mit unabhängigen Uhren klingen wie ein Rezept für die Timing-Hölle.

Ich würde das Papillio empfehlen . Eine kleine Lernkurve, wenn Sie noch nie für FPGAs entwickelt haben, aber sie sind in bestimmten Szenarien ziemlich leistungsfähig.