Сообщения

Сообщения за март, 2018

Пробуем ШИМ

Изображение
Быстрая проба ШИМ, основанной на таймере. Для эксперимента будем использовать Timer 4. Подключим светодиод, как показано на схеме ниже. Пин PB9 можно использовать, как выход PWM (TIM4_CH4). Выполним простые шаги: Инициализация ШИМ: PWM_TIM4_Init(1000 {частота ШИМ}); Установим коэффициент заполнения: PWM_TIM4_Set_Duty(duty_cycle, _PWM_NON_INVERTED, _PWM_CHANNEL4); Здесь мы указываем, что сигнал ШИМ не инвертирован, канал таймера - 4. Запускаем ШИМ на четвертом канале таймера, который физически подключен к PB9: PWM_TIM4_Start(_PWM_CHANNEL4, @_GPIO_MODULE_TIM4_CH4_PB9); Максимальное значение коэффициента заполнения (Duty cycle) мы можем получить при вызове функции инициализации. Period:= PWM_TIM4_Init(1000 {частота ШИМ}); Для каждого значения частоты ШИМ генератора, значение максимального коэффициента заполнения будет разным, чем выше частота, тем меньше разрешение генератора ШИМ. Для STM32F103C8T6, для стандартных настроек тактирования , отношения частот и...

Настраиваем показания энкодера для применения в меню

Изображение
В моём энкодере 20 щелчков. В общем случае, когда энкодер применяется для позиционирования механизмов, никаких щелчков не будет, но конкретно этот энкодер можно применить для управления меню, да и только. В максимальном разрешении, при каждом щелчке позиция изменяется на 4. Это происходит потому что мы считаем каждый фронт от двух каналов.

Подключаем LCD 20x4 к STM32 Blue Pill

Изображение
Для подключения дисплея используем GPIOB, так как пины этого порта толерантны к напряжению 5V. Сам дисплей питается от 5V. Для настройки контраста используем переменный или подстроечный резистор, значение его сопротивление может быть от 4.7K до 10K.

Настройка тактирования для BluePill (STM32F103C8)

Изображение
Стандартная конфигурация тактирования STM32F103C8T6. Подходит почти для всех случаев использования микропроцессора, включая возможность работы с USB. Если понадобится тактировать внешние устройства, в этой конфигурации мы можем получить 8 MHz или 36 MHz на GPIOA.B8 (пин PA8)

Процедура инициализации таймера для работы с энкодером

Изображение
InitTIM2(it2Mode: Byte; it2Edge1, it2Edge2: Byte; it2ARV : Word); Параметры, которые необходимо передать при вызове процедуры: it2Mode 0 - прямой счет, используется первый канал 1 - прямой счет, используется второй канал 2 - режим енкодера, счет по обоим каналам 3 - режим энкодера, счет по первому каналу, направление по второму каналу 4 - режим энкодера, счет по второму каналу, направление по первому каналу it2Edge1 - выбор фронта для первого канала. 0 - передний фронт, 1 - задний фронт it2Edge2 - выбор фронта для второго канала. 0 - передний фронт, 1 - задний фронт it2AVR - значение переполнения счетчика, 0 - 65535

Настройка таймера STM32 для работы с энкодером

Изображение
Энкодер будет считываться без участия процессора. Когда нам понадобится положение энкодера, мы его просто возьмем из регистра. Я покажу на примере Stm32f103c8. В этом микроконтроллере всего 4 таймера. TIM1 - продвинутый, мы его оставим на всякий случай. TIM2, TIM3, TIM4 - таймеры общего назначения. Для примера возьмем TIM2. Мы будем использовать два входных канала этого таймера. Выводы энкодера CLK и DT подключаем к GPIO A15 и GPIO B3 . Сейчас неважно, какой сигнал, к какой ноге. GND к GND контроллера,  + к 3.3V платы контроллера. Настраиваем пины для работы с таймером. GPIO_Alternate_Function_Enable(@_GPIO_MODULE_TIM2_CH1_PA15); GPIO_Alternate_Function_Enable(@_GPIO_MODULE_TIM2_CH2_PB3); GPIO_Set_Pin_Mode(@GPIOA_BASE, _GPIO_PIN_15, _GPIO_CFG_MODE_ALT_FUNCTION); GPIO_Set_Pin_Mode(@GPIOB_BASE, _GPIO_PIN_3, _GPIO_CFG_MODE_ALT_FUNCTION); Разрешаем тактирование второго таймера. RCC_APB1ENR.TIM2EN:= 1; Перед началом настройки запрещаем работу таймер...