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.
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.
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}} \]
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.
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.