Forum: Mikrocontroller und Digitale Elektronik PWM synchron zu 50Hz Netz


von Christof K. (ckris)


Lesenswert?

Hallo,

mit einem STM32f429 generiere ich eine 20kHz PWM im center alligned 
mode.

Im Augenblick "synchronisiere" ich die PWM mit einer 
Nulldurchgangserkennung. D.h. der positive Nulldurchgang des 50 Hz Sinus 
generiert mir einen Input Capture Interrupt. Hier wird der Counter der 
PWM getriggert auf null gesetzt,  die Zeit zwischen zwei Nulldurchgängen 
gemessen, der Top-Wert für die PWM berechnet und ins ARR-Register 
geschrieben.

Das Funktioniert soweit recht akzeptabel. Dennoch eilt die PWM 
erwartungsgemäß vor oder nach, weil der Timer-Takt so gut wie nie 
synchron mit den 50Hz ist. Perfekt synchron soll es aber sein.

Die einzige mir mittlerweile bekannte Methode, soll eine mit den 50Hz 
synchrone PLL sein, deren Takt ich als externen CLK für die PWM nutzen 
könnte. Das sollten am besten 80MHz oder mehr sein.

Wie kann ich eine solche PLL realisieren? Bisher habe ich kein konkretes 
Beispiel gefunden und weiß nicht, wie ich die Lösung angehen soll. 
Reichen dafür ein paar OPVs und ein Quarz aus? Oder kann der STM so 
etwas von Hause aus?

Dank im Voraus!
Christof

: Bearbeitet durch User
von 74HC (Gast)


Lesenswert?

Bis ein paar MHz kommst du mit dem 74HC4046, den Rest kann die interne 
PLL machen.

von Christof K. (ckris)


Lesenswert?

Danke fürs Steinchen. Gibts das auch schneller?

> den Rest kann die interne PLL machen.

Meinst Du damit, der uC soll seine Freq von den 50Hz beziehen, oder 
gibts noch andere interne Möglichkeiten?
Der uC soll unbedingt unabhängig takten, weil die 50Hz nicht immer 
anliegen und er trotzdem weiter arbeiten muss.

: Bearbeitet durch User
von Michael K. (Gast)


Lesenswert?

Kannst Du nicht den internen Oszillator verwenden und solange an der 
Clock Kalibrierung drehen bis Du zwischen den Nulldurchgängen einen 
konstanten Timerwert bekommst ?

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


Lesenswert?

Christof K. schrieb:
> mit einem STM32f429 generiere ich eine 20kHz PWM im center alligned
> mode.
> Im Augenblick "synchronisiere" ich die PWM mit einer
> Nulldurchgangserkennung. D.h. der positive Nulldurchgang des 50 Hz Sinus
> generiert mir einen Input Capture Interrupt.
Du willst also in eine 50Hz Periode exakt 400 der 20kHz Perioden 
unterbringen? Und dann im Idealfall deren beiden Nulldurchgänge exakt 
gleich haben?

Wie zuverlässig und genau ist denn die Erkennung des 
50Hz-Nulldurchgangs? Jittert diese Nulldurchgangserkennung? Können 
Störungen auf dem Netz die Nulldurchgangserkennung ins Stolpern bringen?

: Bearbeitet durch Moderator
von Knobikocher (Gast)


Lesenswert?

Auch zu beachten: das Netzt hat nicht exakt 50Hz:

http://www.netzfrequenzmessung.de/

von temp (Gast)


Lesenswert?

Du willst so was ähnliches machen wie gängige Solarinverter? d.h. Zu 
einem Eingangssignal einen phasengleichen Sinus erzeugen. Dieser soll 
Phasen, Spannungssprünge u.s.w sicher ausbügeln aber nur in einem 
relativ kleinem Bereich der Eingangsfrequenz regeln?
Dazu gibt es bei TI eine in meinen Augen sehr gute Softwarelib 
(Solarpower). In etwa hier zu finden:

  http://www.ti.com/tool/controlsuite

Das sind auch mehrere Methoden einer PLL beschrieben incl. Mathlab - 
Modell und Code. Da du einen f4 mit FPU verwendest kannst du die darin 
enthaltenen float Routinen benutzen. Bei allem anderen ist Festkomma 
angesagt und man muss sich da erst einmal die Grundlagen schaffen, da 
der Code eigentlich für die C2000 Chips gemacht ist.

von Michael (Gast)


Lesenswert?

Du musst die PWM Frequenz verstellen. Wenn du parallel mit der PWM eine 
ADC Messung der Netzspannung machst kannst du mit diesen Informationen 
die Phase zwischen der Netzfrequenz und deiner PWM Frequenz bestimmen.

Nachzulesen in:
"Grid Converters for Photovoltaic and Wind Power Systems"

findest du im Internet wahrscheinlich auch als PDF wenn du dir das Buch 
nicht gleich kaufen möchtest.

MfG

Michael

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Anbei mal ein Beispiel für einen 50/60Hz Phasenschieber zur 
Brummkompensation auf nem ATtiny25.
Der Timer T0 mißt die Frequenz und T1 gibt sie verschoben als PWM aus.
Man sieht beim Einschalten schön, wie die PLL langsam einrastet.

von Christof K. (ckris)


Lesenswert?

Michael K. schrieb:
> Kannst Du nicht den internen Oszillator verwenden und solange an der
> Clock Kalibrierung drehen bis Du zwischen den Nulldurchgängen einen
> konstanten Timerwert bekommst ?
-->
> Auch zu beachten: das Netzt hat nicht exakt 50Hz:

Lothar Miller schrieb:
> Du willst also in eine 50Hz Periode exakt 400 der 20kHz Perioden
> unterbringen?
Ja. 20kHz oder ähnlich. Am liebsten ist mir eine Anzahl Perioden die 
ganzzahlig durch drei teilbar ist.

> Und dann im Idealfall deren beiden Nulldurchgänge exakt
> gleich haben?
Das wäre natürlich das Optimum!

> Wie zuverlässig und genau ist denn die Erkennung des
> 50Hz-Nulldurchgangs?
Gute Frage. Noch fehlt mir ein DSO um das genau zu bestimmen. Am 
analogen Oszi sieht es recht genau aus. Der uC gibt mir bei 
Nichterkennung eines Nulldurchgangs einen Fehler aus - das war bisher 
noch nicht der Fall.
Die Schaltung habe ich angehängt. C2 Soll als Filter dienen (statt 
Hysterese), C1 soll die Phasenverschiebung von C2 und die Laufzeit 
OPV/uC kompensieren. Wobei ich bzgl Toleranzen, Alterung etc nicht 
sicher bin, ob das eine gute Idee ist.

