Управление шаговым двгателем используя STM32 и a4988
Добрый день всем. В недавно завершённом проекте мне потребовалось управлять шаговым двигателем на оборотах, близких к предельно максимальным. Поиск в интернете простого решения не дал, нашлась только куча мудрёных библиотек. Я хочу предложить свой вариант, который может быть использован на практике.
Для управления шаговым двигателем я использовал драйвер A4988, для генерации step-сигналов – аппаратный генератор ШИМ с таймера №1. Для того, чтобы шаговый двигатель разогнать на максимальные обороты, необходимо плавно изменять частоту. Запускаем двигатель на маленькой частоте и постепенно её увеличиваем, тем самым повышая скорость вращения шагового двигателя. Однако, увеличивать частоту до предела не получится, так как шаговый двигатель просто остановится.
Моё решение:
1. Подключаем драйвер A4988 по этой схеме:
Подключаем A4988 к STM32 следующим образом:
На PA8 с помощью аппаратного ШИМ будем формировать импульсы (шаги).
Программная реализация:
В главном цикле меняем предделитель частоты через регистр, поскольку это делается быстрее, чем через HAL. Пример кода:
Ограничение в 200 было найдено экспериментально для моего двигателя, меньше этого значения двигатель уже переставал крутиться. Настройки STM32CubeMX следующие:
На этом всё, всем всего доброго. Файл проекта прилагается.
Огромная благодарность Веимьла А. С. за редактирование статьи.
Для управления шаговым двигателем я использовал драйвер A4988, для генерации step-сигналов – аппаратный генератор ШИМ с таймера №1. Для того, чтобы шаговый двигатель разогнать на максимальные обороты, необходимо плавно изменять частоту. Запускаем двигатель на маленькой частоте и постепенно её увеличиваем, тем самым повышая скорость вращения шагового двигателя. Однако, увеличивать частоту до предела не получится, так как шаговый двигатель просто остановится.
Моё решение:
1. Подключаем драйвер A4988 по этой схеме:
Подключаем A4988 к STM32 следующим образом:
STM32[PC13]->A4988[DIR]
STM32[PA8]->A4988[STEP]
На PC13 будем формировать высокий и низкий уровни, тем самым управляя направлением вращения шагового двигателя.На PA8 с помощью аппаратного ШИМ будем формировать импульсы (шаги).
Программная реализация:
В главном цикле меняем предделитель частоты через регистр, поскольку это делается быстрее, чем через HAL. Пример кода:
//Запускаем таймер
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
//Получаем начальный предделитель таймера №1
step = TIM1->PSC;
while (1)
{
//Если предделитель больше 200, тогда уменьшаем значение, тем самым увеличивая частоту
if (step>=200)
{
//Получаем содержимое регистра
step =TIM1->PSC;
//Отнимаем от предделителя единицу
step=step-1;
//Устанавливаем в регистр предделителя новое значение
TIM1->PSC=step;
}
//Ждём разгона шаговика на текущую частоту
HAL_Delay(10);
}
Ограничение в 200 было найдено экспериментально для моего двигателя, меньше этого значения двигатель уже переставал крутиться. Настройки STM32CubeMX следующие:
На этом всё, всем всего доброго. Файл проекта прилагается.
Огромная благодарность Веимьла А. С. за редактирование статьи.