Deltamodulation ist eine Technik, die in digitalen Kommunikationssystemen verwendet wird, um analoge Signale in digitale Signale mit minimaler Komplexität umzuwandeln. Indem nur der Unterschied zwischen aufeinanderfolgenden Abtastwerten anstelle des absoluten Signalwerts codiert wird, erreicht ein Deltamodulator einen geringen Stromverbrauch und einfache Hardware, während wichtige Signalinformationen erhalten bleiben. Der Bau eines Deltamodulators unter Verwendung eines Arduino und grundlegender elektronischer Komponenten ist ein ausgezeichnetes Projekt für Elektronikenthusiasten und Studenten, die sich mit Signalverarbeitung und Analog-Digital-Wandlung befassen. Dieses Tutorial bietet eine gründliche, schrittweise Anleitung zum Entwerfen, Zusammenbauen und Testen eines solchen Systems.

Delta-Modulation verstehen

Deltamodulation (DM) ist eine Form der differentiellen Pulscodemodulation, die ein analoges Signal annähert, indem sie seine Änderungen statt seiner absoluten Amplitude verfolgt. Das System vergleicht die aktuelle Eingangsabtastung mit der vorherigen Ausgangsschätzung. Ist der Eingang größer, gibt der Modulator eine 1 aus; wenn kleiner, eine 0. Dieser ein Bit-Digitalstrom steuert einen Integrator an, der das geschätzte Signal rekonstruiert, das an den Komparator zurückgekoppelt wird. Der Prozess erfordert nur einen Komparator, einen Integrator (oft mit einem Operationsverstärker und einem Kondensator gebaut) und ein Verfahren zur Erzeugung des rekonstruierten Signals - typischerweise ein Digital-Analog-Wandler (DAC) oder ein Pulsweitenmodulationssignal (PWM), das gefiltert wird, um eine analoge Spannung zu erzeugen.

Zwei wichtige Leistungskennzahlen dominieren das Deltamodulationsdesign: Steigungsüberlastung und granulares Rauschen. Steigungsüberlastung tritt auf, wenn sich das Eingangssignal schneller ändert, als der Integrator folgen kann, wodurch das rekonstruierte Signal zurückbleibt. Granulares Rauschen, auch Leerlaufkanalrauschen genannt, entsteht, wenn sich das Eingangssignal sehr langsam ändert oder konstant bleibt, wobei abwechselnd 1 und 0 Bits erzeugt werden, die kleine Dreiecksschwingungen um den wahren Wert erzeugen. Beide Effekte können durch Anpassung der Schrittweite oder durch adaptive Deltamodulation minimiert werden, wobei sich die Schrittweite entsprechend der Steigung des Eingangssignals ändert.

Komponenten und Werkzeuge

Der Bau eines funktionalen Deltamodulators erfordert eine Auswahl von allgemein verfügbaren elektronischen Komponenten und Prüfgeräten.

  • Arduino Uno oder kompatibler Mikrocontroller – Bietet digitales I/O, PWM-Ausgang und USB-Serien zum Debuggen.
  • Operationalverstärker (Op-Ampere) — Wird als Integrator verwendet.
  • Vergleicher oder Schmitt-Trigger – Konvertiert die analoge Differenz in ein sauberes digitales Signal. Ein LM393 oder eingebauter Arduino-Komparator (falls vorhanden) funktioniert.
  • Widerstände — Verschiedene Werte (z. B. 10 kΩ, 100 kΩ, 1 kΩ) für Biasing, Feedback und Eingabeskalierung.
  • Kondensatoren — Typischerweise 0,1 μF bis 10 μF für Integrator-Timing und Entkopplung der Stromversorgung.
  • Digital-Analog-Wandler (DAC) oder PWM mit Tiefpassfilter — Um die rekonstruierte analoge Spannung aus dem digitalen Bitstrom zu erzeugen. Ein einfaches RC-Filter auf einem Arduino PWM-Pin genügt für viele Anwendungen.
  • Breadboard und Verbindungsdrähte — Für das Prototyping der Schaltung.
  • Oszilloskop oder Logikanalysator — Zum Visualisieren von Signalen während des Testens.
  • Signalgenerator — Um Testeingangssignale wie Sinuswellen oder Audiotöne bereitzustellen.

Schaltungsanordnung

Vergleichsstufe

Der Komparator vergleicht das Eingangssignal mit dem rekonstruierten Ausgang (Rückkopplung), verbindet das analoge Eingangssignal mit dem nichtinvertierenden Eingang (+) des Komparators, der den Ausgang des Integrators erhält, der die aktuelle Schätzung des Signals darstellt. Wenn der Eingang die Schätzung überschreitet, geht der Komparatorausgang hoch (log. 1); andernfalls geht er niedrig (log. 0). Wenn ein Op-Ampere als Komparator verwendet wird, stellen Sie sicher, dass er mit Open-Loop-Verstärkung oder milder positiver Rückkopplung konfiguriert ist, um Übergänge zu beschleunigen. Für eine sauberere Schaltung verwenden Sie einen dedizierten Komparator-IC wie den LM339 oder LM393, der Open-Kollektor-Ausgänge enthält, die mit Arduino-Logikpegeln kompatibel sind.

Integrator (Rekonstruktionsfilter)

Der Integrator wandelt das digitale Steuersignal (1 oder 0) in eine analoge Spannung um, die den Eingang verfolgt. Ein klassischer invertierender Integrator, der um einen Operationsverstärker herum aufgebaut ist, funktioniert gut. Verbinden Sie einen Widerstand R von der digitalen Steuerleitung (z. B. Arduino-Ausgangspin oder DAC-Ausgang) mit dem invertierenden Eingang des Operationsverstärkers. Platzieren Sie einen Kondensator C zwischen dem Operationsverstärkerausgang und seinem invertierenden Eingang. Der nicht invertierende Eingang des Operationsverstärkers verbindet sich mit Masse (oder einer Referenzspannung, wenn ein bipolares Signal erforderlich ist). Die Übertragungsfunktion ist \(V {\text{out}} = -\frac{1}{RC} \int V {\text{in}} \, dt \). Der Rückkopplungswiderstand R und der Kondensator C bestimmen die Schrittweite und die Nachführgeschwindigkeit. Typische Werte: R = 10 kΩ, C = 0,1 μF bis 1 μF. Der Integratorausgang muss so skaliert werden, dass er dem Eingangsspannungsbereich entspricht. Für unipolare

Digital-zu-Analog-Konvertierung: PWM-Methode

Anstatt einen dedizierten DAC-Chip zu verwenden, erzeugen viele Arduino-basierte Delta-Modulatoren das rekonstruierte Signal mit Pulsweitenmodulation (PWM), gefolgt von einem analogen Tiefpassfilter. Die Funktion von Arduino erzeugt eine Rechteckwelle mit etwa 490 Hz (Standard) oder 980 Hz (auf bestimmten Pins). Der Duty-Cycle entspricht der gewünschten analogen Spannung (0 bis 5 V). Ein Tiefpass zweiter Ordnung mit einer Grenzfrequenz deutlich unterhalb der PWM-Frequenz (z. B. 100 Hz für Audio) entfernt die Schaltrippel. Verwenden Sie einen passiven RC oder einen aktiven Sallen-Key-Filter. Verwenden Sie für eine höhere Leistung den Arduino-Timer1, um einen viel schnelleren PWM zu erzeugen (bis zu 31 kHz oder mehr), der die Filteranforderungen erleichtert und die Tracking-Bandbreite verbessert.

Feedback Loop und Clocking

