Задача
Определять направление вращения и вести счёт позиции по двум квадратурным сигналам энкодера.
Тип схемы и среда
Последовательная схема: синхронизаторы каналов, детект фронта A, направление по уровню B.
Алгоритм работы
На нарастающем фронте канала A значение B задаёт направление: B=0 — инкремент, B=1 — декремент позиции.
Код на AHDL
% Проект 19: квадратурный энкодер, счёт позиции % SUBDESIGN ahdl_19_enkoder ( clk, clrn : INPUT; a, b : INPUT; pos[7..0] : OUTPUT; ) VARIABLE a_s[1..0] : DFF; b_s[1..0] : DFF; ap : DFF; cnt[7..0] : DFF; BEGIN a_s[].clk = clk; a_s[].clrn = clrn; b_s[].clk = clk; b_s[].clrn = clrn; ap.clk = clk; ap.clrn = clrn; cnt[].clk = clk; cnt[].clrn = clrn; a_s[].d = (a_s[0].q, a); b_s[].d = (b_s[0].q, b); ap.d = a_s[1].q; IF a_s[1].q & !ap.q THEN IF b_s[1].q THEN cnt[].d = cnt[].q - 1; ELSE cnt[].d = cnt[].q + 1; END IF; ELSE cnt[].d = cnt[].q; END IF; pos[] = cnt[].q; END;
Пояснения
Оба канала обязательно синхронизировать. Простейший декодер считает по одному фронту A; полный x4-декодер считает по всем фронтам обоих каналов.
Инструменты и справочники по теме
📦 help-user.ru — скупка и ремонт компьютерной техники. Продать ноутбук, ПК, комплектующие — help-user.ru.
Что дальше
Скачайте ahdl_19_enkoder.tdf, создайте проект в MAX+PLUS II или Quartus,
назначьте выводы под свою плату и скомпилируйте. Остальные 49 разработок — в
разделе проектов на AHDL.