Способы реализации сенсорных контактов в проектах на Ардуино

Способы реализации сенсорных контактов в проектах на Ардуино

Принцип работы.

Как и все КМОП логические элементы, микроконтроллеры строятся на комплементарных полевых транзисторах с явно выраженными пороговыми свойствами. Входное пороговое напряжение логических элементов, при котором происходит переключение выхода из одного логического состояния в другое, равно примерно половине напряжения питания. А так как во время переключения возникает сквозной ток через оба полевых транзистора элемента, то время переключения стараются минимизировать увеличением коэффициента усиления элемента. Входы и выходы логических элементов всегда защищают встроенными диодами, по этому напряжение на входах и выходах элементов не бывает меньше -0.7В или больше Uп+0.7В (Uп – напряжение питания).

Типовая структурная схема одного логического элемента (инвертора) показана на рисунке ниже:


В результате, любой логический элемент структуры КМОП, имея высокое входное сопротивление, ограниченное только токами утечки защитных диодов, и приличный коэффициент усиления, позволяет использовать эти элементы в качестве сенсорных входов. Схема реализации простая:


Пунктиром показаны детали для реализации некоторых дополнительных сервисных возможностей.

Сенсор может представлять собой токопроводящий контакт любой формы. А так как входное сопротивление и коэффициент усиления элемента большие, то сенсорный контакт может быть закрытым, например, спрятан под слоем пластика. В этом случае сенсор становится ёмкостным, что показано на схеме в виде входного конденсатора. Этот конденсатор может быть реально установлен в схему для получения гальванической развязки от схемы и(или) уменьшения чувствительности. Его ёмкость можно выбрать в диапазоне от единиц до тысяч пикофарад.

Чувствительность так же можно изменять входным резистором (R1), сопротивление которого может меняться от десятков килом до десятков гигаом. При слишком большой чувствительности сенсора её можно уменьшить одним дополнительным резистором, показанным на первой схеме пунктиром, который совместно с входным резистором R1 играет роль делителя напряжения.
Подключение дополнительного резистора либо к корпусу либо к напряжению питания определяет начальное значение выходного уровня элемента при отсутствии касания сенсора. Если резистор будет подключен к корпусу, то исходно на выходе элемента будет логическая единица, и наоборот, если резистор будет подключен к напряжению питания, то на выходе исходно будет логический нуль.
А при касании сенсора в обоих случаях на выходе появятся импульсы.

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

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

Например, при типовом сопротивлении резистора R1 на 1МОм и токе защитных диодов 10мА на сенсор можно свободно подавать импульсы амплитудой 1Мом*10мА=10КВ. Такое напряжение может быть наведено только статикой.
Реально, при касании сенсора пальцем, напряжение на входе элемента не превышает несколько вольт. По этому величина опасного напряжение целиком определяется напряжением пробоя входного резистора R1.
Например у SMD резисторов типоразмера 1206 максимальное перегрузочное напряжение равно 400В при рабочем 200В. По этому входной резистор следует выбирать высоковольтным и(или) составным – из нескольких резисторов, включенных последовательно.
Дополнительно, последовательно с резистором R1 можно установить входной керамический высоковольтный конденсатор, что ещё больше увеличит пробивное напряжение.
Многолетняя практика показывает, что входной резистор R1 сопротивлением на 1Мом гарантировано обеспечивает защиту логических элементов от пробоя статикой.

Сенсор и Ардуино.

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

Подключать сенсорный контакт можно как к аналоговым, так и к цифровым входам Ардуино. «Схема» программы будет отличаться только компаратором (блок сравнения), который необходим при подключении к аналоговому входу для преобразования переменного напряжения на сенсоре в прямоугольные импульсы.
При использовании цифрового входа обрабатывать придётся уже готовые прямоугольные импульсы, так как цифровой вход исходно работает компаратором, о чём уже было сказано выше.
Примеры программной обработки сигнала с сенсора в FLProg показаны ниже:


Схема слева, с компаратором, обрабатывает сигнал с сенсора, подключенному к аналоговому входу. Схема справа – с сенсором на цифровом входе.

На выходе компаратора или на внутреннем выходе цифрового входа при касании к сенсору появятся прямоугольные импульсы частотой 50Гц. Этот сигнал выделен дополнительными логическими блоками «AND». Они лишь показывают точки съёма сигнала с сенсора и в реальной схеме могут вообще отсутствовать или, при необходимости, заменены на другие блоки.

Подбором константы на входе сравнения компаратора можно менять чувствительность сенсора. При десятиразрядном АЦП и напряжении шкалы 5В чувствительность может быть выставлена на уровне десятков милливольт с малыми значениями константы. А при большом её значении чувствительность будет увеличена до единиц вольт. По этому резистивным делителем и константой компаратора можно довольно точно выставить требуемую чувствительность сенсора.

Цифровой вход не предоставляет возможность регулировки чувствительности при исходно высоком её значении, по этому, при необходимости, её придётся уменьшать входным резистивным делителем, как было уже показано выше.

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

Это только один из рабочих примеров программной поддержки сенсорного контакта в Ардуино, которых может быть достаточно много для получения требуемых функций. Самому придумать их будет не сложно, зная, что исходный сигнал для программной обработки при касании сенсора представляет собой прямоугольные импульсы частотой 50Гц. При отпускании сенсора обрабатывать придётся обычный логический уровень – либо нуль, либо единица, в зависимости от того, к чему будет подтянут (резистором или диодом) вход микроконтроллера.
————————————————————————————————————————————————————

Продолжение..
Приведенный выше вариант сенсора на цифровом входе оказался немного капризным при большом объёме программы. При касании и удержании сенсора на выходе, вместо логической единицы иногда появлялась серия беспорядочных импульсов. Проверка осциллографом показала, что на самом цифровом входе (внутри программы) идёт не просто последовательность импульсов с частотй 50 Гц, а такой же беспорядочный набор импульсов. Видимо, при большом объёме программного кода нарушается цикличность обработки цифроых входов.
Поэтому появился ещё один вариант программной обработки сенсора, подключенного к цифровому входу Ардуино:

Этот вариант проще, так как содержит всего один блок таймера с задержкой на отключение. Проерка показала, что такой вариант работает более устойчиво.
Вариант основан на особенности работы таймера с задержкой на отключение – если выбрать время задерки больше периода следования импульсов с сенсора, то на выходе блока таймера будет постоянное напряжение.
Чем больше задержка, тем лучше фильтруются паразитные импульсы. Но слишком большая задержка увеличит время нечувствительности сенсора.
Скажем, если выставить задержку на время 1 секунда, то после краткого касания сенсора повторное касание сможет быть обработано не ранее, чем через 1 секунду.
В моём случае оказалось достаточным выставить задержку на 0,1 секунды. Такой временной задержки хватило, что бы полностью избавиться от ложных срабатываний при сохранении высокого быстродействия – скорость касания сенсора может быть порядка 1/0,1с=10 раз в секунду. Сомневаюсь, что кому-то может потребоваться ещё большая скорость…

Добавил: DWD


0

Publication author

offline 6 months

Анатолий

77
Comments: 26Publics: 77Registration: 21-12-2017

Leave a Comment

Войти с помощью: