Нет тут никаких вопросов. Считать надо фронты и срезы сигналов А и В.
Вид для печати
Сбрасывать, сбрасывать когда?
Если сбрасывать просто по фронту Z, то момент сброса будет зависеть от фактического направления вращения.
Как вариант, можно следить за направлением вращения и искать конкретный фронт в зависимости от направления вращения.
Ну или просто забить, и сбрасывать положение при любом фронте Z (что я и сделал)
Про Z метку. Привязка к фронтам А и В
Вложение 26915
Условно показан энкодер с одним "импульсом" на оборот.
Учтите, что один импульс - четыре такта изменения сигналов А и В.
Она всегда именно так выглядит?
Не будет ли того, что "длина Z" равна длине, скажем A?
Да даже если она привязана ко всем фронтам A и B, то всё равно "физический ноль" не может соответствовать сразу обоим фронтам Z метки.
Я и говорю: либо нужно эту погрешность проигнорировать, либо считать всегда один конкретный фронт Z метки (скажем, "левый"), который будет либо RTRIG, либо FTRIG в зависимости от направления вращения.
Указатель нулевой отметки / импульс полного оборота (выход N)
В энкодере, имеющем этот выход, импульс на этом выходе появляется в каждом обороте вала. Функция показателя нуля может использоваться для сброса внешне связанного счетчика или для регистрации начальной (нулевой) позиции.
Сброс счетчика ABZ-энкодера должен происходить при True на всех его трех входах - это будет самый точный "ноль". Фронт значения особого не имеет (во всяком случае для моего применения), но предпочтительнее передний.
За программу спасибо! Не ожидал, что будет так быстро готово. Постараюсь на следующей неделе воплотить всё это в железе, но правда на столе. Заодно проверю свой вариант решения "стандартными" средствами.
Не совсем понятно назначение выходной переменной counter в блоке PRU_ABZ_ENCODER. Если это просто счет импульсов, то оно без надобности. Вполне достаточно детектора истинного нуля и регистра показаний.
В самом энкодере всегда сбрасывают по обоим сторонам Z.
А в программе управления, зная направление вращения - учитывают это при расчёте положения
Привязана к фронтам А и Б, как на рисунке
Условно показан энкодер с одним "импульсом" на оборот.
Учтите, что один импульс энкодера - четыре такта изменения сигналов А и В.
Вложение 26917