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.
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).
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.
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.
PeterJ
Oli Glaser
Timtianyang
Timtianyang
John u