[an error occurred while processing this directive]
|
Если установить время подавления дребезга 5 мс, как советуют в даташит, то при быстром вращении импульсы пропускаются. Это воспринимается пользователем как глючная работа системы. Учитывая то, что на оборот у него 24 импульса, а на каждый импульс состояние выходов меняется 4 раза (именно на этом факте основаны так называемые 4-x квадратурные декодеры), то время подавления дребезга нужно сильно уменьшать. На практике приемлемым оказалось время подавления дребезга 300 мкс. С таким временем практически невозможно повернуть вал так, чтобы импульсы пропускались. С другой стороны, проблем с дребезгом тоже не обнаружено.
Чтобы энкодер не мешал другим процессам, я его вешаю не на прерывание, а опрашиваю в основном цикле. Когда программа ждет действий пользователя, опрос энкодера идет постоянно. Если же программа чем-то сильно занята, опрос становится реже или прерывается. Но в таких ситуациях и реакция на энкодер не предусмотрена.
Еще одна причина плохой работы энкодера может скрываться в порочности декодера типа "программный D-триггер, один сигнал энкодера на вход D, второй - на C". При такой реализации INC/DEC всегда происходит по фронту одного из сигналов энкодера, что есть неправильно. Если вал энкдера просто пошевелить на месте, может насчитаться куча импульсов. INC/DEC нужно делать по изменению состояния двух сигналов, чтобы и INC, и DEC происходили в одной и той же точке, но при её проходе с разными направлениями вращения. Информацию о построении правильных квадратурных декодеров можно почерпнуть из описания спец. микросхем, например, HCTL-2000.
E-mail: info@telesys.ru