Der Delta-Modulator arbeitet synchron: Bei jedem Taktwechsel wird der Komparatorausgang durch den Arduino-Interrupt oder einen Timer gelockert. Das digitale Steuersignal aktualisiert den Integrator (über PWM oder DAC). Die Taktfrequenz bestimmt die Abtastfrequenz. Für ein Audiosignal von einigen Kilohertz ist eine Uhr von 10-100 kHz typisch. Die internen Timer des Arduino können präzise Interrupts erzeugen. Alternativ kann ein 555-Timer zur Erzeugung einer externen Uhr und ein D-Flip-Flop zur Verriegelung des Komparators verwendet werden. In diesem Artikel übernimmt der Arduino alle Zeitfunktionen und vereinfacht die Hardware.

Bei jedem Abtastzeitpunkt liest der Arduino den Komparatorausgangspin. Wenn das Bit hoch ist, erhöht es den PWM-Tastgrad (oder DAC-Ausgang) um einen festen Schritt; wenn niedrig, nimmt es ab. Die Schrittweite (∆) entspricht der Änderung der Integratorspannung pro Taktzyklus. Bei einem PWM-Bereich von 5 V und einer Auflösung von 8 Bit beträgt jeder Schritt etwa 19,5 mV. Für eine größere Nachverfolgungsmöglichkeit verwenden Sie ein 10-Bit-PWM oder einen externen DAC mit einstellbarer Schrittweite.

Bauen Sie den Circuit

Montage auf einer Brottafel

Beginnen Sie mit dem Anbringen der Operationsverstärker- und Komparator-ICs an der Steckdose, schließen Sie die Stromversorgung an (VCC = 5 V von Arduino, GND), fügen Sie Entkopplungskondensatoren (0,1 μF) in der Nähe der Versorgungspins jedes IC hinzu.

  1. Integrator: Verdrahten Sie den Operationsverstärker als invertierenden Integrator. Verbinden Sie einen 10-kΩ-Widerstand vom Arduino PWM-Ausgangspin (z. B. Pin 9) mit dem invertierenden Eingang. Platzieren Sie einen 0,1 μF-Kondensator zwischen dem Ausgang und dem invertierenden Eingang. Verbinden Sie den nicht-invertierenden Eingang mit einer 2,5 V-Referenz (verwenden Sie einen Spannungsteiler von 5 V: zwei 10 kΩ-Widerstände erzeugen 2,5 V).
  2. Vergleicher: Verbinden Sie das Eingangssignal (von einem Signalgenerator) mit dem nicht-invertierenden Pin des LM393. Verbinden Sie den Integratorausgang mit dem invertierenden Pin. Der LM393-Ausgang (Open-Collektor) benötigt einen Pull-up-Widerstand (z. B. 10 kΩ bis 5 V). Verbinden Sie den Ausgang mit dem Arduino-Digitalpin 2.
  3. Feedback: Der Integratorausgang ist auch mit dem analogen Monitor (Arduino A0) zum Debuggen verbunden. Der Komparatorausgang speist den Interrupt-fähigen Pin des Arduino.
  4. PWM Filter: Vom Arduino PWM Pin (wie der Integratoreingang) wird ein Tiefpassfilter eingefügt: ein 1 kΩ Widerstand in Reihe, gefolgt von einem 10 μF Kondensator gegen Masse. Diese gefilterte PWM Spannung ist das rekonstruierte Signal und kann auf Kanal 2 eines Oszilloskops betrachtet werden.

Power und Signal Überlegungen

Analoge und digitale Masseverbindungen getrennt halten, um zu vermeiden, dass digitales Rauschen in den Integrator eingekoppelt wird. Verwenden Sie kurze Leitungen und platzieren Sie Bypass-Kondensatoren in der Nähe jedes IC. Wenn das Eingangssignal bipolar ist (z. B. ±2 V), verzerren Sie die Komparatoreingänge, so dass das Signal auf 2,5 V bezogen ist. Für ein reines Wechselstromsignal fügen Sie einen DC-Offset von 2,5 V hinzu, indem Sie eine kondensatorgekoppelte Schaltung mit einem Spannungsteiler verwenden.

Programmierung des Arduino

