Forum: Digitale Signalverarbeitung / DSP / Machine Learning FPGA/CPLD für Strommessung gesucht


von Hurra (Gast)


Lesenswert?

Hallo,

ich würde gerne ein Energiemessgerät mit folgenden ADCs bauen:
http://www.analog.com/media/en/technical-documentation/data-sheets/AD7403.pdf

Zum Einlesen der Sigma-Delta-Wandler benötige ich ja ein SINC-Filter, 
welches ich in einem µC vermutlich nicht vernünftig realisieren kann.

Die Idee wäre, das in einem kleinen CPLD oder FPGA umzusetzen. Ich hätte 
mir vorgestellt, dass das FPGA diese ADC und weitere (für die 
Spannungsmessung) ausliest, und die Werte dann einem µC fertig zur 
Verfügung stellt.
Hinein in das FPGA müsste also das (oder die) SINC-Filter, das Interface 
zum ADC und das zum µC.

Die Frage ist jetzt:
Kann man das vernünftig in einem CPLD (MAX V) umsetzen?
Wenn ja, wie groß müsste das sein?
Oder benötige ich dazu ein richtigs FPGA mit den ganzen 
Arithmetikblöcken?

Ich bin leider auf der Suche nach kleinen handlötbaren FPGA mit wenigen 
Pin nicht wirklich fündig geworden.

: Verschoben durch Moderator
von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Richtig, SINC-filter sind viel zu kompliziert für moderne 
Microcontroller. Sowas lief nur auf den guten alten DSPs.

Wenn das richtig gut und nach modernen Entwurfskriterien sein soll, wird 
ein MAX nicht reichen. Besser ist es, gleich einen richtigen FPGA mit 
ausreichend DSP-Elementen zu verwenden.

Ich würde das entweder mit Xilinx HLS oder mit MATLAB Simulink machen. 
Du brauchst dann nur noch einen ADC-Link-Core und eine Instanz des 
FIR-Compilers aus MATLAB. Das Ganze möglichst hoch getaktet. Dann 
müssten sich die 50Hz schon gut genug erfassen lassen, um genau genug zu 
sein, denke Ich.

Etwas einfacher in der Handhabung geht es mit einem Linux-System und der 
Programmierung des Interfaces in C. Dann kann man sich den Umweg über 
HSL und Synthese aus C heraus sparen, sondern das C direkt verwenden. 
Als Basis für ein schnelles und effektives Linux wäre ein Stratix gut 
geeignet. Zum Löten ist der Cyclone III wohl am Besten.

von Strubi (Gast)


Lesenswert?

Alles totaler Quatsch.

Heute löst man in den Hochschulen solche Probleme mit 128 Bit-RISC und 
Network-on-Chip. Mit links.

Jetz aber mal zum Löten: Einen Spartan LX9 kriegt man grade noch mit der 
Lötlampe auf ne selbstgeäzte Platine gebraten. Nur bitte nicht das 
übrige FeCl3 in den Ententeich kippen.

von Bastler (Gast)


Lesenswert?

Analog Devices ADSP-CM4xx Microcontroller haben ein Hardware SINC Filter 
drinne

von Hurra (Gast)


Lesenswert?

Danke für die Antwort. Die Hardware hätte ich mir vorzugsweise selber 
gebaut, drum wäre ein einfaches CPLD natürlich schön gewesen. Ein FPGA 
kompliziert die Geschichte schon sehr.

Ich nehme an, dass das kleinste MAX-10 hier reichen wird?
Das ist schon ein richtiges FPGA mit 2k LEs und DSP-Blöcken.

von A. S. (Gast)


Lesenswert?

Hurra schrieb:
> Danke für die Antwort. Die Hardware hätte ich mir vorzugsweise
> selber
> gebaut, drum wäre ein einfaches CPLD natürlich schön gewesen. Ein FPGA
> kompliziert die Geschichte schon sehr.
>
> Ich nehme an, dass das kleinste MAX-10 hier reichen wird?
> Das ist schon ein richtiges FPGA mit 2k LEs und DSP-Blöcken.

implementier doch den Filter mal auf Deinen µC. Und wenn er mehr als 10% 
der Ressourcen belegt, dann nimm einen µC für 3€ oder hänge eine 0 an 
den Quarz.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hurra schrieb:
> Zum Einlesen der Sigma-Delta-Wandler benötige ich ja ein SINC-Filter,
> welches ich in einem µC vermutlich nicht vernünftig realisieren kann.
Warum kannst du das nicht?

Hurra schrieb:
> Die Hardware hätte ich mir vorzugsweise selber gebaut, drum wäre ein
> einfaches CPLD natürlich schön gewesen.
Das, was ein CPLD rechnen kann, schüttelt ein billiger µC links aus 
dem Ärmel.

> Ein FPGA kompliziert die Geschichte schon sehr.
Allein schon der Ansatz, eine schnarchlangsame Funktion von einem µC auf 
programmierbare Hardware zu verlagern verkompliziert die Sache.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

schön zu lesen, dass wenigstens einer Ironie versteht :-)

von bla (Gast)


Lesenswert?

20MHz Delta-Sigma-Takt bei 16 Bit am Ausgang - das klingt nach hundert 
kHz oder so.

Möglichkeit 1: Sinc-Rekonstruktion in analog. RC-Lowpass und ADC danach. 
Nicht die feine Art aber du musst dir nicht überlegen wie du das in ein 
FPGA(!) packst.

Möglichkeit 2: Du liest dich etwas mehr in die Materie ein: 
Beitrag "Delta-Sigma-Modulator und SINC3 Filter" oder 
http://www.embedded.com/design/configurable-systems/4006446/Understanding-cascaded-integrator-comb-filters 
und realisierst dass du ein Sinc3 filter wahrscheinlich auch in einem 
alten XC9500 CPLD unterbringen könntest.

Möglichkeit 3: Dir reicht ein simples IIR-Filter? Du bist mit den 
Koeffizienten flexibel? Dann lässt sich mit shiften und addieren auch 
weit kommen. Das PSOC4 hat "datapath"-Einheiten, eine 8-Bit ALU mit 
einer 8-schrittigen FSM dran. Da hab ich mal einen (8-Bit) decimator für 
ein Delta-Sigma-ADC reingepackt.

Da fallen mir so viele Lösungsansätze ein... Du kannst natürlich auch 
ein sinc3 als FIR-Filter mit 20MHz getaktet in ein FPGA packen, aber da 
geht viel von der Eleganz von Delta-sigma verloren.

von Hurra (Gast)


Lesenswert?

Lothar M. schrieb:
> Hurra schrieb:
>> Zum Einlesen der Sigma-Delta-Wandler benötige ich ja ein SINC-Filter,
>> welches ich in einem µC vermutlich nicht vernünftig realisieren kann.
> Warum kannst du das nicht??

Ja gut. Danke auch.

Im Endeffekt kann man den Beitrag schließen.
Ich werde mir ein anderes Projekt suchen, da ich für dieses 
offensichtlich zu dumm bin :-(

von Stefan (Gast)


Lesenswert?

Sieh Dich doch mal auf der Seite von TI bei MSP430 um.
diese haben vernünftige und für Deine Aufgabe ausreichende AD's 
implementiert.
Und nen Tiefpass wirst Du ja wohl auch davor geraffelt bekommen...
Z.B. einen aktiven...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hurra schrieb:
>> Warum kannst du das nicht??
> Ja gut. Danke auch.
Die Frage war ernsthaft gemeint: warum erwartest du Probleme bei der 
spezifischen Implementierung der Aufgabe hier? Denn die eigentliche 
Frage war ja:
>>>> ich würde gerne ein Energiemessgerät mit folgenden ADCs bauen
Warum braucht dieses Energiemessgerät ein FPGA und einen uC, wo andere 
mit letzterem auskommen?

> Im Endeffekt kann man den Beitrag schließen.
> Ich werde mir ein anderes Projekt suchen, da ich für dieses
> offensichtlich zu dumm bin :-(
Man wächst an der Aufgabe. Wenn du das unbedingt machen willst, dann 
fang einfach damit an. Aber fang nicht mit einem CPLD an, dort wird die 
Hose schnell zu eng. Nimm ein FPGA und implementiere das Filter dort. 
Und wenn es läuft, dann denke über Optimierungsmaßnahmen nach und wenn 
du dabei herausfindest, dass es auf ein kleines CPLD passt, dann hast du 
dein gewünschtes Ziel erreicht.
Dort wurde das mit dem FPGA schon mal implementiert:
http://www.ti.com/lit/an/sbaa094/sbaa094.pdf

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Hurra schrieb:
> Ich werde mir ein anderes Projekt suchen, da ich für dieses
> offensichtlich zu dumm bin :-(

... da zu wenig Wissen hast und wohl auch zu wenig engagement, Dich 
vorzubilden. Es gibt ja Implementierungen dazu und wenn man weiß, was 
für ein Filter man braucht, kann man es mathematisch hinschreiben. Wenn 
man das hat, kann man es auch in VHDL hinschreiben. Für PLD und FPGA ist 
das derselbe input.

Du musst also Deine Fragestellung modular angehen und schauen, was Dir 
an Wissen fehlt. Das scheint einiges zu sein.

Im Übrigen kann man hier wohl davon ausgehen, daß die Aufgabe eben genau 
darin besteht, eine einfache Geschichte in einen PLD zu bringen, um an 
allen Fronten zu lernen.

Das erfordert aber einen gewissen Überblick über die nötigen Schritte, 
die zu gehen sind.  Wenn DER nicht da ist, dann hast Du nicht nur die 
falsche Aufgabe, sondern bist auf dem falschen Berufsweg.

Ich fürchte, hier ist weider ein Studi unterwegs, der im 
Hauruckverfahren schnell und oberflächlich was in einen Digitalbaustein 
quetschen will, um ein Ergebnis zu bekommen, das ihm sein Betreuer 
abfordert ohne zu kapieren, dass die baiscs noch gar nicht da sind.

Leider ist das heute irgendwie normal: An der ehemaligen FH Darmstadt 
gab es dazu vor einigen Wochen eine Diskussion mit Lehrkräften über die 
weitere Ausrichtung der Fachbereiche und man konnte den Tenor erkennen:

Mehr, mehr, mehr und schneller, schneller, schneller. Wissen reinstopfen 
um jeden Preis!  Die Jugend soll für die Industrie 4.0 fit gemacht 
werden und am Besten binnen 3 Jahren lernen, eine completten 
JAVA-Compiler zu schreiben, der Bauanleitungen in CAD-script-Sprachen 
auswirft, um ganze Fabriken hinzustellen, die Satelliten bauen können, 
wobei die Elektronik per VHLD selbstkonfiguriert und die Software aus 
dem Model based design rausfällt. Praktisch scheitern die so 
oberflächlich gebildeten Studies dann aber schon am Newtonschen- oder 
Ohmschengesetz.

Wenn in meiner Generation die FH-Studenten, weil sie im Mittel 1.5 Jahre 
weniger studierten, als "Dünnbrettbohrer-Ingenieure" betitelt wurden, 
dann muss man heute sicher von "Papp-Ingenieuren" reden:

Wissen: 150%. Davon belastbar 50%. Verständnis 20%, Transferdenken 2%

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Schau Dir mal die STM32 mit DFSDM, z.B. ein Nucleo-L476 Borad an.

Beitrag #4934940 wurde von einem Moderator gelöscht.
Beitrag #4935022 wurde von einem Moderator gelöscht.
von Der Zahn der Zeit (Gast)


Lesenswert?

Hurra schrieb:
> Zum Einlesen der Sigma-Delta-Wandler benötige ich ja ein SINC-Filter,

Hmmm... Ich glaube, das brauchst du nicht.

Der AD7403 ist kein vollständiger ADC, sondern lediglich eine 
DS-Modulator. Wenn du die Energie im Signal (= Integral (Leistung) dt = 
Integral (Spannung mal Strom) dt) damit messen willst, brauchst du 
nichts weiter, als die Ausgangsbits der beiden Modulatoren als +1 (high) 
und -1 (low) zu interpretieren, sie miteinander zu multiplizieren (das 
Ergebnis ist wieder +/-1) und zu akkumulieren. Das Ergebnis 
repräsentiert die Energie.

DZDZ

von Frank K. (fchk)


Lesenswert?

Hurra schrieb:
> Hallo,
>
> ich würde gerne ein Energiemessgerät mit folgenden ADCs bauen:
> http://www.analog.com/media/en/technical-documentation/data-sheets/AD7403.pdf

Warum? Es gibt für die Energiemessung spezielle AFEs (Analog Front 
Ends), die alles benötigte enthalten. Beispielsweise:

http://www.microchip.com/wwwproducts/en/MCP3911

für eine Phase und

http://www.microchip.com/wwwproducts/en/MCP3913

für drei Phasen. Da kommt SPI raus, das Du mit einen Si86xx oder einem 
ADuM14xx galvanisch isolieren kannst, und anschließend musst Du nur noch 
aufintegrieren. Grundlagen E-Technik, erstes Semester halt.

Wenn Du ein Gesamtpaket sucht, schau Dir das hier an:

http://www.ti.com/product/msp430f6769a

Dieser Prozessor ist extra für Stromzähler gebaut worden und hat 6 
24-Bit ADCs eingebaut. Wohlgemerkt 6 einzelne, die alle parallel 
arbeiten und nicht einen mit einem Multiplexer davor.

fchk

von Hurra (Gast)


Lesenswert?

Lothar M. schrieb:
> Hurra schrieb:
>>> Warum kannst du das nicht??
>> Ja gut. Danke auch.
> Die Frage war ernsthaft gemeint: warum erwartest du Probleme bei der
> spezifischen Implementierung der Aufgabe hier? Denn die eigentliche
> Frage war ja:
>>>>> ich würde gerne ein Energiemessgerät mit folgenden ADCs bauen
> Warum braucht dieses Energiemessgerät ein FPGA und einen uC, wo andere
> mit letzterem auskommen?
>
Ok, dann habe ihc das falsch verstanden.

Warum ich Probleme erwarte:
Sagen wir, ich taste mit 20kSPS ab.
Ich müsste 6 Kanäle messen, davon 3x Sigma-Delta mit 20MHz. Folgende 
Probleme sehe ich:
- Die 3 Kanäle seriell mit 20MHz einlesen
- Das durch den SINC-Filter jagen
- Gain / Offset Korrektor drüberrechnen
- Zusätzlich 3x Spannung messen
- Daraus einen Leistungswert berechnen
Ich würde gerne PIC32MX verwenden, weil ich die schon gut kenne. Mein 
Bauchgefühl sagt mir, dass ich alles das in 50µs nicht hinbekomme, oder 
zumindest bleibt mir nicht genug Rechenleistung für den Rest übrig.
Ein FPGA würde mir schon viel abnehmen, da müsste ich nur noch die Werte 
abholen und hätte mehr Rechenzeit übrig.

>> Im Endeffekt kann man den Beitrag schließen.
>> Ich werde mir ein anderes Projekt suchen, da ich für dieses
>> offensichtlich zu dumm bin :-(
> Man wächst an der Aufgabe. Wenn du das unbedingt machen willst, dann
> fang einfach damit an. Aber fang nicht mit einem CPLD an, dort wird die
> Hose schnell zu eng. Nimm ein FPGA und implementiere das Filter dort.
> Und wenn es läuft, dann denke über Optimierungsmaßnahmen nach und wenn
> du dabei herausfindest, dass es auf ein kleines CPLD passt, dann hast du
> dein gewünschtes Ziel erreicht.
> Dort wurde das mit dem FPGA schon mal implementiert:
> http://www.ti.com/lit/an/sbaa094/sbaa094.pdf

Ich sehe ein, dass da ein FPGA sinnvoller ist.

@Frank K:
Den MSP430 würde ich nicht so gerne benutzen, mit diesen habe ich noch 
nie gearbeitet.

Die Analog Frontend-IC von Microchip sehen dafür aber umso interessanter 
aus. Da werde ich mir morgen die Datenblätter genauer ansehen. Mich 
überrascht der Preis etwas, die sind schon sehr billig. Vermutlich ein 
Massenartikel.

Danke schon mal für die Antworten!

Ich werde beide Konzepte mal durchüberlegen und mich dann wieder melden.

von Hurra (Gast)


Lesenswert?

Hallo,

nach Sichtung der Datenblätter und weiterer Recherche, glaube ich ohne 
FPGA auszukommen.

Dank dem Tipp von Frank K. mit den Analog Frontends bin ich auf einen 
sehr praktischen Baustein gestoßen:
http://www.analog.com/media/en/technical-documentation/data-sheets/ADE7912_7913.pdf
Da ist sehr viel schon integriert, zum Beispiel die galvanisch getrennte 
Versorgung für die "andere Seite". Und vor allem schon die ganzen 
Filter, Gain-Offset-Korrektur und der Nullspannungsdetektor. Die 
Hardware wird damit vergleichsweise simpel - ein Blockschaltbild für ein 
Konzept mit FPGA hat gezeigt, dass diese Lösung SEHR viel einfacher ist, 
insbesondere wenn man die nötige sichere Trennung bedenkt.

Einzig die Samplerate ist um einiges schlechter. Für einen ersten 
Prototypen und zur Einarbeitung in den ganzen 
Digitalen-Signalverarbeitungskram wird das aber reichen. Für ein 
einfaches Leistungsmessgerät sowieso.

Ich hoffe, mit einem einfachen PIC32MX470 auszukommen. Naja, wird man ja 
sehen.

Das scheint mir vom Schaltungsaufbau die sinnvollste Lösung zu sein.
Danke nochmal an Frank K. für den Tipp mit den Analog Frontends! Das ist 
wirklich hilfreich.

Wenn ich ein Konzept habe, werde ich das hier einstellen.

von Frank K. (fchk)


Lesenswert?

Hurra schrieb:

> Ich hoffe, mit einem einfachen PIC32MX470 auszukommen. Naja, wird man ja
> sehen.

Ähm... Schau mal hier.
http://www.microchip.com/DevelopmentTools/ProductDetails.aspx?PartNO=ARD00385

Das ist ein Referenzdesign für den MCP3911, und zwar ein elektronischer 
Stromzähler. Die kommen da mit einem PIC18 aus. Das Design solltest Du 
Dir mal anschauen, dabei aber unbedingt im Hinterkopf behalten, dass die 
gesamte Schaltung auf Netzspannung liegt. In dieser Anordnung völlig in 
Ordnung, aber Du solltest den Prozessor besser galvanisch trennen. 
Erhöht Deine Lebenszeit.

So, und wenn Du ganz fault bist, schaust Du Dir den CS5490 an. Der macht 
dann nämlich auch die ganze Mathematik selber, und Du brauchst Dir die 
Messwerte für Ueff, Ieff, P, Q und S einfach nur per UART abzuholen.

Etwas ähnliches gibts auch für drei Phasen.

Bei Analog sieht das ganze so aus:
http://www.analog.com/en/products/analog-to-digital-converters/integrated-special-purpose-converters/energy-metering-ics/ade7953.html

Hier musst Du die Werte per SPI rausholen.

fchk

von Lattice User (Gast)


Lesenswert?

Frank K. schrieb:
> dabei aber unbedingt im Hinterkopf behalten, dass die
> gesamte Schaltung auf Netzspannung liegt. In dieser Anordnung völlig in
> Ordnung, aber Du solltest den Prozessor besser galvanisch trennen.
> Erhöht Deine Lebenszeit.

Genau deswegen hat er sich ja die beiden AnalogDevices ADCs ausgesucht. 
Die sind galvanisch getrennt.

von Pandur S. (jetztnicht)


Lesenswert?

Was spricht denn gegen einen fertigen Chip wie zB ADE 7858 oder Familie. 
Der kann das alles mehr oder weniger.

von Hurra (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich habe mir ein Konzept basierend auf den ADE7912 überlegt, siehe Bild.

Im Prinzip habe ich 3 unabhängige, voneinander galvanisch getrennte 
Kanäle vorgesehen. Mit denen könnte man entweder die Leistung eines 
Drehstromgerätes erfassen, oder von 3 Einphasigen Geräten gleichzeitig. 
Oder eine Messbereichsumschaltung realisieren.

Sonst gibts noch eine Micro-SD-Karte (Langzeitaufzeichnung) und eine 
RTCC (mit Batterie oder Goldcap), so dass die Uhrzeit nicht bei jedem 
Abstecken neu zu stellen ist. Ein GLCD und Tasten gibts für die 
Bedienung.

Zum Auslesen der Daten finde ich WLAN sinnvoll, zumindest hier im Haus 
habe ich nicht überall Ethernet, und einen PC herumschleppen finde ich 
unpraktisch.

Eine Frage hätte ich noch:
Würde mir ein Nulldurchgangssensor bei der Berechnung von Leistung, 
Netzoberwellen oder Blindleistung einen Mehrwert bieten?

Für weitere Anregungen / Kritik wäre ich dankbar.

Was die höher integrierten IC angeht: Das wäre mir zu unflexibel. Der 
ADE7912 erscheint mir da als recht sinnvoller Kompromiss - einfache 
Auswertung, aber noch flexibel.

von Schall und Rauch (Gast)


Lesenswert?

Hurra schrieb:

> ich habe mir ein Konzept basierend auf den ADE7912 überlegt, siehe Bild.
...
> Für weitere Anregungen / Kritik wäre ich dankbar.

Bitte einen Mod diesen thread aus dem FPGA-subforum in ein passenderes, 
bspw:
https://www.mikrocontroller.net/forum/dsp

zu verschieben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.