>Jittert diese Nulldurchgangserkennung?
Die Nulldurchgangsmessung ergibt am uC zwischen 50,046 und 49,988Hz. Es 
wird eine sehr stabile Frequenz gemessen. Siehe unten.

> Können Störungen auf dem Netz die Nulldurchgangserkennung ins Stolpern bringen?
Ja? Wahrscheinlich kannst Du das besser beantworten. Später soll 
netzseitig ein EMV/Tiefpassfilter vorhanden sein.

Im Augenblick simuliere ich drei Phasen mit einem 
Selbstbauwechselrichter mit eingestellten 6Vpp, ca. 50Hz (dafür stabil) 
und kleinen Sinusfiltern 2.Ordnung. Hieran erfolgt meine Messung. Ans 
echte Netz möchte ich am liebsten noch lange nicht.
Als Ziel habe ich einen 3 Phasen Gleichrichter mit aktiver PFC und 
Buck-/Boost-Funktion. Das liegt aber noch in den Sternen.

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


Lesenswert?

Christof K. schrieb:
>> Jittert diese Nulldurchgangserkennung?
> Die Nulldurchgangsmessung ergibt am uC zwischen 50,046 und 49,988Hz.
Das sind somit von 19981 us bis 20005 us und damit ein Jitter von 23 us. 
Bezogen auf die 50 us einer kompletten 20 kHz Periode sind das 50% 
Abweichung durch den Jitter.
Da wird wohl eine Filterung nötig werden...

von Tcf K. (tcfkao)


Lesenswert?

Die Netzfrequenz ändert sich doch ständig, wenn auch nur minimal... wie 
erfolgt denn die Nachführung? So wie ich es bisher verstanden habe soll 
nur einmal genau gemessen werden und diese Frequenz dann als Referenz 
genommen werden.

von Michael K. (Gast)


Lesenswert?

Christof K. schrieb:
>> Auch zu beachten: das Netzt hat nicht exakt 50Hz:
Wikipedia:
Im Normalfall sind diese Abweichungen im westeuropäischen Verbundnetz 
minimal und bewegen sich unter 0,2 Hz.

Du versuchst Dich ja in Vorhersage wo der nächste Nulldurchgang sein 
wird und das wird bei einer leicht schwankenden Freq. nie 100% exakt 
sein.
Muss es das denn aus Schaltungstechnischer Sicht sein, oder legts Du Dir 
die Latte grade etwas hoch auf ?

Ohnehin musst Du mit starken Ereignissen rechnen die Dir total die 
Synchronisation verhauen. Spikes z.B. aber nicht nur.
Bei Schaltaktionen am Netz gibt es kurze Ausfälle, Phasensprünge und 
schlimmeres, das muss Deine Schaltung aushalten.

Ich habe mal netzsynchrone LED Matrix Reihen- / Parallel-Umschaltung 
gemacht um in einem großen Cluster keinen PFC zu benötigen.
Ein Fiasko, hat mit sauberem Netz prima funktioniert und war durch jeden 
Hühnerkram aus dem Tritt zu bringen.
Habe das Gebastel dann abgebrochen und einen konventionelleren Ansatz 
verfolgt.

von Christof K. (ckris)


Lesenswert?

Lothar M. schrieb:
> Da wird wohl eine Filterung nötig werden...
Meinst Du damit eine zusätzliche Filterung der Messgröße?
Wie könnte ich noch einen geringeren Jitter erreichen?


Tcf Kao schrieb:
> Die Netzfrequenz ändert sich doch ständig, wenn auch nur minimal... wie
> erfolgt denn die Nachführung? So wie ich es bisher verstanden habe soll
> nur einmal genau gemessen werden und diese Frequenz dann als Referenz
> genommen werden.
Es soll die PWM-Frequenz aus der Netzfrequenz bezogen werden...wenn das 
überhaupt sinnvoll geht.

von Christof K. (ckris)


Angehängte Dateien:

Lesenswert?

Michael K. schrieb:
> Du versuchst Dich ja in Vorhersage wo der nächste Nulldurchgang sein
> wird und das wird bei einer leicht schwankenden Freq. nie 100% exakt
> sein.
Hier hast Du sicherlich recht, und das verursacht bei mir erst recht 
Kopfschmerzen.

> Muss es das denn aus Schaltungstechnischer Sicht sein, oder legts Du Dir
> die Latte grade etwas hoch auf ?
Hier magst Du wohl recht haben. Jedoch hatte ich mit der "exakten" 
Nulldurchgangsbestimmung und einer netzsynchronen PWM eine möglichkeit 
mehr zu erkennen, wie sich die drei Leiter gerade verhalten... Denke ich 
zumindest. Zudem soll von vornherein die Möglichkeit zur Rückspeisung im 
System berücksichtigt werden. Dafür muss ich doch Netzsynchron arbeiten. 
Oder nicht?

> Ohnehin musst Du mit starken Ereignissen rechnen die Dir total die
> Synchronisation verhauen. Spikes z.B. aber nicht nur.
> Bei Schaltaktionen am Netz gibt es kurze Ausfälle, Phasensprünge und
> schlimmeres, das muss Deine Schaltung aushalten.
Ja, wie gehen denn Profis beim Schaltungsentwurf damit um?

>Ein Fiasko, hat mit sauberem Netz prima funktioniert und war durch jeden
> Hühnerkram aus dem Tritt zu bringen.
> Habe das Gebastel dann abgebrochen und einen konventionelleren Ansatz
> verfolgt.
Glaube ich Dir. Soll ich deswegen am besten aufgeben? Was wären die 
Alternativen?

Hatte die Messschaltung vorhin vergessen. Hier die Variante für 6Vpp.

von Peter D. (peda)


Lesenswert?

Schau Dir einfach mal meinen Code an.
Der PWM-Takt wird durch die CPU bestimmt (64MHz Takt = 250kHz PWM). Es 
reicht ja, daß die PWM-Setzwerte mit den 50Hz synchron sind.

Und als Filter regele ich einfach den Timerreloadwert um max +/-1 Takte 
nach. Das ergibt einen schönen Tiefpaß und ist unempfindlich gegen 
Störungen.
Wenn man die 50/60Hz Erkennung nicht braucht, kann man den Fangbereich 
stärker eingrenzen und die PLL regelt schneller ein.

von Christof K. (ckris)


Lesenswert?

Peter D. schrieb:
> Schau Dir einfach mal meinen Code an.
> Der PWM-Takt wird durch die CPU bestimmt (64MHz Takt = 250kHz PWM). Es
> reicht ja, daß die PWM-Setzwerte mit den 50Hz synchron sind.
>
> Und als Filter regele ich einfach den Timerreloadwert um max +/-1 Takte
> nach. Das ergibt einen schönen Tiefpaß und ist unempfindlich gegen
> Störungen.
> Wenn man die 50/60Hz Erkennung nicht braucht, kann man den Fangbereich
> stärker eingrenzen und die PLL regelt schneller ein.
Ehrlich gesagt, versuche ich gerade Deinen Code zu verstehen, was mir 
bisher nicht gänzlich gelungen ist.
Bliebe dann noch das Problem, dass die Nulldurchgangserkennung den 
erwähnten Jitter hat. Oder stehe ich gerade ganz auf dem Schlauch?

