Аналоговое чтение с шумом — Arduino Uno VS ESP12e

Я тестировал аналоговый выход микрофона (Max9814) с помощью Arduino Uno и получил хорошие результаты. Выходной сигнал микрофона преобразуется в звук и становится громким и четким.

Настройка: (от Макса до Uno)

  • Подключите Vdd к 3,3 В
  • Прикрепите GND к GND
  • Вывод на A0

Однако, когда я попытался настроить его с помощью ESP12e вместо Uno, я получил много «шума» и вообще никакого четкого звука.

Здесь я использовал следующую настройку: (от Max до ESP)

  • Подключите Vdd к VCC (VCC измеряется мультиметром при 3,3 В)
  • Прикрепите GND к GND
  • Вывод на AD0

Небольшой «шаг в сторону»

Проблема возникла в том, что аналоговый выход микрофона выдавал напряжение около 1,24, в то время как аналог ESP12e имеет максимальное входное напряжение 1 В. Из-за этого аналоговое чтение постоянно работало. По этой причине я установил резистор сопротивлением 10 кОм между выводами OUT и AD0 в сочетании с резистором сопротивлением 20 кОм между GND и AD0. В результате были получены хорошие аналоговые показания (вместо 1024, постоянно около 400-500).

Однако, как упоминалось ранее, между ними много шума, и звук нечеткий. (Я также пробовал работать с «образцами окон», вот «механизм фильтрации», который можно найти на многих сайтах/вопросах и который отлично работает):

//(глобальная логика настроена на взятие n выборок и последующую печать строки)
//Попыталось от 5 до 20
//Также вместо просто сэмплов попробовал вариант микрос вместо просто сэмплов, который также можно найти на многих сайтах, чтобы создать временное окно для записи.
unsigned int sample = analogRead(A0);
if (sample < 1024) {  // отбрасываем ложные показания
  if (sample > signalMax) {
    signalMax = sample;  // сохраняем только максимальные уровни
  } else if(sample < signalMin) {
    signalMin = sample;  // сохраняем только минимальные уровни
  }
}

unsigned int peakToPeak = signalMax - signalMin;  // макс - мин = амплитуда пик-пик
Serial.println(peakToPeak);

Кто-нибудь знает, почему Arduino дает такой чистый и хороший звук, а ESP12e - нет. (Аналоговые значения, похоже, не сильно различаются по уровням)

, 👍0


1 ответ


Лучший ответ:

3

ESP8266 представляет собой невероятно (электрически) шумную среду.

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

Рекомендуется полностью отключить WiFI («Спящий режим модема») при считывании показаний АЦП, чтобы уменьшить шум.

Однако ADC никогда не предназначался для такого рода работ. Его основная роль заключается в контроле напряжения батареи вашего оборудования, и поэтому он не особо заботится о шуме, поскольку вы можете усреднить количество выборок для большей точности (чего вы не можете сделать со звуком).

,

То есть это означает, что я должен подключить (каким-то образом?), например, Arduino к ESP и «пропустить» данные через esp, чтобы отправить их?, @Revils

Конечно, вы можете это сделать. Вы также можете подключить к ESP8266 внешний чип АЦП с подходящим стабильным опорным напряжением., @Majenko

О, это очень хорошее замечание. Что-то вроде этого?: Аналого-цифровой преобразователь — MCP3002, @Revils

Конечно. Это почти то же самое, что и АЦП в Arduino., @Majenko

Спасибо за отзыв, очень приятно!, @Revils