Задача
Формировать управляющий сигнал сервопривода: период 20 мс, ширина импульса 1…2 мс по заданию pos.
Тип схемы и среда
Последовательная схема при тактовой 1 МГц (1 отсчёт = 1 мкс): счётчик периода и компаратор ширины.
Алгоритм работы
Счётчик отсчитывает 20000 мкс. Ширина импульса = 1000 + масштабированный pos; пока счётчик меньше ширины, выход активен.
Код на AHDL
% Проект 36: контроллер сервопривода (импульс 1..2 мс) % SUBDESIGN ahdl_36_servo_kontroller ( clk, clrn : INPUT; % 1 МГц: 1 отсчёт = 1 мкс % pos[7..0] : INPUT; % 0..255 -> 1000..2000 мкс % servo : OUTPUT; ) VARIABLE cnt[14..0] : DFF; % период 20000 мкс % width[11..0]: NODE; BEGIN cnt[].clk = clk; cnt[].clrn = clrn; IF cnt[].q == 19999 THEN cnt[].d = 0; ELSE cnt[].d = cnt[].q + 1; END IF; width[] = 1000 + (B"0000", pos[]) + (B"00", pos[], B"00"); % 1000 + pos*~4 % servo = cnt[].q < width[]; END;
Пояснения
Стандарт хобби-серво: 1 мс — крайнее положение, 1,5 мс — центр, 2 мс — другой край, период около 20 мс. Масштаб pos подобран под диапазон 1000…2000 мкс.
Инструменты и справочники по теме
📦 help-user.ru — скупка и ремонт компьютерной техники. Продать ноутбук, ПК, комплектующие — help-user.ru.
Что дальше
Скачайте ahdl_36_servo_kontroller.tdf, создайте проект в MAX+PLUS II или Quartus,
назначьте выводы под свою плату и скомпилируйте. Остальные 49 разработок — в
разделе проектов на AHDL.