Ceci est une ancienne révision du document !
Convertisseur analogique numérique
[Mise à jour le 5/5/2024]
MCP3424
- Source : wiki
Ce module amplificateur différentiel 4 canaux à faible bruit est basé sur un MCP3432 18 bits à gain réglable et communique avec un microcontrôleur via le bus I2C. Il permet d'ajouter 4 entrées analogiques sur une carte à microcontrôleur.
</callout>
* Distributeur : Mouser
* Caractéristiques
* Alimentation: 2,7 à 5,5 Vcc
* Consommation en standby: 300 nA sous 5 Vcc
* Gain programmable PGA: x1, x2, x4 ou x8
* Plage de mesure différentielle: de -2,048/Gain à +2,048/Gain (par exemple de -0,512 à +0,512 V pour un gain de 4)
* Résolution programmable: 12, 14, 16 ou 18 bits
* Vitesse: 240, 60, 15 ou 3,75 mesures/seconde
* Erreur gain: 0,05 % (gain = 1 sous 18 bits)
* Erreur offset: 15 µV (gain = 1 sous 18 bits)
* Interface série I2C: SLA = 0X68, 0X6A, 0X6C ou 0X6E (sélectionnable par dip-switch)
* Référence de tension interne: 2,048 Vcc ± 0,05%
* T° de service: -40 à +125 °C
* Dimensions: 27 x 16 x 12 mm
* Présentation du circuit sur Github
* Documentation : pdf à télécharger
* Programmation d'une carte Arduino Uno R3
* Bibliothèques à installer dans l'IDE : MCP342x
* Sources sur Github
* Connexion à un shield Tinkerkit v2 monté sur une Arduino Uno
* Un premier exemple pour tester le circuit
<code cpp *.cpp>
Connexion à un capteur de température LM35
#include <Wire.h>
#include <MCP342x.h>
0x68 est l'adresse par défaut des circuits MCP342x
uint8_t address = 0x68;
Création de l'objet adc
MCP342x adc = MCP342x(address);
void setup(void)
{
Initialisation de la console
Serial.begin(9600);
Initialisation du bus I2C
Wire.begin();
Enable power for MCP342x (needed for FL100 shield only)
pinMode(9, OUTPUT);
digitalWrite(9, HIGH);
Reset du circuit
MCP342x::generalCallReset();
delay(1); MC342x nécessite 300us pour se paramétrer, on attend 1ms
Vérification de la présence du MCP342x
Wire.requestFrom(address, (uint8_t)1);
if (!Wire.available())
{
Serial.print(“Pas de circuit à cette adresse ”);
Serial.println(address, HEX);
while (1)
;
}
}
void loop(void)
{
long value = 0, tension_mV = 0;
int gain, resolution;
MCP342x::Config status;
—————————————————————————————
Déclenchement d'une conversion. La méthode convertAndRead() attend la fin de la conversion
On passe les paramètres suivants à la fonction dans l'ordre :
- canal : channel1, channel2, channel3 ou channel4 pour un MCP3424
- type de conversions : oneshot ou continous
- résolution : resolution12, resolution14, resolution16 ou resolution18
- gain : gain1, gain2, gain4 ou gain8
timeout = temps accordé à la transaction en ms (1000000 dans cet exemple !)
A l'issue de la conversion
- value = gain * (2^résolution/2^12) * tension du canal sélectionné en mv
- status identifie la valeur du gain et de la résolution
| gain | résolution | status |
| 1 | 12bits | 0 |
| 2 | 12 | 1 |
| 4 | 12 | 2 |
| 8 | 12 | 3 |
| 1 | 14bits | 4 |
etc.
| 1 | 16bits | 8 |
etc.
| 1 | 18bits | 12 |
etc.
—————————————————————————————
Conserver la valeur des trois derniers paramètres
uint8_t err = adc.convertAndRead(MCP342x::channel1, MCP342x::oneShot,
MCP342x::resolution12, MCP342x::gain4,
1000000, value, status);
if (err)
{
Serial.print(“Erreur de conversion : ”);
Serial.println(err);
}
else
{
switch (status)
{
case 2:
gain = 4;
resolution = 12;
break;
case 6:
gain = 4;
resolution = 14;
break;
case 10:
gain = 4;
resolution = 16;
break;
case 14:
gain = 4;
resolution = 18;
break;
}
Serial.print(“value = ”);
Serial.println(value);
Serial.print(“Tension sur le canal 1 : ”);
tension_mV = value / (gain * pow(2, resolution - 12));
Serial.print(tension_mV);
Serial.println(“mV”);
Serial.print(“Temperature mesuree par le LM35 : ”);
Serial.print(tension_mV / 10.0);
Serial.println(“C”);
}
delay(1000);
}
</code>





- materiels/can/mcp3424.1714919358.txt.gz
- Dernière modification : 2024/05/05 16:29
- de
phil