# Управление DC-мотором

{% hint style="info" %}
Предполагается, что вы изучили предыдущие уроки.
{% endhint %}

### Настройка выводов микроконтроллера

Ниже приведена конфигурация для нашего случая, в соответствии с описанием драйвера коллекторного двигателя *VBCore DC motor Driver 15A*.

<figure><img src="/files/ZsN5k3WbkNw9jvDpd7Ri" alt=""><figcaption><p>Конфигурация ножек в Cube IDE</p></figcaption></figure>

Выводы `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 МГц.

<figure><img src="/files/EVEDlVzeaMWtjfyn5D5D" alt=""><figcaption></figcaption></figure>

### Настройка таймеров, формирующих ШИМ

Используются каналы 1 и 2 таймера `TIM1`, для которых выбирается режим `PWM Generation` (генерация ШИМ). Во вкладке **Parameter settings-> Counter settings** задаем `Prescaler=0, Counter period = 1000`. Первый задает предварительное деление частоты: 0 – без деления, 1 – деление в два раза и т.д . Второй задает период в системных тиках. При таких настройках получаем частоту ШИМ 16МГц/1/1000=16кГц. На этой частоте, возможно, двигатель будет создавать «свист». Если слышно, то частоту можно поднять уменьшением периода и выйти за порог восприятия человека (порядка 20 кГц). Остальные настройки можно оставить по умолчанию.

<figure><img src="/files/ZJxGK90k6EuksoJSbEP3" alt=""><figcaption></figcaption></figure>

### Настройка такта управления

Используется первый канал `TIM2`. Настройки `Prescaler=49, Counter period = 320`. Длительность импульса можно взять произвольно, например, 50. Получаем частоту 16МГц/50/320=1кГц. Это будет частота управления, что означает, что каждую миллисекунду будут опрашиваться датчики и формироваться управляющий сигнал на двигатель. Таймер далее используется для генерирования прерываний, поэтому режим выбираем `PWM Generation No Output` и активируем прерывания **NVIC Interrupt Table -> TIM2 global interrupt -> Enabled**.

***

### Код управления

TODO


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://voltbro.gitbook.io/vbcores/tutorials/stm32-cube-ide/upravlenie-dc-motorom.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
