Управление DC-мотором
Last updated
Last updated
Предполагается, что вы изучили предыдущие уроки.
Ниже приведена конфигурация для нашего случая, в соответствии с описанием драйвера коллекторного двигателя VBCore DC motor Driver 15A.
Выводы SLEEP
, Vref
, TIM1_CH1
, TIM1_CH2
, используются для управления силовой частью. Первые два -активизация и уровень блокировки по току – настроены как логические выходы (GPIO), их названия могут быть введены в настройках периферии GPIO. Другие два – выходы двух каналов таймера TIM1
поступают в качестве ШИМ сигналов управления. Для движения двигателя один из этих сигналов, в зависимости от направления движения, устанавливается в высокий уровень (заданием длины импульса, равного периоду), а на втором генерируется ШИМ, чем короче длина импульса, тем больше среднее значение напряжения, подаваемого на двигатель.
Два канала таймера TIM8 CH1
и CH2
используются для считывания импульсов с квадратурного энкодера.
Выводы I2C4_SCL
и I2C4_SDA
– линии синхронизации (clock) и данных для связи с абсолютным магнитным энкодером AS5600 по протоколу I2C
.
ADC1_IN7
– это вход аналого-цифрового преобразователя, который может быть использован для контроля тока, идущего через обмотки двигателя.
LED1
, LED2
– логические выходы (GPIO), позволяют мигать двумя светодиодами для визуального контроля работы.
USART2_RX
, USART2_TX
– выходы для организации обмена данными с внешним компьютером по стандартному порту COM, реализуемом как виртуальный на физическом разъеме USB.
Для управления двигателем постоянного тока существенными являются два интервала времени, а именно период ШИМ и период управления. Оба формируются таймерами, использующими системные часы. Поэтому существенны настройки системных часов. Можно не менять настройки по умолчанию, но учитывать конкретные значения, в частности, на рисунке ниже тактовая частота таймеров (ARB1, ARB2 timer clocks
) равна 16 МГц.
Используются каналы 1 и 2 таймера TIM1
, для которых выбирается режим PWM Generation
(генерация ШИМ). Во вкладке Parameter settings-> Counter settings задаем Prescaler=0, Counter period = 1000
. Первый задает предварительное деление частоты: 0 – без деления, 1 – деление в два раза и т.д . Второй задает период в системных тиках. При таких настройках получаем частоту ШИМ 16МГц/1/1000=16кГц. На этой частоте, возможно, двигатель будет создавать «свист». Если слышно, то частоту можно поднять уменьшением периода и выйти за порог восприятия человека (порядка 20 кГц). Остальные настройки можно оставить по умолчанию.
Используется первый канал TIM2
. Настройки Prescaler=49, Counter period = 320
. Длительность импульса можно взять произвольно, например, 50. Получаем частоту 16МГц/50/320=1кГц. Это будет частота управления, что означает, что каждую миллисекунду будут опрашиваться датчики и формироваться управляющий сигнал на двигатель. Таймер далее используется для генерирования прерываний, поэтому режим выбираем PWM Generation No Output
и активируем прерывания NVIC Interrupt Table -> TIM2 global interrupt -> Enabled.
TODO