Почему аналоговые контакты влияют друг на друга?

8

У меня есть датчик, и он генерирует аналоговый сигнал.

Я читаю все аналоговые данные и отправляю их на мой компьютер.

введите описание изображения здесь

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

Я построил аналог чтения. Почему график выглядит так?

введите описание изображения здесь

erow
источник
макеты имеют
небольшую

Ответы:

11

Этого следовало ожидать.

К другим контактам ничего не подключено, поэтому их напряжение плавающее.

Arduino MCU имеет только один АЦП. Для считывания различных аналоговых выводов он использует мультиплексор, чтобы подключить вывод, который вы хотите прочитать, к одному АЦП. АЦП внутри микроконтроллера имеет внутри себя конденсатор «сэмплируй и держи».

Чтобы прочитать напряжение на контакте, он подключит контакт, чтобы зарядить образец и удерживать конденсатор. Затем он будет отключать и измерять напряжение образца и удерживать конденсатор, по одному биту за раз.

Так что в вашем случае, считывая напряжение на подключенном контакте, он зарядит конденсатор. Затем он будет читать неподключенные контакты. Но поскольку ничто не подключено, конденсатор выборки и удержания будет оставаться примерно на одном напряжении, потому что неподключенный контакт не будет ни заряжать, ни разряжать его.

Измерение напряжения на образце и удерживающем конденсаторе немного снизит это напряжение, поэтому на графике линии будут ниже, чем в предыдущем измерении.

PS Кроме того, поскольку все контакты расположены на макете, у вас будет некоторая емкостная связь между соседними контактами.

Gerben
источник
Так что нет проблем? Это не уменьшит точность, если есть еще один вывод?
erow
6
На самом деле, нет. Если сигнал, который вы пытаетесь прочитать, не имеет очень высокого выходного сопротивления. Вы можете подключить неиспользуемые контакты к земле, если вы хотите получить более чистый график.
Гербен
0

Акк действительно маленький конденсатор. Когда вы переключаете каналы, заряд в конденсаторе переносится с одного входного канала на другой. Если следующий входной канал имеет очень высокий импеданс или очень низкую емкость, заряды на конденсаторе переменного тока доминируют, и его напряжение изменяется незначительно.

Кроме того, плохой код также может быть причиной этого - обычно из-за нехватки времени для завершения добавления.

dannyf
источник
Вы имеете в виду, что мне нужно добавить задержку для цикла?
erow