von Peter D. (peda)


Lesenswert?

Christof K. schrieb:
> Ehrlich gesagt, versuche ich gerade Deinen Code zu verstehen, was mir
> bisher nicht gänzlich gelungen ist.

Ein Trick ist, daß T0 nur 8Bittig ist und ich daher noch einen SW-Zähler 
bis 3 brauchte, um die Takte bis zum Nulldurchgang zu zählen.
Die CPU arbeitet mit 8MHz, dadurch ergeben sich die:
8MHz / 50Hz / 256 = 625

von temp (Gast)


Lesenswert?

Christof K. schrieb:
> Bliebe dann noch das Problem, dass die Nulldurchgangserkennung den
> erwähnten Jitter hat. Oder stehe ich gerade ganz auf dem Schlauch?

Sie unterscheidest du denn zwischen deinem hausgemachten Jitterproblemen 
und dem Jitter den das Netz sowieso mit sich bringt? Ich habe mich auch 
durch viele AppNotes der Hersteller gelesen. In einer von Microchip wir 
einfach immer die Zeit der letzten Halbwelle gemessen und mit dieser 
Zeit als Führungsgröße die aktuelle Halbwelle ausgegeben. Ob das durch 
ändern der PWM Frequenz oder bei fester PWM durch direkte Berechnung 
erfolgt ist erst mal egal. Nötig ist da aber noch einiges mehr um auf 
Fehler zu reagieren.

In der verlinkten Lib von TI ist ein Phasensprung innerhalb von 30ms 
ausgeregelt. Hier nochmal der Link auf eine Beschreibung des ganzen:
  http://www.ti.com/lit/an/sprabt3/sprabt3.pdf
Auf einem F4 sicherlich der bessere Ansatz. Ich habe das mal auf einem 
F334-Nucleo probiert. Die SOGI-PLL mit float braucht da ca. 8.8µs, die 
Notch SPLL mit float 3.2µs und mit int32 5µs. Das sind Werte die bei 
20KHz noch genügend Spielraum für den Rest lassen.

von Christof K. (ckris)


Lesenswert?

@Peter
Ich sehe in Deinem Code immer noch keinen Zusammenhang der Messung mit 
dem Timer 1, außer dass das OCR1A im Compare Interrupt des Timer 0 
beschrieben wird.

temp schrieb:
> Christof K. schrieb:
>> Bliebe dann noch das Problem, dass die Nulldurchgangserkennung den
>> erwähnten Jitter hat. Oder stehe ich gerade ganz auf dem Schlauch?
>
> Sie unterscheidest du denn zwischen deinem hausgemachten Jitterproblemen
> und dem Jitter den das Netz sowieso mit sich bringt?
Grundsätzlich eine berechtigte Frage! Zumindest im Augenblick erzeuge 
ich aber meine 50 Hz ja (wahrscheinlich recht stabil) selbst.

> In der verlinkten Lib von TI ist ein Phasensprung innerhalb von 30ms
> ausgeregelt. Hier nochmal der Link auf eine Beschreibung des ganzen:
>   http://www.ti.com/lit/an/sprabt3/sprabt3.pdf
> Auf einem F4 sicherlich der bessere Ansatz. Ich habe das mal auf einem
> F334-Nucleo probiert. Die SOGI-PLL mit float braucht da ca. 8.8µs, die
> Notch SPLL mit float 3.2µs und mit int32 5µs. Das sind Werte die bei
> 20KHz noch genügend Spielraum für den Rest lassen.
Wusste gar nicht, dass der STM32f4 eine FPU hat. Werde jetzt versuchen 
das Dokument zu verstehen.
Der C2000 wurde mir bereits in einem anderen Thread empfohlen. 
Wahrscheinlich werde ich bald ein Board damit bestellen.

: Bearbeitet durch User
von Michael K. (Gast)


Lesenswert?

Christof K. schrieb:
> Soll ich deswegen am besten aufgeben?

Nein, aber damit leben das Du den Nulldurchgang leicht verpasst.
Weder kannst Du in Zeit 0 auf den Trigger reagieren, noch bist Du exakt 
mit Deiner Vorhersage.

Das gibt im Nulldurchgang minimale Verzerrungen, aber da ist Strom und 
Spannung ohnehin fast 0, also was solls.

Dann muß Du erkennen wenn Du krass daneben liegst und das zu abnormen 
Strömen führt. Da geht man vom Netz, sucht neu die Synch und fährt 
wieder hoch. Kommt ja so oft nicht vor.
Das natürlich in Hardware weil ja auch die MCU mal abkoffern kann ohne 
das gleich die Funken fliegen sollen.

Als Erkennung kannst Du einfach mit großem R auf einen geclampten INT 
Eingang gehen.
Wird die Spannung größer logisch 1 gibt es einen IRQ.
Da kannst Du auch noch eine Zeitkonstante von Abziehen wenn es etwas 
genauer werden soll.
Du musst nicht alles in dem Zyklus berechnen und ausführen in den Du 
gemessen hast, das kannst du auch ein paar Zyklen später machen und 
davon ausgehen das Dein System ausreichend stabil ist.
Nur Überstromschutz muss schnell sein.

Christof K. schrieb:
> Es soll die PWM-Frequenz aus der Netzfrequenz bezogen werden...wenn das
> überhaupt sinnvoll geht.
Ich verstehe einfach den Grund nicht warum Du das willst ?

Such Dir Deine Schaltfrequenz völlig unabhängig davon und regel duty 
nach der Eingangsspannung, die Du über Nulldurchgang, verstrichener Zeit 
und Sinustabelle bekommst.
Auch Deine Reglerantwort ist ja nicht gleich da wenn Du den Duty 
verstellst.
Du machst also eigentlich das von dem Du weist das es gleich passieren 
muss weil Du weist das das System das gleiche tut was es eine Halbwelle 
zuvor getan hat.

von temp (Gast)


Lesenswert?

Michael K. schrieb:
> Du machst also eigentlich das von dem Du weist das es gleich passieren
> muss weil Du weist das das System das gleiche tut was es eine Halbwelle
> zuvor getan hat.

Schön gesagt!

Zum Einspeisen würde es auch reichen einfach im PWM-Interrupt die 
Eingangswechselspannung zu messen und damit gewichtet die PWM zu 
füttern.
Damit bist du immer synchron und die Modulation deiner PWM ist 
proportional zur Eingangswechselspannung. Das reicht zwar sicher nicht 
um die Normen für solche Inverter zu erfüllen, aber darum ging es hier 
ja nicht. Alle anderen Probleme wie Inselerkennung u.s.w müssen sowieso 
behandelt werden unabhängig von der Topologie.

von Christof K. (ckris)


Lesenswert?

Hmmm... Die ursprüngliche Idee für die PFC des Gleichrichters war ja, 
den Nulldurchgang zu bestimmen und aus der verstrichenen Zeit zu 
ermitteln, wo gerade die Netzspannung ist und eine Sinustabelle für die 
RZM "abzuklappern". Es würde nur der Nulldurchgang einer Phase bestimmt 
und alle anderen Phasen daraus abgeleitet. Deshalb nahm ich an, hier so 
präzise wie möglich sein zu müssen. Und eben die letzte Periode der PWM 
mit der 50Hz Periode enden zu lassen, damit möglichst kleine 
Stromverzerrungen auftreten. Bei einer Phase wäre ich hier tatsächlich 
im Nulldurchgang und Michaels Meinung nach wäre das nicht gravierend. 
Die beiden anderen Phasen wären hier jedoch nicht bei 0.

Wenn ich Michael richtig verstehe, soll ich "irgendwie" den 
Nulldurchgang messen, die "bekannte" Zeit zwischen tatsächlichem 
Nulldurchgang und dem Interrupt in der PWM-Ausgabe berücksichtigen.

: Bearbeitet durch User
von Christof K. (ckris)


Lesenswert?

temp schrieb:
> Zum Einspeisen würde es auch reichen einfach im PWM-Interrupt die
> Eingangswechselspannung zu messen und damit gewichtet die PWM zu
> füttern.
> Damit bist du immer synchron und die Modulation deiner PWM ist
> proportional zur Eingangswechselspannung.
Mittlerweile tendiere ich gerne zur Messung. Einfach ist hier relativ 
zur Nulldurchgangserkennung nicht gerade einfach. Und einen zeitlichen 
Versatz zwischen tatsächlicher Spannung, Messung und PWM-Ausgabe habe 
ich ja trotzdem ;)
Trotzdem nahm ich auch für diesen Fall an, die PWM müsste für das beste 
Ergebnis synchron mit dem Netz sein.

: Bearbeitet durch User
von Michael K. (Gast)


Lesenswert?

Christof K. schrieb:
> Trotzdem nahm ich auch für diesen Fall an, die PWM müsste für das beste
> Ergebnis synchron mit dem Netz sein.

Womit Du recht hast, aber es lohnt nicht das bis zum Exzess zu 
betreiben.

Auch Dein EMI Filter + Gleichrichter verursachen bereits Verzerrungen 
und man kann das Spiel soweit treiben das Du auch das ausgleichst.
Nur nicht in dem Moment in dem das passiert sondern einen Zyklus später 
steuerst Du so an das eine 'Gegenverzerrung' entsteht die das aufhebt.

Brachialer Aufwand und etwas für die Messtechnik, DSP und Mathe Helden 
unter uns.

Worum es letzlich geht ist die Einhaltung der zulässigen Grenzwerte und 
das ist normalerweise mit viel weniger Aufwand zu erreichen.

von Peter D. (peda)


Lesenswert?

Christof K. schrieb:
> Ich sehe in Deinem Code immer noch keinen Zusammenhang der Messung mit
> dem Timer 1, außer dass das OCR1A im Compare Interrupt des Timer 0
> beschrieben wird.

T1 arbeitet im PWM-Mode.
T0 zählt mit einem bestimmten Reloadwert, daß genau 256 Werte der 
Sinustabelle an die PWM ausgegeben werden.
Und der Interrupt im Nulldurchgang korrigiert den Reloadwert von T0 
solange, bis das der Fall ist.

: Bearbeitet durch User
von Michael K. (Gast)


Lesenswert?

Christof K. schrieb:
> Mittlerweile tendiere ich gerne zur Messung.

Eingangsspannungsmessung befreit Dich von den Zeitabhänggkeiten aber das 
messen selbst dauert seine Zeit und Du misst alles an Netzverzerrung mit 
und regelst mit kleiner Verzögerung darauf herum.
Das kann Schwingungen verstärken und unschöne Sache anstellen.

So regeln analoge PFCs aber die sind da einfach schneller.
Zudem mußt Du mit relativ hoher Auflösung messen und gerade im kleinen 
Spannungsbereich ist die Änderungsgeschwindigkeit sehr hoch.

Der Ansatz das Netzspannung gefälligst sinusförmig zu sein hat reduziert 
das ganze auf die Messung des Nulldurchganges, der Zwischenkreisspannung 
und einer schnellen Stromüberwachung + Hardware Notabschaltung.

Ist ein spannendes Thema und Deine Entscheidung erstmal von der 
Netzspannung fern zu bleiben solltest Du erst nach Kauf einer guten 
Schutzbrille revidieren.

von temp (Gast)


Lesenswert?

Christof K. schrieb:
> Und einen zeitlichen
> Versatz zwischen tatsächlicher Spannung, Messung und PWM-Ausgabe habe
> ich ja trotzdem ;)
> Trotzdem nahm ich auch für diesen Fall an, die PWM müsste für das beste
> Ergebnis synchron mit dem Netz sein.

Der zeitliche Versatz beträgt max. genau einen PWM-Zyklus. Bei 20kHz 
sind das 400 Zyklen pro Vollwelle oder 0,25%. Die PWM würde dabei aber 
fix mit 20kHz laufen. Dadurch, dass durch die Messung bei einem 
Spannungseinbruch in Folge von Lastwechseln z.B die Ausgangsspannung 
automatisch diesem Lastwechsel folgt, wird meines Erachtens nach die 
Regelung des Einspeisestroms sogar einfacher.
Ich habe hier bei mir im Netz einen SDM630 Zwischenzähler, der auch den 
Klirrfaktor der Spannung und des Stromes misst. 5% bei der Spannung und 
über 50% beim Strom sind da keine Seltenheit. Insofern halte ich auch 
die absoluten Anforderungen für nicht so dramatisch. Wichtiger ist hier 
wirklich eine schnelle Abschaltung bei Überströmen oder sonstigen 
Fehlern.

von Christof K. (ckris)


Angehängte Dateien:

Lesenswert?

Oh man :)

Michael schreibt, nach Nulldurchgang. Temp schreibt, nach Spannung. Oje 
:/ Was ist denn jetzt das Richtige?
Den Code von Peter habe ich immer noch nicht verstanden. Vom C2000 Code 
bin ich völlig erschlagen. Meine eigene Nulldurchgangsanpassung 
schneidet mir prinzipbedingt immer den letzten Abschnitt der "letzten" 
PWM-Periode ab.

