Articles Tagués ‘ADC’

Bonjour à tous !

Je viens vous faire partager ma première librairie destinée à gérer un MCP3424 qui est un ADC (Analogic to Digital Converter) connectable en i2c.

Pour les débutants : en gros un ADC correspond à la fonction analogRead() sur arduino, sauf qu’ici on va le voir un peu plus loin, en plus performant smiley-wink Et l’i2c  c’est un protocole de communication qui utilise 2 fils et un système d’adresse. Donc on peut en brancher plusieurs sans avoir besoin d’utiliser d’autres pins.

Pour commencer la datasheet de la bête.

Alors le format est pas sympa si on veut faire du prototypage, mais il existe des adaptateurs à souder.

Sans titre

Les point importants à retenir : il a 4 voies et comporte un amplificateur différentiel en entrée, autrement dit on peut soit faire une différence entre deux tensions (par exemple sur un montage en pont de wheatstone) soit mettre une borne à la masse et se servir de l’autre pour mesurer une tension simple.

Ensuite à retenir : il peut mesurer des différences maxi de +- 2.048V, autrement dit, si on met une borne à la masse, l’amplificateur sera saturé à 2,048V. En revanche en différentiel ça fait une amplitude totale de 2 * 2.048 = 4.096 V. Le gain de l’amplificateur est directement programmable, de 1 à 8, sachant que la limite des +- 2.048V est valable pour l’étage ADC, donc par exemple à gain = 8, la saturation sera atteinte à 2.048 / 8 = 0,256V. La résolution est également programmable, on a le choix entre 12, 14, 16 ou 18 bits, avec des vitesses d’échantillonnage de plus en plus lente au fur et à mesure qu’on est plus précis. On peut ensuite choisir entre deux mode de conversion : un mode « one-shot » et un mode continu.

Pour la librairie et bien c’est au final très simple à mettre en oeuvre, je vous invite à consulter les exemples joints à la librairie, en voici un :

#include <MCP3424.h>
#include <Wire.h>

MCP3424 MCP(6); // Declaration of MCP3424 i2c adress=6

long Voltage[4]; // Array used to store results

void setup() {
Serial.begin(9600);  // start serial for output
}

void loop(){

for(int i=1;i<=4;i++){

 MCP.Configuration(i,18,1,8);
 Voltage[i]=MCP.Measure();
 Serial.print("Channel ");
 Serial.print(i);
 Serial.print(" : ");
 Serial.print(Voltage[i]);
 Serial.println(" microVolt");

 }

 delay(500);

 }

Ici on balaye les 4 canaux. A noter également que lorsque l’on fait appel à la fonction Measure(), le programme attend que la conversion soit terminée.

Alors au niveau des perfs, et bien je dois avouer que je suis épaté par ce composant : je mesure des tensions de l’ordre du µV sans problème. En plus il possède sa propre référence analogique ce qui lui permet d’être très juste et l’i2c permet de le placer au plus près de la source ce qui limite les risques de parasite.

Et enfin le plus important, la librairie !

Voila j’espère que ça servira à d’autres et n’hésitez pas s’il y a des questions smiley-wink