Por que os pinos analógicos se afetam?

8

Eu tenho um sensor e gera um sinal analógico.

Estou lendo todos os dados analógicos e enviando-os para o meu computador.

insira a descrição da imagem aqui

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

Marquei a leitura analógica. Por que o gráfico se parece com isso?

insira a descrição da imagem aqui

erow
fonte
breadboards ter alguns sopro de capacitância entre linhas
dandavis

Respostas:

11

Isto é esperado.

Os outros pinos não têm nada conectado a ele, então sua tensão está flutuando.

O MCU do Arduino possui apenas um único ADC. Para ler os diferentes pinos analógicos, ele usa um multiplexador para conectar o pino que você deseja ler ao único ADC. O ADC dentro do MCU possui um capacitor "sample and hold" dentro dele.

Para ler a tensão no pino, ele conectará o pino, para carregar a amostra e reter o capacitor. Ele irá desconectar e medir a tensão da amostra e reter o capacitor, um bit de cada vez.

Portanto, no seu caso, lendo a tensão no pino conectado, ele carregará o capacitor. Ele lerá os pinos desconectados. Mas, como nada está conectado, a amostra e o capacitor de retenção permanecerão aproximadamente na mesma voltagem, porque o pino desconectado não carregará nem descarregará.

Medir a voltagem na amostra e reter o capacitor diminuirá ligeiramente essa voltagem, por isso, no gráfico, as linhas serão mais baixas que a medição anterior.

PS Além disso, como todos os pinos são colocados em uma tábua de pão, você terá um acoplamento capacitivo entre os pinos adjacentes.

Gerben
fonte
Portanto, não há problema? Não diminuiria a precisão se houver outro pino?
ERoW
6
Na verdade não. A menos que o sinal que você está tentando ler tenha uma impedância de saída muito alta. Você pode conectar os pinos não utilizados ao terra, se desejar obter um gráfico mais limpo.
Gerben
0

O acc é realmente um pequeno capacitor. À medida que você muda de canal, as cargas no capacitor acc são transportadas de um canal de entrada para o próximo. Se o próximo canal de entrada for de impedância muito alta ou capacitância muito baixa, as cargas no capacitor acc dominam e sua tensão muda pouco.

Além disso, código ruim também pode causar isso - geralmente devido à falta de tempo suficiente para a adição ser concluída.

dannyf
fonte
Quer dizer que eu preciso adicionar um atraso no loop for?
ERoW