Skip to Content

Amplificateur stéréo avec TPA31110 XH-A232, PCM5102 et ESP32

Amplificateur stéréo avec TPA31110 XH-A232, PCM5102 et ESP32

Dans ce tutoriel, vous apprendrez à construire un amplificateur stéréo de 30 watts ainsi qu’une radio Internet, Bluetooth ou MP3 avec un amplificateur TPA31110 XH-A232, un DAC PCM5102 et un microcontrôleur ESP32.

L’ESP32 produit un signal audio numérique, qui est converti en signal audio analogique via le convertisseur numérique-analogique PCM5102, puis amplifié par le TPA31110 XH-A232.

Alors que le PCM5102 ne peut piloter que des casques à haute impédance et des enceintes actives, le TPA31110 XH-A232 peut alimenter des enceintes passives jusqu’à 30 watts. Si vous souhaitez construire une radio Internet, Bluetooth ou MP3 avec une puissance audio plus élevée, ce tutoriel est fait pour vous.

Pièces requises

Pour ce projet, nous aurons besoin d’un module DAC PCM5102, d’une carte amplificatrice TPA31110 XH-A232, d’un ESP32 et d’une paire d’enceintes passives. Vous pouvez utiliser d’autres enceintes que celles listées, à condition que leur puissance soit d’environ 30 watts.

De même, vous pouvez utiliser une autre carte ESP32. La plupart des cartes ESP32 conviennent, mais il est préférable de choisir une carte ESP32-S3 avec PSRAM si vous prévoyez de stocker et lire de la musique depuis la mémoire.

Pour lire des fichiers MP3 depuis une carte SD, vous aurez également besoin d’une carte SD et d’un module lecteur de carte SD.

Enfin, une breadboard et quelques câbles seront utiles pour un montage temporaire. Sinon, vous pouvez tout souder ensemble.

Amplificateur TPA31110 XH-A232

DAC PCM5102

2 x Enceintes 4 Ohm 25 Watts

Lecteur de carte Micro SD

Carte Micro SD 8GB

ESP32 lite Lolin32

ESP32 lite

USB data cable

Câble USB de données

Dupont wire set

Jeu de fils Dupont

Half_breadboard56a

Breadboard

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Caractéristiques techniques du TPA31110 XH-A232

Le TPA3110 XH-A232 est une carte amplificatrice stéréo compacte basée sur la puce amplificatrice audio Class-D TPA3110 de Texas Instruments. Ce module est conçu comme une étape d’amplification complète adaptée aux systèmes audio petits à moyens.

La carte intègre les circuits d’entrée, d’alimentation et de sortie nécessaires sur un seul circuit imprimé, ce qui lui permet de s’interfacer facilement avec des microcontrôleurs comme Arduino ou ESP32 pour la lecture et l’amplification audio.

Architecture de l’amplificateur et gestion de la puissance

Au cœur de la carte se trouve le TPA3110 cœur amplificateur Class-D, une architecture d’amplificateur à commutation utilisant la modulation de largeur d’impulsion (PWM) à haute fréquence pour obtenir une amplification audio efficace avec une génération minimale de chaleur. Contrairement aux amplificateurs linéaires, les étages Class-D commutent rapidement les transistors de sortie entre les états marche et arrêt, réduisant ainsi considérablement les pertes par conduction et permettant une meilleure efficacité globale du système.

Le TPA3110 sur cette carte est configuré pour délivrer jusqu’à environ 30 W par canal dans des charges de 4 Ω à 8 Ω lorsqu’il est alimenté par une tension continue suffisamment élevée, de préférence entre 12 V et 24 V. La configuration double canal permet des sorties stéréo gauche et droite simultanées à partir d’une seule carte amplificatrice. L’image ci-dessous montre le brochage de la carte TPA31110 XH-A232.

Pinout of TPA31110 XH-A232
Brochage du TPA31110 XH-A232

En fonctionnement normal, l’amplificateur nécessite une alimentation DC capable de fournir environ 3 A pour supporter une sortie audio proche de la puissance maximale. La carte inclut des composants de découplage et de filtrage pour stabiliser ces courants et réduire le bruit d’alimentation. L’adaptation d’impédance de sortie est généralement adaptée pour des enceintes de 4 Ω à 8 Ω.

Gestion du signal et performances audio

La carte TPA3110 XH-A232 accepte une entrée audio analogique au niveau ligne, qui est ensuite amplifiée par le TPA3110 interne. La sensibilité d’entrée est d’environ 0,775 V. La réponse en fréquence est généralement plate de 20 Hz à environ 20 kHz. Le rapport signal sur bruit est d’environ 100 dB, et la distorsion harmonique totale est ≤ 0,1 % en conditions normales.

Fonctions de protection

La carte intègre plusieurs mécanismes de protection pour améliorer la fiabilité en usage pratique. La protection contre les surtensions protège contre une tension d’alimentation excessive, tandis que la protection contre les courts-circuits et les surintensités aide à prévenir les dommages en cas de court-circuit ou de surcharge des sorties haut-parleur. Une protection thermique est également présente, s’activant si la température du circuit intégré amplificateur ou de la carte dépasse les limites sûres. Le module est conçu pour se rétablir automatiquement lorsque les conditions redeviennent sûres.

Spécifications techniques

Paramètre Spécification
Modèle du module XH-A232
Circuit intégré amplificateur TPA3110 Class-D
Canaux 2.0 (stéréo)
Puissance de sortie nominale 30 W + 30 W (dans des charges de 4 Ω, dépendant de l’alimentation et de la charge)
Tension d’alimentation DC ~8 V à 26 V (fonctionnement typique autour de 12 – 24 V)
Courant d’alimentation recommandé ≥ 3 A
Sensibilité d’entrée ~0,775 V (niveau ligne)
Impédance d’entrée ~20 kΩ
Impédance de charge des enceintes 4 Ω – 8 Ω
Rapport signal sur bruit (SNR) ~100 dB
Distorsion harmonique totale (THD) ≤ 0,1 %
Réponse en fréquence ~20 Hz – 20 kHz
Fonctions de protection Protection contre surtension, surintensité/court-circuit, protection thermique
Dimensions physiques Environ 53 × 45 × 14 – 15 mm
Poids approximatif ~20 – 25 g

Connexion du TPA31110 XH-A232 avec PCM5102 et ESP32

Dans cette section, nous connectons l’amplificateur TPA31110 XH-A232 au DAC PCM5102 et au microcontrôleur ESP32. L’image ci-dessous montre le schéma de câblage complet :

Connecting TPA31110 XH-A232 to PCM5102 and ESP32
Connexion du TPA31110 XH-A232 au PCM5102 et à l’ESP32

Nous commençons par connecter l’ESP32 au PCM5102 via l’interface I2S. Vous pouvez configurer d’autres broches (voir le code dans les sections suivantes), mais ici j’utilise LCK=32, BCK=25 et DIN=33. Le tableau suivant montre les connexions complètes entre l’ESP32 et le PCM5102 :

PCM5102A ESP32
VIN 3V3
GND G
LRCK 32
BCK 25
DIN 33
SCK G

Si vous avez soudé le pont SCK sur le PCM5102, vous n’aurez en fait pas besoin de la connexion SCK à la masse, mais cela ne fait pas de mal. Je vous recommande vivement de lire le Playing Audio with ESP32 and PCM5102A tutoriel, si vous n’avez jamais configuré ou utilisé le PCM5102 auparavant. D’autres ponts doivent être soudés pour assurer le bon fonctionnement du PCM5102 !

Ensuite, nous connectons l’amplificateur TPA31110 XH-A232 via la sortie ligne au PCM5102. Le tableau suivant montre les connexions à réaliser :

TPA31110 XH-A232 PCM5102
L LROUT
bJ AGND
R ROUT

Notez que le marquage des broches du TPA31110 XH-A232 et du PCM5102 est déroutant. La sortie du canal gauche sur le PCM5102 devrait être étiquetée « ROUT » mais est en fait marquée « LROUT ». La broche centrale pour l’entrée ligne est marquée « bJ » alors qu’elle devrait être « G » pour masse.

Notez également que vous aurez besoin d’une alimentation séparée pour le TPA31110 XH-A232 capable de fournir entre 12 V et 24 V et 3 A.

Polarité des enceintes

Les enceintes droite et gauche sont connectées aux broches R+, R-, L+ et L- du TPA31110 XH-A232. Assurez-vous de respecter la polarité des broches de sortie avec celle des enceintes. En général, les broches des enceintes sont marquées par des signes « + » et « – » ou ont des broches de forme différente (plus fines pour le moins).

S’il n’y a pas de marquage, vous pouvez connecter une pile AA 1,5 V et si la membrane se déplace vers l’extérieur, le pôle plus de la pile indique le pôle plus de l’enceinte. La polarité des enceintes est définie de façon à ce qu’une tension positive provoque un mouvement du cône vers l’avant.

Connexion du lecteur de carte SD

Si vous souhaitez lire des fichiers MP3, vous devez connecter un lecteur de carte SD qui stocke les fichiers audio sur une carte SD. Le schéma de câblage ci-dessous montre comment connecter un lecteur de carte SD supplémentaire :

Connecting TPA31110 XH-A232 to PCM5102 and ESP32 with SD Card Reader
Connexion du TPA31110 XH-A232 au PCM5102 et à l’ESP32 avec lecteur de carte SD

Le lecteur de carte SD communique via SPI et les broches SPI par défaut de l’ESP32 sont CS=5, MOSI=23, CLK=18 et MISO=19. Le tableau ci-dessous résume les connexions à réaliser entre le lecteur de carte SD et l’ESP32 :

Lecteur de carte SD ESP32
3V3 3V
GND G
CS/SS 5
MOSI 23
CLK/SCK 18
MISO 19

Si vous n’êtes pas sûr des broches SPI par défaut de votre ESP32, consultez le Find I2C and SPI default pins tutoriel.

La photo suivante montre mon câblage du TPA31110 XH-A232 et du PCM5102A avec un lecteur de carte SD, un ESP32 et deux enceintes pour les tests :

Installation des bibliothèques

Nous allons utiliser la arduino-audio-tools bibliothèque de Phil Schatzmann pour construire notre lecteur Internet, Bluetooth et MP3. Pour installer cette bibliothèque, allez dans le arduino-audio-tools dépôt, cliquez sur le bouton vert « <> Code » puis sur « Download ZIP » pour télécharger la bibliothèque au format ZIP comme montré ci-dessous :

Ensuite, ouvrez un Sketch, allez dans Sketch -> Include Library -> Add .ZIP Library … pour installer la bibliothèque ZIP téléchargée (arduino-audio-tools-main.zip) :

Pour certains exemples de code, nous avons besoin de deux autres bibliothèques de Phil Schatzmann ; à savoir la arduino-libhelix bibliothèque et la ESP32-A2DP bibliothèque. Vous pouvez les installer de la même manière. Cliquez sur le lien pour accéder au dépôt GitHub, cliquez sur le bouton vert « <> Code » pour télécharger les bibliothèques (arduino-libhelix-main.zip, ESP32-A2DP-main.zip) puis installez-les.

Enfin, si c’est la première fois que vous programmez une carte ESP32 depuis votre IDE Arduino, vous devrez aussi installer le core ESP32. Pour plus de détails, consultez le Install ESP32 core in Arduino IDE tutoriel.

Dans les trois sections suivantes, je vous montrerai le code pour construire un lecteur Bluetooth, une radio Internet et un lecteur MP3 en utilisant la bibliothèque arduino-tools-library.

Code pour un lecteur Bluetooth

Ce premier exemple de code configure un ESP32 pour fonctionner comme un récepteur audio Bluetooth A2DP qui reçoit des flux audio stéréo d’un appareil appairé, comme un smartphone, et transmet les données audio numériques via le périphérique I2S.

/*
www.makerguides.com

Libraries:
- ESP32 Core 3.3.6
- [arduino-audio-tools](https://github.com/pschatzmann/arduino-audio-tools) 
  Version: 1.2.2
- [arduino-libhelix](https://github.com/pschatzmann/arduino-libhelix)
  Version: 0.9.2
- [ESP32-A2DP](https://github.com/pschatzmann/ESP32-A2DP)
  Version: 1.8.8
*/

#include "AudioTools.h"
#include "BluetoothA2DPSink.h"

#define DIN_PIN 33   // serial data
#define LRCK_PIN 32  // word select
#define BCLK_PIN 25  // serial clock

I2SStream i2s;
BluetoothA2DPSink a2dp_sink(i2s);

void setup() {
  auto config = i2s.defaultConfig();
  config.pin_bck = BCLK_PIN;
  config.pin_ws = LRCK_PIN;
  config.pin_data = DIN_PIN;  
  i2s.begin(config);

  a2dp_sink.start("MyMusic");
}

void loop() { }

Le code initialise une interface I2SStream avec les broches d’horloge, de sélection de mot et de données série assignées, connectées à un convertisseur numérique-analogique PCM5102. Le PCM5102 convertit le signal audio numérique I2S entrant en un signal stéréo analogique, qui est ensuite amplifié par le module amplificateur XH-A232 basé sur le TPA3110 pour alimenter deux enceintes connectées.

Lors de l’initialisation, l’ESP32 configure le pilote I2S avec la configuration de broches spécifiée et démarre le récepteur Bluetooth A2DP avec le nom d’appareil « MyMusic », rendant l’ESP32 détectable comme récepteur audio Bluetooth.

Une fois appairé et connecté, l’audio transmis via Bluetooth est directement acheminé via l’interface I2S vers le DAC puis amplifié pour la lecture. La boucle principale reste vide car la gestion audio et la communication Bluetooth sont prises en charge en interne par les bibliothèques sous-jacentes et s’exécutent de manière asynchrone en arrière-plan.

Code pour une radio Internet

Cet exemple de code utilise un ESP32 comme récepteur radio Internet Wi-Fi qui diffuse un flux audio MP3 en ligne, le décode en temps réel, et transmet à nouveau le signal audio via I2S au DAC PCM5102A. Le signal analogique généré par le DAC est ensuite amplifié par le TPA31110 XH-A232 pour alimenter les enceintes connectées.

/*
www.makerguides.com

Libraries:
- ESP32 Core 3.3.6
- [arduino-audio-tools](https://github.com/pschatzmann/arduino-audio-tools) 
  Version: 1.2.2
- [arduino-libhelix](https://github.com/pschatzmann/arduino-libhelix)
  Version: 0.9.2
*/

#include <Arduino.h>
#include <WiFi.h>
#include <Wire.h>
#include "AudioTools.h"
#include "AudioTools/AudioCodecs/CodecMP3Helix.h"
#include "AudioTools/Communication/HTTP/ICYStream.h"

// PCM5102A
#define DIN_PIN 33   // serial data
#define LRCK_PIN 32  // word select
#define BCLK_PIN 25  // serial clock
#define VOLUME 0.3   // Volume

const char* ssid = "ssid";
const char* password = "pwd";
const char* url = "https://jazz.stream.laut.fm/jazz";

ICYStream icystream;
I2SStream i2s;
VolumeStream volume(i2s);
EncodedAudioStream mp3decode(&volume, new MP3DecoderHelix());
StreamCopy copier(mp3decode, icystream);

void callbackMetadata(MetaDataType type, const char* str, int len) {
  Serial.printf("%s: %s\n", toStr(type), str);
}

void setup() {
  Serial.begin(115200);
  AudioLogger::instance().begin(Serial, AudioLogger::Warning);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }

  auto config = i2s.defaultConfig(TX_MODE);
  config.pin_bck = BCLK_PIN;
  config.pin_ws = LRCK_PIN;
  config.pin_data = DIN_PIN;

  i2s.begin(config);
  volume.begin(config);
  volume.setVolume(VOLUME);
  mp3decode.begin();
  icystream.begin(url);
  icystream.setMetadataCallback(callbackMetadata);
}

void loop() {
  copier.copy();
}

Lors de l’initialisation, l’ESP32 se connecte à un réseau Wi-Fi spécifié en utilisant le SSID et le mot de passe fournis. Vous devrez remplacer les chaînes « ssid » et « pwd » par les identifiants de votre réseau Wi-Fi.

Une fois la connexion sans fil établie, le code initialise le périphérique I2S en mode transmission et assigne les broches d’horloge, de sélection de mot et de données série pour correspondre à l’interface matérielle du PCM5102A. Un objet VolumeStream est superposé au flux I2S pour appliquer une mise à l’échelle numérique du volume avant que les données audio ne soient envoyées au DAC.

Le programme ouvre une connexion HTTP vers l’URL de streaming spécifiée en utilisant un ICYStream, qui supporte les métadonnées ICY couramment utilisées par les stations de radio Internet. Les données audio encodées en MP3 reçues sont transmises à un EncodedAudioStream configuré avec le décodeur MP3 Helix, qui effectue le décodage en temps réel des trames audio compressées en échantillons PCM bruts. Ces échantillons décodés sont ensuite transmis à travers l’étage de contrôle du volume et finalement envoyés via I2S au DAC.

Une fonction de rappel pour les métadonnées est enregistrée pour recevoir et afficher les métadonnées du flux, comme le titre du morceau en cours, sur le moniteur série. Dans la boucle principale, l’objet StreamCopy transfère continuellement les données du flux réseau à travers le décodeur et la chaîne de traitement audio, assurant une lecture ininterrompue tant que le flux est disponible.

Voici une liste d’URL pour quelques autres stations de radio Internet que vous pouvez essayer :

"https://jazz.stream.laut.fm/jazz"
"http://vis.media-ice.musicradio.com/CapitalMP3";
"http://stream.srg-ssr.ch/m/rsj/mp3_128"
"http://stream.live.vc.bbcmedia.co.uk/bbc_world_service"
"http://icecast.omroep.nl/radio1-bb-mp3"
"http://stream-02-eu.relaxingjazz.com/stream/1/"

Code pour un lecteur MP3

Ce dernier programme utilise l’ESP32 comme lecteur audio MP3 autonome qui lit des fichiers audio depuis une carte SD, les décode en temps réel, et transmet le signal PCM résultant via l’interface I2S au DAC PCM5102A. La sortie analogique du DAC est ensuite amplifiée par le TPA31110 XH-A232 et envoyée aux enceintes.

/*
www.makerguides.com

Libraries:
- ESP32 Core 3.3.6
- [arduino-audio-tools](https://github.com/pschatzmann/arduino-audio-tools) 
  Version: 1.2.2
- [arduino-libhelix](https://github.com/pschatzmann/arduino-libhelix)
  Version: 0.9.2
*/

#include "AudioTools.h"
#include "AudioTools/Disk/AudioSourceSD.h"
#include "AudioTools/AudioCodecs/CodecMP3Helix.h"

// PCM5102A
#define DIN_PIN 33   // serial data
#define LRCK_PIN 32  // word select
#define BCLK_PIN 25  // serial clock
#define VOLUME 0.5   // Volume

#define PATH "/"
#define EXT "mp3"

AudioSourceSD source(PATH, EXT);
I2SStream i2s;
MP3DecoderHelix decoder;
AudioPlayer player(source, i2s, decoder);

void printMetaData(MetaDataType type, const char* str, int len){
  Serial.printf("%s: %s\n", toStr(type), str);
}

void setup() {
  Serial.begin(115200);
  AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Warning);

  auto config = i2s.defaultConfig(TX_MODE);
  config.pin_bck = BCLK_PIN;
  config.pin_ws = LRCK_PIN;
  config.pin_data = DIN_PIN;  
  i2s.begin(config);

  player.setMetadataCallback(printMetaData);
  player.setVolume(VOLUME);
  player.begin();
}

void loop() {
  player.copy();
}

Un objet AudioSourceSD est initialisé pour accéder aux fichiers MP3 stockés sur la carte SD dans le répertoire racine. La source est configurée pour sélectionner les fichiers avec l’extension “mp3”, permettant au système d’itérer à travers les fichiers audio compatibles disponibles sur la carte. L’objet AudioPlayer combine la source carte SD, un flux de sortie I2S, et le décodeur MP3 Helix en une seule chaîne de lecture.

Lors de l’initialisation, l’ESP32 configure la communication série pour le débogage et configure le périphérique I2S en mode transmission avec les broches d’horloge, de sélection de mot et de données série explicitement assignées et connectées au PCM5102A. Le lecteur audio est configuré avec une fonction de rappel pour les métadonnées afin d’afficher des informations telles que le titre ou l’artiste sur le moniteur série lorsque disponibles. Un niveau de volume numérique est également défini avant le début de la lecture.

Dans la boucle principale, la fonction player.copy() traite continuellement le flux audio. Le lecteur lit les données MP3 depuis la carte SD, les décode avec le décodeur Helix en échantillons PCM bruts, et envoie l’audio traité via l’interface I2S au DAC pour la lecture. Ce mécanisme de streaming en boucle assure une sortie audio continue tant que des fichiers MP3 valides sont disponibles sur la carte SD.

Conclusions

Dans ce projet, vous avez appris à lire de l’audio en utilisant l’ESP32 et l’amplificateur TPA31110 XH-A232 en conjonction avec un DAC PCM5102. Nous avons exploré les détails techniques du TPA31110 XH-A232 et comment le câbler à l’ESP32. Vous avez également appris à diffuser la radio Internet, lire des fichiers MP3 depuis une carte SD et jouer de l’audio via Bluetooth. Pour plus d’exemples de code, consultez le dossier examples de la arduino-tools-library.

Ce tutoriel est basé sur le DAC PCM5102. Pour plus d’informations sur le PCM5102, consultez le Playing Audio with ESP32 and PCM5102A tutoriel. De même, si vous avez besoin de plus d’informations sur le module lecteur de carte SD utilisé ici, jetez un œil au SD Card Module with ESP32 tutoriel.

Enfin, si vous n’avez pas besoin de 30 watts de sortie stéréo et souhaitez une solution plus simple, lisez notre Playing Audio with ESP32 and MAX98357 tutoriel. Le MAX98357A est un DAC avec amplificateur intégré capable d’alimenter de petites enceintes de 3 watts. Le son ne sera pas aussi puissant qu’avec l’amplificateur TPA31110 XH-A232, mais le circuit est plus simple et vous pouvez utiliser des enceintes plus petites et moins chères.

N’hésitez pas à poser d’autres questions dans la section commentaires.

Bon bricolage ; )