Frage

Kurzbeschreibung der Anforderungen

(Es gibt viele gute Antworten hier, vielen Dank an alle, ich werde aktualisieren, wenn ich jemals diese fliegenden bekommen).

Ein Detektor läuft entlang einer Spur, verschiedene physikalische Parameter in Echtzeit (deterministischen), als Funktion der krummlinige Abstand zu messen. Der Benutzer kann auf einer Schaltfläche klicken, um ‚Marke‘ Wegpunkte während dieses Prozesses, dann die GUI verwendet die Details für jeden Wegpunkt einzugeben (in der Mensch-Zeit, aber während der Datenerfassung läuft weiter).

Im Anschluss daran führt das System eine Reihe von Berechnungen / Filter / Modifikationen auf den erfassten Daten unter Berücksichtigung der Randbedingungen für jeden Wegpunkt eingegeben. Der Ausgang dieses Prozesses ist eine Reihe von Korrekturen, die auch als eine Funktion der krummlinige Abstand.

Der dritte Teil des Verfahrens umfaßt wiederum entlang der Spur laufen, aber diesmal um die Korrekturen zu einem physikalischen System zu schreiben, die die Spur korrigiert (noch als Funktion der krummlinige Abstand).

Meine aktuelle Idee für Ihre Eingabe / Kommentare / Warnungen

Was ich bestimmen will, ist, wenn ich dies mit einem PC + FPGA tun kann. Das FPGA tun würde, die ‚Datenerfassung‘, würde ich C # auf dem PC verwenden, um die Daten von einem Puffer zu lesen. Die Wegpunkt Informationen über eine WPF / WinForms-Anwendung eingegeben werden können, und in einer Datenbank / Flatfile / alles anhängig ‚Verarbeitung‘ bestücken.

Für die Verarbeitung, würde ich F # verwenden.

Das FPGA würde für ‚Schreiben‘ verwendet werden, die Informationen zurück an die physischen Maschine.

Das einzige Problem, das ich zur Zeit voraussehen kann, ist, wenn Verarbeitungsalgorithmen eine Abtastfrequenz erfordern, die die Datenmenge macht zu groß zu puffern. Dies würde einen Teil der Verarbeitung auf den FPGA impliziert Offloading - zumindest die Bits, die keine Benutzereingaben erforderlich. Leider ist der einzige Pre-Processing-Algorithmus ein Kalman-Filter, die nur schwer mit einem FPGA zu implementieren, was ich gegoogelt habe.

Ich sei sehr dankbar für jedes Feedback, um Sie kümmern.

UPDATES (zusätzliche Informationen hinzugefügt hier wie und wann)

Am Eingang zum Kalman-Filter suchen wir auf einmal alle 1ms. Aber auf der anderen Seite des Kalman-Filters, würden wir jedes 1m werden Probenahme, die bei den Geschwindigkeiten wir reden würden etwa 2 eine Sekunde sein.

Also ich denke, genauere Fragen seien:

  1. Kalman Implementierung filtern auf einem FPGA - scheint dass es ist möglich, aber ich verstehe nicht genug von entweder Gegenstand der Lage sein, nur um herauszufinden, wie es möglich ist.

  2. Ich bin auch nicht sicher, ob eine FPGA-Implementierung eines Kalman all 1ms bis Zyklus der Lage sein wird - obwohl ich mir vorstellen, dass es sollte kein Problem sein

  3. .
  4. Wenn ich es richtig verstanden habe, FPGAs nicht haben hod-Lasten des Gedächtnisses. Für den dritten Teil des Prozesses, wo ich einen (ungefähr) 4 x 400-Array von Doppel als Nachschlagtabelle zu verwenden, das Senden, dann ist dies möglich?

  5. Auch würde Austausch zwischen den beiden Prozessen (Lesen / Schreiben von Daten) implizieren Umprogrammierung des FPGA jedes Mal, oder es könnte angewiesen werden, zwischen den beiden zu wechseln? (Vielleicht kann nur laufen sowohl parallel als auch ignorieren die eine oder andere).

  6. eine andere Option ich gesehen habe, F # zu VHDL kompiliert mit Avalda FPGA Entwickler , ich werde das bald versuchen, denke ich.

