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.
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.
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.
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.
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.
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 CPLDrechnen 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.
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.
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 :-(
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...
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 FPGAund 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
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%
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
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 FPGAund 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.
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.
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
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.
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.
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.