MCP3424, comment lire les canaux en parallèle?

9

A propos de cette question

Je n'ai pas de formation en génie électronique, et c'est l'un de mes premiers défis avec la communication via I2C, et avec l'écriture dans un registre, alors s'il vous plaît ne supposez pas trop de connaissances de mon côté. Je programme un Arduino.

En posant des questions sur un composant / puce électronique spécifique, je suppose que les gens ne peuvent pas expérimenter / tester pour me donner une réponse correcte. Je m'attends également à ce que les gens ne connaissent même pas cette composante. Je vais donc essayer d'ajouter beaucoup d'informations dans cette question.

Veuillez me faire savoir si vous avez besoin de plus d'informations.

Le composant possède quatre ADC

J'utilise le composant 4 canaux, MCP3424 ( fiche technique ). Il vient dans deux paquets. J'utilise la version MCP3424 E / SL, SOIC 4 canaux, pas la version MCP3422 ou MCP3423 2 canaux.

Je crois qu'il a quatre ADC. Sur RS-Online, il semble que la version E / SL dispose de 4 ADC ( lien direct ), tandis que l'E / ST n'en a qu'un ( lien direct ). entrez la description de l'image ici

Je suppose que cela doit signifier qu'il peut faire un échantillonnage sur plusieurs canaux simultanément. Je ne vois aucune autre raison de mettre plus d'un ADC sur le composant.

Ai-je raison?

Communication via I2C

La communication se produit en envoyant un octet de configuration, puis en attendant la fin d'un échantillonnage et en lisant le résultat.

Format de l'octet de configuration

entrez la description de l'image ici

Les plus intéressants sont:

  • bit trois à partir de la gauche, en comptant à partir de 1: échantillonnage continu
  • bits un et deux à partir de la gauche, en comptant à partir de 1: Adresse

Vous trouverez plus d'informations sur l'octet de configuration sur la page 18 de la fiche technique, également illustrée ici .

Format du résultat de lecture

Mes exemples ne seront qu'avec une résolution de 18 bits (bits 5 et 6 mis à 1). Le résultat de la relecture sera de quatre octets: les trois premiers contenant la valeur et le quatrième contenant l'octet de configuration.

Cependant, le bit le plus à gauche,! RDY, indique si la valeur est "nouvelle", c'est-à-dire s'il s'agit d'une nouvelle lecture, depuis la dernière lecture. La première fois que vous lisez un résultat, la valeur est 0 et pour les suivants, elle est 1, jusqu'à ce que l'ADC soit prêt avec une nouvelle valeur d'échantillon.

Comment l'utiliser sans échantillonnage en parallèle

Je sais parfaitement comment faire ça. Et tous les exemples que j'ai trouvés en ligne, aussi simples que ça. Écrivez simplement un octet de configuration dans le composant, puis relisez une valeur.

Comment configurer chaque canal pour échantillonner automatiquement en continu et lire les canaux en parallèle

Le pseudo-code pourrait ressembler à

setup():
    start sampling channel 1, 18bit, 0gain, continuously
    start sampling channel 2, 18bit, 0gain, continuously
    start sampling channel 3, 18bit, 4gain, continuously
    start sampling channel 1, 18bit, 2gain, continuously

readADCs():
    // Run every 500ms
    // 18 bit samples take 375ms, so must happen in parallel 
    // to get a new sample for all every 500ms
    read channel 1
    read channel 2
    read channel 3
    read channel 4

Ma meilleure tentative

J'espère donc que ce qui suit définit chaque ADC à échantillonner en continu. Ceci est du code Arduino.

void setup() {

    Wire.write(0b00011100);
    Wire.write(0b01011100);
    Wire.write(0b10011110);
    Wire.write(0b11011101);
}

Ensuite, comment lire une chaîne spécifique. Si je demande juste au composant le résultat, il retournera le résultat du canal sur le registre. Avec la configuration ci-dessus, j'obtiendrais la lecture du canal 4. Mais disons que je veux la lecture du canal 2. D'une certaine manière, je dois juste lui dire que je veux le résultat du canal 2. Je ne veux pas lui demander d'échantillonner quoi que ce soit, il devrait juste continuer à faire un échantillonnage continu, et je veux juste l'échantillon le plus rancunier qu'il ait créé lors de l'échantillonnage automatique.

Voici ma meilleure estimation

void readADCs() {

    // Channel 1
    // ...

    // Channel 2
    Wire.beginTransmission(104);
    Wire.write(0b01011100); // I hope not to affect, just to select
    Wire.endTransmission();
    Wire.requestFrom(104);
    Wire.read(); // val byte 1
    Wire.read(); // val byte 2
    Wire.read(); // val byte 3
    Wire.read(); // config byte
}

Donc, ma meilleure supposition est. Si je veux lire le canal 2, j'écris un octet de configuration qui est exactement le même que celui que j'ai utilisé pour commencer l'échantillonnage du canal 2.

Cependant, cela ne fonctionne pas. Aucun échantillon n'est prêt, même s'il a dépassé les 375 ms nécessaires.

Comment puis-je y parvenir?

J'ai essayé de faire de mon mieux pour décrire le résultat souhaité et ce que j'ai essayé, mais je sais que ce n'est pas facile à lire.

Pourriez-vous me donner des conseils sur la façon de laisser tous les ADC échantillonner en parallèle, puis de les lire, sans interférer?

Mads Skjern
la source
Bon départ. La seule chose qui manque est un lien vers la fiche technique du MCP3424, que j'ai ajoutée.
JRE
Le MCP3424 est disponible en deux packages, pas en versions, et les deux sont 4 canaux. ST est TSSOP, SL est Soic. Il y a le MCP3422 2 canaux, adresse fixe, MCP3423, 2 canaux, adresse réglable et MCP3424 4 canaux.
Passerby le
+1 Question très approfondie et bien écrite. Malheureusement, cette puce est un seul ADC. Cela est illustré dans sa fiche technique dans le "Diagramme fonctionnel". Vous avez lu les canaux d'entrée comme signifiant ADC. Le fait d'avoir de nombreux canaux d'entrée permet à un ADC d'être utilisé pour échantillonner de nombreux signaux différents (séquentiellement). L'ADC est beaucoup plus cher à fabriquer qu'un multiplexeur analogique (qui sélectionne le canal), et l'échantillonnage de plusieurs signaux est une exigence courante. Par conséquent, les puces ADC fonctionnent souvent de cette façon. Andy aka a répondu à votre question, mais attendez peut-être avant d'accepter, car vous obtiendrez peut-être plus d'informations.
gbulmer
Je croyais qu'il y avait 4 ADC, car RS-Online a dit que E / SL en avait 4 et E / ST en avait 1. J'ai ajouté à la description
Mads Skjern
2
@MadsSkjern ignore RS, Microchip et leur fiche technique est reine. C'est une erreur sur RS. Les erreurs sur les sites de distribution sont assez courantes.
Passerby le

Réponses:

11

J'ai ce dernier avec quatre ADC. Je suppose que cela doit signifier qu'il peut faire un échantillonnage sur plusieurs canaux simultanément.

Malheureusement non. Il n'y a qu'un seul CAN et, pour convertir plus d'un canal, cela doit être fait séquentiellement en adressant le multiplexeur interne "lisant" ainsi un autre canal. Pas d'échantillonnage simultané malheureusement: -

entrez la description de l'image ici

Notez que le multiplexeur d'entrée sélectionne UNIQUEMENT un des quatre canaux à la fois. Il s'agit d'une méthode assez courante pour lire plusieurs canaux, mais il existe des ADC d'échantillonnage simultané. Essayez de regarder les portefeuilles de technologie linéaire, TI ou ADI.

Andy aka
la source
+1, vous me battez :-) Cela vaut peut-être la peine de préciser qu'il est assez courant pour un ADC d'échantillonner plusieurs canaux, car il peut échantillonner différents signaux analogiques, ce qui est un cas courant.
gbulmer
De plus, si de faibles taux d'échantillonnage sont requis, le multiplexage / entrelacement est souvent suffisant
Scott Seidman
Des améliorations spectaculaires, monsieur.
gbulmer
@ bulbul vous êtes trop gentil monsieur !!
Andy aka
5

Le MCP3424 est un ADC unique avec un multiplexeur à l'avant.

Ce diagramme de la fiche technique le montre assez clairement

Architecture du MCP3424

La fiche technique soutient cela avec l'introduction:

4.1 Présentation générale

Les dispositifs MCP3422 / 3/4 sont des convertisseurs A / N Delta-Sigma 18 bits multicanaux basse consommation différentiels avec une interface série I2C. Les dispositifs contiennent un multiplexeur de sélection de canal d'entrée (multiplexeur), un amplificateur à gain programmable (PGA), une référence de tension intégrée (2,048 V) et un oscillateur interne.

Par conséquent, vous ne pouvez pas convertir différents canaux vraiment simultanément, mais vous pouvez échantillonner les canaux séquentiellement avec un délai relativement court entre eux.

Lorsque vous utilisez l'appareil, vous devez vous assurer que les bits d'adresse I2C sont stables; encore une fois, de la fiche technique:

Le MCP3423 et le MCP3424 ont deux broches d'adresse de périphérique externe (Adr1, Adr0). Ces broches peuvent être définies sur une logique haute (ou liée à VDD), basse (ou liée à VSS), ou laissée flottante (non connectée à quoi que ce soit, ou liée à VDD / 2), ces combinaisons de niveau logique utilisant les deux broches autorisez huit adresses possibles. Le tableau 5-3 montre l'adresse du périphérique en fonction de l'état logique des broches de sélection d'adresse. Le périphérique échantillonne l'état logique des broches Adr0 et Adr1 dans les événements suivants:

une. Mise sous tension de l'appareil.

b. Réinitialisation générale des appels

(Voir la section 5.4 «Appel général»).

c. Verrou d'appel général

(Voir la section 5.4 «Appel général»).

Le périphérique échantillonne l'état logique (broches d'adresse) pendant les événements ci-dessus et verrouille les valeurs jusqu'à ce qu'un nouvel événement de verrouillage se produise. Pendant le fonctionnement normal (une fois les broches d'adresse verrouillées), les broches d'adresse sont désactivées en interne du reste du circuit interne.

Il est recommandé d'émettre une commande General Call Reset ou General Call Latch une fois après la mise sous tension de l'appareil. Cela garantira que l'appareil lit les broches d'adresse dans un état stable et évite de verrouiller les bits d'adresse pendant que l'alimentation augmente. Cela pourrait entraîner une détection inexacte des broches d'adresse.

Je vous suggère de suivre cette recommandation pour vous assurer que vous communiquez vraiment avec l'appareil.

Pour lire un canal particulier, vous devez sélectionner le canal dans le registre de configuration et démarrer une conversion. Le bit RDY passe à l'état bas lorsque le résultat de cette conversion est disponible dans le registre de sortie.

Peter Smith
la source