Ich bin mir bezüglich der Erzeugung einer PWM nicht ganz sicher, wie ich vorgehen soll. Ich habe eine einfache Zählerschaltung, die den vorgegebenen Wert abzählt und den Ausgang entsprechend lange auf 1 hält, bis der Wert erreicht ist, was z.B. für den 75% Wert zu diesem Signalprinzip führt: 11111111111111111111111100000000 Ich hätte, wegen der Grenzfrequenz aber lieber sowas hier: 11101110111011101110111011101110 Wie macht man das am Einfachsten? (Ich muss Werte von 0 bis 65535 kHz ausgeben und habe die volle FPGA-Frequenz)
Für eine simple PWM sind prinzipiell zwei Werte relevant. Zählperiode und Umschaltzeitpunkt. In deinem Fall brauchst du nur eine Zählperiode von 4 Cycles einstellen, also sobald der Counter den Wert 3 erreicht hat wieder auf 0 zurücksetzen. Dann bei einem Zählerstand von 2 den Ausgang clearen und bei einem Zählerstand von 0 den Ausgang setzen. Wenn man immer sauber sequentielle und kombinatorische Logik trennt, kann man das sehr einfach und kompakt niederschreiben.
BB schrieb: > 11101110111011101110111011101110 > > Wie macht man das am Einfachsten? Das was Du willst ist keine PWM sondern ein fractional divider. Duke
@ BB (Gast) >bis der Wert erreicht ist, was z.B. für den 75% Wert zu diesem >Signalprinzip führt: >11111111111111111111111100000000 Das ist PWM, PulsWEITENmodulation. Hat den bekannten Nachteil, dass man recht niederfrequent filtern muss. >Ich hätte, wegen der Grenzfrequenz aber lieber sowas hier: >11101110111011101110111011101110 >Wie macht man das am Einfachsten? Das ist PulsDICHTEmodulation. Kann man einfach erzeugen, indem man bei der PWM-Schaltung die Datenleitungen kreuzt, siehe Anhang. >(Ich muss Werte von 0 bis 65535 kHz ausgeben Eher nicht. Du willst vielleicht eine 16 Bit PWM/PDM. > und habe die volle FPGA-Frequenz) Die da wäre? MfG Falk
>Die da wäre?
Nun, so 100 MHz etwa würde ich sagen.
Das mit den "Datenleitungen kreuzen" muss ich mir genauer ansehen.
Danke für die links!
> 11101110111011101110111011101110
Dir ist schon klar, daß du damit nur folgende Einstellmöglichkeiten zur
Verfügung stehen :
a) 1111111111111111 100%
b) 1110111011101110 75%
c) 1100110011001100 50%
d) 1000100010001000 25%
e) 0000000000000000 0%
Die Auflösung ist gering die Frequenz jedoch hoch
Wenn du jedoch 65536 unterschiedliche Einstellmöglichkeiten brauchst
also sozusagen 65536 Einsen oder Nullen (und jede Abstufung dazwischen
bzw. 1/65536) dann wäre die mögliche Frequenz ca. 65536/4=16384
geringer.
Was du brauchst und wieso kannst nur du wissen.
Uwe schrieb: > Dir ist schon klar, daß du damit nur folgende Einstellmöglichkeiten zur > Verfügung stehen : ... Zutreffendes bitte ankreuzen: [ ] Ich habe die PDFs nicht gesehen [ ] Ich habe die PDFs nicht angesehen [ ] Ich habe den Inhalt der PDFs nicht verstanden [ ] Mir ist die eigentliche Frage unklar
Lothar Miller schrieb: > [x] Ich habe die PDFs nicht gesehen Aber warum sollte man dafür nicht einen gewöhnlichen Counter verwenden, dessen Periode man setzen kann und zusätzlich noch ein zweites Register, welches den Umschaltzeitpunkt bestimmt?
> nur 4 Einstellungen Selbverständlich kann man jede Einstellung verwenden, weil die Schaltung sich ja auf den Sollwert einstellt. Die Einstellmöglichkeiten sind aber weniger das Problem dieser Lösung. Sie macht ja im Grunde nichts anderes, als das voreingestellte Signal zu verrauschen, wie es dem Prinzip nach auch beim Dithern vorgenommen wird, bevor man es in einen digitalisieren Wert überführt. @OT: Sieh Dir mal meinen Artikel zum Dithern an, was das bewirkt. In der vorgestellten Lösung in den PDFs ist es dabei so, dass man eine einfache Schaltung benutzt hat und in der Tat wird durch das "Bitverwursteln" alles mögliche abgetastet und jeder mögliche Zustand des Signals erfasst. Solange sich das Signal nicht ändert, kann damit exakt der Mittelwert rekonstruiert werden. Das Rauschen, dass durch das Bitdrehen entsteht, ist aber keineswegs optimal und kann mit etwas mehr Aufwand deutlich verbessert werden. Die Sache läuft dann auf das sogenannte noise shaping hinaus, dass man pauschal einstellen oder anhand des Spektrums des Nutzsignals optimieren kann. Das ist aber eine weitergehende Sache, die etwas Einarbeitung erfordert. Wenn es nur eine vernüftige PWM sein soll, kann man so vorgehen: Statt der Bitdrehung empfiehlt sich gfs der Blick auf einen Sigma-Delta-ADC als DAC. Dabei wird der Verlauf des Signals infolge des erzeugten PWM-Rechtecks erraten (durch Aufintegrieren gemessen) und der Bitwert so gesteuert, dass er um das theoretische Integral, also den sich ändernden Voreinstellungswert, herumregelt. Dies funktioniert schon sehr gut und übertrifft die obige Lösung in etwa um 3-6dB ripple-Dämpfung. Man nimmt dann einfach einen Zähler, der die Differenz zwischen Ist- und Solwert aufaddiert und steuert das höchstwertige Bit als Vergleichswert an den Eingangswert heran. Das ist dynamischer, als das einfache hin- und herzählen, das man oft sieht. Noch besser ist es, wenn man nicht linear integriert, sondern das Verhalten des dämpfenden RC-Gliedes = Filters inklusive dessen Verlusten mitrechnet und die Steuerung des PWM-artigen 1-Bit-Signals da herum aufbaut. Mit einer entsprechenden Regelfrequenz und einem guten Modell kann man den ripple nach meinen Erkenntnissen nochmals um Faktor 1.5 ... 2.5 reduzieren. Das ist aber nicht so ganz trivial und erfordert etwas Algorithmik und auch Rechenleistung. Im FPGA lohnt sich das eigentlich nur dann, wenn man eine ganze Bank an PWM-artigen-Signalen erzeugen und steuern muss. Ich verwende eine solche Mimik in einer Motorsteuerapplikation, die einen Schrittmotor so weich und präzise ansteuern kann, dass dieser mit minimalen Verlusten fast lautlos fährt und dennoch hohes Reservemoment gegen drohende Schrittverluste aufweist.
J. S. schrieb: > Noch besser ist es, wenn man nicht linear integriert, sondern das > Verhalten des dämpfenden RC-Gliedes = Filters Das Rekonstruktionsfilter noch mit ins Bott zu nehmen, wäre mir ehrlich gesagt, zu aufwändig, aber das mit dem Sigma-Delta klingt gut. J. S. schrieb: > Man nimmt dann einfach einen Zähler, der die Differenz > zwischen Ist- und Solwert aufaddiert und steuert das höchstwertige Bit > als Vergleichswert an den Eingangswert heran. D.h. der Zähler zählt nicht konstant, sondern mit der Differenz? Ich nehme an, "IST-Wert" ist der Zählerstand und "SOLL-Wert" der PWM-Wert, der erzeugt werden soll? Was ist dann mein Ausgang?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.