Perché i pin analogici si influenzano a vicenda?


8

Ho un sensore e genera un segnale analogico.

Sto leggendo tutti i dati analogici e li invio al mio computer.

inserisci qui la descrizione dell'immagine

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

Ho tracciato la lettura analogica. Perché il grafico appare così?

inserisci qui la descrizione dell'immagine


le breadboard hanno un po 'di capacità tra le file
dandavis,

Risposte:


11

Questo è prevedibile.

Gli altri pin non hanno nulla collegato ad esso, quindi la loro tensione è fluttuante.

Arduino MCU ha un solo ADC. Per leggere i diversi pin analogici, utilizza un multiplexer per collegare il pin che si desidera leggere al singolo ADC. L'ADC all'interno dell'MCU ha al suo interno un condensatore "campiona e mantieni".

Per leggere la tensione sul pin, si collegherà il pin, per caricare il campione e trattenere il condensatore. Quindi disconnetterà e misurerà la tensione del campione e manterrà il condensatore, un bit alla volta.

Quindi, nel tuo caso, leggendo la tensione sul pin collegato, caricherà il condensatore. Quindi leggerà i pin non collegati. Ma poiché nulla è collegato, il condensatore di campionamento e mantenimento rimarrà all'incirca alla stessa tensione, perché il pin non collegato non si caricherà né scaricherà.

Misurare la tensione sul campione e mantenere il condensatore ridurrà leggermente questa tensione, quindi nel grafico le linee saranno più basse della misurazione precedente.

PS Inoltre, poiché tutti i pin sono posizionati in una breadboard, avrai un accoppiamento capacitivo tra i pin adiacenti.


Quindi non ci sono problemi? Non ridurrebbe la precisione se c'è un altro pin?
Erow,

6
Non proprio. A meno che il segnale che si sta tentando di leggere abbia un'impedenza di uscita molto elevata. È possibile collegare i pin non utilizzati a terra, se si desidera ottenere un grafico più pulito.
Gerben,

0

L'acc è davvero un piccolo condensatore. Quando si cambia canale, le cariche nel condensatore acc vengono trasportate da un canale di ingresso al successivo. Se il canale di ingresso successivo ha un'impedenza molto alta o una capacità molto bassa, le cariche sul condensatore acc dominano e la sua tensione cambia poco.

Inoltre, può causare anche un codice scadente, di solito a causa della mancanza di tempo sufficiente per il completamento dell'aggiunta.


Vuoi dire che devo aggiungere un ritardo per il ciclo?
erow
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.