Как уменьшить шум аналогового считывания?

В настоящее время пытаюсь считывать значения с фотодиода с помощью analogread. Он постоянно такой шумный, и я подумал, что, возможно, что-то не так с моим фильтром нижних частот, но я решил просто подключить батарею 1,5 В к аналоговому контакту, и у меня было столько же шума (колебания более 10 мВ). Есть ли способ обойти весь этот шум? Потому что это делает собранные данные непригодными для моего проекта.

this is how I connected the battery to read of analog values that were still noisy

Код для считывания аналоговых значений:

int diodePin = A0;
int sensorValue = 0;
int sensorVoltage = 0;

void setup() {
  
  Serial.begin(57600);

}

void loop() {
 
sensorValue = analogRead(diodePin);
sensorVoltage = sensorValue*(5000/1024);
Serial.println(sensorVoltage);
delay(10);

}

, 👍3

Обсуждение

Без схемы это будет невозможно, хотя это может быть более актуально для электроники SE. 0,01 В из 3,3 В/5 В звучит не так уж плохо, но это зависит от контекста и аппаратного обеспечения., @Dave Newton

являются ли показания шумными, если датчик подвергается воздействию только солнечного света?, @jsotola

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

конечно: возьмите 3 показания, отсортируйте, оставьте только среднее., @dandavis

Мне нужны непрерывные хорошие показания, чтобы я мог выполнить преобразование Фурье собранных данных, @Yousuf

Пожалуйста, опубликуйте схему, а не что-нибудь завитое. Ваш вопрос сложный, и, не будучи там, следующая лучшая вещь-это схема, которую вы нарисовали, когда подключали ее. Ссылки на техническую информацию об аппаратных устройствах облегчают работу всем нам. На данный момент все, что мы можем сделать, это только догадываться., @Gil

Просто чтобы убедиться, что я понимаю: вы вводите 1,5 В в аналоговый вывод (5 В считывает 1024, поэтому 1,5 В будет ~307), это 10-разрядный АЦП, поэтому ~5 мВ с аналоговой ссылкой по умолчанию. Вы видите значения от 306 до 308. Что вы используете для питания Arduino? Вы пробовали использовать другую ссылку или стабильный ввод AREF? Вы проверяли такие вещи, как [это] (https://forum.arduino.cc/t/help-with-weird-analog-input-problem-unstable-analog-reference/82011)? Без надежного опорного напряжения это все еще не кажется таким уж необычным. У аналога было много движущихся частей., @Dave Newton

В соответствии с вашей завитой штукой вы должны получить ноль, так как у Arduino нет питания, а A+ и заземление соединены вместе на клемме+. Размещение схемы очень помогло бы, Дэйв Ньютон предположил это несколько дней назад., @Gil


1 ответ


3

Я всегда делаю две вещи, когда "считываю" аналоговые данные с помощью Arduino.

  1. Измерение напряжения питания платы arduino с помощью ее внутреннего эталона и калибровка с помощью другого" хорошего"вольтметра ("4 1/2 "цифры-20000 точек или" 3 3/4 " цифры-6000 точек). ( Полезная ссылка https://www.instructables.com/Secret-Arduino-Voltmeter/ )

  2. Выборка большего количества аналоговых данных для вычисления "среднего значения" ... Это может удалить некоторый "шум" и добавить "некоторые биты". 16 образцов добавят "4" бита при ваших "показаниях". Конечно, глобальная частота дискретизации будет ниже.

Не забудь, заземляющая звезда проводов !!!

,

Имейте в виду, что усреднение выборок увеличит разрешение, но **может не** повысить точность. Только случайный шум может быть "усреднен"...системная неточность останется., @Elliot Alderson

Верно. Только в том случае, если "линейность" лучше, чем 1/16 LSB мин... что очень "редко". Некоторые случаи 1/4 LSB очень хороших преобразователей., @Antonio51