Trang chủ Điện - Điện tửArduinoMạch Cầu H Điều Khiển Động Cơ 36V 15A 540W MKS H3615NS | Hướng Dẫn

Mạch Cầu H Điều Khiển Động Cơ 36V 15A 540W MKS H3615NS | Hướng Dẫn

bởi Admin
19 lượt xem 7 Phút đọc

Mạch cầu H MKS H3615NS là trình điều khiển động cơ DC có khả năng cung cấp công suất cao lên đến 15A. Nó sử dụng logic tương tự như trình điều khiển động cơ L298, nơi bạn điều khiển trình điều khiển bằng 3 chân tín hiệu (IN1, IN2, ENABLE). Trình điều khiển động cơ này được điều khiển bởi MOSFET công suất cao, với bộ ghép quang tín hiệu điều khiển được cách ly để bảo vệ mọi sự cố về mạch điện và vòng tiếp đất. Bạn có thể điều khiển trình điều khiển này bằng cả logic 3,3V và 5V.

Thông số kỹ thuật

  • Điện áp nguồn: 9 ~ 36 VDC. (Giới hạn: 6.5~27VDC).
  • Mức tín hiệu điều khiển (Tương thích 3.3V/5V)
  • Logic Cao (H): 2.0 ~ 5V
  • Logic Thấp (L): 0 ~ 0.8V
  • Dòng tín hiệu điều khiển: 3 ~ 11 mA
  • Đầu ra tối đa với điện áp 5V: 500mA
  • Dòng hoạt động liên tục tối đa: 15A (Có tản nhiệt)
  • Xung PWM: 0.1% - 100%
  • Tần số xung PWM ngõ vào: 0 ~ 100KHz
  • Kích thước (Dài x Rộng x Cao): 55 x 55 x 16(mm)

Sơ đồ chân

Chức năngMô tả
9~36VDCNguồn dương cấp cho tải
PGNDNguồn âm cấp cho tải
OUT1Đầu ra Motor +
OUT2Đầu ra Motor -
PWMKích hoạt Motor/Ngõ vào điều khiển PWM
5VONgõ ra 5V
COMKết nối âm chung hoặc dương chung

Sơ đồ kết nối

Lưu ý: Cần gắn thêm cầu chì bảo vệ quá tải đầu vào và đầu ra như hình để tránh trường hợp động cơ bị chạm chập, quá tải dẫn đến quá công suất và làm cháy mạch. 

Chức năng điều khiển logic

Bảng logic điều khiển động cơ (COM nối âm chung)

IN1IN2PWMOUT1-OUT2
00XPhanh (tắt) động cơ
11XFloating
10PWMTiến + Điều khiển tốc độ
01PWMLùi + Điều khiển tốc độ
101Tiến tốc độ tối đa
011Lùi tốc độ tối đa

Bảng logic điều khiển động cơ (COM nối dương chung)

IN1IN2PWMOUT1-OUT2
00XFloating
11XPhanh (tắt) động cơ
10PWMTiến + Điều khiển tốc độ
01PWMLùi + Điều khiển tốc độ
101Tiến tốc độ tối đa
011Lùi tốc độ tối đa

Ví dụ ứng dụng với Arduino

Điều khiển động cơ DC bằng Arduino với hai nút nhấn và biến trở

Chức năng chính:

  1. Nút nhấn BT1: Bật/tắt động cơ.
  2. Nút nhấn BT2: Chuyển đổi chế độ hoạt động:
  • Mode 1:  Động cơ quay thuận.
  • Mode 2:  Động cơ quay nghịch.
  • Mode 3: Động cơ luân phiên quay thuận và nghịch sau mỗt khoảng thời gian.

Điều chỉnh tốc độ và thời gian:

  • VR1 (biến trở): Thay đổi tốc độ quay (0-255).
  • VR2 (biến trở): Thay đổi thời gian đổi chiều trong chế độ luân phiên (200ms - 10s).

Hiển thị qua Serial Monitor:

banner
  • Trạng thái động cơ (đang bật hay tắt).
  • Chế độ hoạt động.
  • Tốc độ quay và thời gian đổi chiều.

Thành phần cần thiết

Sơ đồ kết nối

MKS 3615NS ARDUINO 
COMGND
IN1 D9 
IN2 D8 
PWM D10 
BUTTON ARDUINO 
1GND
BT1 (2) D3 
BT2 (2) D4 
VR 10Kohm ARDUINO 
1GND
3 5V 
VR1 (2) A0 
VR2 (2) A1 

Code

