Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Содержание

Про Ардуино и не только: Устранение дребезга контактов. Часть 1


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

Что такое триггер Шмитта

Триггер Шмитта – это электронный двухпозиционный переключающий элемент, статическая характеристика которого имеет зону неоднозначности (петлю гистерезиса). Это означает, что у данного элемента 2 порога переключения: при возрастании сигнала на входе от 0 до напряжения питания порог срабатывания будет одним (Uср), а при уменьшении от напряжения питания до 0 – другим (Uотп – отпускания). Причем Uср > Uотп.
Таким образом для триггера Шмитта принципиально направление изменения сигнала. Изображение ниже иллюстрирует зависимость сигнала на выходе инвертирующего триггера Шмитта от уровня сигнала на входе.
Передаточная характеристика триггера Шмитта. Петля гистерезиса

Получившаяся на графике петля – это и есть петля гистерезиса (запаздывания), т.е. при изменении входного сигнала к исходному уровню выходной сигнал как бы запаздывает переключаться. Это свойство позволяет использовать триггеры Шмитта в фильтрах дребезга и для восстановления цифрового сигнала, искажённого в линиях связи. Давайте сравним реакцию на искаженный входной сигнал инвертирующего триггера Шмитта и обычного инвертора.
Сравнение сигналов на выходе обычного инвертора и инвертирующего триггера Шмитта (нижние два графика соответственно) при подаче на вход искаженного сигнала
При возрастании сигнала на входе инвертора до порога переключения Uпор на его выходе устанавливается низкий уровень. При повторном прохождении искаженным сигналом данного порога меняется и сигнал на выходе инвертора, что приводит к неверной интерпретации сигнала. Триггер Шмитта в данном случае изменит свое состояние при прохождении сигналом уровня Uср и дальнейшие колебания в зоне неоднозначности (между Uср и Uотп) не повлияют на его выход. Следующее переключение произойдет при снижении уровня сигнала на входе триггера до Uотп. Наличие гистерезиса у триггера Шмитта позволяет отсеять помехи, амплитуда которых меньше разности Uср и Uотп. Конкретные значения порогов переключения зависят от подаваемого на триггер напряжения, их можно найти в документации к соответствующей микросхеме.

Фильтр дребезга из триггера Шмитта

Итак, наша задача – очистить сигналы энкодера от помех, вызванных дребезгом контактов. Дребезг – это многократные неконтролируемые замыкания и размыкания контактов в электромеханических коммутационных устройствах за счет упругости материалов и деталей контактной системы – некоторое время контакты «подпрыгивают» при соударениях, размыкая и замыкая электрическую цепь.  В зависимости от размеров, массы, материала и конструкции контактной системы время дребезга (время от первого соприкосновения контактов до затухания механических колебаний и установления стабильного контактирования) составляет от сотен микросекунд у миниатюрных герконов до сотен миллисекунд у мощных контакторов. В нашем же случае дребезг может наблюдаться на протяжении всего времени контактирования при движении скользящего контакта в энкодере. Однако длительность возникающих ложных импульсов будет чрезмерно мала, а значит для их подавления можно использовать фильтр нижних частот. Очистив сигнал от высокачастотных помех, останется выпрямить его пологие фронты, здесь-то и пригодится триггера Шмитта.

Таким образом простой фильтр дребезга может быть собран из триггера Шмитта, и RC-цепочки. Причем резистор подходящего номинала уже присутствует в модуле энкодера (подтягивающий резистор на 10 кОм). Остается добавить конденсатор между выводом энкодера и землей. Емкость конденсатора определяется временем дребезга контактов: чем дольше дребезг, тем больше должна быть емкость. Я подобрал подходящую емкость опытным путем: конденсатор 104 позволил устранить большую часть шумов, но временами небольшие всплески все же проскакивали. После добавления второго конденсатора скачки на вход триггера Шмитта уже не проходили, т.е. мне хватило емкости 0.2 мкФ. Можно было бы использовать конденсатор с кодом 224 на 0.22 мкФ, у меня таких не нашлось. Касаемо используемого триггера: в стандартные серии цифровых микросхем входят триггеры Шмитта, представляющие собой инверторы (ТЛ2 – 6 инверторов), элементы 2И-НЕ (ТЛ3 – 4 элемента) и элементы 4И-НЕ (ТЛ1 – 2 элемента). Поэтому в схеме используется инвертирующий триггер Шмитта (я использую микросхему SN74HC14N, аналог отечественной К561ТЛ2).

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

Для проверки работы фильтра я подготовил стенд из мотора с редуктором и энкодера, т.к. планирую сравнить разные способы устранения дребезга. Стенд поможет сравнить их при одинаковых условиях. Итак, ниже представлен результат использования RC-цепочки с триггером Шмитта для  подавления дребезга энкодера. Напоминаю, что энкодер имеет 2 сигнальных вывода, поэтому на осциллограммах показаны 2 сигнала, для каждого используется свой фильтр дребезга.

Искаженный дребезгом сигнал на выводах энкодера
Сигнал, сглаженный RC-цепочкой

Дребезг

Пользователи также искали:

arduino прерывания дребезг, дребезг кнопки ардуино millis, дребезг контактов ардуино, как устранить дребезг контактов реле, дребезга, Дребезг, дребезг, контактов, ардуино, дребезг контактов ардуино, дребезг контактов stm, дребезг контактов конденсатор, arduino прерывания дребезг, защита, прерывания, программно, stm, конденсатор, кнопки, millis, устранить, реле, arduino, дребезг контактов программно, аппаратная, дребезг контактов stm32, дребезг кнопки ардуино millis, как устранить дребезг контактов реле, stm32, аппаратная защита от дребезга контактов, список контактов.

дребезг,

Правильное подключение потенциометра к Arduino. Аппаратная борьба с дребезгом контактов | Полезные схемы

И так всем привет! На сегодняшний день разработка под ардуино является одним из бурно развивающихся направлений, в том числе и самодельщиков. Платформа простая, в интернете полно видео-аудио-текстовых уроков которые посвящают наз в азы разработки и пайки, но есть одно существенное НО! Далеко не во всех уроках даются правильные схемы подключения. Не сказать чтобы они и совсем уж неправильные, работать будет только как?.. Возьмем к примеру тривиальнейшую задачу, подключить потенциометр (он же переменный резистор) к ардуино. Что советуют делать в уроках? Как подключать? А вот так:

И вроде все логично. И даже как-то работать оно будет! Вот только как? Для обучения сойдет, а дальше хоть трава не расти. Кстати, более ответственные авторы уроков рекомендуют между выходом потенциометра и входом ардуино устанавливать резистор на 100 ом, тогда схема выглядит вот так:

Схема подключения потенциометра к ардуино с защитным резистором

И это уже лучше, т. к. рекомендуется для защиты ардуино и продления ее жизни, на все используемые входы/выходы подключать резисторы на 100 Ом.

Но на практике этого оказывается не достаточно. Допустим, с помощью переменного резистора вы хотите вводить или точно устанавливать какие-то данные, но если вывести показания с аналогового входа в монитор порта, то вы увидите, что даже не прикасаясь к потенциометру значения постоянно меняются в небольших пределах и точно установить нужное значение не получается, хоть  убей. Почему так? Во первых, для подключение потенциометра мы используем аналоговый вход, который прекрасно ловит помехи и наводки от чего угодно (начиная от источника питания, заканчивая любыми электроприборами, я уж не говорю про что-то более серьезное). Во вторых, есть такое понятие, как дребезг контактов, что тоже сказывается, но в меньшей мере на работу нашей схемы, как правило он проявляется когда мы крутим ручку потенциометра. И что теперь делать? как с этим бороться? Есть два пути:

  • Программными средствами
  • С помощью доработки схемы работы устройства

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

