Arduino Motor Shield VNH2SP30 điều khiển 2 động cơ 30A
Mã sản phẩm: (Đang cập nhật...)
Thương hiệu: cập nhật
Còn hàng
180.000₫
Freeship đơn hàng từ 500k
Kiểm tra khi nhận hàng
Hỗ trợ khách hàng 24/7
- Thông tin sản phẩm
- Hướng dẫn
Arduino Motor Shield VNH2SP30 là một lựa chọn tối ưu mạnh mẽ thay thế cho module thông dụng L298 với 2 cầu H, module sử dụng 1 cặp IC VNH2SP30 full-bridge với khả năng tải dòng cao cho 2 motor lên đến 30A.
THÔNG SỐ KỸ THUẬT
- Dải điện áp: 5.5v-16v
- Dòng tối đa: 30A
- Dòng liên tục: 14A
- Trở kháng nội MOSFET: 19mΩ (mỗi chân)
- Tần số PWM tối đa: 20khz
- Có chân current sensor (có thể kết nối với chân analog để đo dòng)
- Bảo vệ quá dòng và quá áp
SƠ ĐỒ KẾT NỐI Arduino Motor Shield VNH2SP30 điều khiển 2 động cơ 30A
———————CODE THAM KHẢO———————-
/* * Cắm trực tiếp Shield lên Arduino Mega/Uno. * A1 B1 kết nối với động cơ 1. * A2 B2 kết nối với động cơ 2. * Cấp nguồn 5.5 - 16V cho Shield. * Mở Serial Monitor: * Gửi '1' dừng động cơ. * Gửi '2' quay 2 động cơ. * Gửi '3' đảo chiều động cơ. * Gửi '+' tăng tốc độ động cơ. * Gửi '-' giảm tốc độ động cơ. */ #define BRAKE 0 #define CW 1 #define CCW 2 #define CS_THRESHOLD 15 // Definition of safety current (Check: "1.3 Monster Shield Example"). //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; //default motor speed 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); // Initiates the serial to do the monitoring Serial.println(); //Print function list for user selection 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(); //Read user input and trigger appropriate function 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); } void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm) //Function that controls the variables: motor(0 ou 1), direction (cw ou ccw) e 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); } }
Xem thêm
Thu gọn
Xin mời nhập nội dung tại đây