#1 2021-04-28 13:06:48

SkepticK
Учасник
Зареєстрований: 2021-04-28
Повідомлень: 12

Помехи (наводки, шум) при использовании ADS1115 c Arduino Uno

Здравствуйте, возникла возможность на работе заиметь точный AC/DC вольтметр c пределом измерения до одного вольта и хоть от энергетики я сам по себе не далек (работал и электромонтером и инженером РЗА), но крайне мельком касался таких тонких материй как микроконтроллеры. Начал смотреть ролики, читать статьи и даташиты, решил что для такого новичка как я оптимальным первым шагом будет реализовать вольтметр постоянного тока с помощью внешнего АЦП ADS1115 c Arduino Uno. Собрал следующую схему:
aoc540-2.jpg
Использовать решил дифференциальный режим (мне он чисто теоретически показался точнее), питание ардуинка получает с USB, а скетч использую из примеров библиотеки ADS1115:

#include <Adafruit_ADS1X15.h>

Adafruit_ADS1115 ads;  /* Use this for the 16-bit version */
//Adafruit_ADS1015 ads;     /* Use this for the 12-bit version */

void setup(void)
{
  Serial.begin(9600);
  Serial.println("Hello!");
  
  Serial.println("Getting differential reading from AIN0 (P) and AIN1 (N)");
  Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
  
  // The ADC input range (or gain) can be changed via the following
  // functions, but be careful never to exceed VDD +0.3V max, or to
  // exceed the upper and lower limits if you adjust the input range!
  // Setting these values incorrectly may destroy your ADC!
  //                                                                ADS1015  ADS1115
  //                                                                -------  -------
  ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV      0.1875mV (default)
  // ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
  // ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 1mV      0.0625mV
  // ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.5mV    0.03125mV
  // ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
  // ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV
  
  ads.begin();
}

void loop(void)
{
  int16_t results;
   int16_t results2;
  
  /* Be sure to update this value based on the IC and the gain settings! */
 //float   multiplier = 3.0F;    /* ADS1015 @ +/- 6.144V gain (12-bit results) */
 float multiplier = 0.1875F; /* ADS1115  @ +/- 6.144V gain (16-bit results) */

  results = ads.readADC_Differential_0_1();  
    results2 = ads.readADC_Differential_2_3();  
  Serial.print("Differential: "); Serial.print(results); Serial.print("("); Serial.print(results * multiplier); Serial.println("mV)");
   results = ads.readADC_Differential_0_1(); 
 //Serial.print("Differential2: "); Serial.print(results2); Serial.print("("); Serial.print(results2 * multiplier); Serial.println("mV)");
   //results2 = ads.readADC_Differential_2_3(); 
  delay(1000);
}

Разность измерений напряжения даже на самом большом диапазоне с мультиметром APPA у меня порядка 15 мВ, что меня в принципе устраивает, но когда контакты аналоговых входов ADS1115 висят в воздухе, он меряет какие-то наводки, шумы:
c4b5f8d2c2c251c827ac23c6b4b02c3b
Я в мечтах лелею надежду эволюционировать до подключения дисплея и вывода напряжения туда, но хочу видеть четкий ноль, когда провода не подключены к объекту измерения.
Прошу прояснить для меня момент, есть ли возможность получить четкий ноль в данном случае и как? Или это нормальная ситуация, ибо смотря ролики на ютубе у многих заметил такой момент.

Неактивний

#2 2021-04-28 16:25:02

SkepticK
Учасник
Зареєстрований: 2021-04-28
Повідомлень: 12

Re: Помехи (наводки, шум) при использовании ADS1115 c Arduino Uno

Причем этот "шум" появляется на самих аналоговых входах ADS1115, ибо я просто подключил плату и замерил мультиметром напряжение на контактах А1-А2 ADS1115 и увидел напряжение импульсы напряжения порядка 150 мВ.

Неактивний

#3 2021-04-29 10:09:47

