Pourquoi les broches analogiques s'influencent mutuellement?


8

J'ai un capteur et il génère un signal analogique.

Je lis toutes les données analogiques et les envoie à mon ordinateur.

entrez la description de l'image ici

uint8_t sensors[] = { A0,A1,A2,A3,A4,A5,A6 };
const int len = sizeof(sensors) / sizeof(sensors[0]);
void loop(void)
{
    for (size_t i = 0; i < len; i++)
    {
        auto sensor = sensors[i];
        int sensorValue = analogRead(sensor);
        // Convert the analogue reading (which goes from 0 - 1023) to a voltage (0 - 5V):
        float voltage = sensorValue * (5.0 / 1023.0);
        char t[100];
        sprintf(t, "%d:%d$\n", sensor, sensorValue);
        uint8_t t1[100];
        //PrintSerial.println(t);
        memcpy(t1, t, 100);
        wifi.send(t1, strlen(t));
    }
    delay(300);
}

J'ai tracé la lecture analogique. Pourquoi le graphique ressemble-t-il à ceci?

entrez la description de l'image ici


les planches à pain ont quelques bouffées de capacité entre les rangées
dandavis

Réponses:


11

C'est à prévoir.

Les autres broches ne sont connectées à rien, leur tension est donc flottante.

L'Arduino MCU n'a qu'un seul ADC. Pour lire les différentes broches analogiques, il utilise un multiplexeur pour connecter la broche que vous souhaitez lire à l'ADC unique. L'ADC à l'intérieur du MCU a un condensateur "échantillonnage et maintien" à l'intérieur.

Pour lire la tension à la broche, il faudra connecter la broche, pour charger l'échantillon et maintenir le condensateur. Il déconnectera et mesurera ensuite la tension de l'échantillon et maintiendra le condensateur, un bit à la fois.

Donc, dans votre cas, en lisant la tension sur la broche connectée, il chargera le condensateur. Il lira ensuite les broches non connectées. Mais parce que rien n'est connecté, le condensateur d'échantillonnage et de maintien restera à peu près à la même tension, car la broche non connectée ne le chargera ni ne le déchargera.

La mesure de la tension sur l'échantillon et le condensateur de maintien réduira légèrement cette tension, c'est pourquoi dans le graphique, les lignes seront inférieures à la mesure précédente.

PS De plus, comme toutes les broches sont placées dans une planche à pain, vous aurez un couplage capacitif entre les broches adjacentes.


Il n'y a donc pas de problème, cela ne diminuerait pas la précision s'il y avait une autre broche?
erow

6
Pas vraiment. Sauf si le signal que vous essayez de lire a une impédance de sortie très élevée. Vous pouvez connecter les broches inutilisées à la terre, si vous souhaitez obtenir un graphique plus propre.
Gerben

0

L'acc est vraiment un petit condensateur. Lorsque vous changez de canal, les charges dans le condensateur acc sont transportées d'un canal d'entrée au suivant. Si le canal d'entrée suivant a une impédance très élevée ou une capacité très faible, les charges sur le condensateur acc dominent et sa tension change peu.

En outre, un code médiocre peut également en être la cause, généralement par manque de temps pour terminer l'ajout.


Vous voulez dire que j'ai besoin d'ajouter un délai pour la boucle?
erow
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.