Die Arduino-Skizze implementiert den Delta-Modulationsalgorithmus in Echtzeit. Die Kernschleife liest das Komparatorbit, aktualisiert den Duty-Cycle des PWM-Ausgangs entsprechend und wiederholt sich mit einer festen Abtastrate. Ein Timer-Interrupt sorgt für ein konsistentes Timing, vermeidet Jitter, der die Leistung beeinträchtigt.

Algorithmus Pseudocode

Initialize:
 set PWM pin 9 to output
 set comparator pin 2 as input
 set timer1 to generate interrupt at desired sample rate (e.g., 50 kHz)
 clk = 0

Interrupt Service Routine:
 read comparator pin → bit
 if bit == HIGH:
 duty_cycle = duty_cycle + step_size
 else:
 duty_cycle = duty_cycle - step_size
 clamp duty_cycle between 0 and 255
 analogWrite(9, duty_cycle)

 (Optional) debug: send bit via Serial to plotter

Beispiel Code Snippet

Unten ist eine minimale Arduino-Skizze mit Timer1 für eine genaue Abtastung zu sehen, die bei etwa 50 kHz läuft und sich zur Verfolgung moderater Audiosignale eignet.

// Delta Modulator using Arduino Uno
// Uses Timer1 to sample comparator at 50 kHz

const int compPin = 2; // comparator output
const int pwmPin = 9; // PWM output to integrator
const int stepSize = 10; // adjust for tracking speed

volatile int duty = 128; // initial midpoint

void setup() {
 pinMode(compPin, INPUT);
 pinMode(pwmPin, OUTPUT);

 // Setup Timer1 for 50 kHz interrupts
 TCCR1A = 0; // normal mode
 TCCR1B = 0;
 TCNT1 = 0;
 OCR1A = 319; // (16 MHz / (prescaler * desired frequency)) - 1
 // for 50 kHz: 16e6/(1*50e3)-1 = 319
 TCCR1B |= (1 << WGM12); // CTC mode
 TCCR1B |= (1 << CS10); // prescaler = 1
 TIMSK1 |= (1 << OCIE1A); // enable interrupt
}

ISR(TIMER1_COMPA_vect) {
 int bit = digitalRead(compPin); // read comparator
 if (bit == HIGH) {
 duty += stepSize;
 if (duty > 255) duty = 255;
 } else {
 duty -= stepSize;
 if (duty < 0) duty = 0;
 }
 analogWrite(pwmPin, duty);
}

void loop() {
 // nothing to do here – all work in ISR
}

Ein größerer Schritt erhöht die Tracking-Geschwindigkeit, aber auch das granulare Rauschen. Kompromiss ist notwendig. Beginnen Sie mit stepSize = 5 und Sample-Rate von 10 kHz, dann erhöhen Sie beide.

Prüfung und Kalibrierung

Visualisierung von Signalen

Verbinden Sie eine Oszilloskopsonde mit dem Eingangssignal und dem Integratorausgang (gefilterte PWM) Eine 1 kHz Sinuswelle von 2 V Peak-to-Peak mit einem 2,5 V DC-Offset, so dass das Signal im Bereich von 0-5 V bleibt. Beobachten Sie die Nachführung: Der Integratorausgang sollte sich der Sinuswelle mit einem Treppenmuster von gleichen Schritten annähern. Der Komparatorausgang erscheint als Logiksignal; wenn der Eingang ansteigt, ist der Komparator meist hoch, was positive Schritte verursacht. Wenn der Eingang fällt, ist der Komparator meist niedrig, was negative Schritte verursacht. Überprüfen Sie auf Steigungsüberlastung: Wenn sich der Eingang zu schnell ändert, wird der Integratorausgang deutlich verzögert, wodurch eine dreiecksförmige Wellenform anstelle eines Sinus entsteht. Erhöhen Sie die Abtastrate oder Schrittweite, um dies zu reduzieren.

Verwenden Sie den Arduino Serial Plotter (Tools > Serial Plotter), um den Vergleicherbitstrom und das rekonstruierte Signal zu sehen, wenn Sie sie über die Serienschaltung (nicht innerhalb des ISR) senden.

Kalibrierkomponenten

