La modulazione delta è una tecnica utilizzata nei sistemi di comunicazione digitale per convertire segnali analogici in segnali digitali con una minima complessità. Con la codifica della differenza tra campioni successivi e non il valore assoluto del segnale, un modulatore delta raggiunge il basso consumo energetico e l'hardware semplice pur mantenendo le informazioni essenziali del segnale.

Comprensione della modulazione del Delta

La modulazione del Delta (DM) è una forma di modulazione differenziale del codice di impulso che approssima un segnale analogico monitorando i suoi cambiamenti piuttosto che la sua ampiezza assoluta. Il sistema confronta il campione di input corrente con la stima di uscita precedente. Se l'ingresso è più grande, il modulatore emette un 1; se più piccolo, uno 0. Questo flusso digitale a singolo bit fa un integratore che ricostruisce il segnale stimato, che si alimenta di nuovo al comparatore.

Due importanti metriche di prestazione dominano il design della modulazione delta: sovraccarico del pendio e rumore granulare. Il sovraccarico della pila si verifica quando il segnale di ingresso cambia più velocemente di quello dell’integratore può seguire, causando il segnale ricostruito per la coda dietro.

Componenti e strumenti

La costruzione di un modulatore funzionale delta richiede una selezione di componenti elettronici e apparecchiature di prova comunemente disponibili. L'elenco sottostante copre gli elementi essenziali; specifiche esatte saranno discusse nella sezione progettazione del circuito.

  • Arduino Uno o microcontroller compatibile[[] — Fornisce I/O digitale, uscita PWM e seriale USB per il debugging.
  • amplificatore operativo (op-amp)[] — Usato come integratore. Le scelte comuni includono LM358, TL072, o LM741.
  • Comparatore o Schmitt trigger[[] – Converte la differenza analogica in un segnale digitale pulito.
  • Riscontri[] — Vari valori (ad esempio, 10 kΩ, 100 kΩ, 1 kΩ) per il biasing, il feedback e la scalabilità degli input.
  • Capacitors[ — Tipicamente 0,1 μF a 10 μF per il temporizzazione integrato e il decoupling dell'alimentazione.
  • Convertitore digitale-analogico (DAC) o PWM con filtro a basso passaggio[[[] — Per produrre la tensione analogica ricostruita dal bitstream digitale.
  • Breadboard e cavi di collegamento[ — Per prototipazione del circuito.
  • Oscilloscopio o analizzatore di logica[[] – Per visualizzare i segnali durante il test.
  • Generatore di segnale[] — Per fornire segnali di input di prova come onde di sinusoidale o toni audio.

Progettazione del circuito

Fase di confronto

Per l'uscita ricostruita (feedback) è possibile collegare il segnale di ingresso analogico all'ingresso non invertente (+) del comparatore. L'inverting input (−) riceve l'output dell'integratore, che rappresenta la stima corrente del segnale. Quando l'ingresso supera la stima, l'uscita del comparatore 39 va alta (logic 1); altrimenti va bassa (logic 0).

Integratore (filtro di ricostruzione)

Il valore di riferimento di VRC/PV/PV/SWV/SWV/SWV/SWW/SWW/SWW/SWW/SWW/SWW/SWW/SWWW/SWWW/SWWW/SWWW-WWWW-WWWWW-WWWWW-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W-W

Conversione digitale-analogico: Metodo PWM

Il filtro di frequenza di Arduino è più facile da usare con il filtro di frequenza di elaborazione di un PWM (PWM) e con il filtro di frequenza di elaborazione di un PWM (FLT:0) che migliorano le prestazioni di frequenza di Arduino.

Feedback Loop e Orologio

Il modulatore delta opera in modo sincrono: ad ogni tick dell'orologio, l'uscita del comparatore viene bloccata dall'arresto di Arduino o da un timer. Poi il segnale di controllo digitale aggiorna l'integratore (tramite PWM o DAC). La frequenza di clock determina la frequenza di campionamento. Per un segnale audio di pochi kilohertz, è tipico un orologio da 10 a 100 kHz.

Se il bit è alto, aumenta il ciclo di dovere PWM (o uscita DAC) con un passo fisso; se basso, diminuisce. La dimensione del passo ( ⁇ ) è uguale al cambiamento della tensione di integratore per ciclo di clock. Con una gamma 5 V PWM e una risoluzione a 8 bit, ogni passo è di circa 19,5 mV. Per una maggiore capacità di tracciamento, utilizzare un 10-bit esterno.

Costruire il circuito

Montaggio su una tavola

Cominciare mettendo gli IC op-amp e comparatore sul pannello di pane. Collegare la potenza (VCC = 5 V da Arduino, GND). Aggiungere condensatori di decoupling (0.1 μF) vicino ai pin di alimentazione di ogni IC.

  1. Integratore[[]: Filare l'op-amp come integratore invertente. Collegare una resistenza da 10 kΩ dal pin di uscita Arduino PWM (ad esempio, pin 9) all'ingresso invertente. Posizionare un condensatore da 0,1 μF tra l'uscita e l'ingresso inverting. Collegare l'ingresso non invertente a un riferimento 2.5 VΩ 5 (utilizzatore di tensione)
  2. Comparatore[]: Collegare il segnale di ingresso (da un generatore di segnale) al perno non invertente dell'LM393. Collegare l'uscita dell'integratore al perno invertente. L'uscita LM393 (open-collector) richiede una resistenza di pull-up (ad esempio, 10 kΩ a 5 V).
  3. Feedback[[]: L'uscita dell'integratore si collega anche al monitor analogico (Arduino A0) per il debugging. L'uscita del comparatore alimenta il perno di Arduino con la capacità di interruzione.
  4. Filtro PWM[: Dal pin PWM di Arduino (stesso come input integratore), inserire un filtro a basso passaggio: una resistenza a 1 kΩ in serie seguita da un condensatore da 10 μF a terra. Questa tensione PWM filtrata è il segnale ricostruito e può essere visualizzato sul canale 2 di un oscilloscopio.

Considerazioni di potere e segnale

Tenere connessioni a terra analogiche e digitali separate per evitare di iniettare rumore digitale nell'integratore. Utilizzare fili corti e posizionare condensatori di bypass vicino a ogni C. Se il segnale di ingresso è bipolare (ad esempio, ±2 V), bias gli ingressi di comparatore in modo che il segnale sia riferito a 2.5 V. Per un segnale AC puro, aggiungere un offset DC di 2.5 V utilizzando un circuito condensatore-coupled con un divisore di tensione.

Programmazione dell'Arduino

Lo schizzo Arduino implementa l'algoritmo di modulazione delta in tempo reale. Il loop di base legge il bit di comparatore, aggiorna il ciclo di dovere dell'uscita PWM di conseguenza, e ripete a una frequenza di campionamento fissa.

Algoritmo 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

Esempio Codice Snippet

Qui di seguito è riportato uno schizzo Arduino minimal utilizzando Timer1 per un campionamento accurato.

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

Regolare e la velocità del campione per ottimizzare il monitoraggio. Un passo più grande aumenta la velocità di tracciamento ma anche il rumore granulare. Il completamento è necessario. Per i test iniziali, iniziare con stepSize = 5 e la velocità del campione di 10 kHz, quindi aumentare entrambi.

Test e calibrazione

Visualizzazione dei segnali

Collegare una sonda oscilloscopica al segnale di ingresso e all'uscita di integratori (PWM filtrato). Applicare un'onda di 1 kHz sine di 2 V picco-a-peak con un offset di 2.5 V DC in modo che il segnale rimanga all'interno della gamma 0-5 V. Osservare il tracciamento: l'uscita di integratore dovrebbe approssimativamente l'onda sine con un modello di scala che causa passi uguali.

Utilizzare il Plotter seriale Arduino (Tools > Serial Plotter) per vedere il flusso bit comparatore e il segnale ricostruito se li invii via Serial dal loop principale (non all'interno dell'ISR). Tuttavia, l'uscita seriale può interrompere il tempismo; utilizzare un oscilloscopio per un lavoro serio.

Calibrazione dei componenti

Per un dato valore RC e periodo di campionamento T, il cambiamento di tensione per passo è ⁇ V = (V pwm high – V ref) * T / (RC). Per il metodo PWM, V pwm high è 5 V e l'aggiornamento del ciclo di dovere cambia la tensione del condensatore del filtro misurando una quantità proporzionale.

Se il comparatore si attiva sul rigoglio dell'alimentazione elettrica, aggiungere isteresi con un resistore positivo al feedback (ad esempio, 100 kΩ dall'uscita comparatore all'ingresso non invertente), creando un trigger Schmitt con una piccola zona morta, che aiuta anche a ridurre il battito.

Applicazioni e Variazioni

Mentre un modulatore di base delta serve come strumento educativo, ha anche usi pratici. La modulazione delta è impiegata nella registrazione audio digitale a basso costo, nella compressione vocale (ad esempio, modulazione delta della pila a bassa variazione o CVSD), e nei sistemi di comunicazione dove la larghezza di banda è limitata.

I miglioramenti al circuito di base includono:

  • Adaptive Delta Modulation (ADM)[]: Una logica di controllo regola la dimensione del passo in base al modello recente di bit (ad esempio, se tre consecutivi 1s, aumento passo).
  • Integrazione bipolare[[]: Utilizzando un alimentatore a doppio profilo e un integratore bipolare per gestire segnali AC senza polarità DC, espandendo la gamma dinamica.
  • Tassi di campionamento più alti[[]: Sostituisci Arduino con un teensy o microcontrollore più veloce per le larghezze di banda fino a decine di kilohertz, utile per l'audio.
  • D.C. esterno[]: Utilizzare un MCP4921 o DAC0800 per una migliore risoluzione dei gradi e un rumore inferiore rispetto al PWM filtrato.

Per una teoria più approfondita, consultare fonti autorevoli come la []Wikipedia Delta Modulation page] e il [Analog Devices op-amp integrator tutorial[].

Conclusioni

Con un modulatore delta con un Arduino e componenti di base demistifica una tecnica di elaborazione del segnale fondamentale. Con la costruzione del comparatore, dell'integratore e del loop di feedback, e scrivendo una routine di campionamento precisa, si ottiene hands-on comprensione di come i segnali analogici sono digitalizzati utilizzando la codifica differenziale delle prestazioni. Il modulatore completato non solo dimostra concetti chiave come quantizzazione, sovraccarico del pendio e rumore granulare ma serve anche come una piattaforma di adattamento