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

Mạch Cầu H 36V 15A 540W MKS H3615NS

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ăng Mô tả
9~36VDC Nguồn dương cấp cho tải
PGND Nguồn âm cấp cho tải
OUT1 Đầu ra Motor +
OUT2 Đầu ra Motor -
PWM Kích hoạt Motor/Ngõ vào điều khiển PWM
5VO Ngõ ra 5V
COM Kế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)

IN1 IN2 PWM OUT1-OUT2
0 0 X Phanh (tắt) động cơ
1 1 X Floating
1 0 PWM Tiến + Điều khiển tốc độ
0 1 PWM Lùi + Điều khiển tốc độ
1 0 1 Tiến tốc độ tối đa
0 1 1 Lùi tốc độ tối đa

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

IN1 IN2 PWM OUT1-OUT2
0 0 X Floating
1 1 X Phanh (tắt) động cơ
1 0 PWM Tiến + Điều khiển tốc độ
0 1 PWM Lùi + Điều khiển tốc độ
1 0 1 Tiến tốc độ tối đa
0 1 1 Lù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:

  • 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

STT MKS-H3615NS Số lượng
1 Arduino UNO 1
2 MKS-H3615NS 1
3 WH148-3P-103 Biến Trở 10 KOhm 2
4 Nút nhấn 2 chân 2

Sơ đồ kết nối

MKS 3615NS ARDUINO
COM GND
IN1 D9
IN2 D8
PWM D10
BUTTON ARDUINO
1 GND
BT1 (2) D3
BT2 (2) D4
VR 10Kohm ARDUINO
1 GND
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.

Video

Nhận xét

Mới hơn Cũ hơn