War es hilfreich?

Lösung

Da Sie entlang einer Schiene bewegen, habe ich die Abtastfrequenz anzunehmen, ist nicht mehr als 10 kHz. Sie können die Daten auf dem PC zu diesem Satz Offload leicht, sogar 12 Mb USB (Full-Speed).

Für ernsthafte Verarbeitung von Berechnungsdaten ist Matlab der Weg zu gehen. Aber da ich nicht von F # gehört, kann ich nicht sagen.

4 x 400 verdoppelt ist kein Problem. Auch Low-End-FPGAs habe 100 von KB Speicher.

Sie müssen keine Bilder ändern zwischen Lesen und Schreiben zu tauschen. Das geschieht die ganze Zeit in FPGAs.

Andere Tipps

Sie erwähnen nicht, Ihre Ziele, Kunden, Budget, Zuverlässigkeit oder Fristen, so ist dies schwer zu beantworten, aber ...

Vergessen Sie das FPGA. Vereinfachen Sie Ihr Design, Entwicklungsumgebung und Schnittstellen, es sei denn Sie wissen, dass Sie gehen, um Ihre Echtzeit-Anforderungen mit einer anderen Lösung zu blasen.

Wenn Sie das Budget haben, würde ich zuerst auf LabView und anschauen.

http://www.ni.com/labview/

http://www.ni.com/dataacquisition/

LabView würden Sie das Datenerfassungssystem und User GUI alle auf einem einzigen PC. Nach meiner Erfahrung Entwickler nicht wählen, LabView, weil es wie eine ‚echte‘ Programmierumgebung fühlt sich nicht, aber ich würde es auf jeden Fall für das Problem empfehlen Sie beschrieben.

Wenn Sie entschlossen sind, kompilierten Sprachen zu verwenden, dann würde ich die Echtzeit-Datenerfassungskomponente zu einem eingebetteten Ziel mit einem RTOS, isolieren und vorzugsweise eine, die für die Planung und Faden Isolation Vorteil der MMU nimmt und lassen Sie schreiben in C. wenn Sie eine echte RTOS erhalten, sollten Sie in der Lage sein, um realiably die Prozesse zu planen, die ausgeführt werden müssen, und auch in der Lage sein, sie zu debuggen, wenn nötig! Bewahren Sie dieses Off-Target-System so einfach wie möglich mit definierten Schnittstellen. Machen Sie es gerade genug tun, um die Daten zu erhalten, die Sie benötigen.

Ich würde dann die Schnittstellen wieder auf den PC GUI implementieren für die Wartung eine gemeinsame Schnittstelle Datei. Verwenden Sie Standard-Schnittstellen für die Datenübertragung an den PC, so etwas wie USB2 oder Ethernet. Die FTDI-Chips sind für diese Dinge.

Hier ist ein Vorschlag.

Dump das FPGA-Konzept. Holen Sie sich ein DSP-Evaluation-Board von TI Wählen Sie eine mit genug Gigaflops, um Sie glücklich zu machen. Genug RAM Ihren Arbeitssatz zu speichern.

Programm in C TI liefert einen kleinen RT-Kernel.

Es spricht mit dem PC über, sagen wir über eine serielle Schnittstelle oder Ethernet, was auch immer.

Es sendet die PC aufbereiteter Daten mit einem Händedruck, so dass die Daten nicht verloren geht. Es gibt genügend RAM in der DPS-Daten zu speichern, während die PC Senioren Momente hat.

Keine Performance-Probleme mit dem DSP.

Realtime-Bit funktioniert die Echtzeit, mit MPs RAM. Die Verarbeitung ist schnell, und die GUI ist nicht zeitkritisch.

Was ist Ihre Verbindung zum PC? .Net wird eine gute Passform, wenn es sich um eine Netzwerk-basierte Verbindung ist, wie Sie Ströme können mit dem Dateneingang befassen.

Meine einzige Warnung an Sie in Bezug auf F # oder jede funktionale Programmiersprache große Datenmengen beinhaltet, ist die Speichernutzung. Sie sind wunderbar und mathematisch beweisbar, aber wenn Sie einen Stapelüberlauf Ausnahme von zu vielen Rekursion immer bedeutet es, dass Ihr Programm wird nicht funktionieren und Sie Zeit und Mühe verlieren.

C # wird groß sein, wenn Sie eine GUI, WinForms entwickeln müssen und GDI + sollten Sie etwas Brauchbares ohne monumentalen Aufwand erhalten.

Geben Sie uns einige weitere Informationen in Bezug auf Datenraten und Verbindung und vielleicht können wir etwas mehr Hilfe anbieten?

Es könnte etwas Nützliches in dem Microsoft Robotics Studio sein: Linktext speziell für den Echtzeit-Aspekt. Die CCR -. Concurrency Coordination Runtime hat viele diese bereits durchdacht und die Simulationswerkzeuge helfen könnten Sie ein Modell erstellen, die Ihre Analyse helfen würde,

Klingt für mich wie Sie die gesamte Verarbeitung off line tun können. Wenn dies der Fall ist, dann offline ist der Weg zu gehen. Mit anderen Worten teilen den Prozess in drei Schritten:

  1. Datenerfassung
  2. Die Datenanalyse
  3. Physikalische Systemkorrekturen auf der Grundlage der Datenanalyse.

Datenerfassung

Wenn Sie die Daten über eine Standard-Schnittstelle nicht sammeln können, dann haben Sie wahrscheinlich mit einer benutzerdefinierten Schnittstelle zu gehen. Schwer zu sagen, wenn Sie einen FPGA verwenden sollten, ohne mehr über Ihre Schnittstelle zu kennen. Erstellen von benutzerdefinierten Schnittstellen ist teuer, so dass Sie einen Kompromiss Studie tun sollten, den Ansatz zu wählen. Wie auch immer, wenn dies FPGA-basierte dann die FPGA einfach halten und es für Rohdatenerfassung zu verwenden. Mit der heutigen Technologie-Festplatte können Sie ganz einfach speichern 100 von Gigabytes von Daten für die Nachbearbeitung, so speichern die Rohdaten auf einem Laufwerk. Es gibt keine Möglichkeit, Sie wollen sogar einen 1 dimensionalen Kalman-Filter in einem FPGA zu implementieren, wenn Sie nicht haben.

Datenanalyse

Wenn Sie die Daten auf einer Festplatte haben, dann haben Sie eine Menge von Optionen für die Datenanalyse. Wenn Sie bereits F # wissen, dann mit F # gehen. Python und Matlab haben beide viele Datenanalyse-Bibliotheken zur Verfügung.

auch Dieser Ansatz macht es viel einfacher, Ihre Datenanalyse-Software zu testen, als eine Lösung, bei der Sie die gesamten Verarbeitung in Echtzeit zu tun haben. Wenn die Ergebnisse nicht richtig erscheinen, können Sie leicht die Analyse erneut ausführen, ohne zu gehen und die Daten wieder zu sammeln.

Physikalische Systemkorrekturen

Nehmen Sie die Ergebnisse der Datenanalyse und laufen wieder auf den Detektor entlang der Strecke hat er die entsprechenden Eingaben über die Interface-Karte zugeführt wird.

Ich habe eine Menge von Embedded Engineering einschließlich Hybridsysteme wie das getan Sie beschrieben haben. Bei den Datenraten und Größen, die Sie verarbeiten müssen, bezweifle ich, dass Sie einen FPGA benötigen ... einfach eine aus dem Regal Datenerfassungssystem findet in den PC anschließen.

Ich denke, das größte Problem, das Sie über den Weg laufen werden mehr verwandt ist zu Sprachbindungen für Ihre Hardware-APIs. In der Vergangenheit habe ich habe eine Menge meiner Software in C und Assembler (und sogar einige Forth) einfach zu entwickeln, denn das ist der einfachste Weg war, die Daten aus der Hardware zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top