> For the complete documentation index, see [llms.txt](https://voltbro.gitbook.io/upravlenie-elektrodvigatelem/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/upravlenie-elektrodvigatelem/kollektornyi-dvigatel/praktika.-vrashenie-dvigatelya.md).

# Практика. Вращение двигателя

Для того, чтобы вращать мотором, давайте посмотрим на схему DC драйвера.

&#x20;

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

Обратите внимание на правый верхний угол. Тут находится описание пинов драйвера Allegro A4955 для управления мотором.

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

Давайте теперь откроем к нему документацию и найдем в ней схему встроенного H-моста, а также таблицу, в которой указано какой сигнал и на какой пин подавать для вращения мотором вперед или назад.

{% file src="/files/U2I0hSdrz5svA8pfMvfM" %}

На первой же странице дается схема драйвера

<figure><img src="/files/8hk3vRqEEWP2mwNzBoxt" alt=""><figcaption></figcaption></figure>

А на пятой странице таблица, из которой видно, что если мы хотим, чтобы мотор вращался вперед на пин IN1 нужно подать 1, а на пин IN2 0. В обратном режиме - наоборот. При этом пины SLEEPn и VREF всегда должны быть установлены в режиме HIGH.&#x20;

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

Зная, что IN1, IN2, SLEEPn, VREF это PA8, PA9, PB3 и PA4 соответственно, давайте напишем небольшую программу на ардуино.

```arduino
#include <VBCoreG4_arduino_system.h>


#define IN1 PA8
#define IN2 PA9
#define SLEEPn PB3
#define VREF PA4
#define USR_BTN PC13

int forward = HIGH; // по умолчанию - вращение вперед
int prev_btnSt;
int buttonState;
int is_stopped = LOW;

void setup() {
 
  pinMode(PB3, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(VREF, OUTPUT);
  pinMode(USR_BTN, INPUT_PULLUP);
 
 // пин SLEEPn устанавливаем в HIGH, IN1 и IN2 - LOW
  digitalWrite(SLEEPn, HIGH);
  digitalWrite(VREF, HIGH);
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  
// предыдущее состояние кнопки = считываем состояние кнопки во время инициализации
  prev_btnSt = digitalRead(USR_BTN);

  Serial.begin(115200);
  delay(1000);
}

void loop() {
//читаем состояние кнопки 
  buttonState = digitalRead(USR_BTN);
  
  // если она не была нажата, а сейчас ее нажали
  if(buttonState == LOW && prev_btnSt == HIGH){
  
  //то меняем направление вращения мотора
    forward = !forward;
    prev_btnSt = buttonState;
  }
  //если кнопка нажата, то присвоим предыдущему ее состоянию текущее
  if(buttonState == HIGH) {prev_btnSt = buttonState;}
  
  // если вращение мотора должно идти вперед
  if (forward == HIGH && is_stopped == LOW){
  
  //подаем HIGH на IN1
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  }

// иначе если вращение мотора должно быть в противоположную сторону
  else if (forward == LOW && is_stopped == LOW){
  
  // подаем HIGH на IN2
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  }
  
// если мотор необходимо остановить
  else{
  // на IN1 и на IN2 подается LOW
      digitalWrite(IN1, LOW);
      digitalWrite(IN2, LOW);
  }
  
  // через сериал порт считываем команду на остановку мотора
  if (Serial.available() > 0) {
    is_stopped = Serial.readString().toInt();
    
  }
}
```


---

# 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:

```
GET https://voltbro.gitbook.io/upravlenie-elektrodvigatelem/kollektornyi-dvigatel/praktika.-vrashenie-dvigatelya.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.