Deswegen jetzt erstmal der Versuch einer Spannungsmessung mit Tiefpass, 
der einiges wegfiltert. Die Spannung am Ausgang ist um ca. -30us 
versetzt. Das alles laut Simulation zumindest, Bauteiltoleranzen und 
Alterung nicht berücksichtigt. Wie könnte ich hier die Kapazitäten über 
Temperatur und Zeit am stabilsten halten?
Die OPVs sollen vorerst OP284 werden, da ich von denen einige hier habe.
Was haltet ihr von der Schaltung?

Mein STM32 hat drei ADCs. Die können ca. zwei mal während einer 
PWM-Periode die Strangspannungen messen. Zwischenkreisspannung und 
Ausgangsstrom könnte ich mit parallelen ADCs messen. So der neue Plan.

Eine netzsynchrone PWM wäre mir natürlich immer noch am liebsten.

: Bearbeitet durch User
von Michael K. (Gast)


Lesenswert?

Überleg mal.
Du wählst einen digitalen Ansatz der in der Lage ist mit minimalen 
Informationen auf die Phasenlage und Spannung zu schliessen um Dir dann 
etwas darum herum zu bauen wo Dich die Bauteiltoleranzen und die Drift 
fertigmachen ?

Bis der Wert gewandelt und ausgewertet ist und Du den Duty verändert 
hast ist die Spannung doch schon eine ganz andere.
Du wirst Störungen in den Werten haben und totale Ausreisser ignorieren 
und durch Mittelwerte ersetzen müssen.
Alles das in einem Affenzahn statt einfach einen viertel Sinus als 
Tabelle zu benutzen und da gemütlich durchzutickern.
Bei der Tabellenlösung kannst Du Deine Verzugszeiten zwischen 
Nulldurchgangserkennung und Ausführung abschätzen und das konstant 
korrigieren indem Du einen 'späteren' Sinuswert aus der Tabelle nimmst.
Bei der Messung addieren sich alle Zeiten auf, ohne 
Korrekturmöglichkeit.

Beide Ansatze funktionieren und beide haben Vor- und Nachteile.
Verzettel Dich nicht, nehme einen robusten Ansatz den Du am 
sympatischten findest und arbeite den sauber aus.
Wenn es damit läuft bist Du einen riesigen Schritt weiter und kannst 
immern noch daran optimieren.

Messe nur was Du brauchst.
Die Eingangsspannung kann Dir völlig egal sein.
Du hast zwei Werte die über den Duty entscheiden.
Der schnelle ist die Sinuswelle, der langsame, der die volle Halbwelle 
gleich bleibt, ist der Fehlerfaktor zwischen gewünscher 
Zwischenkreisspannung und gemessener Zwischenkreisspannung.

Die Sinuswelle kannst Du analog messen und aufbereiten ODER Du schaust 
nur auf den Nulldurchgang und zählst dann in Deiner Sinustabelle hoch.
Temp sagt ersteres ist bin für letzteres.
Beides wird funktionieren.

Du brauchst weiterhin eine schnelle Hardwareabschaltung bei Überstrom 
die nur den Zustand an den STM meldet, der dann wieder die Stufe 
freischalten kann.
Temperatur am Leistungsteil messen wäre noch schick, aber muss erstmal 
auch nicht sein.

Alles weitere ist Luxus und kann erstmal entfallen.

Die Leistungselektronik wird Dich noch viel intensiver beschäftigen als 
Du ahnst. Da liegen noch einige Hürden vor Dir, scheitere also nicht 
schon an der Ersten weil Du Die Featurelist aufbläst.

von Christof K. (ckris)


Lesenswert?

Das ist ja eine Ansage ;) Danke. Tatsächlich verliere ich mich gerne im 
Detail und überstrapaziere meine Fähigkeiten.

Am liebsten wäre mir natürlich eine "einfache" Lösung. Die 
Nulldurchgangserkennung wäre ja so eine. Mir bereitet hier nur 
Bauchschmerzen dass meine Schaltung in dem Fall mit einer Grösse, die 
alle 20ms wiederkehrt, eine Vorhersage für eine sehr schnelle PWM für 
drei Phasen macht, die blind drauf losschaltet. Wenn zudem diese Größe 
gestört wird, weiss mein uC nicht im geringsten, was gerade geschieht, 
mindestens bis zur nächsten Periode. Aber wie Du schon sagtest, hat jede 
Variante ihre Vor- und Nachteile. Irgendwie suche ich wohl vergebens 
nach der Eierlegenden Wollmilchsau.

Die Stromabschaltung behalte ich auf jeden Fall im Hinterkopf und werde 
sie angehen, wenn die aktuellen Fragen geklärt sind. Greift solch eine 
Stromabschaltung in die Treiber des Gleichrichters ein, oder schalte ich 
am besten Relais am Eingang des Gleichrichters?

von Christof K. (ckris)


Angehängte Dateien:

Lesenswert?

Dann mal zum Nulldurchgang. Im Augenblick benutze ich folgende 
Schaltung. Jedoch habe ich einen Offset auf meinem Sinus, wodurch ich 
nicht beide Flanken nutzen kann. Zudem scheint die Schaltung empfindlich 
auf Störungen zu reagieren. Der verwendete Komparator ist ein LM393.
Hat jemand eine Idee, wie ich den Offset beim Messen eliminiere und die 
Schaltung "robuster" gestalte?

Edit: Jetzt ist der nichtinvertierendee Eingang mit einer 10n Kapazität 
gegen GND geschaltet und der Offset weg. Liege ich hier richtig?

: Bearbeitet durch User
von temp (Gast)


Lesenswert?

Irgendwie habe ich den Eindruck, dass das ganze Projekt eine Nummer zu 
groß ist für deine Kenntnisse. Kann aber täuschen, deshalb nicht als 
Kritik auffassen.
Du sprachst am Anfang von einem STM32F4xx oder STM32F334. Wenn du diese 
Controller benutzen willst, würde ich keinen analogen Ansatz mit 
Nulldurchgangserkennung oder ähnlichen benutzen. Bei einem kleinen 
Controller ohne FPU muss man anders denken, keine Frage. Aber so einen 
Boliden sollte man auch entsprechend fordern. Deshalb alles digital. Das 
bedeutet für den Falls dass du nicht mit einer spll arbeiten willst in 
etwa:
- Eine Schleife die vom PWM-Interrupt getriggert wird (oder in ihm 
läuft)
- Eingangsspannung messen.
- Anhand dieses Messergebnisses kannst du den Nulldurchgang sicher 
bestimmen
- Wenn der Nulldurchgang erkannt wird feststellen wieviel PWM-Zyklen 
seit dem letzten vergangen sind.
- liegt der Wert z.b. zwischen 410 und 390 bei 20khz dann ist das 
Plausibel. Zähler auf Null setzten sonst hochzählen.
- wenn bis dahin alles ok: Mit sinf(Zaehler*2*pi/zyklen) den neuen Wert 
für die PWM berechnen
- jetzt kann man noch diesen Wert mit dem gemessenen vergleichen um eine 
Plausibilitätsprüfung zu machen.

Jedenfalls kann man sich hier in der Software ausferkeln ohne den 
Lötkolben zu schwingen.
Das ist aber nur das ganz,ganz grobe Muster. Tabellen oder ähnliches 
sind bei einen F4 nicht mehr nötig.
Wenn das ganze 3phasig werden soll, wirst du aber nicht um deutlich mehr 
Grundlagen herum kommen.
Allein die ganzen Hardwaremodule im Controller zum Laufen zu kriegen, 
den ADC zu synchronisieren u.s.w. ist auch schon mal nicht an einem 
Abend gemacht.

von Christof K. (ckris)


Angehängte Dateien:

Lesenswert?

temp schrieb:
> Irgendwie habe ich den Eindruck, dass das ganze Projekt eine Nummer zu
> groß ist für deine Kenntnisse. Kann aber täuschen, deshalb nicht als
> Kritik auffassen.
Es gab schon schlimmeres an Kommentaren hier. Damit kann ich leben. Ganz 
unrecht hast Du vllt nicht, wiederum habe ich mehr an Fähigkeiten, als 
es den Eindruck macht.

> Du sprachst am Anfang von einem STM32F4xx oder STM32F334. Wenn du diese
> Controller benutzen willst, würde ich keinen analogen Ansatz mit
> Nulldurchgangserkennung oder ähnlichen benutzen. Bei einem kleinen
> Controller ohne FPU muss man anders denken, keine Frage. Aber so einen
> Boliden sollte man auch entsprechend fordern. Deshalb alles digital. Das
> bedeutet für den Falls dass du nicht mit einer spll arbeiten willst
STM32f429-Discovery (für Erprobungszwecke). An sich wäre mir die PLL am 
liebsten in Hardware. Aber davon habe ich immer noch null Ahnung, wie 
umzusetzen.

> etwa:
> - Eine Schleife die vom PWM-Interrupt getriggert wird (oder in ihm
> läuft)
> - Eingangsspannung messen.
> - Anhand dieses Messergebnisses kannst du den Nulldurchgang sicher
> bestimmen
> - Wenn der Nulldurchgang erkannt wird feststellen wieviel PWM-Zyklen
> seit dem letzten vergangen sind.
> - liegt der Wert z.b. zwischen 410 und 390 bei 20khz dann ist das
> Plausibel. Zähler auf Null setzten sonst hochzählen.
> - wenn bis dahin alles ok: Mit sinf(Zaehler*2*pi/zyklen) den neuen Wert
> für die PWM berechnen
> - jetzt kann man noch diesen Wert mit dem gemessenen vergleichen um eine
> Plausibilitätsprüfung zu machen.
So ähnlich stelle ich mir das ganze auch vor. Außer dass ich die PWM 
anhand einer RZM (--> 3 Phasen) berechnen will. Siehe Anhang.

> Jedenfalls kann man sich hier in der Software ausferkeln ohne den
> Lötkolben zu schwingen.
Je mehr ich in Hardware umsetze, desto weniger Softwareaufwand (denke 
ich zumindest) - es spricht nichts dagegen den Lötkolben zu schwingen.

> Das ist aber nur das ganz,ganz grobe Muster. Tabellen oder ähnliches
> sind bei einen F4 nicht mehr nötig.
Meine Vorstellung im Augenblick - über analoge Spannungsmessung zu gehen 
und noch als Gegenkontrolle den Nulldurchgang mit erfassen. Bei groben 
Ausreißern (die im Augenblick bereits bei 6Vpp häufig vorkommen) in der 
Messung, könnte ich dann auf eine Sinustabelle zurückgreifen. Dafür wäre 
ein zum Netz synchroner Timer von Vorteil. Damit wäre ich doch auf der 
sicheren Seite.

> Wenn das ganze 3phasig werden soll, wirst du aber nicht um deutlich mehr
> Grundlagen herum kommen.
Jup :/

> Allein die ganzen Hardwaremodule im Controller zum Laufen zu kriegen,
> den ADC zu synchronisieren u.s.w. ist auch schon mal nicht an einem
> Abend gemacht.
Ich habe ja noch ein paar Monate Lebenszeit ;)

von Christof K. (ckris)


Angehängte Dateien:

Lesenswert?

Jetzt mal ohne den Sinn/Unsinn der präzisen Nulldurchgangserkennung zu 
hinterfragen...

Bisher habe ich keine Nulldurchgangserkennung mit ordentlichem Tiefpass 
ohne Hysterese gefunden. Was spricht dagegen?

Meine selbst entworfene Schaltung funktioniert in der Simulation, 
praktisch jedoch nicht, weil am invertierenden Eingang (OPV -> LM393) 
der Sinus (80mVpp) einen Offset von ca. 300mV hat und der Komparator 
deswegen gar nicht erst schaltet.

: Bearbeitet durch User
von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Anbei mal ne einfache Nulldurchgangserkennung.
Wichtig ist der Schmitt-Trigger, damit der Ausgang nicht oszilliert.
74AHC ist nicht nötig, aber den hatte ich schon angelegt.

von Peter D. (peda)


Lesenswert?

Christof K. schrieb:
> Meine selbst entworfene Schaltung funktioniert in der Simulation

Dürfte sie aber nicht bzw. nur sehr kurz.

Jeder OPV-Eingang benötigt einen Gleichstrompfad, sonst lädt er sich 
durch den Biasstrom unkontrolliert auf.
Auch braucht jeder Komparator eine Hysterese, damit er stabil arbeitet.

von Simpel (Gast)


Lesenswert?

Du brauchst auf jeden Fall ein Trennrelais (o.Ä.), wenn du für eine 
gewisse Zeit im off-Grid-Modus fährst und keine Phasensynchronisation 
möglich ist. In der off-grid-Zeit kann dir die Netz-Phase bei den o.g. 
Schwankungen von +-0,2Hz in kürzester Zeit um 0-180° relativ zu deiner 
PWM-Phase davonlaufen. Wenn dann das Netz wieder da ist, ohne dass du 
eine Synchronisation oder Trennung hast, werden deine Endstufen 
"brachialsynchronisiert"... Dagegen hilft auch keine 1ppm-PLL.

Bei Netz-Abwesenheit trennen und nach Netzrückkehr zuerst auf die 
Netzphase synchronisieren und dann über das Trennrelais 
zusammenschalten. Deine oben geforderte extreme Genauigkeit ist unter 
diesem Aspekt auch unnötig, da du wegen den Schwankungen der 
Netzfrequenz ohnehin zwingend eine kontinuierliche 
Echtzeit-Netzsynchronisation brauchst. Ob die dann ein halbes Grad 
Jitter hat, macht den Kohl nicht fett...

Und was die 3-phasige Konstanz betrifft:
Mit einer Sinus_LUT die 3n Elemente besitzt, kannst du mit 3 um 
120°versetzten Zeigern arbeiten, die von einer Phase synchronisiert 
werden.
Du kannst auch jede Phase auf ihren eigenen Nulldurchgang 
synchronisieren. Ist halt der 3-fache Hardwareaufwand zur ZC-Erkennung.

von Wolfgang (Gast)


Lesenswert?

Christof K. schrieb:
> Jetzt mal ohne den Sinn/Unsinn der präzisen Nulldurchgangserkennung zu
> hinterfragen...

Diese kennst du ...
http://www.dextrel.net/diyzerocrosser.htm

von Michael K. (Gast)


Angehängte Dateien:

Lesenswert?

Christof K. schrieb:
> dass meine Schaltung in dem Fall mit einer Grösse, die
> alle 20ms wiederkehrt, eine Vorhersage für eine sehr schnelle PWM für
> drei Phasen macht, die blind drauf losschaltet. Wenn zudem diese Größe
> gestört wird, weiss mein uC nicht im geringsten, was gerade geschieht,

Wovon spricht Du ?
Die PWM Frequenz ist vollkommen unabhängig von Deiner Netzfrequenz.
Deine brutale Zeitabhängigkeit besteht darin ein 10ms Ereigniss auf ca. 
1% Genauigkeit vorherzusagen und das ist völlig trivial.

Du must so circa in etwa den Nulldurchgang wissen und dafür würde ich 
nicht mehr tun als jeden zweiten Nulldurchgang zu triggern wie in meiner 
angehängten Schaltung.
Das machst Du für alle drei Phasen und fertig ist der Lack.
Damit hast Du Nulldurchgang, Frequenz, Phasendrehung, Phasenlagen etc. 
pp. weil Du Dir aus dieser simpelsten aller möglichen Messungen alles 
andere ermitteln kannst ohne dieses wahnwitzige umhergespringe zwischen 
'wenn dieses nicht geht schalte ich um auf jenes'
Wie viel Zeit glaubst Du denn zu haben um diese Auswertung zu machen und 
immer noch besser zu liegen als ein simpel Ansatz ?

Löse Dich bitte endlich von der Vorstellung das Deine PWM mehr vom Netz 
wissen muss als den zu fahrenden Duty Cycle.

Ja, in der Nähe NULL kann es Fehltrigger geben.
Das wird aber nur schlimmer je mehr analoges gemurkse da drin ist.
Mit ein wenig C oder einer 'Entprellung' in der IRQ bügelst Du das weg.

Löse Dich von dem ganzen analogen rumgefriggel das schon in der Simu 
nicht geht.
Was glaubst Du was mit dem Murks geschieht wenn Du dreiphasig mit 
ordentlich Wumms auf dem Netz bist ?

Du versuchts da Genauigkeiten an Stellen reinzubekommen die völlig 
irrelevat sind und verballerst damit Zeit und Energie die Du noch 
brauchen wirst um die 20 anderen Baustellen in den Griff zu bekommen.

von temp (Gast)


Lesenswert?

Michael K. schrieb:
> Ja, in der Nähe NULL kann es Fehltrigger geben.
> Das wird aber nur schlimmer je mehr analoges gemurkse da drin ist.
> Mit ein wenig C oder einer 'Entprellung' in der IRQ bügelst Du das weg.
>
> Löse Dich von dem ganzen analogen rumgefriggel das schon in der Simu
> nicht geht.
> Was glaubst Du was mit dem Murks geschieht wenn Du dreiphasig mit
> ordentlich Wumms auf dem Netz bist ?
>

Da sind wir ja schon 2 die von dem analogen Kram nicht viel halten. Ich 
bringe trotzdem noch mal den ADC Ansatz ins Spiel, wenn schon mit M4 
Controllern gearbeitet wird. Die Dinger in einem STM32F3xx oder F4 
brauchen keine µs zum Messen und können automatisch im PWM Interrupt 
getriggert werden. Irgendwann willst du dann den Effektivwert der 
Eingangsspannung ermitteln Oder Strom, Leistung, Phasenverschiebung... 
Und wenns nur zum Anzeigen ist. Das fällt dann förmlich nebenbei ab.

von Michael K. (Gast)


Lesenswert?

temp schrieb:
> Das fällt dann förmlich nebenbei ab.

Messen würde ich das auch weil es nicht wehtut und fast keine Arbeit 
ist.
Kann ja auch sein das man später mal DC Betrieb (Akku) können will.

Im ersten Schritt würde ich aber alles weglassen was nicht auf direktem 
Weg zum Ziel führt.

von Christof K. (ckris)


Angehängte Dateien:

Lesenswert?

@Peter
Danke für den Hinweis Peter. Die Kapazität hat den Basisstrompfad 
unterbrochen. Jetzt tut sie das nicht mehr.
Ohne Hystererse hat der Ausgang tatsächlich etwas gezappelt. Eine 
Hysterese ist jetzt mit dabei. Scheint soweit recht solide mit 6Vpp zu 
funktionieren.


@Simpel
Danke für den kleinen Exkurs. Als erster Prototyp soll zwar zuerst ein 
Gleichrichter mit aktiver PFC entstehen, aber Wechselrichten soll er 
später ja auch können. Denke Deine Empfehlungen treffen auch auf den 
Gleichrichter zu.
Du sagst es -> 3n Elemente.
@Michael
Dafür wäre es von Vorteil, ein genau dreifaches Vielfaches an PWM 
Perioden in einer Sinusperiode zu haben. Und dafür wäre es von Vorteil, 
die PWM aufs Netz zu synchronisieren.


@Wolfgang
Nee! Kannte ich nicht. Die sieht spannend aus - Danke! Kriege sie leider 
nicht simuliert, werde sie aber bei Gelegenheit ausprobieren.
Jetzt habe ich mich für die ersten Programmierschritte für eine eigene 
Schaltung (Anhang - 6Vpp-Variante) entschieden. Hier kann man mit R5 die 
Phasenlage einstellen und am Ausgang recht präzise (zumindest) einen 
Nulldurchgang erfassen. Gleichspannungsanteile im Sinus sind entkoppelt 
und eine gewisse Filterwirkung besteht auch (ca. 40dB @ 10kHz)