Die Zeitkonstante des Integrators stellt die Schrittweite ein. Für einen gegebenen RC-Wert und eine Abtastperiode T beträgt die Spannungsänderung pro Schritt ∆V = (V pwm high – V ref) * T / (RC). Für das PWM-Verfahren beträgt V pwm high 5 V und das Duty-Cycle-Update ändert die Filterkondensatorspannung um einen proportionalen Betrag. Experimentieren Sie mit Widerstandswerten: Erhöhen von R reduziert die Schrittweite (langsameres Tracking, aber weniger granulares Rauschen); Abnehmen von R tut das Gegenteil. Feinabstimmen Sie den Kondensator in ähnlicher Weise. Messen Sie die tatsächliche Schrittweite mit der Cursorfunktion des Oszilloskops. Bei Verwendung eines dedizierten DACs passen Sie seine Referenzspannung oder Verstärkung an.

Wenn der Komparator bei Spannungswelligkeit auslöst, ist eine Hysterese mit einem positiven Rückkopplungswiderstand (z. B. 100 kΩ vom Komparatorausgang zum nicht-invertierenden Eingang) hinzuzufügen, wodurch ein Schmitt-Trigger mit einer kleinen Totzone entsteht, was ebenfalls dazu beiträgt, das Rattern zu reduzieren.

Anwendungen und Variationen

Während ein grundlegender Delta-Modulator als Lehrmittel dient, hat er auch praktische Anwendungen. Delta-Modulation wird bei kostengünstigen digitalen Audioaufnahmen, Sprachkomprimierung (z. B. Continuously Variable Slope Delta Modulation oder CVSD) und in Kommunikationssystemen mit begrenzter Bandbreite eingesetzt. Die einfache Hardware und der Single-Bit-Ausgang machen ihn ideal für die Übertragung über rauschende Kanäle.

Zu den Verbesserungen der Basisschaltung gehören:

  • Adaptive Delta Modulation (ADM): Eine Steuerlogik passt die Schrittgröße basierend auf dem jüngsten Bitmuster an (z. B. wenn drei aufeinanderfolgende 1s den Schritt erhöhen).
  • Bipolare Integration: Verwendung eines Dual-Rail-Stromversorgung und einem bipolaren Integrator, um AC-Signale ohne DC-Bias zu behandeln, wodurch der dynamische Bereich erweitert wird.
  • Höhere Sampling-Raten: Ersetzen Sie Arduino durch einen Teensy- oder schnelleren Mikrocontroller für Bandbreiten bis zu zehn Kilohertz, die für Audio nützlich sind.
  • Externer DAC: Verwenden Sie einen MCP4921 oder DAC0800 für eine bessere Schrittauflösung und geringeres Rauschen als gefiltertes PWM.

Für eine tiefergehende Theorie konsultieren Sie maßgebliche Quellen wie die Wikipedia Delta Modulation Seite und das Analog Devices op-amp integrator tutorial Arduino-spezifische Details zur PWM-Generation finden Sie in der Arduino PWM Dokumentation .

Schlussfolgerung

Der Bau eines Delta-Modulators mit einem Arduino und Basiskomponenten entmystisiert eine grundlegende Signalverarbeitungstechnik. Durch den Bau des Komparators, Integrators und der Rückkopplungsschleife und durch das Schreiben einer präzisen Abtastroutine erhalten Sie einen praktischen Einblick in die Digitalisierung analoger Signale durch differentielle Kodierung. Der abgeschlossene Modulator demonstriert nicht nur Schlüsselkonzepte wie Quantisierung, Steigungsüberlastung und granulares Rauschen, sondern dient auch als Plattform für das Experimentieren mit adaptiven Methoden und leistungsfähigeren Alternativen. Passen Sie die Schrittgröße, die Abtastrate und die Filterung an, um Ihr Zielsignal zu optimieren. Mit sorgfältiger Montage und Testen haben Sie ein einfaches, aber effektives System, um die Prinzipien der Deltamodulation in der Praxis zu erforschen.