Закорочены ли аналоговые контакты моей платы? Я вижу один и тот же ввод на всех

arduino-uno board

Я в недоумении. Я только что подключил вход 3,3 В к аналоговому контакту A5 Arduino UNO. В сценарии я читаю все входные контакты. Удивительно, но на все контакты подается напряжение, как на контакт A5. Это заставило меня задуматься, все ли они закоротили?

код:

int a0_analogPin = A0; 
float a0_val = 0; 
int a1_analogPin = A1; 
float a1_val = 0;
int a2_analogPin = A2; 
float a2_val = 0;
int a3_analogPin = A3; 
float a3_val = 0; 
int a4_analogPin = A4; 
float a4_val = 0; 
int a5_analogPin = A5; 
float a5_val = 0; 

void setup() {
  Serial.begin(9600);           // установка серийного номера
  pinMode(a0_analogPin,INPUT);
  pinMode(a1_analogPin,INPUT);
  pinMode(a2_analogPin,INPUT);
  pinMode(a3_analogPin,INPUT);
  pinMode(a4_analogPin,INPUT);
  pinMode(a5_analogPin,INPUT);  
  Serial.println("A0_val,A1_val,A2_val,A3_val,A4_val,A5_val");
}

void loop() {
  a0_val = analogRead(a0_analogPin)*5.0/1023.0;  // читаем входной контакт
  Serial.print(a0_val);          // значение отладки
  Serial.print(",");
  a1_val = analogRead(a1_analogPin)*5.0/1023.0;  // читаем входной контакт
  Serial.print(a1_val);  
  Serial.print(",");
  a2_val = analogRead(a2_analogPin)*5.0/1023.0;  // читаем входной контакт
  Serial.print(a2_val);  
  Serial.print(",");
  a3_val = analogRead(a3_analogPin)*5.0/1023.0;  // читаем входной контакт
  Serial.print(a3_val);      
  Serial.print(",");
  a4_val = analogRead(a4_analogPin)*5.0/1023.0;  // читаем входной контакт
  Serial.print(a4_val);    
  Serial.print(",");
  a5_val = analogRead(a5_analogPin)*5.0/1023.0;  // читаем входной контакт
  Serial.println(a5_val);        
}

Плата:

Последовательный монитор:

, 👍1

Обсуждение

вы устанавливаете все аналоговые контакты как цифровые входы, @jsotola

@jsotola, AnalogRead настраивает вывод для АЦП. Материк, неподключенные контакты действуют как антенна., @Juraj

@Juraj Проблема решена после того, как я подключил остальные к земле. Спасибо, @Mainland


2 ответа


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

2

Большинство ваших аналоговых контактов ни к чему не подключены. В электротехнике это называется «плавающим». Это означает, что они ни на что не ссылаются и, следовательно, их значение может быть любым.

В основном их ценность определяется статическим электричеством. Перемещая руки рядом с контактами или отводя их от них, может быть достаточно, чтобы изменить считываемое значение.

Возможно, ваш «вид осциллографа»; на самом деле это прекрасно показано. На один вывод поступает напряжение немедленно (значение 6), а за счет статического электричества другие выводы также медленно принимают это значение (значение 1, значение 2, ...). Вероятно, самая крутая кривая из них находится ближе всего к высокому штифту, а самая пологая кривая находится дальше всего. Ваши наблюдения могут различаться в зависимости от влажности и температуры, поскольку из-за этого статическое электричество распространяется быстрее или медленнее.

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

,

2

Вы видите перекрестные помехи между аналоговыми входными каналами. в техническое описание микроконтроллера можно посмотреть аналог входная схема. Видите конденсатор с надписью «CS/H»? Это конденсатор «выборки и хранения». Его задача – поддерживать напряжение читайте, пока АЦП выполняет преобразование. Когда вы измеряете канал А5, вы заряжаете этот конденсатор до 3,3 В. Затем при переключении на плавающий вход, конденсатор не имеет пути для разрядки, и вам конец измерил то же напряжение.

На самом деле вы измеряете не одно и то же напряжение. Причина в том что каждый входной контакт имеет паразитную емкость. При переходе с А5 до A0, заряд в CS/H распределяется между этим конденсатором и паразитная емкость вывода A0. Затем вы переключаетесь на А1 и оставшийся заряд делится между CS/H и случайным емкость А1 и так далее. В конце концов, когда вы вернетесь к А5, вы снова зарядите CS/H до полного напряжения 3,3 В, и цикл начнется. снова. Конечный эффект заключается в том, что вы постепенно перемещаете заряды. между последовательными выводами. Вот почему кривые выглядят так экспоненциальная релаксация, при которой каждый последующий штифт заряжается медленнее чем предыдущий.

Решение, как уже написано в других ответах, состоит в том, чтобы не покидать штифт плавает. В таблице данных рекомендуется убедиться, что подключено источник имеет сопротивление не более 10 кОм.

,