В предыдущей статье мы познакомились с энкодерами вращения и попробовали подключить инкрементный энкодер к Ардуино. При этом для определения факта вращения наша программа опрашивала выводы энкодера. Использовать прерывания для работы с энкодером мы не могли, поскольку его сигнал искажен высокочастотными помехами, вызванными дребезгом контактов. Поэтому сегодня мы попробуем устранить эти помехи и для этого нам потребуется познакомиться с еще одним устройством: триггером Шмитта.
Триггер Шмитта - это электронный двухпозиционный переключающий элемент, статическая характеристика которого имеет зону неоднозначности (петлю гистерезиса). Это означает, что у данного элемента 2 порога переключения: при возрастании сигнала на входе от 0 до напряжения питания порог срабатывания будет одним (Uср), а при уменьшении от напряжения питания до 0 - другим (Uотп - отпускания). Причем Uср > Uотп. Таким образом для триггера Шмитта принципиально направление изменения сигнала. Изображение ниже иллюстрирует зависимость сигнала на выходе инвертирующего триггера Шмитта от уровня сигнала на входе.
Получившаяся на графике петля - это и есть петля гистерезиса (запаздывания), т.е. при изменении входного сигнала к исходному уровню выходной сигнал как бы запаздывает переключаться. Это свойство позволяет использовать триггеры Шмитта в фильтрах дребезга и для восстановления цифрового сигнала, искажённого в линиях связи. На следующей картинке приведены реакции на искаженный входной сигнал (верхний график) обчного инвертора и инвертирующего триггера Шмитта (второй и третий график соответственно):
При возрастании сигнала на входе инвертора до порога переключения Uпор на его выходе устанавливается низкий уровень. При повторном прохождении искаженным сигналом данного порога меняется и сигнал на выходе инвертора, что приводит к неверной интерпретации сигнала. Триггер Шмитта в данном случае изменит свое состояние при прохождении сигналом уровня Uср и дальнейшие колебания в зоне неоднозначности (между Uср и Uотп) не повлияют на его выход. Следующее переключение произойдет при снижении уровня сигнала на входе триггера до Uотп. Наличие гистерезиса у триггера Шмитта позволяет отсеять помехи, амплитуда которых меньше разности Uср и Uотп. Конкретные значения порогов переключения зависят от подаваемого на триггер напряжения, их можно найти в документации к соответствующей микросхеме.
Итак, наша задача - очистить сигналы энкодера от помех, вызванных дребезгом контактов. Дребезг - это многократные неконтролируемые замыкания и размыкания контактов в электромеханических коммутационных устройствах за счет упругости материалов и деталей контактной системы - некоторое время контакты «подпрыгивают» при соударениях, размыкая и замыкая электрическую цепь. В зависимости от размеров, массы, материала и конструкции контактной системы время дребезга (время от первого соприкосновения контактов до затухания механических колебаний и установления стабильного контактирования) составляет от сотен микросекунд у миниатюрных герконов до сотен миллисекунд у мощных контакторов. В нашем же случае дребезг может наблюдаться на протяжении всего времени контактирования при движении скользящего контакта в энкодере. Однако длительность возникающих ложных импульсов будет чрезмерно мала, а значит для их подавления можно использовать фильтр нижних частот. Очистив сигнал от высокачастотных помех, останется выпрямить его пологие фронты, здесь-то и пригодится триггера Шмитта.
Таким образом простой фильтр дребезга может быть собран из триггера Шмитта, и RC-цепочки. При использовании модуля энкодера, который был рассмотрен в прошлой статье, резистор на 10 кОм уже присутствует в его схеме. Остается добавить конденсатор между выводом энкодера и землей. Емкость конденсатора определяется временем дребезга контактов: чем дольше дребезг, тем больше должна быть емкость. Я подобрал подходящую емкость опытным путем, мне хватило конденсатора на 0.2 мкФ. Касаемо используемого триггера: в стандартные серии цифровых микросхем входят триггеры Шмитта, представляющие собой инверторы (ТЛ2 - 6 инверторов), элементы 2И-НЕ (ТЛ3 - 4 элемента) и элементы 4И-НЕ (ТЛ1 - 2 элемента). Поэтому в схеме используется инвертирующий триггер Шмитта (я использую микросхему SN74HC14N, аналог отечественной К561ТЛ2).
В приведенной схеме фильтра сигнал на входе триггера будет нарастать постепенно, пока заряжается конденсатор. Но при замыкании контакта конденсатор будет быстро разряжаться через него. Если требуется обеспечить плавность затухания сигнала, то в схему добавляется второй резистор между кнопкой и конденсатором. В нашем случае это не требуется. Ниже приведены осциллограммы сигналов непосредственно с энкодера, после добавления в схему RC-цепочки и на последней - с добавлением триггера Шмитта:
Последний скриншот подтверждает, что фильтр справляется со своей задачей на отлично. При увеличении скорости вращения ручки энкодера сбоев также не наблюдалось. Теперь такой сигнал можно подавать на вход Ардуино и использовать для генерации прерываний.
Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой!
© Все права защищены 2015 - 2025г https://compacttool.ru