En codant uniquement la différence entre les échantillons successifs plutôt que la valeur absolue du signal, un modulateur delta permet de réaliser une faible consommation d'énergie et un matériel simple tout en préservant les informations essentielles du signal. Construire un modulateur delta à l'aide d'un Arduino et de composants électroniques de base est un excellent projet pour les amateurs d'électronique et les étudiants qui apprennent le traitement du signal et la conversion analogique-numérique. Ce tutoriel fournit un guide détaillé et étape par étape pour concevoir, assembler et tester un tel système.

Comprendre la modulation du delta

La modulation Delta (DM) est une forme de modulation différentielle du code d'impulsion qui se rapproche d'un signal analogique en suivant ses changements plutôt que son amplitude absolue. Le système compare l'échantillon d'entrée actuel à l'estimation de sortie précédente. Si l'entrée est plus grande, le modulateur produit un 1; si elle est plus petite, un 0. Ce flux numérique à une seule bits entraîne un intégrateur qui reconstitue le signal estimé, qui se ramène au comparateur. Le processus nécessite seulement un comparateur, un intégrateur (souvent construit avec un ampère-op et un condensateur) et une méthode pour générer le signal reconstitué, habituellement un convertisseur numérique à analogique (DAC) ou un signal de modulation de largeur d'impulsion (PWM) filtré pour produire une tension analogique.

Deux paramètres de performance importants dominent la conception de modulation delta : la surcharge de pente et le bruit granulaire. La surcharge de pente survient lorsque le signal d'entrée change plus rapidement que l'intégrateur peut le suivre, ce qui fait que le signal reconstitué est en retard. Le bruit granulaire, aussi appelé bruit de canal ralenti, survient lorsque le signal d'entrée change très lentement ou reste constant, produisant des bits alternés de 1 et 0 qui créent de petites oscillations triangulaires autour de la vraie valeur.

Composants et outils