Это второй способ. Нам необходимо доработать схему нашего устройства добавив в нее резистор и конденсатор. Этакой RC фильтр, который позволит избавиться от описанных недостатков и позволит работать схеме стабильно. Для реализации схемы нам понадобится резистор на 10 кОм и конденсатор 0.1uF (номинал может несколько отличаться в большую сторону).В общем виде схема будет выглядеть следующим образом:

Для тех кто плохо воспринимает принципиальные электрические схемы, вот более наглядное представление:

Думаю все представлено наглядно и в комментариях не нуждается.

Где можно найти эти самые резисторы и конденсаторы? В любом радиомагазине. Номиналы элементов ходовые, так что такая рассыпуха всегда есть в наличии. Для тех кто любит тариться на Aliexpress вот ссылка на хороший магазин с быстрой доставкой Fantasy Electronics

Ну а для тех кто хочет взять в одном месте, вот ссылки на компоненты:

Arduino Nano

Резисторы на 100 Ом

Резисторы на 10 кОм

Набор конденсаторов

Потенциометр

Дребезг контактов и защита от него.

| Робототехника

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

Что такое дребезг контактов. Если металлический шарик уронить, на твердую поверхность, например кафельная плитка, то за счет собственной упругости и упругости плитки, шарик несколько раз подскочит.

микроподскоки

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

В момент переключения будет происходит от 3 до 7 касаний, прежде чем они сомкнуться плотно.

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

Хотя в ТТЛ логике данная диаграмма дребезга переднего фронта не “заметит”, а вот задний фронт, каждое касание и отрыв, будут формировать новый импульс. Это может сказаться в целом на работе устройства, например работе счетчика импульсов. Даже при работе с Ардуино вы столкнетесь с ним, при работе с кнопками или концевиками.

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

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

2. Аппаратное решение проблемы – установка дополнительной схемы на входе микроконтроллера.

Здесь, конечно, решений тысячи, начиная от применения RC – фильтров и заканчивая двухтактными D – триггерами.

Решения с фильтром:

В данной схеме, как только нажата кнопка S2 ёмкость через неё мгновенно разряжается по замкнутому контуру через S2. В тот момент, когда S2 кратковременно разомкнута, на разряженной емкости логический 0 и пока она зарядится требуется время, заряд идет по цепи, VCC – R2 -C1 – GND. Но есть у схемы недостаток: в момент отключения S2, ёмкости требуется время для заряда (восстановление заряда) ёмкости, а пока она заряжается, на входе логический 0.

3. Решение – это программное. в целом принято считать, что любое переключение заканчивается в период 50 миллисекунд, но при желании опытным путем можно точно для Вашего случая измерить время дребезга и взять время задержки с запасом. Итак идея программного компенсирования дребезга в том, что после сработки входа, мы выдерживаем паузу и после этого пропускаем импульс в обработку.

Пример программы:

Вводим две переменные

a -текущее состояние

b – предыдущее состояние.

Запускаем цикл опроса кнопки.

Считываем значение значение кнопки а,

Сравниваем a и b

Если а = b то продолжаем цикл опроса.

иначе делаем паузу и снова проверяем Если а <> b то числу b присваиваем число a

Выполняем необходимые процедуры и снова заходим на цикл опроса кнопки.

Это один из простейших примеров, программы. Грамотные программисты пишут под себя модули уже сразу с задержкой в командах.

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

Достоинство алгоритма в том, что он прост и понятен.

При работе с енкодером (преобразователь вращения в импульсы), обязательно ставятся фильтры и настраивается система в целом, так как при быстром вращении, нужный импульс может проигнорироваться как дребезг.

Эта тема важна именно тем, кто работает с кнопками, концевиками и любыми сухими контактами.

Учитесь с нами, если видите недочеты, то пишите лично.

Для поиска публикаций через поисковые системы, просто вводите слово Вивитроника.

Свои комментарии можете предлагать в группе вконтакте,
Если есть вопросы или по желания, то пишите, через Обратную связь.
Канал телеграм.

Подавление дребезга контактов кнопки

Arduino, DIY и немного этих ваших линуксов.

Дребезг контактов на экране осциллографа

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

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

Для понимания сути, нам нужно рассмотреть простой код, который зажигает встроенный в плату Arduino светодиод на пине 13 при нажатии кнопки и гасит светодиод при следующем нажатии. Кнопка подключена ко второму пину (о подключении кнопки читайте статью « Как подключить кнопку к Arduino »):

Это рабочий код, но из-за дребезжания контактов кнопки он поймает много лишних срабатываний. Причём всё происходит так быстро, что программа успеет поймать ложные срабатывания несколько раз и несколько раз включить-выключить светодиод. В итоге, ваше устройство будет работать случайным образом. Если повезёт — светодиод будет гореть после нажатия. Не повезёт — цикл проскочит на состояние, когда светодиод окажется выключенным.

Суть программного способа в том, чтобы внутри программы отличить случайные срабатывания из-за дребезга от настоящего нажатия. Самый простой способ: добавить задержку сразу после первого срабатывания. Тогда при срабатывании кнопки мы останавливаем выполнение программы и дожидаемся, пока контакты кнопки перестанут дребезжать. Ложных срабатываний не будет.

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

Этот код обеспечивает избавление от дребезга и при этом не блокирует выполнение программы, как это происходит при использовании функции delay.

Еще одним способом избавлением от дребезга является использование библиотеки Bounce. В ней уже все предусмотрено, и для чтения значения на входе используются специальные функции:

Вот так просто работает эта библиотека. Предположительное значение дребезга лучше подбирать экспериментально, оно сильно зависит от качества изготовления конкретной кнопки.

Аппаратные решения всегда ценились за их надёжность и возможность облегчить написание программы.

Вот как выглядела схема подключения кнопки без аппаратной защиты от дребезга:

Схема подключения кнопки к Arduino

Добавив пару дополнительных элементов в схему мы сможем полностью избавиться от дребезга, не усложняя при этом код. А добавим мы инвертирующий триггер Шмитта и конденсатор. Мы построим RC-цепь с инвертирующим триггером.
Вот так это выглядит на схеме:

Резистор 10 кОм у нас теперь подтягивает вывод не к земле, а к +5В. Причём подтягивается не вход Ардуино, а вход инвертирующего триггера и заодно, конденсатор. Кнопка же, наоборот, подключена к земле. Сделано это в связи с тем, что триггер у нас инвертирующий. Суть такова: входящий аналоговый сигнал может быть восходящим, либо нисходящим. Внутри триггера определены пороговые значения:

1,6 В — для нисходящего сигнала и

0,9 В — для восходящего. Выход триггера становится логической единицей (5 В), при прохождении нисходящим сигналом через свой порог в 0,9 В, при этом нисхождение восходящим сигналом верхнего порога в 1,6 В будет проигнорировано. Аналогично, выход триггера становится логическим нулём (0 В), только когда восходящий сигнал проходит свой порог в 1,6 В, при этом проигнорируется прохождение нисходящим сигналом нижнего порога в 0,9 В. Зона неопределённости между порогами называется гистерезисом. То есть триггер переворачивает сигнал. Конденсатор с резистором образует RC-цепь. RC — от английских названий резистора и конденсатора (resistor и capacitor). RC-цепь замедляет затухание сигнала. То есть при снятии напряжения, оно пропадёт не сразу, а будет плавно снижаться. При нажатии кнопки мы прижмём RC-цепь к земле, конденсатор начнёт разряжаться и напряжение начнёт плавно падать. После отпускания кнопки, напряжение начнёт так же плавно расти:

График изменения напряжения RC-цепи

Инвертирующий триггер выполняет 2 функции:

1) он инвертирует (переворачивает) логические уровни: единица становится нулём, а ноль становится единицей.

2) он преобразует аналоговый сигнал в цифровой. То есть, в определённый момент, когда конденсатор разрядится до определённого уровня, триггер выдаст логическую единицу. Затем это нужно? При отпускании кнопки, при достижении определённого уровня заряда конденсатора, триггер установит на выходе низкий уровень. Сигнал на выходе триггера не будет зависеть от дребезга:

График изменения напряжения на выходе инвертирующего триггера Шмитта

Arduino, DIY и немного этих ваших линуксов.

Дребезг контактов на экране осциллографа

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

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

Для понимания сути, нам нужно рассмотреть простой код, который зажигает встроенный в плату Arduino светодиод на пине 13 при нажатии кнопки и гасит светодиод при следующем нажатии. Кнопка подключена ко второму пину (о подключении кнопки читайте статью « Как подключить кнопку к Arduino »):

Это рабочий код, но из-за дребезжания контактов кнопки он поймает много лишних срабатываний. Причём всё происходит так быстро, что программа успеет поймать ложные срабатывания несколько раз и несколько раз включить-выключить светодиод. В итоге, ваше устройство будет работать случайным образом. Если повезёт — светодиод будет гореть после нажатия. Не повезёт — цикл проскочит на состояние, когда светодиод окажется выключенным.

Суть программного способа в том, чтобы внутри программы отличить случайные срабатывания из-за дребезга от настоящего нажатия. Самый простой способ: добавить задержку сразу после первого срабатывания. Тогда при срабатывании кнопки мы останавливаем выполнение программы и дожидаемся, пока контакты кнопки перестанут дребезжать. Ложных срабатываний не будет.

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

Этот код обеспечивает избавление от дребезга и при этом не блокирует выполнение программы, как это происходит при использовании функции delay.

Еще одним способом избавлением от дребезга является использование библиотеки Bounce. В ней уже все предусмотрено, и для чтения значения на входе используются специальные функции:

Вот так просто работает эта библиотека. Предположительное значение дребезга лучше подбирать экспериментально, оно сильно зависит от качества изготовления конкретной кнопки.

Аппаратные решения всегда ценились за их надёжность и возможность облегчить написание программы.

Вот как выглядела схема подключения кнопки без аппаратной защиты от дребезга:

Схема подключения кнопки к Arduino

Добавив пару дополнительных элементов в схему мы сможем полностью избавиться от дребезга, не усложняя при этом код. А добавим мы инвертирующий триггер Шмитта и конденсатор. Мы построим RC-цепь с инвертирующим триггером.
Вот так это выглядит на схеме:

Резистор 10 кОм у нас теперь подтягивает вывод не к земле, а к +5В. Причём подтягивается не вход Ардуино, а вход инвертирующего триггера и заодно, конденсатор. Кнопка же, наоборот, подключена к земле. Сделано это в связи с тем, что триггер у нас инвертирующий. Суть такова: входящий аналоговый сигнал может быть восходящим, либо нисходящим. Внутри триггера определены пороговые значения:

1,6 В — для нисходящего сигнала и

0,9 В — для восходящего. Выход триггера становится логической единицей (5 В), при прохождении нисходящим сигналом через свой порог в 0,9 В, при этом нисхождение восходящим сигналом верхнего порога в 1,6 В будет проигнорировано. Аналогично, выход триггера становится логическим нулём (0 В), только когда восходящий сигнал проходит свой порог в 1,6 В, при этом проигнорируется прохождение нисходящим сигналом нижнего порога в 0,9 В. Зона неопределённости между порогами называется гистерезисом. То есть триггер переворачивает сигнал. Конденсатор с резистором образует RC-цепь. RC — от английских названий резистора и конденсатора (resistor и capacitor). RC-цепь замедляет затухание сигнала. То есть при снятии напряжения, оно пропадёт не сразу, а будет плавно снижаться. При нажатии кнопки мы прижмём RC-цепь к земле, конденсатор начнёт разряжаться и напряжение начнёт плавно падать. После отпускания кнопки, напряжение начнёт так же плавно расти:

График изменения напряжения RC-цепи

Инвертирующий триггер выполняет 2 функции:

1) он инвертирует (переворачивает) логические уровни: единица становится нулём, а ноль становится единицей.

2) он преобразует аналоговый сигнал в цифровой. То есть, в определённый момент, когда конденсатор разрядится до определённого уровня, триггер выдаст логическую единицу. Затем это нужно? При отпускании кнопки, при достижении определённого уровня заряда конденсатора, триггер установит на выходе низкий уровень. Сигнал на выходе триггера не будет зависеть от дребезга:

График изменения напряжения на выходе инвертирующего триггера Шмитта

Подавление дребезга механических контактов

Непосредственная подача сигналов на входы микросхем от кнопок и переключателей не всегда допустима из-за так называемого “дребезга” — многократного неконтролируемого замыкания и размыкания контактов в момент переключения (происходит из-за механического резонанса в течение времени до 40. 100 мс).

Нечувствительными к дребезгу являются входы начальной установки триггеров, счетчиков и регистров (обнуление по входам R). В этом случае могут использоваться схемы рис. 1.1.

Подача логических уровней сигнала на счетные входы микросхем требует подавления дребезга — без этого возможно случайное многократное срабатывание счетчиков.

На рис. 1.2 приведены схемы подавления дребезга с помощью RS-триггера, собранного на отдельных ЛЭ. Варианты приведенные на рис. 1.2в и 1.2г,

Рис. 1.1. Импульсы с дребезгом на контактах

Рис. 1.2. Подавление дребезга при помощи:
а), б) RS-триггера на элементах 2И-НЕ; в), г) RS-триггера на элементах 2ИЛИ-НЕ


Рис. 1.3. Использование одной микросхемы с четырьмя триггерами для
подавления дребезга

менее помехоустойчивы. Аналогичную схему можно выполнить на RS-триггере микросхемы 561 ТМ2, соединив неиспользуемые входы D и С с 0. Если требуется подавать много сигналов, то лучше воспользоваться мик-
росхемами с четырьмя триггерами в одном корпусе (рис. 1.3). На выходах триггеров 561 ТР2 сигнал лог. “1” появляется на время переключения S1. S4. При этом переключатели независимы друг от друга. Варианты формирователей сигналов на микросхемах 561 ТМЗ, 561 ИР9 и 561ИЕ11 обеспечивают фиксацию coстояния на выходе лог. “1” после нажатия соответствующей кнопки (остальные выходы обнуляются). Схемы (рис. 1.3б. 1.3г) позволяют нажимать поочередна только одну кнопку, а при нажатии двух одновременно запоминается состояние
первой по времени сработавшей кнопки. Цепь из C1-R6 служит для начальной нулевой установки выходов при включении питания. Применение регистра ИР9 позволяет при необходимости иметь на выходах инверсные сигналы, подав на его управляющий вход 2 лог. “0”.


Рис. 1.4. Подавление дребезга на триггере с управлением по выходу


Рис. 1.5. Формирование длинного импульса с помощью:
а) триггера Шмитта; б) триггера Шмитта собраннго на ЛЭ

Чаще удобнее использовать кнопки с одной группой контактов. Высокое входное сопротивление КМОП микросхем и относительно высокое выходное (100. 1000 Ом) позволяют упростить узел подавления дребезга (рис. 1.4), но такое включение недопустимо для микросхем с повышенной нагрузочное способностью, например 561ЛН1, 561ЛН2, 176ПУ1,176ПУ2 и т. д., так как их выходные токи при закорачивании выхода на общий провод кратковременно могут достигать десятков миллиампер, что снизит надежность устройства, а также создаст импульсные помехи.

Подавление дребезга на контактах возможно с помощью RC-цепи и триггера Шмитта (рис. 1.5). На выходе ЛЭ формируется импульс с крутым фронтом.


Рис. 1.6. Подавление дребезга с задержкой включения и выключения

Для подавления дребезга от кнопки с одной группой контактов могут применяться схемы, приведенные на рис. 1.6. Они аналогичны по принципу работы.
При замыкании кнопки SB1 емкость С1 начинает заряжаться. Постоянная времени цепи заряда (tз=0,7R2С1) выбирается такой, чтобы переключение элемен та D1.1 происходило после прекращения дребезга. При размыкании SB1 процесс перезаряда конденсатора аналогичен, что видно из диаграммы. Схемы на рис. 1.7, кроме подавления дребезга, позволяют получить задержку включения или выключения, если это необходимо, см. диаграммы.

На рис. 1.8 показана схема переключателя на три положения с взаимным выключением на основе трехстабильного триггера. При включении питания лог. “0” с разряженного конденсатора С1 через диод VD1 подается на входы элемен-
тов D1.1, D1.2 и на выходах появится лог. “1”. Этот сигнал через резисторы R1 и R2 поступает на входы элемента D1.3 (на выходе появится лог. “0”). Таким образом, в исходном состоянии на выходах 1 и 2 будет лог. “1”, а на выходе 3 —
лог. “0”. При нажатии на кнопку SB1 на выходе 1 появится лог. “0”, а на 2 и 3 — лог. “1”. Аналогично происходит при нажатии других кнопок, что исключает дребезг сигнала на выходе, однако при одновременном нажатии сразу двух или трех кнопок переключение выходного уровня происходит без подавления дребезга.

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


Рис. 1.7. Подавление дребезга с задержкой:
а) выключения; 6) включения


Рис. 1.8. Переключатель с взаимовыключением на основе трехстабильного
триггера

матричные шифраторы, на выходе которых в зависимости от номера нажатой кнопки формируется соответствующий двоичный код (например Л5, стр. 279; ЛЗ стр. 226).

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

Что это такое Дребезг контактов. Энциклопедия

                                     

2. Способы устранения нежелательного влияния дребезга

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

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

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

При управлении критичными к дребезгу входами цифровых устройств используют специальные электронные схемы пример с триггером на рисунке или другого типа: сигнал от контакта подаётся через ФНЧ в простейшем случае – RC-цепочку на электронную схему с передаточной статической характеристикой, имеющей петлю гистерезиса например, триггер Шмитта, и уже выход этого устройства используют для тактирования цифрового устройства.

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

При программном формировании очищенного от дребезга контакта сигнала наибольшее распространение получили три из них:

  • Методом подсчёта времени устойчивого состояния – программа в течение заданного времени многократно считывает состояние контакта. Если в течение заданного времени не обнаружено ни одного изменения состояния на противоположное, то контакт считается устойчиво замкнутым. В противном случае, если было обнаружено изменение состояния в течение заданного времени, то подсчёт времени прерывается или продолжается, но с установкой флага или подсчётом количества изменений состояния для оценки физического состояния механических контактов и контакт считается разомкнутым или с неустойчивым состоянием если такая информация используется в программе.
  • Методом подсчёта числа совпадающих значений сигнала замкнутости – программа многократно считывает состояние контакта, и, если последовало определённое количество подтверждений замкнутости в течение заданного промежутка времени определяется экспериментально и выбирается в пределах от 10 до 100, контакт считается устойчиво замкнутым.
  • Путём установки временной задержки – программа, обнаружив замкнутое состояния контакта, игнорирует его состояние на время, заведомо большее длительности дребезга, и спустя это время снова проверяет состояние контакта. Если после этого времени состояние контакта замкнутое, то соответствующая переменная меняет значение.

JoystickShield. Универсальный джойстик для изучения программирования контроллеров

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

JoystickShield. Общий вид

Принципиальная схема

Общая принципиальная схема устройства выглядит следующим образом:

JoystickShield. Схема

Дисплей 1602

Подключен в четырехбитном режиме к выводам 5-8 Arduino-совместимого разъема. Выбор режима (RS) подключен к 13му выводу Arduino, а вывод разрешения (E) к 12му. Дисплей сконфигурирован всегда на чтение, так как на вход R/W подано высокое напряжение. Резистором R1 настраивается контрастность, а через R2 ограничивается яркость подсветки дисплея.

  1. XP5 — Дисплей 1602, подключенный по 4х-битному интерфейсу с регулировкой контрастности. Для его установки на плату установлен разъем PBS-16, а на дисплей PLS-16
  2. R1 — Подстроечный резистор 10кОм, CA9V
  3. R2 — Резистор 1кОм, 0805. Можно поставить меньше, чтобы увеличить яркость подсветки

Джойстик

По сути, представляет собой два переменных резистора и кнопку, подключенных к выводам A3, A4, A5, соответственно. Для уменьшения дребезга контактов используется RC-цепочка.

  1. JOY1 — Джойстик. Для его подключения потребуется разъем PLS-05R и пять соединительных проводов розетка-розетка
  2. R5 — Резистор 1кОм, 0805/li>
  3. C3 — Конденсатор 0,1мкФ, 0805

Акселерометр-гироскоп

В пульте используется модуль MPU6050 (DD1). Подключается он через разъем PBS-08 к выводам SDA, SCL Arduino.

Кнопка

Подключена в выводу 2 Arduino через RC-цепочку для подавления дребезга.

  1. SA1 — Кнопка выводная, типа DTSM
  2. R6 — Резистор 1кОм, 0805
  3. C4 — Конденсатор 0,1мкФ, 0805

Вибромотор

Подключен к 11му выводу Arduino через логический транзистор BCR108E6327. Ограничение тока задается резисторами R8-R12. Если каждый из них имеет сопротивление 1кОм, то общее сопротивление составляет приблизительно 200 Ом. Можно уменьшить это сопротивление, чтобы увеличить мощность вибрации. Параллельно двигателю стоит диод S1M для защиты транзистора.

  1. M1 — Вибромотор
  2. VD1 — Диод, S1M, DO214
  3. R8-R12 — Резисторы, 1кОм, 0805
  4. VT2 — Транзистор, BCR108E6327, SOT23

Энкодер

Энкодер подключен к выводам 3, 4 разъема Arduino через RC-цепочки подавления дребезга контактов.

  1. ENC1 — Энкодер, EC12E24204A8
  2. R3, R4 — Резистор 1кОм, 0805
  3. C1, C2 — Конденсатор 0,1мкФ, 0805

Пьезоизлучатель

Без встроенного генератора. Подключен к 10му выводу Arduino через транзистор. Параллельно пьезоизлучателю стоит резистор на 1кОм для разряда его емкости в то время, когда транзистор закрыт.

  1. BA1 — Пьезоизлучатель без встроенного генератора типа EFM-250 с шагом выводов 7,5мм
  2. R7 — Резистор 1кОм, 0805
  3. VT1 — Транзистор, BCR108E6327, SOT23

Разъемы

XS1-XS4 — PLS разъемы, предназначенные для подключения к Arduino. Обратите внимание, что шилд предполагает использование дополнительных выводов SDA, SCL, которые есть в разъеме XS3. Оригинальная Aruino Uno и большинство клонов имеют эти контакты.
PLS-разъемы XP1-XP4 подключены к выводам 9, A0, A1, A2. Эти разъемы могут быть использованы для подключения дополнительных датчиков, сервоприводов и т.д.

Питание

