Общие сведения:
Драйвер на базе чипа 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(); // выключаем мотор
Применение:
- Управление моторами постоянного тока
Обсуждение