ShieldMotorL298

Từ ChipFC Wiki
Phiên bản vào lúc 11:25, ngày 2 tháng 3 năm 2018 của BS135 (Thảo luận | đóng góp) (Chương trình 2: RC Servo)
(khác) ← Phiên bản cũ | xem phiên bản hiện hành (khác) | Phiên bản mới → (khác)
Bước tới: chuyển hướng, tìm kiếm

Editor.png

Bài viết này đang được phát triển hoặc chỉnh sửa lớn.
Bạn có thể đóng góp để bài viết hoàn thiện hơn.
Sau khi chỉnh sửa xong thông báo này sẽ được gỡ bỏ.

Giới thiệu

  • Shield Motor L298 là một board mạch mở rộng cho Arduino, tương thích hoàn toàn với Arduino và cả ChipPRO, ChipUNO của ChipFC.
  • Shield Motor cung cấp cho board Arduino của bạn một bộ driver để có thể điều khiển cùng lúc 2 động cơ, hệ thống mạch bảo vệ giúp 2 động cơ chạy trơn tru, đảo chiều nhẹ nhàng, tránh các sự cố về điện
  • Nếu cần nhiều hơn 2 động cơ thì sao, bạn hoàn toàn có thể ghép chồng 2 shield motor này để có thể điều khiển tận 4 động cơ với đầy đủ các chức năng riêng biệt
  • Ngoài ra Shield Motor của chipfc còn cung cấp cho các bạn tối đa số đầu nối cho RC servo để bạn có thể dễ dàng thực hiện thêm những chức năng khác
  • Một số ứng dụng với Shield motor như: điều khiển động cơ xe đua, làm robot, làm máy, điều khiển step motor, cánh tay máy ...

Motor298ShieldTop.jpg

Đặc điểm

  • Điện thế hoạt động: mức logic hoạt động ở 5V giống Arduino, nguồn cho motor có domino kết nối riêng, từ 5-36V
  • Hoàn toàn tương thích Arduino
  • Gồm 4 nữa cầu H, Có thể điều khiển 2 động cơ thường hoặc 1 step motor
  • Có đèn báo hiệu tín hiệu điều khiển
  • Cảm biến dòng cho động cơ
  • Có tối đa 6 kênh điều khiển RC Servo
  • Có thể ghép nối tới 2 shield motor này lên Arduino, tất nhiên cần một vài điều chỉnh nhỏ sẽ nói ở phần sử dụng bên dưới
  • Có thể cấp nguồn cho Arduino bằng nguồn nuôi motor bằng cách đặt jump

Mô tả các chân kết nối

ShieldMotor298 Sodochan.jpg ShieldMotor298 Sodonguyenly.png

Kết nối chân tới Arduino
Thứ tự chân Tên gọi Loại Mô tả
1 Dir_Data Input Tín hiệu data của spi cho điều khiển hướng
2 Dir_Clk Input Tín hiệu clock cua spi cho điều khiển hướng
3 Dir_Latch Input Tín hiệu latch của spi cho điều khiển hướng
4 Dir_En Input Tín hiệu enable của spi cho điều khiển hướng
5 PWM A Input Tín hiệu điều xung cho motor kênh A
6 PWM B Input Tín hiệu điều xung cho motor kênh B
7 Sense A Output Tín hiệu giá trị cảm biến dòng điện của kênh A
8 Sense B Output Tín hiệu giá trị cảm biến dòng điện của kênh B

Kết nối chân ra nguồn và động cơ

Kết nối chân của domino
Thứ tự chân Tên gọi Loại Mô tả
1 MB1 Output Tín hiệu điều khiển motor B, kênh 1
2 MB2 Output Tín hiệu điều khiển motor B, kênh 2
3 GND Power Mức đất, dùng cho stepmotor có chân chung nối GND
4 MA1 Output Tín hiệu điều khiển motor A, kênh 1
5 MA2 Output Tín hiệu điều khiển motor A, kênh 2
6 + Power Nguồn cung cấp cho motor, nên từ 6.5-12 V
7 - Power Nguồn cung cấp cho motor, mức tín hiệu đất

Nếu bạn không dùng với Arduino thì có thể dùng shield motor này như một module driver để điều khiển động cơ, cách kết nối cũng khá đơn giản và thiết lập cũng dễ dàng. Trước tiên bạn hãy chỉnh lại mối hàn chỗ thiết lập chế độ là non-Arduino, hàn hàng rào chỗ còn trống để điều khiển qua hàng rào này. Thứ tự của các chân trên hàng rào được ghi trên mạch và có chức năng như sau:

Chân điều khiển khi không dùng với Arduino
Thứ tự chân Tên gọi Loại Mô tả
1 PWMA Input Tín hiệu điều xung motor A
2 DirA Input Tín hiệu điều khiển hướng motor A
3 PWMB Input Tín hiệu điều xung motor B
4 DirB Input Tín hiệu điều khiển hướng motor B
5 GND Power Mức nguồn đất
6 VCC Power Mức nguồn cung cấp cho ic, 5V

Sử dụng

Cách nối với bo Arduino đơn giản như sau

ShieldMotor ketnoiarduino.jpg 400px

