Для Arduino: Платы, наборы, конструкторы и книги → Двигатели, шаговые двигатели, сервоприводы и модули для проектов на ARDUINO РОБОТОТЕХНИКА → Управление шаговыми двигателями Радиоконструкторы EKITS, Радио КИТ, KitLab, Мастер КИТ → Автоматика. Терморегуляторы, индикаторы, счётчики |
Товар отсутствует на складе Мы можем уведомить Вас о его поступлении. Нажмите кнопочку! ![]() |
Код товара: RDKT0324
Плата расширения RA078. Шилд мощных (до 30 Ампер) мостовых драйверов электродвигателей VNH2SP30Бренд: DIY |
||||
|
||||
|
|
|||
Monster Moto Shield VNH2SP30 - это усиленная версия Arduino motor shield. Для увеличения мощности H-мост был заменен с L298 на два полномостовых драйвера VNH2SP30. Monster Moto Shield VNH2SP30 может управлять двумя высокотоковыми моторами. Питания VIN и выходы имеют утолщенную контактную поверхность, на случай пайки толстых проводов. При использовании платы следует следить за температурным режимом, так как при протекании больших токов плата может весьма существенно нагреваться и даже может требовать принудительного охлаждения. Характеристики: максимальное напряжение: 16В (до 40В в пиках); максимальный ток: 14А (пиковый до 30А); токовый датчик доступен на аналоговом выводе Arduino; максимальная частота управляющего сигнала ШИМ: 20 кГц; защита от перегрева; защита от слишком слабого и слишком большого напряжения. Рассмотрим использование Monster Moto Shield VNH2SP30 с платой Arduino. Нам потребуются следующие детали: Плата Arduino Uno с USB-кабелем; Monster Motor Shield VNH2SP30; 2 двигателя постоянного тока 12 В; Блок питания 5.5 - 16 Вольт; Провода. Схема использования пинов Monster Motor Shield VNH2SP30Назначение пинов в схеме:A0: включение (1) / выключение (0) двигателя 1;A1: включение (1) / выключение (0) двигателя 2; A2: датчик тока для двигателя 1; A3: датчик тока для двигателя 2; D7: движение по часовой стрелке (CW) для 1 двигателя; D8: движение против часовой стрелки (CСW) для двигателя 1; D4: движение по часовой стрелке (CW) для 2 двигателя; D9: движение против часовой стрелки (CСW) для двигателя 2; D5: ШИМ для двигателя 1; D6: ШИМ для двигателя 2. И таблица необходимых значений на выводах Arduino для запуска двигателей Подключаем двигатель 1 к клеммам A1:B1, а двигатель 1 к клеммам A2:B2. Подключаем блок питания к клеммам питания на Monster Moto Shield. Загрузим на плату Arduino следующий скетч: // Константы #define BRAKE 0 #define CW 1 #define CCW 2 #define CS_THRESHOLD 15 //безопасное значение тока //MOTOR 1 #define MOTOR_A1_PIN 7 #define MOTOR_B1_PIN 8 //MOTOR 2 #define MOTOR_A2_PIN 4 #define MOTOR_B2_PIN 9 #define PWM_MOTOR_1 5 #define PWM_MOTOR_2 6 #define CURRENT_SEN_1 A2 #define CURRENT_SEN_2 A3 #define EN_PIN_1 A0 #define EN_PIN_2 A1 #define MOTOR_1 0 #define MOTOR_2 1 short usSpeed = 150; // пользовательское значение скорости unsigned short usMotor_Status = BRAKE; void setup() { pinMode(MOTOR_A1_PIN, OUTPUT); pinMode(MOTOR_B1_PIN, OUTPUT); pinMode(MOTOR_A2_PIN, OUTPUT); pinMode(MOTOR_B2_PIN, OUTPUT); pinMode(PWM_MOTOR_1, OUTPUT); pinMode(PWM_MOTOR_2, OUTPUT); pinMode(CURRENT_SEN_1, OUTPUT); pinMode(CURRENT_SEN_2, OUTPUT); pinMode(EN_PIN_1, OUTPUT); pinMode(EN_PIN_2, OUTPUT); Serial.begin(9600); // запуск последовательного порта Serial.println("Begin motor control"); Serial.println(); // Пункты меню для пользователя Serial.println("Enter number for control option:"); Serial.println("1. STOP"); Serial.println("2. FORWARD"); Serial.println("3. REVERSE"); Serial.println("4. READ CURRENT"); Serial.println("+. INCREASE SPEED"); Serial.println("-. DECREASE SPEED"); Serial.println(); } void loop() { char user_input; while(Serial.available()) { user_input = Serial.read(); // Чтение для определения выбора пользователем // пункта меню digitalWrite(EN_PIN_1, HIGH); digitalWrite(EN_PIN_2, HIGH); if (user_input =="1") { Stop(); } else if(user_input =="2") { Forward(); } else if(user_input =="3") { Reverse(); } else if(user_input =="+") { IncreaseSpeed(); } else if(user_input =="-") { DecreaseSpeed(); } else { Serial.println("Invalid option entered."); } } } void Stop() { Serial.println("Stop"); usMotor_Status = BRAKE; motorGo(MOTOR_1, usMotor_Status, 0); motorGo(MOTOR_2, usMotor_Status, 0); } void Forward() { Serial.println("Forward"); usMotor_Status = CW; motorGo(MOTOR_1, usMotor_Status, usSpeed); motorGo(MOTOR_2, usMotor_Status, usSpeed); } void Reverse() { Serial.println("Reverse"); usMotor_Status = CCW; motorGo(MOTOR_1, usMotor_Status, usSpeed); motorGo(MOTOR_2, usMotor_Status, usSpeed); } void IncreaseSpeed() { usSpeed = usSpeed + 10; if(usSpeed > 255) { usSpeed = 255; } Serial.print("Speed +: "); Serial.println(usSpeed); motorGo(MOTOR_1, usMotor_Status, usSpeed); motorGo(MOTOR_2, usMotor_Status, usSpeed); } void DecreaseSpeed() { usSpeed = usSpeed - 10; if(usSpeed < 0) { usSpeed = 0; } Serial.print("Speed -: "); Serial.println(usSpeed); motorGo(MOTOR_1, usMotor_Status, usSpeed); motorGo(MOTOR_2, usMotor_Status, usSpeed); } // Функция установки // motor(0 ou 1) - выбор двигателя // direction (cw ou ccw) - направление // pwm (entra 0 e 255 - значение скорости { if(motor == MOTOR_1) { if(direct == CW) { digitalWrite(MOTOR_A1_PIN, LOW); digitalWrite(MOTOR_B1_PIN, HIGH); } else if(direct == CCW) { digitalWrite(MOTOR_A1_PIN, HIGH); digitalWrite(MOTOR_B1_PIN, LOW); } else { digitalWrite(MOTOR_A1_PIN, LOW); digitalWrite(MOTOR_B1_PIN, LOW); } analogWrite(PWM_MOTOR_1, pwm); } else if(motor == MOTOR_2) { if(direct == CW) { digitalWrite(MOTOR_A2_PIN, LOW); digitalWrite(MOTOR_B2_PIN, HIGH); } else if(direct == CCW) { digitalWrite(MOTOR_A2_PIN, HIGH); digitalWrite(MOTOR_B2_PIN, LOW); } else { digitalWrite(MOTOR_A2_PIN, LOW); digitalWrite(MOTOR_B2_PIN, LOW); } analogWrite(PWM_MOTOR_2, pwm); } } В мониторе последовательного порта выбираем необходимый пункт меню: При выборе пунктов 2 или 3, можем регулировать пунктами + и - скорость вращения двигателей. ------------------ КВЛЕ0324 - 640 |