EMI im Griff: PWM Spreizspektrum mit einem Fibonacci LFSR
Scharfe Spektrallinie über der EMV Grenze. Kein Platz für zusätzliche Drosseln. Lösung: ein Fibonacci LFSR im CPLD und ein einziges Register.
Die Ausgangslage
Ein klassisches Relais zieht bei rund 12 V an und hält bei rund 5 V. Statt zwei Spannungen aufzubauen, schaltet man die Haltespannung über die volle Versorgung mit einer PWM, die Spuleninduktivität glättet den Rest. Wir liegen bei 16,25 kHz: oberhalb der Hörschwelle, langsam genug für die Freilaufdiode, und ein glatter Teiler des 4,16 MHz internen Oszillators im Lattice® MachXO2® CPLD (4,16 MHz / 256 = 16,25 kHz).
In der Praxis sind es nicht ein Relais, sondern sechzehn Kanäle. Aber zur Erklärung genügt einer. Was wir auf der EMV Messung sehen, ist eine scharfe Linie bei 16,25 kHz und die ungeraden Oberwellen: 49, 81, 113, 146, 178 kHz und so weiter. Das geregelte Band für leitungsgebundene Störungen beginnt bei 150 kHz, und die 146 und 178 kHz Linien laufen genau hinein. Eine schmale Spitze ist viel schwerer zu bestehen als dieselbe Energie verteilt über 1 kHz Bandbreite.
Also wird die PWM gespreizt.
Fibonacci, im CPLD
Die Idee: in jeder PWM Periode die Duty Cycle um einen kleinen Zufallswert variieren. Die Grundfrequenz sitzt nicht mehr auf einem einzelnen Spektrumsbin, sondern wandert über einen schmalen Bereich. Spitzenwert sinkt, Energie bleibt.
Als Zufallsquelle nimmt man kein echtes Rauschen, das wäre überdimensioniert. Es genügt eine deterministisch wirkende Pseudozufallsfolge, die alle Werte in einem Bereich gleichmässig durchläuft. Das klassische Mittel der Wahl ist das Linear Feedback Shift Register in der Fibonacci Form.
Der Name kommt von der Struktur. Ein Fibonacci LFSR berechnet jedes neue Bit als XOR Verknüpfung mehrerer ausgewählter alter Bits aus dem Schieberegister, schiebt den gesamten Inhalt um eine Stelle und legt das frische Bit an den Eingang. Genau wie Leonardo von Pisas berühmte Zahlenfolge wird der nächste Wert aus den vorhergehenden gebildet, nur dass die Addition durch ein XOR und die Stellenwahl durch ein Polynom ersetzt sind.
Die Mathematik dahinter ist die Theorie der endlichen Körper. Ein n Bit Register entspricht einem Polynom über . Wählt man die Rückkopplungsabgriffe so, dass das zugehörige Polynom primitiv ist, durchläuft das LFSR sämtliche Zustände ungleich null genau einmal, bevor es sich wiederholt. Man nennt diese Folge eine maximum length sequence oder kurz m-sequence. Sie hat schöne Eigenschaften: gleichverteilte Bits, breites flaches Spektrum, eine Autokorrelation, die fast eine Diracfunktion ist.
Für 8 Bit ist x^8 + x^6 + x^5 + x^4 + 1 ein primitives Polynom. Das ergibt die Taps {7, 5, 4, 3} und eine Periode von 255. Genau das, was die Spreizung braucht.
Das Verilog, kommentiert
localparam [7:0] PWM_DUTY = 8'h66; // 40 % Haltestrom (102/256)
reg [7:0] pwm_cnt; // frei laufend 0..255, wrappt bei 16,25 kHz
reg [7:0] lfsr; // 8 Bit Fibonacci LFSR, 255 Zustände
reg [7:0] duty_latched; // gedithertes Duty, eine Periode stabil
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
pwm_cnt <= 8'h00;
lfsr <= 8'h01;
duty_latched <= PWM_DUTY;
end else begin
pwm_cnt <= pwm_cnt + 8'd1;
// Fibonacci LFSR, Taps {7,5,4,3}, voller 255-Zyklus
lfsr <= {lfsr[6:0], lfsr[7] ^ lfsr[5] ^ lfsr[4] ^ lfsr[3]};
if (lfsr == 8'h00) lfsr <= 8'h01; // Zero-Lock Guard
// Neues Duty einmal pro PWM Periode samplen
if (pwm_cnt == 8'h00)
duty_latched <= PWM_DUTY + {4'h0, lfsr[3:0]};
end
end
assign pwm_active = (pwm_cnt < duty_latched);
Verwendet werden nur die unteren vier Bit des LFSR. Das gibt 16 Duty Werte: 0x66 (40,0 %) bis 0x75 (45,7 %). Die effektive Grundfrequenz wandert pro PWM Periode über rund 750 Hz.
Der Zero Lock Guard ist eine Vorsichtsmassnahme. Aus einem Zustand ungleich null kann das LFSR den All Zero Zustand mathematisch nicht erreichen. Beim Power On könnte aber ein gestörter Startzustand auftauchen, der Guard kostet einen Komparator und garantiert, dass das LFSR nie auf der All Zero Linie hängen bleibt.
Eine Falle: das Latch
Wichtig ist duty_latched. Das LFSR taktet mit dem Systemtakt, nicht mit der PWM Periode. Würde der Komparator direkt gegen die rohe LFSR Ausgabe vergleichen, wackelte die Schwelle innerhalb einer PWM Periode 256 mal hin und her. Genau dort wo die Abfallflanke sein sollte, würde der Ausgang flackern.
Mit dem Latch ist die Schwelle innerhalb der Periode konstant, die Flanke ist sauber, und der nächste Periodenstart bekommt einen neuen Wert. Das Muster taugt allgemein: wenn eine langsam veränderliche Stellgrösse von einer schnellen Quelle gespeist wird, latcht man sie an der Grenze, an der der Konsument wrappt.
Reicht 750 Hz Spreizung?
Die Auflösungsbandbreiten (RBW) bei der Prüfung leitungsgebundener Störungen sind in CISPR 16-1-1 festgelegt:
| Band | Frequenzbereich | RBW |
|---|---|---|
| A | 9 kHz bis 150 kHz | 200 Hz |
| B | 150 kHz bis 30 MHz | 9 kHz |
Eine Spreizung wirkt nur dann, wenn sie deutlich breiter als die RBW ist, denn sonst landet die ganze gespreizte Energie wieder in einem einzigen Auflösungsbin und der Peak Detektor sieht keinen Unterschied.
Hier hilft, dass sich die Spreizung mit dem Harmonischen Index linear mitskaliert. Wenn die Grundwelle um 750 Hz wandert, wandert die N-te Harmonische um N × 750 Hz:
| Frequenz | Band | RBW | Spreizung | wirksam? |
|---|---|---|---|---|
| 16,25 kHz (Grundwelle) | A | 200 Hz | 750 Hz | klar wirksam |
| 178 kHz (11. Harmonische) | B | 9 kHz | 8,3 kHz | grenzwertig |
| 1 MHz | B | 9 kHz | 46 kHz | deutlich wirksam |
| 10 MHz | B | 9 kHz | 460 kHz | weit überdimensioniert |
Bei der typischen EMV Problemzone (oberhalb 1 MHz) ist die Massnahme also genau dort am wirksamsten, wo der Peak hoch ist. An der unteren Bandgrenze rund um 178 kHz ist sie nur knapp wirksam. Wer dort mehr Marge braucht, verwendet mehr LFSR Bits (z.B. 6 statt 4 für 64 Werte und rund 3 kHz Grundspreizung), zum Preis eines grösseren Ripples auf der Spule.
Was der Spektrumanalysator sieht
Vorher: scharfe 16,25 kHz Linie, ungerade Oberwellen bei 49, 81, 113, 146, 178 kHz und so weiter, jeweils als schmale Spitze. Ab 150 kHz greift die Messung, die 178 kHz Linie und alle höheren liegen im geregelten Bereich.
Nachher: die Grundwelle ist innerhalb der 200 Hz RBW von Band A sauber verschmiert. Im Band B oberhalb 150 kHz wird die Spreizung mit jeder Harmonischen wirksamer. Bei den hohen Harmonischen, wo die Peaks erfahrungsgemäss am ehesten anschlagen, ist die Verschmierung breit gegenüber der 9 kHz RBW und der Peak Detektor sieht eine deutlich kleinere Spitze. Die ans Relais abgegebene Energie ist identisch.
Aus “knapp” wird “komfortabel”, die Stückliste bleibt unangetastet: keine zusätzliche Drossel, kein zusätzlicher Kondensator, kein separater Taktgenerator.
Was zehn Flipflops gebracht haben
| Ressource | Anzahl | Zweck |
|---|---|---|
pwm_cnt | 8 FF | Frei laufender PWM Zähler, 256 Ticks Periode |
lfsr | 8 FF | 8 Bit Fibonacci LFSR |
duty_latched | 8 FF | Periodenstabiles gedithertes Duty |
| LFSR Taps | 4 Eingänge, 1 XOR | Die eigentliche Rückkopplung |
24 Flipflops, die quer über alle Kanäle geteilt werden. Pro Kanal kommt nur das registrierte Ausgangs-FF dazu. Im MachXO2-640HC sind 640 LUT4 und entsprechend viele FF, der ganze PWM Block belegt unter 5 % des Bausteins.
Die Rechnung hinter der Spreizung:
- Grundfrequenz:
4,16 MHz / 256 = 16,250 kHz - LFSR Periode: 255 Takte, durchläuft den Duty Bereich alle 15,7 ms (langsamer als typische EMV Sweeps, der Analysator integriert über viele volle LFSR Zyklen)
- Duty Bereich:
0x66..0x75= 102..117 / 256 = 39,84 %..45,70 % - Beobachtete Verbreiterung: jeder Duty Wert hat eine leicht andere Grundfrequenz, die Linie wird auf rund 750 Hz um 16,25 kHz verschmiert
Das ist die ganze Geschichte. Ein 8 Bit Fibonacci LFSR, ein Komparator, ein Latch. EMV besteht.
Quellen
- Lattice MachXO2 Family Data Sheet
- Wikipedia: Linear Feedback Shift Register
- Solomon W. Golomb, Shift Register Sequences, Aegean Park Press
- CISPR 11 / EN 55011, Grenzwerte für leitungsgebundene Störaussendungen
Schlüsselwörter: PWM Spreizspektrum, Fibonacci LFSR, MachXO2 CPLD, EMV Filter sparen, CISPR 16, Verilog LFSR, leitungsgebundene Störaussendungen, EMV Optimierung Beratung, Lattice CPLD Design, EMI Reduktion, Elektronikentwicklung Schweiz, swissEmbedded FPGA Zürich
EMV Messung knapp daneben und die Stückliste lässt keine zusätzlichen Filter mehr zu? Wir schauen uns Schaltung, Layout und FPGA Code gemeinsam an und finden die billigen Hebel, die im Silizium schon vorhanden sind.