Warum beeinflussen sich analoge Pins gegenseitig?

8

Ich habe einen Sensor und er erzeugt ein analoges Signal.

Ich lese alle analogen Daten und sende sie an meinen Computer.

Geben Sie hier die Bildbeschreibung ein

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);
}

Ich habe die analoge Lesung aufgezeichnet. Warum sieht das Diagramm so aus?

Geben Sie hier die Bildbeschreibung ein

erow
quelle
Steckbretter haben ein paar Kapazitätsstöße zwischen den Reihen
Dandavis

Antworten:

11

Dies ist zu erwarten.

An die anderen Pins ist nichts angeschlossen, daher schwankt ihre Spannung.

Die Arduino MCU hat nur einen einzigen ADC. Zum Lesen der verschiedenen analogen Pins wird ein Multiplexer verwendet, um den zu lesenden Pin mit dem einzelnen ADC zu verbinden. Der ADC in der MCU enthält einen "Sample and Hold" -Kondensator.

Um die Spannung am Pin abzulesen, wird der Pin angeschlossen, um die Probe aufzuladen und den Kondensator zu halten. Anschließend wird die Spannung der Probe getrennt und der Kondensator bitweise gehalten.

In Ihrem Fall wird der Kondensator durch Lesen der Spannung am angeschlossenen Pin aufgeladen. Es werden dann die nicht verbundenen Pins gelesen. Da jedoch nichts angeschlossen ist, bleibt der Proben- und Haltekondensator ungefähr auf der gleichen Spannung, da der nicht angeschlossene Pin ihn weder lädt noch entlädt.

Durch Messen der Spannung am Proben- und Haltekondensator wird diese Spannung geringfügig gesenkt. Aus diesem Grund sind die Linien in der Grafik niedriger als bei der vorherigen Messung.

PS Da sich alle Stifte in einem Steckbrett befinden, besteht eine kapazitive Kopplung zwischen den benachbarten Stiften.

Gerben
quelle
Es gibt also kein Problem? Es würde die Genauigkeit nicht verringern, wenn es einen anderen Stift gibt.
Erow
6
Nicht wirklich. Es sei denn, das Signal, das Sie lesen möchten, hat eine sehr hohe Ausgangsimpedanz. Sie können die nicht verwendeten Stifte mit Masse verbinden, wenn Sie ein saubereres Diagramm erhalten möchten.
Gerben
0

Der acc ist wirklich ein kleiner Kondensator. Wenn Sie die Kanäle wechseln, werden die Ladungen im Wechselstromkondensator von einem Eingangskanal zum nächsten übertragen. Wenn der nächste Eingangskanal eine sehr hohe Impedanz oder eine sehr niedrige Kapazität hat, dominieren die Ladungen am Wechselstromkondensator und seine Spannung ändert sich kaum.

Darüber hinaus kann dies auch durch schlechten Code verursacht werden - normalerweise aufgrund eines Mangels an ausreichender Zeit, um das Hinzufügen abzuschließen.

dannyf
quelle
Du meinst, ich muss eine Verzögerung für die Schleife hinzufügen?
Erow