Общие сведения:
Драйвер на базе чипа VNH2SP30 - используется для управления коллекторным мотором постоянного тока.
Спецификация:
- Напряжение на входе питания мотора Vin: 5,5 ... 16 В;
- Напряжение логики: 5 В;
- Основан на чипе VNH2SP30;
- Тип: Н-мост;
- Ток нагрузки: до 6А без охлаждения, до 14А с охлаждением;
- Максимальный импульсный ток до 30А;
- Защита от обратного тока;
- Возможность считывать ток нагрузи;
- Рабочая температура от -40° до 150°;
- Защита от перегрева;
- ШИМ до 20 кГц;
- Размеры, мм: 55,4х28,2х12 (без учёта колодки выводов)
Подключение:
| Выводы Arduino | Выводы драйвера | Выводы в примерах | Комментарий |
|---|---|---|---|
| любой аналоговый вывод | EN | А0 | состояние ключей AB |
| любой аналоговый вывод | CS | А1 | аналоговый выход значения тока |
| любой вывод | INA | А2 | управление ключом A |
| любой вывод | INB | А3 | управление ключом В |
| любой вывод с ШИМ | PWM | 3 | управление ШИМ |
| 5V | 5V | 5V | |
| GND | GND | GND |
Подключение к Piranha UNO:

Питание:
Выходы драйвера работают только от внешнего источника питания 5,5 - 16 В, который должен подключаться к вводам питания Vin.
Подробнее о драйвере:
Драйвер построен на базе чипа VNH2SP30. что позволяет управлять скоростью движения, направлением подключённых двигателей, а так же считывать ток нагрузки при помощи функции analogRead();
- Управление мотором постоянного тока осуществляется через выводы A2 (ключ А), A3 (ключ В) и 3 (ШИМ). В зависимости от состояния ключей мотор будет вращаться в ту или другую сторону. ШИМ контролирует скорость мотора.
- Направление в функции motorGo() устанавливается подачей логических уровней на ключи A и В: A=LOW, B=HIGH - мотор вращается в одну сторону; A=HIGH, B=LOW - мотор вращается в другую сторону.
- Скорость устанавливается подачей сигнала ШИМ, коэффициент заполнения которого, прямо пропорционален скорости.
Примеры:
Управление мотором:
const uint8_t pwmpin = 3; // определяем вывод для шим
const uint8_t enpin = A0; // определяем вывод состояния ключей AB. Ключи открываются, если притянуть к 0.
const uint8_t cspin = A1; // определяем вывод считывания тока
const uint8_t inApin = A2; // определяем вывод управления ключом A
const uint8_t inBpin = A3; // определяем вывод управления ключом В
void setup() {
Serial.begin(9600);
pinMode(inApin, OUTPUT); // переводим вывод управления ключом A в режим "выход"
pinMode(inBpin, OUTPUT); // переводим вывод управления ключом B в режим "выход"
pinMode(pwmpin, OUTPUT); // переводим вывод управления ШИМ в режим выход
// устанавливаем вращение мотора в одну сторону:
digitalWrite(inApin, HIGH);
digitalWrite(inBpin, LOW);
// приращиваем ШИМ от 0 до 255:
for (int i = 0; i < 256; i++){
analogWrite(pwmpin, i); // мотор плавно стартует
delay(20);
}
// уменьшаем ШИМ от 255 до 0:
for (int i = 255; i >= 0; i--){
analogWrite(pwmpin, i); // мотор плавно останавливается
delay(20);
}
analogWrite(pwmpin, 127); // устанавливаем ШИМ в значение 50%
// устанавливаем вращение мотора в другую сторону:
digitalWrite(inApin, LOW);
digitalWrite(inBpin, HIGH);
pinMode(enpin, OUTPUT); // переводим вывод состояния ключей в режим "выход"
digitalWrite(enpin, LOW); // запрещаем мотору вращаться
delay(5000); // на пять секунд
pinMode(enpin, INPUT); // разрешаем мотору вращаться, переводя вывод состояния ключей в режим "вход"
delay(5000); // мотор вращается пять секунд
//выводим значение тока мотора в серийный порт:
Serial.println(analogRead(cspin));
delay(5000); // мотор вращается ещё пять секунд
//резко останавливаем мотор (мотор в режиме "тормоз"):
digitalWrite(inApin, HIGH);
digitalWrite(inBpin, HIGH);
delay(10000);
// плавно останавливаем мотор (мотор в режиме "отключен"):
digitalWrite(inApin, LOW);
digitalWrite(inBpin, LOW);
}
void loop() {
//
}
Управление мотором с функциями motorGo() и motorOff():
#define BRAKEVCC 0 // определяем значение резкого тормоза
#define CW 1 // определяем значение вращения по часовой стрелке
#define CCW 2 // определяем значение вращения против часовой стрелки
#define BRAKEGND 3 // определяем значение остановки
const uint8_t pwmpin = 3; // определяем вывод для шим
const uint8_t enpin = A0; // определяем вывод состояния ключей AB. Ключи открываются, если притянуть к 0.
const uint8_t cspin = A1; // определяем вывод считывания тока
const uint8_t inApin = A2; // определяем вывод управления ключом A
const uint8_t inBpin = A3; // определяем вывод управления ключом В
void setup()
{
Serial.begin(9600);
// переводим выводы управления в режим "выход"
pinMode(inApin, OUTPUT); // вывод ключа A
pinMode(inBpin, OUTPUT); // выводы ключа B
pinMode(pwmpin, OUTPUT); // вывод ШИМ
// инициируем мотор выключенным
motorOff();
}
void loop()
{
motorGo(CW, 32); // мотор по часовой стрелке, ШИМ 17,5%
delay(3000); // ждём 3 секунды, моторы вращаются
Serial.print(analogRead(cspin)); //считываем значение тока
delay(3000);
// переводим вывод состояния ключей мотора в режим "выход":
pinMode(enpin, OUTPUT);
// выключаем мотор:
digitalWrite(enpin, LOW);
// на три секунды:
delay(3000);
// включаем мотор,
// переводя вывод состояния ключей в режим "вход":
pinMode(enpin, INPUT);
delay(3000);
motorGo(BRAKEVCC, 32); // останавливаем мотор в режим "тормоз"
delay(10000); // ждём 10 секунд
motorOff(); // останавливаем мотор в режим "выключен"
while(true); // скетч не выполняется дальше
}
// функция выключения мотора:
void motorOff()
{
digitalWrite(inApin, LOW);
digitalWrite(inBpin, LOW);
analogWrite(pwmpin, 0);
}
// функция включения мотора:
void motorGo(uint8_t direct, uint8_t pwm)
{
// если направление совпадает со значениями направлений:
if (direct <=3)
{
// если направление мотора по часовой или плавный стоп,
// устанавливаем соответствующие значения ключа А выбранного мотора:
if (direct <=1)
digitalWrite(inApin, HIGH);
else
digitalWrite(inApin, LOW);
// если направление мотора по часовой или резкий стоп,
// устанавливаем соответствующие значения ключа B выбранного мотора:
if ((direct==0)||(direct==2))
digitalWrite(inBpin, HIGH);
else
digitalWrite(inBpin, LOW);
// устанавливаем ШИМ выбранного мотора
analogWrite(pwmpin, pwm);
}
}
Описание функции motorGo():
- Назначение: управление мотором;
- Синтаксис: motorGo();
- Параметры: направление (CW, CCW, BRAKEVCC, BRAKEGND), ШИМ (0-255);
- Возвращаемые значения: void;
- Примечание: направление может быть CW - по часовой стрелке, CCW - против часовой стрелки, BRAKEVCC - остановить мотор с блокировкой, BRAKEGND - остановить мотор без блокировки.
- Пример:
motorGo(CCW, 127); // включаем мотор, против часовой стрелки, скорость 50%
Описание функции motorOff():
- Назначение: остановка мотора
- Синтаксис: motorOff();
- Параметры: нет
- Возвращаемые значения: void;
- Примечание: функция так же выставляет значение ШИМ в ноль;
- Пример:
motorOff(); // выключаем мотор
Применение:
- Управление моторами постоянного тока

Обсуждение