Để sử dụng shield motor này với Arduino, đầu tiên bạn phải tải về thư viện mà chipfc đã chuẩn bị sẵn tại trang giới thiệu của sản phẩm. Sau đó bạn chép và giải nén tại thư mục libraries của Arduino, mở chương trình lên lại và sử dụng.

Để tham khảo các chức năng hoạt động, bạn có thể mở từng ví dụ trong mục example của thư viện shield motor này

Chương trình 1: DC Motor

400px

  • Kết nối Shield Motor với Arduino
  • Kết nối động cơ với Shield
  • Cấp nguồn cho Shield, trước khi cấp nguồn nhớ chú ý jump Vin, khi jump này nối nghĩa là nguồn nuôi động cơ cuãng là nguồn nuôi arduino, nếu không nối jump thì nguồn cho động cơ và nguồn cho arduino riêng biệt (nên tách riêng như vậy)
  • Nạp chương trình test motor, trong đó có một số hàm sau:
    • Hàm khởi tạo CFC_DCMotor(uint8_t motornum, uint8_t pwmpin) khởi tạo motor, trong đó

_ motornum là thứ tự motor, trên mỗi Shield có 2 cổng để gắn động cơ _ pwmpin là chân điều xung cho động cơ, motor 1 mặc định là D13 và motor 2 mặc định là D3

CFC_DCMotor motor1(1, 11); // Motor 1, PWMpin = D11
    • Hàm khỏi tạo CFC_DCMotor(uint8_t motornum, uint8_t pwmpin, uint8_t analogpin) khỏi tạo motor, tương tự như trên nhưng có thêm chân cho cảm biến dòng khai báo tại uint8_t analogpin
CFC_DCMotor motor1(1, 11,A0); // Motor 1, PWMpin = D11, sensor pin = A0
    • Hàm chạy void run(uint8_t) để cho phép motor chạy, thông số truyền vào là:
      • FORWARD tiến
      • BACKWARD lui
      • BRAKE thắng
      • RELEASE thả
motor1.run(FORWARD);
motor1.run(BACKWARD);
motor1.run(BRAKE);
motor1.run(RELEASE);
    • Hàm void setSpeed(uint8_t) để set tốc độ cho motor, có giá trị từ 0->255
motor1.setSpeed(255);

Chương trình 2: RC Servo

400px

  • Kết nối Shield Motor với Arduino
  • Kết nối động cơ servo với Shield, trên shield có 6 header để có thể cắm tối đa 6 động cơ, thông thường chúng ta chỉ sử dụng 4 servo và để dành 2 vị trí cho điều khiển motor.
  • Cấp nguồn cho Shield, trước khi cấp nguồn nhớ chú ý jump Vin, khi jump này nối nghĩa là nguồn nuôi động cơ cuãng là nguồn nuôi arduino, nếu không nối jump thì nguồn cho động cơ và nguồn cho arduino riêng biệt (nên tách riêng như vậy)
  • Nạp chương trình servo test để kiểm tra, trong đó có thể có một số hàm sau:
    • Khởi tạo đối tượng Servo
Servo servo1;
Servo servo2;
    • Hàm uint8_t attach(int pin) để gắn chân Arduino nào sử dụng với servo này
    • Hoặc có thể dùng hàm uint8_t attach(int pin, int min, int max) cũng tương tự như trên nhưng đồng thời đặt giá trị tối đa và tối thiểu cho servo, rất hữu ích khi cần chặn hành trình của servo
servo1.attach(5);
servo2.attach(6, 70,160); // giới hạn góc từ 70 tới 160 độ
    • Hàm void write(int value) để xuất giá trị ra servo, nếu giá trị value dưới 200 thì coi là giá trị góc, nếu trên 200 thì coi là giá trị xung rộng theo micro giây
    • Hoặc dùng hàm void writeMicroseconds(int value) nếu cần xuất ra giá trị theo xung micro giây
servo1.write(45);
    • Một số hàm khác như void detach() dùng khi muốn thả nổi servo
    • Hàm bool attached() để hỏi xem servo có đang được gắn vào không
    • Hàm int read() trả về giá trị góc hiện tại
    • Hàm int readMicroseconds() trả về giá trị rộng xung hiện tại

Chương trình 3: StepMotor

400px

Đang cập nhật

Các rắc rối có thể bạn gặp phải

Không có đèn nào sáng => kiểm tra kết nối nguồn, xem có đảm bảo đủ điện áp hoạt động không, kiểm tra dây nối xem có bị hở mạch không

Động cơ dc và servo không quay đúng thứ tự => kiểm tra các chân config phía dưới bo.

Động cơ không quay nhưng code mẫu thì chạy được => kiểm tra lại chương trình

Giá trị sensor quá nhỏ hoặc thường xuyên không lấy được => cảm biến dòng có giá trị khi động cơ hoạt động, nên cho chu kì lấy mẫu nhỏ lại, hoặc muốn mịn hơn thì có thể chỉnh lại giá trị điện trở theo datasheet của driver ic L298

Tham khảo thêm

Bạn có thể làm xe đua lập trình chạy tự động với arduino và shield motor này

Bạn có thể làm robot với khả năng di chuyển và kết hợp với servo làm cánh tay máy

Điều khiển các loại động cơ ...