AFON//Радиотехник
AHDL · проект 19/50

Квадратурный энкодер

Счёт позиции по каналам A и B

Задача

Определять направление вращения и вести счёт позиции по двум квадратурным сигналам энкодера.

Тип схемы и среда

Последовательная схема: синхронизаторы каналов, детект фронта A, направление по уровню B.

Алгоритм работы

На нарастающем фронте канала A значение B задаёт направление: B=0 — инкремент, B=1 — декремент позиции.

Код на AHDL

ahdl_19_enkoder.tdf↓ скачать .tdf
% Проект 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.