Сообщение от Kosachoff
|
... По фронту одного импульса (прерывание) надо СРАЗУ проверить состояние другого, этим определится направление шага.
Если за время реакции на первый фронт второй импульс успеет задребезжать - возможны ошибки.
Здесь поможет только уменьшение времени реакции.
После того, как направление шага определено можно отсчитывать задержку на антидребезг -
время до следующего шага.
|
Не совсем так.
По фронту меняется первый импульс. Он как раз и будет дребезжать. Второй сигнал находится в этот момент в середине полупериода и дребезжать ему совсем ни к чему.
А вот дребезг первого импульса очень коварен. Если не отследить каждый его фронт/спад (кстати, надо не только по фронту отсчитывать события, но и по спаду) то получится ситуация:
По фронту мы определили направление, допустим +. В это время импульс успел вернуться в исходное состояние (из-за дребезга). Но мы проморгали. Тут же опять возникает фронт. По которому мы опять определяем направление +. В итоге у нас +2, когда должно быть +1.
Ага. Задержка. Вводим задержку. Если характер импульсов постоянен (вращение в одну сторону, например). То задержка поможет. Но если ситуация такова:
Мы подождали. Но энкодер остановился как раз в этом неустойчивом положении и дребезг всё равно продолжается. Это весьма вероятно. Задержка тут мало поможет.
Нужно избавиться от дребезга. Ввести RC фильтр и поставить триггер Шмитта с гистерезисом. Гистерезис, как таковой, есть и у TTL входа МК.
Нужно всего лишь обеспечить достаточное быстродействие. Механические колебания ограничены несколькими килогерцами. Соответственно - фильтр на максимальную частоту следования импульсов + на порядок большая скорость опроса.
P.S. и отслеживать по фронту надо не 1 импульс, а все 2.