В первую очередь необходимо отметить то, что на плате есть место для двух перемычек.
JMP1 задает источник питания для относительно больших потребителей (вибромотора, разъемов XP1-XP4 и пьезоизлучателя). Если перемычка впаяна в положение EXT_PWR, то питание на эти периферийные устройства подается через клемму XS5. Если перемычка впаяна в положение 5V, то будет использование напряжение 5В от Arduino.
JMP2 определяет логический уровень для “подтяжки” кнопок и линий энкодера. Это сделано для того, чтобы можно использовать шилд как с микронтроллерами AVR (имеющими уровень логической единицы до 5В) и STM32, работающих с напряжениями до 3,3В. Таким образом пользователь сам может выбрать более удачное напряжение логической единицы в соответствии со своими условиями.

Плата

Как и говорилось выше, печатная может быть изготовлена односторонней с перемычками. В конце статьи можно будет найти Gerber-файлы для изготовления печатной платы. Внешний вид со стороны проводников:

Печатная плата пульта

Все элементы на обратной стороне печатной платы хорошо видны и можно использовать этот рисунок в качестве сборочного чертежа.
На лицевой стороне достаточно просто установить относительно небольшое количество перемычек:

Перемычки на лицевой стороне

Сборочный чертеж на лицевую сторону печатной платы:

Лицевая сторона джойстика

Под джойстиком установлен угловой разъем для подключения проводами. Вибромотора на модели нет, но очевидно куда он устанавливается. Также можно дополнительно его закрепить хомутами.

Файлы для скачивания

Изготовить платы можно самостоятельно. Все файлы для изготовления платы можно скачать одним архивом.

Чуть позже мы выложим дополнительные материалы по работе с периферийными устройствами этого пульта на разных платформах. Следите за обновлениями!

Обращаем ваше внимание, что вы можете купить это устройство в готовом виде в нашем магазине

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

Что такое дребезг переключателя?

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

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

Что такое защита от программ?

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

Переключатель Debouncing Methods

Сначала мы продемонстрируем схему без дребезга переключателя .

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

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

  • Аппаратное отключение
  • RC Debouncing
  • Коммутатор Debouncing IC

1. Отключение оборудования

В технике устранения дребезга оборудования мы используем триггер S-R, чтобы предотвратить дребезг переключателя в схеме. Это лучший метод устранения дребезга среди всех.

Необходимые компоненты

  • Микросхема Nand Gate 74HC00
  • Тумблер
  • Резистор (10к -2н.)
  • Конденсатор (0,1 мкФ)
  • светодиод
  • Макет

Схема

Работа схемы аппаратного устранения дребезга

Схема состоит из двух вентилей Nand (74HC00 IC), образующих триггер SR. Как вы можете видеть на принципиальной схеме, всякий раз, когда тумблер переключается на сторону A, выходная логика становится «ВЫСОКОЙ». Здесь мы использовали осциллограф для обнаружения подпрыгивания.И, как вы можете видеть на диаграмме, приведенной ниже, логика смещается с небольшой кривой, а не с подпрыгиванием. Резисторы, используемые в схеме, представляют собой подтягивающие резисторы.

Каждый раз, когда переключатель перемещается между контактами для создания дребезга, триггер поддерживает выход, потому что «0» возвращается с выхода вентилей Nand.

2. R-C Debouncing

R-C определяется только своим названием, в схеме используется RC-сеть для защиты от дребезга переключателя.Конденсатор в схеме фильтрует мгновенные изменения сигнала переключения. Когда переключатель находится в разомкнутом состоянии, напряжение на конденсаторе остается нулевым. Первоначально, когда переключатель разомкнут, конденсатор заряжается через резисторы R1 и R2.

Когда переключатель замкнут, конденсатор начинает разряжаться до нуля, следовательно, напряжение на входе инвертирующего триггера Шмитта равно нулю, поэтому на выходе становится ВЫСОКИЙ.

В режиме подпрыгивания конденсатор прекращает подачу напряжения на Vin, пока оно не достигнет Vcc или заземления.

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

3. Микросхема подавления колебаний переключателя

На рынке доступны ИС для устранения неисправности коммутатора. Некоторые из ИС для устранения дребезга – это MAX6816, MC14490 и LS118 .

Ниже приведена принципиальная схема устранения дребезга переключателя с помощью MAX6818.

Итак, здесь мы узнали, как кнопки создают эффект подпрыгивания переключателя и как его можно предотвратить, используя схемы Switch Debouncing .

таймеров – Код проверки продолжительности нажатия кнопки

Основная проблема, по-видимому, заключается в том, что freeze_timer и btn_timer имеют тип unsigned int , тогда как millis , как указано в его документации, возвращает unsigned long .

Как вы, возможно, знаете, unsigned int обычно может содержать гораздо меньший диапазон значений, чем unsigned long . В случае любого компилятора, который Tinkercad использует для Arduino Uno, я проверил, и unsigned int может содержать значения от 0 до 65535, а unsigned long может содержать значения от 0 до 4294967295.Всякий раз, когда вы сохраняете unsigned long в unsigned int , оно будет уменьшено по модулю 65536.

Это означает, что после прохождения 65,536 секунд проверок, таких как (millis () - freeze_timer)> = 2500, всегда будет истинным (по крайней мере, до тех пор, пока миллисекунд не вернется обратно через 4294967,296 секунды – около 50 дней).

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

Самым простым решением, конечно же, является объявление freeze_timer и btn_timer соответствующего типа, unsigned long .

Все вышесказанное, как сказал Гербен, код кажется чрезмерно сложным.

Кажется, есть и другие проблемы. Например, я бы ожидал, что поведение противодействия не должно игнорировать нажатия, которые длятся менее 1 секунды. Как сказал Гербен, 10 мс должно быть достаточно, чтобы исключить любые отказы.

Более того, я думаю, было бы более уместно даже не отбрасывать нажатия, которые длятся менее 10 мс. Я бы сказал, что дебаундер должен запускать “пресс” независимо от того, длилось ли нажатие менее 10 мс.Его роль должна заключаться в игнорировании нескольких нажатий на в пределах этого окна 10 мс (хотя, честно говоря, игнорирование коротких нажатий – не такая уж большая проблема).

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

Полное руководство

по Switch Debounce (часть 7) – EEJournal

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

Прежде чем мы начнем, давайте вкратце напомним себе, что в Части 1 мы представили концепцию дребезга переключателя; в Части 2 мы углубились в отскок, связанный с однополюсными, одинарными (SPST) и однополюсными, двойными (SPDT) переключателями; в Части 3 мы рассмотрели использование RC-сети для устранения неисправности тумблера SPST; в части 4 мы рассмотрели использование моностабильных мультивибраторов; в Части 5 мы обратили внимание на использование защелок с переключателями SPDT; а в Части 6 мы представили некоторые специальные интегральные схемы (ИС) с защитой от дребезга переключателя.(Если что-то из этого вам незнакомо, возможно, вы также захотите взглянуть на мои связанные столбцы «Типы переключателей» и «Терминология переключателей».)

Переключатели и сбросы

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

Вслед за предыдущей колонкой внештатный консультант по встроенным системам Питер Смит из PJS Electronics прокомментировал: «Одна из наиболее упускаемых из виду схем (часто передаваемых младшему члену команды) – это схема сброса (и секвенсора во многих приложениях). Это одна из самых важных частей любой системы, и ее не следует оставлять на усмотрение младшего члена без присмотра.В свое время я видел несколько ревунов. Ранее я рассматривал вопрос об обмене стеками, касающийся последовательности включения / сброса. Основная рассматриваемая деталь была членом семейства процессоров AM335x Sitara Arm от TI, которые предъявляют довольно сложные требования (все становится еще интереснее, если у вас есть FPGA с ядром PCI / PCIe, которое должно быть включено до выхода процессора. сброса) ».

