Mikrocontroller vs. FPGA zu DAC und ADC [geschlossen]

Ich habe mehrere Foren zu Mikrocontrollern und FPGAs durchsucht, aber ich konnte nicht die Antwort finden, nach der ich gesucht habe.

Ich muss mich entscheiden, ob ich einen Mikrocontroller/Minipc wie einen Rapsberry Pi oder so etwas wie einen Zynq SoC verwenden werde.

Was ich tun möchte, ist: Vibrationen mit einem Geophonsensor erkennen, einen ADC verwenden, um die Informationen an einen Controller zu senden, und dann einen DAC verwenden, um ein Gegensignal an einen Aktuator zu senden.

Ich möchte immer noch die eingehenden und ausgehenden Signale anzeigen und das ausgehende Signal so einstellen, dass ich einer bestimmten Frequenz entgegenwirken kann.

Derzeit verwende ich einen lüfterlosen PC, einige Verstärker, DAC und ADC, um die Berechnungen durchzuführen, und einen externen Laptop, um das Signal abzustimmen (mit MATLAB).

Jetzt möchte ich eine Lösung finden, um die Berechnungen auf kleinere Weise durchzuführen. Ich habe den Rapsberry Pi überprüft, aber der Bereich in Volt für den DAC - ADC ist sehr niedrig: -0,3 bis +0,3 V. Ich suche einen Bereich zwischen +/- 10 V und 16 Bit.

Außerdem muss ich noch in der Lage sein, die Signale abzustimmen und anzuzeigen. Vielleicht zwei Chips, einer für Berechnungen und einer für die Kommunikation mit der Benutzeroberfläche?

Danke schön.

Was meinst du hier: "möchte immer noch die eingehenden und ausgehenden Signale anzeigen und das ausgehende Signal so einstellen, dass ich einer bestimmten Frequenz entgegenwirken kann"? Wenn Sie "Zähler" sagen, meinen Sie zählen? Oder etwas anderes?
Hallo DiBosco, danke für deine Frage. Ich meine Zähler. Zum Entfernen einer bestimmten Frequenz. Stellen Sie sich also vor, es gibt eine Spitze bei 40 Hz durch einen Lüfter oder so etwas. Dann möchte ich dem entgegenwirken. Gegenmaßnahme
@Dukel Ihre Frage enthält bei weitem nicht genügend Informationen, um Antworten zu geben. Abtastraten, Auflösung, Komponenten usw. werden benötigt, und selbst dann ist Ihre Frage sehr, sehr weit gefasst.
Der Raspberry Pi hat keine ADC/DACs. Somit müssen Sie immer ein externes Modul verwenden und haben somit die freie Wahl mit dem richtigen Spannungsbereich.
Ich denke, was Sie dazu verwenden müssen, hängt von der Mathematik ab, die Sie in Ihrem Prozessor ausführen. Wenn Sie glauben, dass der Pi die erforderlichen Berechnungen durchführen kann, können Sie eine Schnittstelle mit externen ADCs und DACs herstellen. Es hängt auch davon ab, wie viele davon Sie machen möchten. Ich denke, es ist vielleicht eine zu weit gefasste Frage und wahrscheinlich nicht genug Informationen. Sie könnten mit einem Cortex M4 oder M7 davonkommen, ich denke, es ist wahrscheinlich unmöglich zu sagen, mit den Informationen, die wir haben.
Wenn Sie einen Zynq verwenden, wer wird Ihnen die Logik für das FPGA liefern?
Entscheidend wäre, welche maximale Latenz Sie zwischen analogem Eingang und analogem Ausgang tolerieren können.
Die Art und Weise, wie Sie Ihre Frage gestellt haben, legt nahe, dass Sie sich für die Himbeere entscheiden sollten. Auch Begriffe wie Geophone ad Vibrations (scheinbar die des Bodens) deuten darauf hin, dass Ihr Bedarf an Abtastrate weit unter 1M liegt. Überschätzen Sie Ihre Ansprüche nicht. Sie werden wahrscheinlich mit einem Raspi für alle Aufgaben gut sein, einschließlich etwas FFT für den Visualisierungsteil. Für den integrierten Audio-ADC möchten Sie möglicherweise einen einfachen Spannungsteiler verwenden. Beachten Sie jedoch, dass der integrierte Codec nicht als der genaueste bekannt ist und natürlich für Audio verwendet wird, sodass die Abtastrate begrenzt ist.
Raspberry Pi kann USB-Audio-Soundkarte als ADC/DAC für bessere Qualität verwenden.
Beachten Sie, dass "ein Gegensignal an den Aktuator senden" ein klassisches Steuerungssystemproblem ist - Sie können dies möglicherweise erreichen, ohne die digitale Domäne zu durchlaufen. Was auch immer Sie tun, Latenz wird eine sehr wichtige Überlegung sein. Wie viel Verzögerung können Sie zwischen dem Empfang des Signals und dem Senden an den Aktuator akzeptieren?
Ich werde mir die ADC / DAC-Module für den Raspberry Pi ansehen, danke. 4kHz ist bereits genug, so dass FPGA in der Tat übertrieben sein wird. Danke schön! Ich denke, der Raspberry Pi oder so etwas in der Art wird es tun.
@Dukel Freut mich zu sehen, dass die Rate ENDLICH erwähnt wird! Dies ist einer der Fälle, in denen Sie bereits eine Lösung ausführen und VIELE DETAILS darüber hätten bereitstellen können, was für Sie funktioniert. Datenraten, DAC- und ADC-Präzision, Details zu den erforderlichen Verarbeitungsschritten (Algorithmen und Reihenfolge), die alle eine Antwort anwendbarer und auf Ihre Bedürfnisse ausgerichtet hätten. Schauen Sie sich auch Quad-Core-Geräte wie den ODROID-C2 an, die ebenfalls mit mehreren GHz laufen. Sollten Sie etwas wirklich schnelles und günstiges brauchen.
@jonk Danke für deinen Rat. Einige Spezifikationen sind noch nicht klar, also hatte ich vielleicht gehofft, ein paar Vorschläge zu bekommen. Das ODROID-C2 sieht gut aus, das werde ich nachlesen, nochmals vielen Dank!
Ich habe nach der Latenz gefragt, da SBCs wie der Pi keine Echtzeitsysteme sind. Sie müssen das Betriebssystem mit etwas CPU-Zeit berücksichtigen. Wenn Sie also eine Eingabe von 1 Millisekunde benötigen, um die Latenz in harter Echtzeit auszugeben, treten Kopfschmerzen auf. Auch die Audio-ADCs und -DACs verwenden gepuffertes IO, und die Latenz ist wie 1 Puffer oder 1 USB-Frame, sodass dies auch Verzögerung hinzufügt. Ein schneller Mikrocontroller hingegen kann jedes Sample so verarbeiten, wie es kommt, was zu einer viel geringeren Latenz führt. Aber Sie müssen zuerst die Latenz kennen, die Sie benötigen ...

Antworten (2)

Aus meiner Sicht hast du 3 Möglichkeiten:

PC, verkleinert

Behalten Sie das gleiche System bei, skalieren Sie es einfach herunter. Dies ist einfach (da Sie ein High-Level-System haben), aber möglicherweise nicht allzu effizient, da das Betriebssystem nicht für Latenz oder Echtzeitbetrieb optimiert ist. Es wird auch machthungrig sein.

MCU

Ein Mikrocontroller mit ~100 MHz sollte für diese Aufgabe über ausreichend Rechenleistung verfügen (und weitaus reaktionsschneller sein als eine Linux-basierte Lösung). Sie müssen eine Schnittstelle zu den peripheren Spannungspegeln herstellen, sollten jedoch in der Lage sein, einen einfachen Verstärker für diese Aufgabe zu verwenden (der dabei einen gewissen Schutz für die digitale Seite bietet). Sie können Ausgabedaten über einen UART, einige Anzeigeleuchten oder ein kleines Anzeigefeld erfassen - für alle diese Teile sollten Beispiele leicht zu finden sein. Natürlich müssen Sie ein etwas anderes Software-Paradigma lernen (Micro-Python ist möglich, aber hier vielleicht nicht ideal).