@Michael
Was spricht dagegen etwas genauer sein zu wollen? Noch habe ich ja 
keinen aktiven Filter 4.Ordnung "zusammengemurkst". Aber das überlege 
ich mir noch :) So groß wäre der Aufwand scheinbar nicht.
Je genauer ich bei den einzelnen Komponenten versuche zu sein, desto 
besser das Endergebnis. Auch wenn das nur geringfügig sein sollte, wäre 
es den Aufwand meiner nach wert. Besonders die dabei gesammelte 
Erfahrung. Toleranzen und Abweichungen auf dem Weg wird es ja noch zu 
genüge geben.

Weißt Du, ursprünglich wollte ich so supergenau und Störungsfrei meinen 
Nulldurchgang haben, weil der Interrupt via Trigger im STM die PWM 
zurücksetzen sollte - davon bin ich aber abgekommen, weil das zu 
unkontrollierbar wäre. Dennoch will ich weiterhin genau sein :)

Ehrlich gesagt, werde ich für die ersten Versuche beide Ansätze 
(Messung, Nulldurchgang) ausprobieren, um Erfahrung zu sammeln und beide 
Ansätze gegeneinander zu stellen.
Je genauer ich den Nulldurchgang erfasse, wenn die PWM auf das Netz 
synchron ist, genau ein dreifaches Vielfaches an PWM-Perioden in den 
Sinus passt - kenne ich die Sektorübergänge genauer und kann 
Stromverzerrungen reduzieren. Zudem kann ich konkretere Vorhersagen und 
Kontrollroutinen im Code implementieren. Oder nicht?

Das "Rumgefriggel" mache ich ja Eingangs, damit am Ende etwas besseres 
als das Gefriggel rauskommt und kein "Murks". Was damit bei ordentlich 
Wumms geschieht, weiß ich eben noch nicht und versuche deshalb umso 
gewissenhafter zu sein ;) Weißt Du es? Ein Baby muss doch erstmal 
rumbrabbeln, bevor es anfängt "richtig" zu sprechen.

> Du versuchts da Genauigkeiten an Stellen reinzubekommen die völlig
> irrelevat sind
Das macht mir aber Freude! Und lernen kann ich dabei zudem etwas. Und 
"völlig irrelevant" finde ich mittlerweile nicht ganz adäquat.

> Im ersten Schritt würde ich aber alles weglassen was nicht auf
> direktem Weg zum Ziel führt.
Der Weg ist ja das Ziel


@temp
Hehe :) Ihr seid ja hardcore-digital ;)
Die Messung wird auf jeden Fall mit einfließen. Ob zur Regelung, oder 
eben nur für die Anzeige oder anderweitige Ausgabe. Mit einem EPROM 
könnte ich später auch begrenzt Langzeitaufzeichnungen vornehmen (hat 
der STM32f429 nicht...oder?). Auf der ersten (nicht-lochraster) Platine 
wird evtl ein anderer Typ zum Einsatz kommen. Ich liebäugel ja für die 
Zukunft immer noch mit einem C2000.

Evtl kann ich sogar mehrfach in der Update-INT Routine der PWM messen 
und mitteln, bevor der neue PWM-Wert berechnet wird(?). Im Augenblick 
finde ich die Ausreißer in der Messung nämlich ziemlich übel.
Wie könnte ich Ausreißer in der Messung denn noch "ausbügeln?
Die Zwischenkreisspannung und den Ausgangsstrom würde ich gerne mit 
externen parallelen ADCs messen, falls die PFC über Messung der 
Strangspannungen geregelt wird.

: Bearbeitet durch User
von temp (Gast)


Lesenswert?

Wenn du den PWM-Takt exakt auf ein gerades Vielfaches der Netzfrequenz 
syncronisieren willst, solltest du dir über ein paar Randbedingungen im 
klaren sein.
1. Welche Auflösung soll die PWM haben. Angenommen 10Bit bei 20kHz. Das 
bedeutet ca. 20MHz Eingangstakt der PWM. Jetzt musst du entscheiden an 
welcher Schraube du drehen willst um die Niederfrequenz zu ändern. Den 
Eingangstakt von 20MHz wirst du mit den gängigen Controllern nicht so 
erzeugen können dass er fein genug verstimmbar wäre. Um da 1% jitterfrei 
ausregeln zu können brauchst du schon 2GHz! Bleibt also nur die Länge 
der PWM-Zyklen z.B. im Bereich von 900 - 1100 zu verstellen. Damit ist 
aber dein Ansatz mit festem Raster und Tabellen zu arbeiten nicht mehr 
haltbar. Ausser mit einem DDS Ansatz, der bringt dann aber Jitter mit 
sich. Die Auswahl deines Controllers wird sich auch danach richten was 
du hier wie willst.
2. Den Stm32F429 ö.ä. halte ich hier für alles was mit Wandlern zu tun 
hat nicht für die beste Wahl. Für sowas gibst die Stm32F3xx Serie mit 
HighResolution-Timer. Die sind speziell für sowas gemacht.

Christof K. schrieb:
> Mit einem EPROM
> könnte ich später auch begrenzt Langzeitaufzeichnungen vornehmen (hat
> der STM32f429 nicht...oder?).
Da kann ich dir nur raten den Ansatz von industriellen 
Photovoltaik-Wandlern zu benutzen. Die haben für die DC-Seite und die 
AC-Seite häufig separate Controller und für den ganzen Rest wie Menü, 
Logging, Kommunikation u.s.w noch einen. Der f429 ist was für die 
Kommunikation aber nicht für die Wandler. Die Wandler sollten 
überschaubaren Code haben und nichts anderes machen. Maximal mit einem 
Master und einem simplen Protokoll kommunizieren um Registerinhalte für 
die Parameter auszutauschen. Vor allem weil bei der Entwicklung von Code 
für den Wandler das Debuggen im Betrieb nicht möglich ist. Außer man 
steht gern im Nebel. Der Code für Menu und Schnittstellen nach draußen 
ist in der Regel viel aufgeblähter und komplexer, da ist es sehr von 
Vorteil wenn es nicht raucht weil irgendwas im Ethernet-Stack klemmt.

Dein ganzes Mühen nach extremer Genauigkeit wird nichts nützen. 
Jedenfalls nicht wenn du das am Netz betreiben willst. Bei 20khz hast du 
ein 50µs Raster. Das sind Lichtjahre in einem Stromnetz. 
Einspeisewechselrichter müssen auch noch einen Phasenverschiebung von 
ca.5% reinbringen. Glaubst du da macht sich einer wegen 50µs Gedanken? 
Das wichtige ist, dass dir das Ding nicht abraucht. Auch nicht bei einem 
Phasensprung von 90 oder 180Grad. Da hilft sowieso nur die 
Überstromschnellabschaltung.

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.