Delta modulatie is een techniek die wordt gebruikt in digitale communicatiesystemen om analoge signalen om te zetten in digitale signalen met minimale complexiteit. Door alleen het verschil tussen opeenvolgende monsters te coderen in plaats van de absolute signaalwaarde, bereikt een deltamodulator een laag stroomverbruik en eenvoudige hardware, terwijl de essentiële signaalinformatie behouden blijft. Het bouwen van een deltamodulator met behulp van een Arduino en eenvoudige elektronische componenten is een uitstekend project voor elektronicaliefhebbers en studenten leren over signaalverwerking en analoge-naar-digitale conversie. Deze tutorial biedt een grondige, stap-voor-stap handleiding voor het ontwerpen, monteren en testen van een dergelijk systeem.

De Deltamodulatie begrijpen

Delta modulatie (DM) is een vorm van differentiële puls-code modulatie die een analoog signaal benadert door de veranderingen te volgen in plaats van de absolute amplitude. Het systeem vergelijkt het huidige invoermonster met de vorige output schatting. Als de invoer groter is, de modulator uitgangen een 1; indien kleiner, een 0. Deze single-bit digitale stroom drijft een integrator die het geschatte signaal reconstrueren, die terug naar de vergelijking. Het proces vereist alleen een vergelijking, een integrator (vaak gebouwd met een op-amp en condensator), en een methode om het gereconstitueerd signaal te genereren, in het algemeen een digitale-to-analoge converter (DAC) of een puls-outle modulatie (PWM) signaal gefilterd om analoge spanning te produceren.

Twee belangrijke prestatiemetrics domineren deltamodulatie ontwerp: helling overbelasting en korrelgeluid. Slope overbelasting treedt op wanneer het ingangssignaal sneller verandert dan de integrator kan volgen, waardoor het gereconstrueerde signaal achterover blijft. Granulair geluid, ook wel stationair kanaallawaai genoemd, ontstaat wanneer het ingangssignaal zeer langzaam verandert of constant blijft, waardoor afwisselend 1 en 0 bits ontstaan die kleine driehoeksoscillaties rond de werkelijke waarde creëren. Beide effecten kunnen worden geminimaliseerd door de stapgrootte aan te passen of door adaptieve deltamodulatie te gebruiken, waarbij de stapgrootte verandert volgens de ingangssignaal .

Componenten en gereedschappen

Voor het bouwen van een functionele deltamodulator is een selectie van algemeen beschikbare elektronische componenten en testapparatuur vereist. De onderstaande lijst heeft betrekking op de essentiële elementen; de exacte specificaties zullen worden besproken in de sectie circuitontwerp.

  • Arduino Uno of compatibele microcontroller
  • Operationale versterker (op-amp)
  • Comparateur of Schmitt trigger
  • Resistors
  • Capacitors
  • Digitale-naar-analoge converter (DAC) of PWM met laagdoorlaatfilter .. Om de gereconstrueerde analoge spanning uit de digitale bitstream te produceren. Een eenvoudig RC-filter op een Arduino PWM-pin volstaat voor vele toepassingen.
  • Breadboard en verbindingsdraden . .Voor het prototyperen van het circuit.
  • Oscilloscoop of logische analyser . . Voor het visualiseren van signalen tijdens het testen. Als alternatief, gebruik de Arduino
  • Signale generator

Circuit Design

Vergelijkende fase

De vergelijking vergelijkt het invoersignaal met de gereconstrueerde output (feedback). Verbind het analoge ingangssignaal met de niet-inverterende invoer (+) van de vergelijking. De omverterende invoer (−) ontvangt de output van de integrator, die de huidige schatting van het signaal weergeeft. Wanneer de input de schatting overschrijdt, gaat de vergelijkingsuitgang hoog (logic 1); anders gaat het laag (logic 0). Als u een opamp als vergelijkingsmiddel gebruikt, zorgt u ervoor dat het wordt geconfigureerd met open-loop winst of milde positieve feedback om overgangen te versnellen. Voor schoner schakelen, gebruik een specifiek vergelijkings IC zoals de LM339 of LM393, die open-collector uitgangen omvat die compatibel zijn met Arduino logische niveaus.

Integrator (reconstructiefilter)

De integrator zet het digitale controlesignaal (1 of 0) om in een analoge spanning die de ingang volgt. Een klassieke integrator die rond een op-amp wordt gebouwd, werkt goed. Plaats een condensator C tussen de op-amp uitgang en de invertering ingang. De op-amp niet-inverterende ingang verbindt met de grond (of een referentiespanning als een bipolaire signaal is vereist). De overdrachtsfunctie is \(V {\text{out}} = -\frac{1}{RC} \int V {\text{in} \, dt \). De feedbackweerstand R en capacitor C bepalen de stapgrootte en tracking snelheid. Typische waarden: R = 10 kΩ, C = 0,1 μF tot 1 μF. De integrator uitgang moet worden aangepast aan de ingangsspanningsrange. Voor unipolaire signalen (0/V) wordt een referentiespanning V toegepast op de ingang van 2,5 V die wordt toegepast op de shift-output.

Digitale-naar-Analoge conversie: PWM-methode

In plaats van een speciale DAC-chip te gebruiken, genereren veel Arduino-gebaseerde deltamodulatoren het gereconstrueerde signaal met pulsbreedtemodulatie (PWM) gevolgd door een analoge low-pass filter. De Arduinos -functie produceert een vierkante golf met ongeveer 490 Hz (standaard) of 980 Hz (op bepaalde pinnen). De duty cyclus komt overeen met de gewenste analoge spanning (0 tot 5 V). Een tweede-orde low-pass filter met een cutoff frequentie ver onder de PWM frequentie (bijv., 100 Hz voor audio) verwijdert de schakelrimpel. Gebruik een passieve RC of actieve Sallen-Key filter. Voor hogere prestaties, gebruik de Arduino ...timer1 om een veel snellere PWM (tot 31 kHz of meer) te genereren, wat de filteringvereisten vergemakkelijkt en de tracking bandbreedte verbetert.

Terugkoppeling Loop en Klokken

De deltamodulator werkt synchroon: bij elke kloktick wordt de vergelijkingsuitgang vergrendeld door de Arduino interrupt of een timer. Dan is het digitale controlesignaal de integrator (via PWM of DAC). De kloksnelheid bepaalt de bemonsteringsfrequentie. Voor een audiosignaal van een paar kilohertz is een klok van 10

Bij elk moment van het monster leest de Arduino de uitgangspen van de vergelijking. Als de bit hoog is, verhoogt het de PWM-dienstcyclus (of DAC-uitvoer) met een vaste stap; als deze laag is, neemt het af. De stapgrootte (

Bouwen van het circuit

Assembly on a Breadboard

Begin met het plaatsen van de op-amp en vergelijkings-IC's op het breadboard. Verbind vermogen (VCC = 5 V van Arduino, GND). Voeg ontkoppelingscondensatoren (0,1 μF) toe dicht bij de voedingspennen van elk IC.

  1. Integrator: Bedrad de op-amp als een omkerende integrator. Verbind een 10 kΩ weerstand van de Arduino PWM uitgang pin (bijv. pin 9) met de omkerende ingang. Plaats een 0,1 μF condensator tussen de uitgang en de omkerende ingang. Sluit de niet-inverterende ingang aan op een 2,5 V referentie (gebruik een spanningsverdeler van 5 V: twee 10 kΩ weerstanden produceren 2.5 V).
  2. Comparator: Sluit het ingangssignaal (van een signaalgenerator) aan op de niet-inverterende pin van de LM393. Sluit de integratoruitgang aan op de omkerende pin. De LM393 uitgang (open-verzamelaar) vereist een optrekweerstand (bijv. 10 kΩ tot 5 V). Sluit de uitgang aan op de Arduino digitale pin 2.
  3. Feedback: De integratoruitvoer verbindt ook met de analoge monitor (Arduino A0) voor debuggen. De vergelijkingsuitgang voedt de Arduino
  4. PWM Filter: Vanuit de Arduino PWM-pin (net als integrator-ingang), plaats een laagdoorlaatfilter: een 1 kΩ weerstand in serie gevolgd door een 10 μF condensator tot de grond. Deze gefilterde PWM spanning is het gereconstrueerde signaal en kan worden bekeken op kanaal 2 van een oscilloscoop.

Energie- en signaaloverwegingen

Houd analoge en digitale grondverbindingen gescheiden om te voorkomen dat digitale ruis in de integrator wordt geïnjecteerd. Gebruik korte draden en plaats bypass-condensatoren in de buurt van elk IC. Als het ingangssignaal bipolair is (bv. ±2 V), bevooroordeel dan de vergelijkingsinputs zodat het signaal wordt verwezen naar 2.5 V. Voor een zuiver AC-signaal, voeg een DC-offset van 2,5 V toe met behulp van een condensator-koppelcircuit met een spanningsverdeler.

Programmeren van de Arduino

De Arduino schets implementeert het delta modulatie algoritme in real-time. De kernlus leest het vergelijkings bit, update de duty cyclus van de PWM-uitvoer dienovereenkomstig, en herhaalt zich met een vaste sample rate. Een timer interrupt zorgt voor consistente timing, waarbij jitter die de prestaties degradeert.

Algoritme 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

Voorbeeld Code Snippet

Hieronder volgt een minimale Arduino schets met Timer1 voor nauwkeurige bemonstering. Het draait op ongeveer 50 kHz, geschikt voor het volgen van matige audiosignalen.

// 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
}

Pas en sample rate aan om tracking te optimaliseren. Een grotere stap verhoogt de tracking snelheid maar ook korrelgeluid. Compromis is noodzakelijk. Voor de eerste tests, begin met stapSize = 5 en sample rate van 10 kHz, dan verhogen beide.

Testen en kalibreren

Signalen visualiseren

Verhoog de bemonsteringssnelheid of stapgrootte om dit te verminderen.Verbind een oscilloscoopsonde aan het ingangssignaal en de output van de integrator (gefilterde PWM). Breng een 1 kHz sinusgolf van 2 V piek-tot-piekgolf aan met een 2,5 V DC-offset zodat het signaal binnen het bereik van 0

Gebruik de Arduino seriele plotter (Gereedschap > Seriele plotter) om de vergelijkingsbitstroom en het gereconstrueerde signaal te zien als je ze via Serial stuurt vanuit de hoofdlus (niet binnen de ISR). Seriele output kan echter de timing verstoren; gebruik een oscilloscoop voor serieus werk.

Kalibratiecomponenten

De integrator tijd constante stelt de stapgrootte. Voor een gegeven RC waarde en bemonsteringsperiode T, de spanningsverandering per stap is

Controleer of de ruiskoppeling werkt. Als de vergelijkingsring op stroomtoevoer wordt geactiveerd, voeg dan hysteresis toe met een positieve feedbackweerstand (bijv. 100 kΩ van vergelijkingsuitgang tot niet-inverterende ingang). Hierdoor ontstaat een Schmitt-trigger met een kleine doodzone, die ook helpt bij het verminderen van chatten.

Aanvragen en wijzigingen

Een basismodulator van delta dient als educatief hulpmiddel, maar heeft ook praktische toepassingen. Deltamodulatie wordt gebruikt in goedkope digitale audio-opname, spraakcompressie (bijvoorbeeld continu variabele helling Delta modulatie of CVSD), en in communicatiesystemen waar bandbreedte beperkt is. De eenvoudige hardware en single-bit output maken het ideaal voor transmissie via luidruchtige kanalen.

Verbeteringen aan het basiscircuit zijn onder meer:

  • Adaptive Delta Modulation (ADM): Een besturingslogica past de stapgrootte aan op basis van recent patroon van bits (bijvoorbeeld, als drie opeenvolgende 1s, verhoging stap). In software op de Arduino geïmplementeerd door het monitoren van de vergelijkingsuitvoer sequentie.
  • Bipolaire integratie: Met behulp van een dual-rail voeding en een bipolaire integrator om wisselstroomsignalen zonder DC-vooroordelen te verwerken, uitbreidend dynamisch bereik.
  • Hogere bemonsteringstarieven: Vervang Arduino door een Teensy of snellere microcontroller voor bandbreedtes tot tientallen kilohertz, nuttig voor audio.
  • Externe DAC: Gebruik een MCP4921 of DAC0800 voor een betere stapresolutie en een lager geluid dan gefilterde PWM.

Voor meer diepgaande theorie, raadpleeg gezaghebbende bronnen zoals de Wikipedia Delta Modulatie pagina en de Analoge Devices op-amp integrator tutorial. Arduino-specifieke details over PWM-generatie zijn te vinden in de Arduino PWM documentatie.

Conclusie

Door een deltamodulator te bouwen met een Arduino en basiscomponenten demystiseert u een fundamentele signaalverwerkingstechniek. Door de vergelijkings-, integrator- en feedbacklus te bouwen en door een nauwkeurige bemonsteringsroutine te schrijven, krijgt u een hands-on inzicht in hoe analoge signalen gedigitaliseerd worden met behulp van differentiële codering. De voltooide modulator toont niet alleen belangrijke concepten zoals quantisatie, hellingsoverbelasting en korrelgeluid, maar dient ook als platform voor het experimenteren met adaptieve methoden en alternatieven voor hogere prestaties. Pas de stapgrootte, monstersnelheid en filtering aan om uw doelsignaal te optimaliseren. Met zorgvuldige montage en testen beschikt u over een eenvoudig maar effectief systeem voor het onderzoeken van de principes van deltamodulatie in de praktijk.