Mishka
Учасник
Зареєстрований: 2019-11-18
Повідомлень: 77

Re: Помехи (наводки, шум) при использовании ADS1115 c Arduino Uno

SkepticK пише:

... но когда контакты аналоговых входов ADS1115 висят в воздухе, он меряет какие-то наводки, шумы

Не помню, кто из великих сказал: "Есть два типа инженеров: одни создают антенны, а другие тоже создают антенны, но не преднамеренно." :-)

Нельзя просто так оставить просто кусок провода висеть в воздухе. Это волновой вибратор, который принимает на частоте, для которой длина четвертьволны равна длине щупа. Даже когда вы подключите два таких щупа (земля и линия) к устройству, в итоге все равно получится рамочная антенна.

Если это принципиально убрать такой эффект, попробуйте использовать коаксиальный кабель с соответствующим разъемом или витую пару с дифференциальным подключением. Таким образом щупы будут выполнять функцию только волновода.

И, конечно же, шум можно снизить за счет избыточного сэмплирования АЦП, тем более в цепи постоянного тока.

Остання редакція Mishka (2021-04-29 10:26:37)

Неактивний

#4 2021-04-29 11:49:32

SkepticK
Учасник
Зареєстрований: 2021-04-28
Повідомлень: 12

Re: Помехи (наводки, шум) при использовании ADS1115 c Arduino Uno

Mishka пише:
SkepticK пише:

... но когда контакты аналоговых входов ADS1115 висят в воздухе, он меряет какие-то наводки, шумы

Не помню, кто из великих сказал: "Есть два типа инженеров: одни создают антенны, а другие тоже создают антенны, но не преднамеренно." :-)

Всегда получал истинное и неподдельное удовольствие от подобного общения на форумах, видимо это уже часть некой культуры коммуникации в интернете. Но это мелочи, во всяком случае, спасибо за ответ, меня просто в виду моей неопытности в этой теме одолевают сомнения (возможно я допустил какую глупую ошибку и как следствие получил вышеупомянутые результаты, хотя с другой стороны в даташите ADS1115 приведена таблица зависимости помех от диапазона измерения и увеличения параметра "DATA RATE", но опять же при просмотре огромного числа роликов на эту тему видел у готовых проектов четкий ноль на вольтметре и подумал о возможном существовании калибровки данного АЦП).
Причем упомянутые мною помехи фиксируются не только на проводах "в воздухе", но и на самих аналоговых входа ADS1115, что меня смутило.
Последнее спасибо за ответ, буду пробовать увеличивать сэмплирование АЦП.

Неактивний

#5 2021-04-29 14:02:37

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 901

Re: Помехи (наводки, шум) при использовании ADS1115 c Arduino Uno

" Все уровни при дифф. включении измеряются относительно земли вашего АЦП, и если между землями источника сигнала и АЦП есть какая-то помеха то можно получить проблемы, которые вы собственно и получили.
Поэтому нужна либо 100% гальваническая развязка входящего сигнала, либо наоборот нулевое сопротивление между землями. "

Неактивний

#6 2021-04-29 15:01:23

Mishka
Учасник
Зареєстрований: 2019-11-18
Повідомлень: 77

Re: Помехи (наводки, шум) при использовании ADS1115 c Arduino Uno

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

Действительно, как сказал renoshnik, возможно что-то проходит по питанию. Имеет смысл убедиться, что земля имеет хороший, стабильный ноль, и что питание от Ардуино имеет развязку конденсаторами, обычно это 10 мкФ + 0.1 мкФ. Особенно это актуально, если модуль включен в макетную плату. Можно добавить несколько дополнительных проводов для GND и для более чистого сигнала включить его через отдельный LDO.

Неактивний

#7 2021-04-29 16:57:43

SkepticK
Учасник
Зареєстрований: 2021-04-28
Повідомлень: 12

Re: Помехи (наводки, шум) при использовании ADS1115 c Arduino Uno

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

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму