> For the complete documentation index, see [llms.txt](https://voltbro.gitbook.io/vbcores/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://voltbro.gitbook.io/vbcores/tutorials/stm32-cube-ide/upravlenie-dc-motorom.md).

# Управление 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
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