Мердо МакЛеод ответил: «Ты прав, Питер, запуск и безопасный сброс являются критическими частями встраиваемой системы.«Промежуточный» – это просто программа, выполняющая цикл «промыть и повторить». Я бы никогда не позволил младшему инженеру спроектировать или протестировать что-то столь важное. Люди забывают, что предположения о поведении схемы по умолчанию больше не действуют во время повышения или понижения напряжения при запуске источника питания или секвенсора ».

Кроме того, Антонио Джакомелли де Оливейра из блога Engenheiro Eletronico («Инженер-электронщик») присоединился к нему, отметив: «У Каммингса есть отличная статья о сбросе синхронизаторов.”

Переключатели и прерывания

Еще одна тема, которую стоит затронуть, – это переключатели и прерывания. Одна вещь о процедуре обслуживания прерывания (ISR) заключается в том, что она должна быть быстрой «вход и выход», делающая то, что она делает, как можно быстрее, что означает, что вы определенно не хотите зависать в ISR, откладывая переключатель. . Я спросил встроенного гуру Джека Гэнссла, что он думает по этому поводу, и он ответил следующим образом:

Я понимаю это просто: никогда не привязывайте переключатель непосредственно к входу прерывания.Обычно они синхронизируются внутри микроконтроллера (MCU) с… чем-то. Все части разные. Во многих случаях поставщик не предоставляет точных данных о времени прерывания. Итак, если у вас есть дребезг, который длится наносекунды, испортит ли это внутренний триггер? Некоторые люди говорят мне, что в этом нет ничего страшного, так как один из отскоков рано или поздно будет заблокирован. Я считаю, что это плохая инженерия. Кажется опрометчивым привязывать что-то, что может длиться меньше пары тактов, к неизвестному входу. Несколько лет назад я обсуждал это с Microchip Technology, и они согласились.

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

Кроме того, код становится некрасивым, поскольку он должен отклонять отказы. Если MCU спит между прерываниями, вы тратите много энергии на пробуждение, чтобы отреагировать на эти отказы прерывания.

Альтернатива, которая, как я думаю, содержится в моей статье Guide to Debouncing , заключается в том, чтобы реагировать на тиковые прерывания, скажем, раз в миллисекунду, как вы обычно делаете с RTOS или таймером, и быстро проверять переключатель GPIO Вход. Довольно простой алгоритм устраняет дребезг. Чтобы полностью отключить коммутатор, может потребоваться полдюжины таких прерываний, но это требует нескольких циклов процессора. Это приятно, так как не нужно ждать в петлях, чтобы отскок успокоился.

На самом деле, вывод Джека хорошо согласуется с программными решениями, которые мы собираемся обсудить, но сначала давайте рассмотрим несколько подробнее сценарии опроса и сценариев, управляемых прерываниями …

Сценарий опроса с несколькими коммутаторами

Предположим, у нас есть три тумблера SPST, как показано ниже.Обратите внимание, что мы немного изменили наши предыдущие схемы – вместо использования подтягивающих резисторов на нормально разомкнутых клеммах и подключения других клемм к 0 В, мы используем подтягивающие резисторы и подключение клемм NO к + ve. Причина этого станет очевидной в ближайшее время (надеюсь, вы не против, чтобы я назвал вас «Скоро»).

Сценарий опроса с несколькими коммутаторами (Источник изображения: Max Maxfield)

В этом контексте термин «опрос» относится к MCU, который периодически производит выборку состояния трех цифровых входов, подключенных к переключателям.Более подробно мы рассмотрим это позже. А пока давайте просто предположим, что у нас есть основной цикл программы, который выполняется раз в миллисекунду (мс). Первое, что мы можем сделать в начале каждой итерации цикла, – это опросить (прочитать) состояние каждого из переключателей, чтобы увидеть, что происходит.

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

Сценарий прерывания с несколькими коммутаторами (исходный)

В качестве альтернативы вышесказанному, мы могли бы использовать ИЛИ для сигналов от переключателей и использовать выход логического элемента ИЛИ для управления входом запроса прерывания (IRQ) на MCU, как показано ниже.(Обратите внимание, что когда я был молодым инженером с блестящими глазами и пушистым хвостом, микроконтроллеры обычно имели только один или два выделенных входа прерывания. Для сравнения, многие современные микроконтроллеры позволяют программисту указывать, какие выводы они хотят действовать как прерывания, каждый с собственный ISR.)

Сценарий, управляемый прерываниями с несколькими переключателями (Источник изображения: Max Maxfield)

Идея здесь заключается в том, что, предполагая, что все тумблеры запускаются в своих открытых (неактивных) состояниях, всякий раз, когда один из переключателей замыкается, тем самым соединяя его с логической 1, выход логического элемента ИЛИ переходит с 0 на 1. , генерируя запрос на прерывание.(Причина, по которой я использовал наименование «Raw» как часть названия этой темы, состоит в том, что мы подаем необработанные (необработанные, отражающиеся) сигналы в логический элемент ИЛИ.)

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

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

Облом.

Но превратите этот хмурый взгляд в улыбку, потому что еще не все потеряно. В моей предыдущей колонке мы говорили о 3-канальном чипе противодействия LS118 от LogiSwitch (также доступны 6- и 9-канальные версии). Почему это интересно? Читайте дальше…

Сценарий прерывания с несколькими коммутаторами (LogiSwitch)

Первое, что мы заметили в LS118, это то, что его выходы находятся в фазе, противоположной фазе его входов; то есть логический 0 на входе переключателя приведет к логической 1 на соответствующем выходе.Но что действительно здорово в этих устройствах, так это их уникальный протокол установления связи 1-Wire. Когда микроконтроллер (MCU) «видит», что один из выходных сигналов NL / HS от LS118 становится высоким, он может изменить свой входной контакт на выходной, установить низкий уровень сигнала на 50 микросекунд (мкс), а затем вернуть контакт в вход.

Выходы LS118 – открытый коллектор с внутренними подтягиваниями. Когда LS118 видит, что MCU устанавливает низкий уровень на одном из своих выходов, он сам начинает устанавливать низкий уровень на этом выходе.Результат показан ниже:

Микросхема LogiSwitch LS118, реагирующая на дребезг переключателя и использующая возможность квитирования (Источник изображения: Max Maxfield)

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

LogiSwitch LS118 в схеме с 3 переключателями (Источник изображения: Max Maxfield)

Еще раз предположим, что мы начинаем со всеми нашими переключателями в их разомкнутых (неактивных) состояниях.Когда один из переключателей замыкается, тем самым соединяя этот вход LS118 с логическим 0, соответствующий выход LS118 немедленно (в течение нескольких наносекунд) переходит на логический 1.

Это приводит к переходу выходного сигнала логического элемента ИЛИ с 0 на 1, тем самым генерируя запрос прерывания. Теперь либо ISR, либо основная программа может считывать состояние трех цифровых входов, чтобы увидеть, какой переключатель был нажат, использовать протокол подтверждения для сброса этого выхода LS118 обратно на логический 0 и вернуться к тому, что он делал. .Если впоследствии активируется другой переключатель, он сгенерирует собственный запрос прерывания (даже если первый переключатель все еще активен, его выход LS118 был сброшен до логического 0).

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

В следующий раз

Мне очень, очень жаль.Я не веду вас намеренно. Просто я всегда обнаруживаю так много, о чем можно поговорить (как и моя дорогая старая мама, настоящая уловка состоит в том, чтобы заставить меня перестать говорить ). Я абсолютно обещаю – честное слово как француз – что моя следующая колонка отказов переключателя будет последней в этой серии. В этой колонке мы рассмотрим устранение неисправности аппаратного переключателя внутри ПЛИС и различные программные методы устранения неисправности переключателя в микроконтроллерах. До того дня, как всегда, я буду приветствовать ваши комментарии, вопросы и предложения.

Связанные