FPGA

Ihr Beispielteil passt möglicherweise nicht gut - es ist enorm überspezifiziert und teuer. Die grundlegende Echtzeitverarbeitung könnte wahrscheinlich in einem ziemlich kleinen Gerät durchgeführt werden, aber die Codierung auf niedriger Ebene ist wahrscheinlich eine Herausforderung (es sei denn, Matlab kann Ihnen den gesamten Code generieren, den Sie benötigen).


Die Verwendung von FPGA wäre hier typischerweise der geeignete Ansatz, wenn die Berechnungen komplex und anspruchsvoll sind. Eine MCU sollte gut geeignet sein, wenn Sie die Hardware verkleinern und möglicherweise batteriebetrieben machen möchten. Viele kleine MCUs sind auf kreditkartengroßen Entwicklungsplatinen für etwa 10 US-Dollar erhältlich.

Überprüfen Sie, welche Datenrate Sie benötigen, um Ihr 'Abbruch'-Signal zu erzeugen, dies bestimmt die Größe des Speicherarrays und die DMA-Frequenz, die Sie benötigen, um den DAC in Ihrem Design anzusteuern.

Wenn Sie einen ±10-V-Bereich benötigen, liegt dieser normalerweise außerhalb des Bereichs der meisten ADCs und DACs, sodass Sie eine Standardlösung benötigen oder Ihr eigenes analoges System entwerfen müssen.

Verwenden Sie einen Raspberry Pi, sie sind billig und es gibt zahlreiche Codebeispiele und Tutorials, um Ihnen den Einstieg zu erleichtern, die Software ist kostenlos und die meisten Distributionen, die Sie auf einem Rasberri Pi installieren, werden bereits mit Software geliefert, die Sie verwenden werden. Sie können auch Datenerfassungsgeräte erhalten, die im ±10-V-Bereich arbeiten

Ein Mikrocontroller (auf einem Entwicklungsboard) ist ebenfalls eine Option, stellen Sie jedoch sicher, dass die Software (Compiler) kostenlos ist. Sie können gcc mit den meisten verwenden, aber wenn Sie mit einer IDE debuggen möchten, wird dies schwieriger, da die meisten kommerziellen Compiler Sie auf 32 KB Programmierung beschränken, bevor die Kosten in die Tausende steigen. Höchstwahrscheinlich programmieren Sie in C. Wenn Sie keine Abschirmung finden, würden Sie Ihre eigene Elektronik auf einer Leiterplatte entwerfen. Mit einem Mikrocontroller können Sie einen Regelkreis schneller ausführen als ein PC oder ein Gerät mit einem normalen Betriebssystem (Sie können möglicherweise ein Echtzeitbetriebssystem (RTOS) auf einem Pi installieren und die Dinge schneller ausführen.)

Ein FPGA ist am kompliziertesten, die Toolchains sind kostenlos, aber die Zeit, die Sie zum Einrichten der Software benötigen, könnte für den Anfang Tage betragen. Es gibt Entwicklungsplatinen, die analoge Elektronik müsste entwickelt werden. Der Kompromiss ist die Geschwindigkeit. Wenn Sie sehr schnelle Signale haben, müssen Sie ein FPGA verwenden, da Sie Hardware auf Gate-Ebene mit ns-Timing entwerfen können.

Keil hat eine Begrenzung der Codegröße für den Compiler, debuggt aber problemlos ein größeres Bild. Stimmt, ich weiß nicht, ob es GCC-Debug-Informationen verwenden kann ...
Eclipse für C/C++ kann zum kostenlosen Debuggen von Bare-Metal-ARM-GCC ohne Einschränkung der Codegröße verwendet werden
Sie können mit GCC von der Befehlszeile aus debuggen, wenn Sie möchten, ich nehme an, Eclipse kann sich daran anschließen