const int BT1 = 3;  // Nút bật/tắt động cơ
const int BT2 = 4;  // Nút chọn chế độ
const int IN1 = 9;                 // Điều khiển chiều 1
const int IN2 = 8;                 // Điều khiển chiều 2
const int PWM = 10;                // Điều chỉnh tốc độ động cơ
int previousValue_VR1 = -1;        // Giá trị trước đó của VR1
int previousValue_VR2 = -1;        // Giá trị trước đó của VR2
unsigned long previousMillis = 0;  // Biến lưu thời gian trước đó
unsigned long interval = 0;        // Khoảng thời gian
bool isMotorOn = false;            // Trạng thái bật/tắt động cơ
bool lastButtonState_BT1 = HIGH;   // Trạng thái trước đó của BT1
bool lastButtonState_BT2 = HIGH;   // Trạng thái trước đó của BT2
int mode = 1;                      // Chế độ hoạt động: 1, 2 hoặc 3
void setup() {
  Serial.begin(9600);  // Khởi động giao tiếp Serial
  pinMode(BT1, INPUT_PULLUP);
  pinMode(BT2, INPUT_PULLUP);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(PWM, OUTPUT);
}
void loop() {
  int currentValue_VR1 = analogRead(A0);  // Đọc giá trị từ chân A0
  int mappedValue_VR1;
  int thresholdSpeed = 4;      // Ngưỡng thay đổi để xác định khi nào in giá trị
  int thresholdInterval = 10;  // Ngưỡng thay đổi để xác định khi nào in giá trị
  // Cập nhật khoảng thời gian (interval) từ VR2
  if (abs(currentValue_VR1 - previousValue_VR1) > thresholdSpeed) {  // Chỉ in khi thay đổi lớn hơn ngưỡng
    previousValue_VR1 = currentValue_VR1;                            // Cập nhật giá trị trước đó
    mappedValue_VR1 = map(currentValue_VR1, 0, 1023, 0, 255);        // Chuyển đổi giá trị VR1
    Serial.print("Speed: ");
    Serial.println(mappedValue_VR1);  // In giá trị interval ra Serial
  }
  int currentValue_VR2 = analogRead(A1);  // Đọc giá trị từ chân A1
  int mappedValue_VR2;
  // Kiểm tra trạng thái nút bật/tắt động cơ
  bool buttonState_BT1 = digitalRead(BT1);
  if (buttonState_BT1 == LOW && lastButtonState_BT1 == HIGH) {  // Phát hiện nút nhấn BT1
    isMotorOn = !isMotorOn;                                     // Đổi trạng thái bật/tắt động cơ
    Serial.println(isMotorOn ? "Motor ON" : "Motor OFF");
    delay(50);  // Chống dội phím
  }
  lastButtonState_BT1 = buttonState_BT1;  // Cập nhật trạng thái BT1
  // Kiểm tra trạng thái nút chọn chế độ
  bool buttonState_BT2 = digitalRead(BT2);
  if (buttonState_BT2 == LOW && lastButtonState_BT2 == HIGH) {  // Phát hiện nút nhấn BT2
    mode = (mode % 3) + 1;                                      // Chuyển sang chế độ tiếp theo (1 -> 2 -> 3 -> 1)
    // Hiển thị chế độ hiện tại
    switch (mode) {
      case 1:
        Serial.println("Mode 1: Quay thuan");  // In chế độ quay thuận
        break;
      case 2:
        Serial.println("Mode 2: Quay nghich");  // In chế độ quay nghịch
        break;
      case 3:
        Serial.println("Mode 3: Quay thuan & nghich");  // In chế độ quay thuận và nghịch
        break;
      default:
        Serial.println("Unknown Mode");  // Dự phòng lỗi (không nên xảy ra)
        break;
    }
    delay(50);  // Chống dội phím
  }
  lastButtonState_BT2 = buttonState_BT2;  // Cập nhật trạng thái BT2
  // Nếu động cơ đang bật
  if (isMotorOn) {
    // Cập nhật khoảng thời gian (interval) từ VR2
    if (abs(currentValue_VR2 - previousValue_VR2) > thresholdInterval) {
      previousValue_VR2 = currentValue_VR2;                          // Cập nhật giá trị trước đó
      mappedValue_VR2 = map(currentValue_VR2, 0, 1023, 200, 10000);  // Chuyển đổi giá trị
      interval = mappedValue_VR2;
      Serial.print("Interval: ");
      Serial.println(mappedValue_VR2);  // In giá trị interval ra Serial
    }
    // Thực hiện hành động dựa trên chế độ
    if (mode == 1) {
      Motor_Forward(mappedValue_VR1);  // Chỉ quay thuận
    } else if (mode == 2) {
      Motor_Backward(mappedValue_VR1);  // Chỉ quay nghịch
    } else if (mode == 3) {
      unsigned long currentMillis = millis();  // Đọc thời gian hiện tại
      if (currentMillis - previousMillis >= interval) {
        previousMillis = currentMillis;  // Cập nhật thời gian trước đó
        static bool isForward = true;    // Biến lưu trạng thái quay
        if (isForward) {
          Motor_Forward(mappedValue_VR1);  // Quay thuận
        } else {
          Motor_Backward(mappedValue_VR1);  // Quay nghịch
        }
        isForward = !isForward;  // Đổi chiều quay
      }
    }
  } else {
    Motor_Brake();  // Nếu động cơ tắt, dừng motor
  }
}
void Motor_Forward(int Speed) {
  digitalWrite(IN1, HIGH);  // Bật IN1
  digitalWrite(IN2, LOW);   // Tắt IN2
  analogWrite(PWM, Speed);  // Điều chỉnh tốc độ motor
}
void Motor_Backward(int Speed) {
  digitalWrite(IN1, LOW);   // Tắt IN1
  digitalWrite(IN2, HIGH);  // Bật IN2
  analogWrite(PWM, Speed);  // Điều chỉnh tốc độ motor
}
void Motor_Brake() {
  digitalWrite(IN1, LOW);  // Tắt IN1
  digitalWrite(IN2, LOW);  // Tắt IN2
}

 Bạn nên chú ý hai động cơ DC quay tiến và lùi với hành động phanh. 

Demo

Trạng thái động cơ: OFF
Chế độ: 1 - Quay thuận
Chiều quay: --
Tốc độ: 0
Thời gian đổi chiều (ms): 1000
 
Speed
 
Time
 
 

Video

Để lại bình luận

Focus Mode

Đã phát hiện trình chặn quảng cáo

Vui lòng hỗ trợ chúng tôi bằng cách tắt tiện ích chặn quảng cáo (AdBlocker) trên trình duyệt của bạn khi truy cập trang web của chúng tôi.