La construction d'un modulateur de delta fonctionnel nécessite une sélection de composants électroniques et d'équipements d'essai couramment disponibles. La liste ci-dessous couvre les éléments essentiels; les spécifications exactes seront discutées dans la section de conception du circuit.

  • Arduino Uno ou microcontrôleur compatible — Fournit des données d'entrée/sortie numériques, de sortie PWM et de série USB pour le débogage.
  • Amplificateur opérationnel (op-amp) — Utilisé comme intégrateur. Les choix courants comprennent LM358, TL072, ou LM741.
  • Comparator or Schmitt gâcher — Convertit la différence analogique en un signal numérique propre. Un comparateur LM393 ou Arduino intégré (si disponible) fonctionne.
  • Résisteurs — Diverses valeurs (p. ex., 10 kш, 100 kш, 1 kш) pour le biais, la rétroaction et l'échelle d'entrée.
  • Capacitateurs — Généralement 0,1 μF à 10 μF pour le réglage de l'intégrateur et le découplage de l'alimentation électrique.
  • Convertisseur numérique à analogique (DAC) ou PWM avec filtre passe-bas[ — Pour produire la tension analogique reconstruite à partir du flux de bits numérique. Un simple filtre RC sur une broche PWM Arduino suffit pour de nombreuses applications.
  • Fils de table et de raccordement — Pour prototyper le circuit.
  • Oscilloscope ou analyseur logique — Pour visualiser les signaux pendant les essais.
  • Générateur de signaux[ — Pour fournir des signaux d'entrée de test tels que des ondes sinusoïdales ou des sonorités sonores.

Conception du circuit

Étape du comparateur

Le comparateur compare le signal d'entrée avec la sortie reconstituée (feedback). Connectez le signal d'entrée analogique à l'entrée non inversée (+) du comparateur. L'entrée inverse (-) reçoit la sortie de l'intégrateur, qui représente l'estimation actuelle du signal. Lorsque l'entrée dépasse l'estimation, la sortie comparateur est élevée (logique 1); sinon elle est faible (logique 0). Si l'on utilise un app-amp comme comparateur, assurez-vous qu'il est configuré avec un gain en boucle ouverte ou une rétroaction positive légère pour accélérer les transitions.

Intégrateur (filtre de reconstruction)

Pour les signaux unipolaires (0-5 V), une tension de référence de 2,5 po/min peut être appliquée à l'entrée de sortie non-vert. L'intégrateur convertit le signal de commande numérique (1 ou 0) en une tension analogique qui suit l'entrée. Un intégrateur d'inversion classique construit autour d'un ampère-op fonctionne bien. Connectez une résistance R de la ligne de commande numérique (par exemple, une broche de sortie Arduino ou une sortie DAC) à l'entrée d'inversion de l'amp-op. Placez un condensateur C entre la sortie de l'amp-op et son entrée d'inversion. L'entrée de non-inversion de l'amp-op se connecte au sol (ou à une tension de référence si un signal bipolaire est nécessaire). La fonction de transfert est \( V {\text{out}} = -\frac{1}{RC} \int V {\text{in}} \, dt \). La résistance de rétroaction R et condensateur C déterminent la taille de l'étape et la vitesse de suivi.

Conversion numérique à analogique: Méthode PWM

Au lieu d'utiliser une puce DAC dédiée, de nombreux modulateurs delta basés sur Arduino génèrent le signal reconstitué avec modulation de la largeur d'impulsion (PWM) suivie d'un filtre passe-bas analogique. La fonction Arduinos produit une onde carrée à environ 490 Hz (par défaut) ou 980 Hz (sur certaines broches). Le cycle de travail correspond à la tension analogique souhaitée (0 à 5 V). Un filtre passe-bas de deuxième ordre avec une fréquence de coupure bien inférieure à la fréquence PWM (par exemple, 100 Hz pour l'audio) élimine l'ondulation de commutation.

Loop et l'horlogerie de commentaires

Le modulateur delta fonctionne de manière synchrone : à chaque activation de l'horloge, la sortie de référence est verrouillée par l'interruption Arduino ou par un minuteur. Ensuite, le signal de commande numérique met à jour l'intégrateur (via PWM ou DAC). La fréquence de prélèvement est déterminée par la fréquence de l'horloge. Pour un signal audio de quelques kilohertz, une horloge de 10 à 100 kHz est typique. Les minuteurs internes Arduino , peuvent produire des interruptions précises.

A chaque instant d'échantillonnage, l'Arduino lit la broche de sortie de comparateur. Si le bit est élevé, il augmente le cycle de service PWM (ou la sortie DAC) par une étape fixe; si faible, il diminue. La taille de l'étape (-) est égale au changement de tension de l'intégrateur par cycle d'horloge. Avec une plage de PWM de 5 V et une résolution de 8 bits, chaque étape est d'environ 19,5 mV. Pour une capacité de suivi plus grande, utilisez une PWM de 10 bits ou un DAC externe avec une taille d'étape réglable.

Construction du circuit

Assemblage sur un tableau de pain

Commencez par placer les IC op-amp et comparateurs sur la table à pain. Connectez la puissance (VCC = 5 V de Arduino, GND). Ajoutez des condensateurs de découplage (0,1 μF) à proximité des goupilles d'alimentation de chaque IC.

  1. Intégrateur: filer l'ampop comme un intégrateur de retournement. Connectez une résistance de 10 k. à partir de la broche de sortie de la PWM Arduino (p. ex., la broche 9) à l'entrée de retournement. Placez un condensateur de 0,1 μF entre la sortie et l'entrée de retournement. Connectez l'entrée de non-invertement à une référence de 2,5 V (utilisez un diviseur de tension de 5 V: deux résistances de 10 k produisent 2,5 V).
  2. Comparator: Connectez le signal d'entrée (d'un générateur de signal) à la broche non-invertante du LM393. Connectez la sortie intégratrice à la broche d'invertement. La sortie LM393 (collecteur ouvert) nécessite une résistance de traction (par exemple, 10 k.-. à 5 V). Connectez la sortie à la broche numérique Arduino 2.
  3. Feedback: La sortie intégratrice se connecte également à l'écran analogique (Arduino A0) pour le débogage. La sortie comparateur alimente la broche interrompable Arduino.
  4. Filtre PWM: De la broche PWM Arduino (même que l'entrée d'intégrateur), insérer un filtre passe-bas: une résistance de 1 k. en série suivie d'un condensateur 10 μF au sol. Cette tension PWM filtrée est le signal reconstitué et peut être vue sur le canal 2 d'un oscilloscope.

Considérations relatives à la puissance et au signal

Gardez les connexions au sol analogiques et numériques séparées pour éviter d'injecter du bruit numérique dans l'intégrateur. Utilisez des fils courts et placez des condensateurs de contournement près de chaque IC. Si le signal d'entrée est bipolaire (p. ex. ±2 V), biaisez les entrées de comparaison de sorte que le signal soit référencé à 2,5 V. Pour un signal AC pur, ajoutez un décalage DC de 2,5 V à l'aide d'un circuit couplé condensateur avec un diviseur de tension.

Programmation de l'Arduino

Le croquis Arduino implémente l'algorithme de modulation delta en temps réel. La boucle de base lit le bit de comparaison, met à jour le cycle de travail de la sortie PWM en conséquence, et se répète à un taux d'échantillonnage fixe.

Algorithme 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

Exemple de code Extrait

Ci-dessous, un croquis Arduino minimal utilisant Timer1 pour un échantillonnage précis. Il fonctionne à environ 50 kHz, adapté pour le suivi des signaux audio modérés.

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

Ajuster et la vitesse d'échantillonnage pour optimiser le suivi. Une étape plus grande augmente la vitesse de suivi mais aussi le bruit granulaire. Le compromis est nécessaire. Pour les essais initiaux, commencer par la phase de mesure = 5 et la vitesse d'échantillonnage de 10 kHz, puis augmenter les deux.

Essais et étalonnage

Visualisation des signaux

Relier une sonde oscilloscope au signal d'entrée et à la sortie de l'intégrateur (PWM filtré). Appliquer une onde sinusoïdale de 1 kHz de 2 V de pointe à pointe avec un décalage de 2,5 V DC de sorte que le signal reste dans la plage 0–5 V. Observer le suivi : la sortie de l'intégrateur devrait approximation de l'onde sinusoïdale avec un diagramme d'escaliers égal. La sortie de comparaison apparaît comme un signal logique; lorsque l'entrée augmente, le comparateur est principalement élevé, provoquant des étapes positives. Lorsque l'entrée tombe, le comparateur est principalement faible, causant des étapes négatives. Vérifier la surcharge de pente : si l'entrée change trop rapidement, la sortie de l'intégrateur va ralentir considérablement, produisant une forme d'onde triangulaire plutôt qu'une sinus. Augmenter le taux d'échantillonnage ou la taille de l'étape pour réduire cette valeur.

Utilisez le loteur série Arduino (Outils > loteur série) pour voir le flux de bits de comparateur et le signal reconstitué si vous les envoyez via Serial depuis la boucle principale (pas à l'intérieur de la RSI). Cependant, la sortie série peut perturber le timing; utilisez un oscilloscope pour un travail sérieux.

Composants d'étalonnage

Pour une valeur RC donnée et une période d'échantillonnage T, la variation de tension par étape est de -V = (V pwm high – V ref) * T / (RC). Pour la méthode PWM, V pwm high est de 5 V et la mise à jour du cycle de travail modifie la tension du condensateur de filtre d'une quantité proportionnelle. Expérimenter avec les valeurs de résistance : augmenter R réduit la taille de l'étape (suivi plus faible mais moins de bruit granulaire); diminuer R fait le contraire. Finir le condensateur de même. Mesurer la taille réelle de l'étape en utilisant la fonction du curseur oscilloscope.

Vérifiez le couplage sonore. Si le comparateur déclenche sur l'alimentation en circuit, ajoutez une hystérésis avec une résistance positive (p. ex. 100 k. de la sortie du comparateur à l'entrée non inversée). Cela crée un déclencheur Schmitt avec une petite zone morte, ce qui aide également à réduire le bavardage.

Demandes et variantes

Bien qu'un modulateur delta de base serve d'outil éducatif, il a également des utilisations pratiques. La modulation Delta est employée dans l'enregistrement audio numérique à faible coût, la compression vocale (p. ex. modulation Delta à pente variable continue ou CVSD), et dans les systèmes de communication où la bande passante est limitée.

Les améliorations apportées au circuit de base comprennent :

  • Modulation adaptive Delta (ADM): Une logique de contrôle ajuste la taille de l'étape en fonction du profil récent de bits (p. ex., si trois séries consécutives 1s, augmenter l'étape).
  • Intégration bipolaire[: Utilisation d'une alimentation birail et d'un intégrateur bipolaire pour gérer les signaux AC sans biais DC, élargissant la portée dynamique.
  • Taux d'échantillonnage plus élevés: Remplacer Arduino par un microcontrôleur Teensy ou plus rapide pour des bandes passantes jusqu'à des dizaines de kilohertz, utile pour l'audio.
  • DAC externe: Utilisez un MCP4921 ou DAC0800 pour une meilleure résolution des pas et un bruit inférieur à celui du PWM filtré.

Pour une théorie plus approfondie, consultez des sources faisant autorité telles que la page de modélisation du delta de la Wikipedia et le tutoriel Analog Devices op-amp intégrator. Vous trouverez des détails spécifiques à l'arduino sur la génération de MFP dans la documentation Arduino PWM.

Conclusion

En construisant le comparateur, l'intégrateur et la boucle de rétroaction, et en écrivant une routine d'échantillonnage précise, vous obtenez une compréhension pratique de la numérisation des signaux analogiques par codage différentiel. Le modulateur complété non seulement démontre des concepts clés tels que la quantification, la surcharge de pente et le bruit granulaire, mais sert aussi de plate-forme pour l'expérimentation de méthodes d'adaptation et d'alternatives à plus hautes performances. Ajustez la taille des étapes, la fréquence d'échantillonnage et le filtrage pour optimiser le signal cible. Avec un montage et des tests minutieux, vous aurez un système simple et efficace pour explorer les principes de modulation delta en pratique.