Режим энкодера

Материал из MIK32 микроконтроллер
Версия от 12:04, 13 февраля 2023; Андрей (обсуждение | вклад) (Новая страница: «В примере будет продемонстрирован Timer16 в режиме энкодера. == Работа с конфигуратором (В р...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

В примере будет продемонстрирован Timer16 в режиме энкодера.

Работа с конфигуратором (В разработке)

Для начала настроем в конфигураторе тактирование mik32, например, от внешнего кварца 32МГц. Затем настроем делители шины. Так как Timer16 тактируется от шины APB_P_CLK, то зададим делители AHB_DIV и APB_P_DIV. В данном примере оставим делители по умолчанию. В итоге вкладка с тактированием должна выглядеть так:

(Картинка тактирования из конфигуратора. В работе)

Затем перейдем к настройке самого таймера. Для этого откроем вкладку Timer16_1 и включим таймер, выбрав один из режимов. Выберем режим энкодера.

После этого нужно выбрать источник тактирования, который будет использоваться для подсчета. В режиме энкодера не должно быть тактирование от внешнего источника Input1. Выберем, например, тактирование от системной частоты. Для тактирования от внутреннего источника оставим источник синхронизации по умолчанию.

Далее следует выбрать делитель частоты. В режиме энкодера делитель частоты всегда должен быть 1.

Затем следует выбрать подрежим энкодера. Выберем подрежим энкодера 1 - Восходящий фронт.

Подрежимы энкодера
Активный фронт Уровень

противоположного сиг-нала (lnput1 для lnput2,

lnput2 для lnput1)

Сигнал lnput1 Сигнал lnput2
Подъем Падение Подъем Падение
Восходящий фронт Высокий Вниз Не считать Вверх Не считать
Низкий Вверх Не считать Вниз Не считать
Падающий фронт Высокий Не считать Вверх Не считать Вниз
Низкий Не считать Вниз Не считать Вверх
Оба фронта Высокий Вниз Вверх Вверх Вниз
Низкий Вверх Вниз Вниз Вверх

Следующая настройка - период. Это верхний предел, до которого считает таймер. В нашем примере таймер будет считать до максимального значения 65535.

Режим обновления регистров задает когда будут обновляться регистры ARR - значение автоматической перезагрузки (верхний предел счета таймера) и CMP - значение сравнения. Выберем, например, обновление после каждого доступа к записи.

Далее идут настройки триггера, которые в этом примере не нужны. Оставляем их значения по умолчанию.

После этого останется настроить цифровой фильтр от помех, если он нужен. При включении фильтра должен использоваться внутренний источник синхронизации.

В итоге настройки таймера в конфигураторе должны выглядеть примерно так:

(Объяснение работы с конфигуратором. В разработке)

Нажимаем кнопку генерации. В итоге у нас появится проект для PlatformIo. Далее работа идет в visual studio code.

Использование библиотеки HAL_Timer16

В сгенерированном проекте в файле main.c должна быть функция Timer16_1_Init, в которой будут заданы настройки для Timer16_1. Выглядит она так: