Почему вывод отправки влияет на вывод приема с помощью библиотеки емкостных датчиков Arduino

Я пытаюсь понять, как работает библиотека емкостного зондирования Arduino https://playground.arduino.cc/Main/CapacitiveSensor/ работает. В нем говорится:

Когда пин отправки меняет состояние, он в конечном итоге изменяет состояние пина приема.

Однако, когда я смотрю на следующую схему, я не понимаю, почему это так. Похоже, что пин отправки установлен на ВЫХОД и ВЫСОКИЙ, а пин приема-на ВХОД с отключенным подтягиванием. Я думаю, что сначала можно не обращать внимания на емкость, да? Не падает ли все напряжение на резисторе R, и вывод приема будет просто плавающим и случайным образом показывать НИЗКИЙ или ВЫСОКИЙ уровень?

schematic

Источник: https://playground.arduino.cc/Main/CapacitiveSensor/

, 👍1


1 ответ


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

2

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

Плавающий вывод не имеет прямого случайного изменения состояния между НИЗКИМ и ВЫСОКИМ. Это может быть результатом только того, что напряжение на этом выводе изменяется из-за шума. Нам нужно, чтобы шум не находился непосредственно в диапазоне логического напряжения, чтобы состояние цифрового входного вывода не было полностью продиктовано шумом. Так часто бывает. Кроме того, дополнительная емкость, добавляемая чувствительной фольгой, помогает фильтровать шум.

Фактическое измерение работает следующим образом: мы устанавливаем вывод отправки в известное состояние и немного ждем (чтобы полностью загрузить или разгрузить емкость на выводе). Затем мы меняем контакт отправки в другое состояние и считаем время, пока не увидим это изменение на контакте приема. Это происходит, когда емкость вывода загружена. Затем мы проделываем эту процедуру много раз, усредняя измеренное время. То, что делает вывод приема за пределами измерений, не важно. Во время перерыва его состояние в основном определяется тем, что мы устанавливаем контакт отправки. Хотя библиотека может использовать некоторую оптимизацию для лучшего чтения. Вы можете прочитать код библиотеки, чтобы узнать об этом больше.

,

Хм, ладно. Спасибо вам за ответ! Я думаю, что узнаю здесь много нового. Итак, вы хотите сказать, что когда я просто соединяю два вывода GPIO с резистором, один из которых настроен на выход, другой - на вход, тогда ток вообще не течет, и поэтому резистор похож на провод? Если ток не течет, как входной вывод "узнает" состояние выходного вывода?, @rattlesnake

Я хотел сказать, что на самом деле протекает немного тока, потому что в этом случае вы просто не можете не учитывать емкость контакта. Кроме того, вывод цифрового входа в основном является триггером Шмитта, который имеет очень низкий входной ток. И почему входной контакт не должен "знать" состояние? Он воспринимает напряжение, а не ток. Я не уверен, в чем здесь путаница., @chrisl

Прошу прощения за путаницу. Да, он измеряет напряжение. Поэтому я подумал, что все напряжение уже упало на резисторе, так что на входном выводе больше нечего измерять. Но в этом-то и дело, верно? Ток протекает до тех пор, пока "конденсатор" (сенсорная пластина + человек) не заряжен, поэтому напряжение на резисторе падает. Входной контакт низкий. Когда он заряжен, ток больше не течет, и резистор становится проводом, входной вывод теперь высок. Это правильно?, @rattlesnake

Да, это правильно, @chrisl

Ах, спасибо тебе. Мне кажется, я начинаю овладевать этим. Извините, еще один последующий вопрос: значит, "конденсатор" полностью заряжается/разряжается для каждого цикла измерения? (Я бы подумал, что это довольно большой электрический заряд?), @rattlesnake

Да, он получает "полные" (dis)заряды при каждом измерении (полностью в определенной степени, поскольку напряжение будет приближаться к более медленному, когда оно приблизится к напряжению питания, см. кривую зарядки конденсатора). Если это много, то многое зависит от вашего определения многого. По отношению к другим часто используемым компонентам Arduino: Нет, не очень много. Емкость будет сильно зависеть от расположения/положения вашей фольги, но она будет довольно мала по сравнению с другими обычно используемыми конденсаторами (например, в диапазоне uF, используемом для фильтрации)., @chrisl

Отлично, большое спасибо! :), @rattlesnake

Следующий шаг заключается в том, что просто нужно выяснить, почему моя плата продолжает показывать мне ошибочные показания для сенсорного контакта, ха-ха. (Когда я устанавливаю контакт отправки на 1 и продолжаю считывать контакт приема, я иногда получаю 0, иногда 1.) Если вам интересно: https://forum.micropython.org/viewtopic.php?f=2&t=11237, @rattlesnake