L’Arduino n’a pas de vraie sortie analogique : analogWrite() ne fait que découper une tension en créneaux rapides (PWM), ce qui suffit pour une LED mais pas pour une consigne de tension. Le MCP4725 comble ce manque : c’est un convertisseur numérique-analogique de 12 bits qui délivre une tension continue et stable, réglable pas à pas, sur deux fils seulement.
Le module livré est prêt à câbler : le circuit, ses résistances de tirage et son bornier sont sur une petite carte sérigraphiée MCP4725 / HW-315, avec un peigne de 6 broches à souder si vous voulez le planter sur une plaque d’essai.
Ce que fait ce module
Vous écrivez un nombre entre 0 et 4095 par le bus I2C, et la broche OUT affiche immédiatement la tension correspondante, proportionnelle à l’alimentation du module : de 0 V à VCC, par pas de VCC divisé par 4096. Une fois la valeur posée, elle reste là sans que le microcontrôleur ait à s’en occuper.
- Consigne analogique — une tension de référence ou un point de polarisation réglé au pas près.
- Signal analogique propre — remplacer un PWM qu’il faudrait filtrer, pour de l’audio simple, un balayage ou une commande de VCO.
- Potentiomètre numérique — une tension ajustable par programme, sans pièce mécanique qui s’use.
- Étalonnage et simulation — simuler la sortie d’un capteur pour tester un montage en amont.
- Commande de puissance — piloter un driver, un transistor ou un variateur à partir d’une tension de référence.
Caractéristiques techniques
| Circuit | Microchip MCP4725 — convertisseur numérique-analogique 1 voie, boîtier SOT-23-6 |
|---|---|
| Carte | Module sérigraphié MCP4725 / HW-315, bornier de 6 pastilles, peigne mâle fourni |
| Résolution | 12 bits — 4096 pas de tension |
| Alimentation | 2,7 à 5,5 V continu; 5 V de l’Arduino en pratique (la carte fonctionne aussi en 3,3 V) |
| Tension de sortie | 0 V à VCC, proportionnelle à la valeur écrite — sortie tamponnée, rail à rail |
| Temps d’établissement | 6 µs (valeur typique) |
| Interface | I2C : 100 kHz (standard), 400 kHz (fast) et jusqu’à 3,4 Mbit/s (high speed) |
| Adresse I2C | 0x60 par défaut; la pastille ADDR, reliée à VCC, décale l’adresse d’une unité |
| Mémoire | EEPROM interne — la valeur et la configuration sont conservées hors tension |
| Tirage du bus | Résistances de tirage I2C déjà soudées sur la carte : rien à ajouter pour un montage court |
| Température de service | −40 °C à +125 °C pour le circuit |
Brochage du module
Le bornier compte six pastilles, dans cet ordre imprimé sur la carte :
| OUT | La sortie analogique. C’est la tension réglée par le programme — celle qu’on mesure au multimètre ou qu’on envoie à la suite du montage. |
|---|---|
| GND | Première masse. À relier au GND de l’Arduino : sans référence commune, la tension de sortie n’a aucun sens. |
| SCL | Horloge du bus I2C. Sur un Arduino Uno ou Nano, c’est la broche A5. |
| SDA | Données du bus I2C. Sur un Arduino Uno ou Nano, c’est la broche A4. |
| VCC | Alimentation du module. À relier au 5 V de l’Arduino — jamais à une sortie numérique. |
| GND | Seconde masse, identique à la première. Le pas de 2,54 mm rend le bornier compatible avec une plaque d’essai. |
À côté du circuit, trois pastilles plus petites portent les mentions GND, ADDR et VCC : c’est là que l’on fixe l’état de la broche d’adressage. Laissée sur la masse, le module répond en 0x60; reliée à VCC, il répond en 0x61 — de quoi poser deux convertisseurs sur le même bus I2C. Si votre exemplaire porte une sérigraphie dans un autre ordre, c’est la carte reçue qui fait foi.
Mini-projet : une rampe de tension vérifiable au multimètre
Matériel
- un module MCP4725;
- une carte Arduino Uno ou Nano;
- une plaque d’essai et quatre fils de liaison;
- un multimètre réglé sur la tension continue (facultatif, mais c’est la preuve du fonctionnement).
Câblage
- VCC du module → 5 V de l’Arduino;
- GND du module → GND de l’Arduino;
- SDA du module → A4;
- SCL du module → A5;
- OUT → pointe rouge du multimètre, masse du multimètre sur GND de l’Arduino.
Programme
Le programme n’a besoin d’aucune bibliothèque externe : la bibliothèque Wire.h, fournie avec l’IDE Arduino, suffit à écrire la valeur dans le convertisseur.
/* Convertisseur MCP4725 (DAC 12 bits I2C) - rampe de tension
* Composants, brochage et fiche complete : www.marocproduits.com
*/
#include "Wire.h"
const uint8_t ADRESSE = 0x60; // adresse d'usine du MCP4725 (broche ADDR sur la masse)
// Ecrit une valeur de 0 a 4095 dans le registre du convertisseur
void ecrireDac(uint16_t valeur) {
Wire.beginTransmission(ADRESSE);
Wire.write(0x40); // commande : ecriture du registre du DAC
Wire.write(valeur / 16); // 8 bits de poids fort
Wire.write((valeur % 16) * 16); // 4 bits de poids faible, alignes a gauche
Wire.endTransmission();
}
void setup() {
Wire.begin(); // SDA = A4 et SCL = A5 sur Uno et Nano
ecrireDac(0); // sortie au plus bas de sa plage au demarrage
delay(100);
}
void loop() {
// Rampe montante, du minimum a la pleine echelle
for (uint16_t valeur = 0; valeur != 4096; valeur = valeur + 64) {
ecrireDac(valeur);
delay(20);
}
// Rampe descendante, de la pleine echelle au minimum
for (uint16_t valeur = 4096; valeur != 0; valeur = valeur - 64) {
ecrireDac(valeur - 64);
delay(20);
}
}Si le multimètre reste à 0 V et ne bouge pas, c’est que le module ne répond pas : vérifiez d’abord SDA sur A4 et SCL sur A5, puis l’appel à Wire.begin() dans setup(). Une inversion des deux fils de données est l’erreur la plus fréquente sur ce montage.
Ce que l’on observe
La tension de sortie monte et descend en marches d’escalier régulières : chaque pas vaut VCC divisé par 4096, soit environ 1,2 mV avec une alimentation en 5 V. C’est la démonstration que la sortie est bien un niveau continu réglé au pas, et non un signal découpé comme un PWM.
Conserver la tension hors tension
Le MCP4725 possède une EEPROM interne. En remplaçant la commande 0x40 par 0x60 dans la fonction d’écriture, la valeur est enregistrée et appliquée : au prochain branchement, le convertisseur restitue cette tension de lui-même, sans qu’aucune ligne de programme ne soit exécutée.
Point d’attention : l’EEPROM a une endurance limitée, de l’ordre du million d’écritures. Enregistrez une valeur de consigne (au démarrage, ou sur une action de l’utilisateur), mais n’écrivez jamais en EEPROM dans la boucle principale — pour une rampe ou un signal qui varie, restez sur la commande 0x40, qui ne touche que la mémoire volatile.
Questions fréquentes
Pourquoi ne pas se contenter de analogWrite() ?
Parce que analogWrite() produit un signal carré à environ 490 Hz ou 980 Hz, pas une tension continue. Pour l’obtenir, il faut ajouter un filtre RC qui arrondit les créneaux — au prix d’une tension qui varie avec la charge et d’un temps de réponse long. Le MCP4725 donne directement la tension voulue, et sa valeur est connue à l’unité près sur 4096 pas.
Peut-on l’alimenter en 3,3 V ?
Oui. Le circuit accepte de 2,7 à 5,5 V, et comme la sortie est proportionnelle à l’alimentation, un module alimenté en 3,3 V délivre de 0 à 3,3 V. C’est le montage à retenir avec un ESP32 ou un ESP8266, dont le bus I2C fonctionne aussi en 3,3 V.
Le convertisseur peut-il piloter directement une LED ou un moteur ?
Non. La sortie est une tension de signal, pas une sortie de puissance : elle sert de consigne à un étage qui fournit le courant, transistor, relais ou driver de moteur. Brancher une charge directement sur OUT fausserait la tension et n’alimenterait rien correctement.
Combien de MCP4725 sur un même bus I2C ?
Deux adresses par exemplaire (0x60 ou 0x61 selon la pastille ADDR). Comme le circuit existe en quatre variantes d’adresse fixées en usine, on peut en aligner jusqu’à huit sur le même couple SDA / SCL. Sur ce module, la variante la plus répandue répond en 0x60 : un balayage du bus I2C (le croquis I2C Scanner de l’IDE Arduino) affiche l’adresse réelle en quelques secondes.
Faut-il souder quelque chose ?
Non, pas pour un essai : les pastilles acceptent des fils femelle-femelle. Le peigne mâle fourni se soude si vous préférez planter le module sur une plaque d’essai ou un shield. Pour un montage définitif, soudez plutôt des fils ou un connecteur : les pastilles sont traversantes et faites pour ça.
La tension de sortie est-elle vraiment de 0 à 5 V ?
Avec une alimentation en 5 V, la pleine échelle vaut 5 V multiplié par 4095 divisé par 4096, soit un peu moins de 5 V : la valeur maximale n’atteint jamais exactement l’alimentation. La valeur 0 place la sortie au plus bas de sa plage. Si votre montage réclame précisément 0 à 5 V, mesurez la sortie réelle à la pleine échelle et corrigez la consigne en conséquence dans le programme.
À combiner avec
Le module se câble sur n’importe quelle carte à bus I2C : sur un Arduino Uno R3, SDA et SCL sont en A4 et A5 comme dans le programme de cette page. Pour monter le circuit sans soudure, une plaque d’essai 830 points et un jeu de dix fils Dupont suffisent, et un multimètre DT9205 permet de vérifier chaque tension écrite, pas à pas.
Si vous avez besoin d’une alimentation de laboratoire plus stable que l’USB pour vos mesures, une alimentation 5 V 2 A donne une référence fixe. Et pour partager le même bus I2C avec un autre périphérique, l’afficheur LCD 1602 en I2C cohabite sans difficulté avec le convertisseur : les deux adresses sont différentes, et le programme peut afficher la tension qu’il vient d’écrire.











Omar –
Merci a vous