PWM-Projekt mit Arduino & LC-Tiefpassfilter

Zielstellung

Dieses Projekt demonstriert, wie man mithilfe eines Arduino Uno ein PWM-Signal erzeugt und anschließend mittels eines zweistufigen LC-Tiefpassfilters in ein nahezu sinusförmiges, geglättetes Signal umwandelt.

Der Hauptzweck besteht darin, das digitale PWM-Signal so zu transformieren, dass ein analog wirkender, niederfrequenter Sinus am Ausgang entsteht. Diese Technik ist insbesondere für Audioanwendungen und analoge Steuerungen von großem Interesse.

Erzeugung einer Sinuswelle mittels PWM

Der folgende Arduino-Code generiert eine Sinuswelle über einen PWM-Ausgang. Das zugrundeliegende Prinzip basiert auf der diskreten Abtastung der Sinusfunktion. Mathematisch lässt sich eine Sinuswelle durch die Funktion \(V(t)\) beschreiben: \[ V(t) = A \cdot \sin(2\pi f t) + O \]

  • \(A\) die Amplitude (hier amplitude = 127)
  • \(f\) die Frequenz der Sinuswelle (definiert als frequency = 1.0)
  • \(O\) der Offset zum Zentrieren der Welle (hier offset = 127)

Für jeden Abtastpunkt wird der PWM-Wert berechnet, um die Sinusform digital nachzubilden, und über den PWM-Pin ausgegeben.

Arduino Uno Setup

Für dieses Projekt wird ein Arduino Uno verwendet. Der Arduino wird über USB an den PC angeschlossen und der Code über die Arduino-IDE hochgeladen. Pin 9 dient als Ausgang für das PWM-Signal.

Arduino Uno Board

Abbildung 1: Arduino Uno Board

PWM-Code

Klicke hier, um den Arduino-Sketch anzuzeigen

const int pwmPin = 9;
const float frequency = 1.0;
const int sampleRate = 1000;
const int amplitude = 127;
const int offset = 127;

void setup() {
  pinMode(pwmPin, OUTPUT);
}

void loop() {
  float period = 1000.0 / frequency;
  int steps = period * sampleRate / 1000;

  for (int i = 0; i < steps; i++) {
    float angle = 2 * PI * i / steps;
    int pwmValue = int(amplitude * sin(angle) + offset);
    analogWrite(pwmPin, pwmValue);
    delayMicroseconds(period * 1000 / steps);
  }
}
                    

PWM-Signal am Oszilloskop

Das Oszilloskop zeigt ein periodisches Rechtecksignal. Die Breite der HIGH-Phase (der Duty Cycle \(D\)) ändert sich ständig, um die Sinusamplitude nachzubilden. Die hohe Frequenz des PWM-Signals selbst ist als schnelles Schalten sichtbar.

Oszilloskop-Bild des PWM-Signals

Abbildung 2: PWM-Signal mit variablem Duty Cycle

Die Tiefpass-Schaltung

Um aus dem digitalen Rechtecksignal eine analoge Spannung zu erzeugen, wird ein Tiefpassfilter eingesetzt. Er entfernt die hochfrequenten Anteile und lässt nur den niederfrequenten Mittelwert passieren. Die Grenzfrequenz \(f_c\) wird durch die Bauteile L und C bestimmt: \[ f_c = \frac{1}{2 \pi \sqrt{L C}} \]

Schaltbild der Tiefpass-Schaltung

Abbildung 3: Zweistufiges LC-Tiefpass-Filter

Gefiltertes Ausgangssignal

Nachdem das PWM-Signal den zweistufigen LC-Filter durchlaufen hat, sind die hochfrequenten Anteile stark gedämpft. Das Ergebnis ist eine geglättete, nahezu perfekte Sinuswelle, die dem gewünschten analogen Signal entspricht.

Oszilloskop-Bild des gefilterten Signals

Abbildung 4: Geglättetes Sinussignal nach der Filterung

Fazit

Das Projekt zeigt erfolgreich, wie mit einfachen Mitteln (einem Mikrocontroller und einem passiven Filter) eine digitale zu analoge Wandlung realisiert werden kann. Es demonstriert ein Kernprinzip der Signalverarbeitung und ist die Grundlage für viele praktische Anwendungen.