Понимание и устранение электромагнитных помех в приложениях микроконтроллеров

% PDF-1.4 % 1 0 obj> поток application / pdf Понимание и устранение электромагнитных помех в приложениях микроконтроллеров

  • Замечания по применению
  • Texas Instruments, Incorporated [SNOA382,0]
  • iText 2.1.7 от 1T3XTSNOA3822011-12-08T03: 14: 14.000Z2011-12-08T03: 14: 14.000Z конечный поток эндобдж 2 0 obj> / ProcSet [/ PDF / Text / ImageB / ImageC / ImageI] / Font >>> / MediaBox [0 0 540 720] / Contents [7 0 R 8 0 R 9 0 R 10 0 R] / Type / Страница / Родитель 11 0 R >> эндобдж 3 0 obj> поток

    Что такое энкодер и как запустить код Arduino для деталей поворотного энкодера

    Привет, ребята !!!!! мы здесь, чтобы помочь вам узнать, как запустить код arduino поворотного энкодера и как читать вывод.Итак, начнем.

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

    Что такое кодировщик?

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

    Но поскольку вы можете продолжать вращать его, у него все равно нет ни начала, ни середины, ни конца. Однако, если вы отслеживаете это вращение в коде, вы можете использовать его как вход ручки, который вы можете поворачивать вверх или вниз сколько угодно.

    Как работает энкодер?

    Большинство простых энкодеров, подобных этому, используют только 4 контакта, один из которых заземлен, а другой – Vcc. Эти два других контакта меняют состояние и всегда имеют высокий или низкий уровень, поэтому они могут иметь всего 4 комбинации.00, 01, 10 и 11.

    Это известно как 2-битный код Грея. Итак, когда вы его поворачиваете, arduino может сказать… Ну, вы были на 01, а теперь на 00, так что вы двигаетесь в этом направлении. Или вы были в 01, а сейчас у вас 10, так что вы, должно быть, переехали в другую сторону. Вы можете видеть, что этот кодировщик имеет 5 контактов, а 2 других – это простой переключатель, который включается, когда вы нажимаете.

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

    Мы можем отслеживать, насколько он переместился с момента нашего начала. Так что если вам нужна ручка, которая может поворачиваться до 11, это ваш парень. (Обещаю, здесь есть двойной каламбур)

    Итак, действительно интересная вещь о поворотном энкодере – это то, что он работает; нам нужно знать каждый раз, когда эти ценности меняются. Это может быть сложно, потому что, если arduino что-то делает, например delay (1000) или что-то еще, мы пропустим изменение.

    Итак, нам нужен способ сказать Arduino: «Меня не волнует, что вы делаете или когда вы это делаете; если вы видите, что любой из этих двух контактов меняет состояние, вы бросаете все и обращаетесь к ним ». Для этого нам нужны прерывания.

    Прерывания – это чудо

    Пины прерывания – это специальные пины, которые могут остановить ваш Arduino и заставить его сделать что-то еще, прежде чем он двинется дальше. Поскольку это особые контакты, вы получаете только несколько из них на вашем Arduino; но эти булавки могут отслеживать любое ИЗМЕНЕНИЕ (от высокого к низкому / от низкого к высокому), ПАДЕНИЕ (от высокого к низкому) или ПОДЪЕМ (от низкого к высокому).

    Вы можете прикрепить к этим контактам функции прерывания, чтобы, если произойдет изменение; он все отбросит и запустит эту функцию. Это становится напуганным, поскольку ломает базовую линейную природу цикла Arduino; но может стать самым мощным, когда вы освоите его.

    Любые глобальные переменные, которые используются внутри этих функций, имеют особое имя. Их не зря называют изменчивыми переменными. Их ценности могут измениться в любой момент.

    Итак, если вы дважды используете volatile в своем цикле, это может быть не то же самое значение во второй раз, если оно было изменено во время функции прерывания.

    Поворотный энкодер Описание кода Arduino:

    Чтобы отслеживать поворотный энкодер, мы собираемся сделать кое-что, что будет выглядеть очень странно, так что потерпите меня.

    У энкодера 2 цифровых контакта: ВЫСОКИЙ (1) или НИЗКИЙ (0), верно? Если мы рассматриваем контакты как двоичные, мы читаем их как 00, 01, 10 или 11. Последовательность, которую кодер выводит при вращении по часовой стрелке, – это 00, 01, 11, 10 повторений.

    Итак, если у вас есть показание 01, следующее показание может быть либо 00, либо 11 в зависимости от направления вращения ручки.Итак, добавив предыдущее закодированное значение к началу текущего закодированного значения; мы получаем 1 из 8 возможных чисел (0001, 0010, 0100, 0111, 1000, 1011, 1110 и 1101) 1101, 0100, 0010 и 1011 – все это означает движение по курку. 1110, 0111, 0001 и 1000 – все против часовой стрелки.

    Итак, теперь мы можем сказать следующее: (сумма – это последнее чтение + текущее чтение)

     if (sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue ++; // движение по часовой стрелке
    if (sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue -; // движение против часовой стрелки 

    Альтернативное программное обеспечение Ubitx

    Морозильник Thomson вертикальный (6.5 куб. футов) руководство пользователя

    Nih письмо поддержки

    Ubitx. Это комплект, но менее сложный, чем большинство комплектов ВЧ. Маломощный, многополосный. Обширная поддержка на форуме на groups.io. SSB, CW. Причем цифровая – с соответствующим интерфейсом и компьютером – как и любое другое радио. Также полезная платформа для обучения, особенно если вы увлекаетесь аппаратными и программными модами (Arduino).

    Каков максимально допустимый ток утечки в медицинском устройстве?

    28 декабря 2017 г. · Обычно я запитываю вывод светодиода через резистор 100 Ом до 5В.Если бы был доступен вывод ШИМ, я бы добавил вместо него регулировку интенсивности подсветки. Программные изменения в основном скетче ubitx_20 были довольно простыми, и затем я заменил файл ubitx_ui модифицированным файлом ubitx_tft_ui. Изменения в файле ubitx_20 вносятся в объявлениях / * Частота дискретизации осциллископа очень похожа на FPS фильма или видеоигры, она определяет, сколько деталей вы отображаете за определенный промежуток времени. В случае с осциллографом это то, как часто осциллограф производит выборку сигнала.Осциллографы начального уровня могут иметь частоту дискретизации 1-2 Гвыб / с, а осциллографы среднего уровня – 5-10 Гвыб / с.

    Kik san diego

    28 декабря 2020 г. · Они начали разработку альтернативного стекла, которое… читать дальше. Аппетитный мир стандартных продуктов NIST. Национальный институт стандартов и технологий был основан 3 марта 1901 г. как … 9 июня 2019 г. · uBITX – это радио с открытым исходным кодом. Программа находится в свободном доступе и может быть изменена любым желающим. Это действительно хакерское радио.Ашхар Фархан поставил перед собой цель сделать радиоприемники понятными для всех и выпустил BITX40 и uBITX, чтобы люди могли иметь работающее радио и учиться у них.

    Как обойти блокировку экрана на galaxy note 8

    Из-за того, что китайцы скопировали проекты радиолюбителей, программное обеспечение имеет закрытый исходный код. Версия FQP13N10 Полевые транзисторы RD16HHF1 могут выдавать только 20 Вт, и это при нормальном источнике питания 14 В. С FQP13N10s и модулем повышения напряжения были получены следующие результаты: 80 м, 6.2A, 35 Вт 40 м, 7,8 A, 38 Вт 20 м, 9,0 A, 40 Вт 15 м, 8,0 A, 30 Вт 10 м, 6,0 A, 25 Вт Дэвид Брайан, специалист по безопасности в Trustwave в Чикаго, смог украсть данные кредитной и дебетовой карты, стоя всего за шесть в дюймах (15 см) во время совершения транзакции.

    Sanyo ur18650rx

    В комплект UBITX входит капсюль электретного микрофона (со встроенным полевым транзистором) и небольшой переключатель для PTT. Некоторые люди спроектировали и напечатали на 3D-принтере свои собственные корпуса микрофонов, но у меня нет собственного 3D-принтера.Другой вариант – использовать дешевый китайский динамик, такой как Baofeng, который можно купить на ebay. 28 дек, 2020 · Они начали разработку альтернативного стекла, которое… читать дальше. Аппетитный мир стандартных продуктов NIST. Национальный институт стандартов и технологий был основан 3 марта 1901 года как …

    Глава 14.1 Таблица поведения газов ключ ответа

    ДОБРО ПОЖАЛОВАТЬ В БАЗУ ДАННЫХ RIGPIX Серьезный, многогигабайтный источник информации и изображений радиоприемники, аксессуары и многое другое.Это оригинал, официально доступный в сети с 2000 года, с миссией сохранить наследие любительского радио.

    Позвоните в службу технической поддержки eero

    Руководство очень много работает, чтобы убедиться, что сообщество использует лучшее программное обеспечение, лучшие разработки и все прочие навороты. Не хочешь купить нам пива? Мы были бы очень признательны! Пожертвуйте нам! Моды Ubitx. UBITX (Micro-BITX при произнесении вслух) – это приемопередатчик SSB и CW, который охватывает все любительские КВ диапазоны, и, как и оригинал, разработан для домашних конструкторов с ограниченным бюджетом.26:03 # 056 Недорогие интеллектуальные сенсорные дисплеи для Arduino, ESP8266 и других: отправлено: 7 февраля 2019 г., четверг, 12:47 Кому: [адрес электронной почты]

    Нью-Джерси, шлагбаум останавливается на северном направлении

    Дэвид Брайан, специалист по безопасности в Trustwave в Чикаго, смог украсть данные кредитной и дебетовой карты, стоя всего в шести дюймах (15 см) от транзакции.

    Телефон Linux

    23 ноября 2017 г. · Для пуристов: генератор, управляемый напряжением, который покрывает 4.Альтернативой является диапазон от 8 до 5 МГц для покрытия диапазона от 7,0 до 7,2 МГц. Просто отключите Raduino и припаяйте прилагаемую желтую катушку VFO. Вместо переменного конденсатора был выбран варактор, так как его легче настраивать. Правильно установить конденсатор VFO сложно.

    Alcohol for vyvanse comedown reddit

    SF: Рон W7HD, Приемопередатчик uBitX, стр. 3-7. МС: Джерри K4KBL, его карьера на радиолюбителях началась с бойскаутов плюс группа любителей мам и пап, позже этот радиолюбитель помогал передавать сообщения из Ирана, когда американское посольство было захвачено, и многое другое, стр. 8-9.GCN: спринты, испытания, награды и сети, стр. 10–21.

    Додж глохнет во время движения

    26 декабря 2019 · Если бы у него были все функции uBITX на экране, то регуляторы громкости были бы экранными ползунками, позволяющими регулировать все функции с помощью пульта дистанционного управления. Первая проблема – как настроить уровни громкости uBITX в программном обеспечении через какой-то интерфейс. Вторая проблема заключается в том, что не видно выходных уровней РЧ. 16 июня 2018 г. · В противном случае в режиме приема антенна изолирована от выхода PA.Таким образом эмулируется шунтирующая функция пин-диода D4. Защита с помощью диодов 1N4148 – или аналогичных – всегда обсуждалась, потому что эффект интермодуляции, который может вызвать входящий сильный сигнал, превышающий 500 мВ. В отличие от df8oe, я использовал транзистор NPN для управления реле. 3 января 2018 г. · uBITX основан на Arduino Nano. Таким образом, метод обновления прошивки uBITX такой же, как и у Arduino. Есть два способа обновить прошивку uBITX. Первый – это скомпилировать исходный код из Arduino IDE, а второй – загрузить скомпилированный шестнадцатеричный файл с помощью Firmware Upgrade Tool.Я покажу вам, как загрузить скомпилированный шестнадцатеричный файл в качестве второго метода. Интерфейс uBitX немного сложнее, но это несложно, и существует множество руководств по подключению его к WSJT-X. UBitX также имеет специальную прошивку, которая расширяет функциональность и обеспечивает управление установкой через USB. С помощью этой прошивки вы даже можете добавить к uBitX симпатичный графический интерфейс. Стоимость …

    Расположение кода краски Corvette

    Моей первой высокочастотной установкой был uBITX за последние 2 месяца.Это полный ВЗРЫВ. Мой некрасивый, но отлично работает. Существует полный контроль CAT через альтернативную прошивку, которую легко установить. Я купил EFHW в MyAntennas (не хотел строить установку и антенну с первого раза, меньше переменных), и он отлично работает! Rx – это RSP1a с программным обеспечением SDR Uno v 1.40.1. Антенна представляет собой перевернутую L, вертикальную вершину 45 футов и наклонную вершину 65 футов. Сигнал очень постоянный в течение примерно 10 минут, очень мало QSB. 1065 DL8NBG Heinz 8 26.08.2020 10.40 10 539 JN59ML 883 883 S58DX

    Устранение неполадок коммутатора msp430

    Der MSP430 ist ein 16 Bit-Mikrocontroller von Texas Instruments (TI).Er wurde speziell für eine geringe Stromaufnahme entwickelt, поэтому dass er besonders für batteriebetriebene Geräte geeignet ist. Es gibt verschiedene Typen mit 1-256 kB Flash-ROM, 128-18432 Byte RAM …

    18 августа 2010 г. · Здравствуйте, я пытаюсь создать самый короткий алгоритм выдачи ключей для MSP430F2013. Ниже приведен код: #include unsigned int button1, button2; #define BTN1 BIT4 #define BTN2 BIT3. . . пустая функция() { . . .

    8 сентября 2014 г. · Учебное пособие по устранению вибраций коммутатора Управление кнопкой прерывания MSP430.MSP430 Устройство контроля дребезга с несколькими переключателями. В третьем примере есть два примера алгоритмов устранения дребезга переключателя, они разделены на две отдельные функции, которые можно запускать из основной функции, просто комментируя одну из них за раз.

    Этот образ создан с помощью Fritzing .. Код Arduino / * Отключение кнопки с помощью этого скетча демонстрирует устранение дребезга кнопки с помощью программного обеспечения. Каждый раз, когда нажимается кнопка, светодиод будет переключаться. Схема: светодиод, подключенный от контакта 13 к заземлению, кнопка, подключенная к контакту 2, к + 5V, резистор 10 кОм, подключенный к контакту 2, к заземлению. доска …

    По сути, идея состоит в том, чтобы сделать что-нибудь крутое на ComicCon Delhi, Индия. Я большой поклонник Железного человека, и мне нравится эта идея в самом ее смысле. Итак, я подумал, что было бы здорово сделать Индианизированный косплей Железного человека на комиксе, удивив всех моих друзей: D Железного человека символизирует его дуговой реактор. Итак, лучше построить дуговой реактор, но мы намерены построить простой старый дуговой реактор, я …

    16 июня 2004 г. · Мое практическое правило состоит в том, что требуется время устранения дребезга 100 мс, если только не будет доказано, что переключатель действительно работает. хороший тип.Это также означает, что использование стабильных показаний вообще не работает. Другое дело, что нажатие клавиши может длиться всего 1-2 мс для действительно быстрого (или, скорее всего, сердитого (и, следовательно, с некоторой вероятностью, чтобы позвонить в службу поддержки)) пользователя.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *