Xe tự chạy đơn giản với MSP430
msp430
1
robotic
1
embedded
7
White

viethnguyen viết ngày 29/03/2017

Bài viết này trình bày cách xây dựng một robot dạng xe tự chạy đơn giản với MSP430 Launchpad. MSP430 Launchpad là bo mạch phát triển của Texas Instruments với đặc điểm rất tiết kiệm điện. Với sự hỗ trợ của IDE Energia, lập trình trên MSP430 trở nên dễ dàng không kém gì lập trình trên Arduino.

Các mô đun sử dụng trong bài này:

Module TB6612 của Adafruit rất dễ sử dụng để điểu khiển DC Mô tơ. Việc điều khiển chỉ đơn giản là áp điện thế cao hay thấp lên từng chân chức năng, và xuất PWM (Pulse Width Modulation) để điều khiển tốc độ. Trên module này có sẵn chân để điều khiển 2 mô tơ.

Các chân chức năng của module TB6612:

  • Có 3 chân để điều khiển mỗi mô tơ. Ví dụ cho mô tơ A: AIN1 và AIN2 được dùng để chọn hướng quay của mô tơ. Nếu muốn mô tơ quay hướng nào thì kéo điện áp lên chân đó lên mức logic cao (HIGH) và kéo điện áp lên chân kia xuông mức logic thấp (LOW). Nếu cả hai chân ở cùng mức logic thì mô tơ sẽ ngừng quay. PWMA được dùng để thiết lập tốc độ quay. Chúng ta điều khiển chân này bằng cách dùng hàm analogWrite() với giá trị từ 0 đến 255 (số này càng to mô tơ quay càng khỏe.)

  • Có một chân điều khiển là STBY (Standby), dùng để tạm dừng mô tơ ngay lập tức. Kéo chân này xuống mức logic thấp để ngừng mô tơ.

  • Có 2 chân output cho mỗi mô tơ.

  • Module này phải được cấp 2 nguồn điện riêng rẽ, ngoài điện áp cho IC, ta phải cấp điện áp cho mô tơ thông qua 2 chân Vmotor+ và Vmotor-. Điện áp này có thể từ 2.5V đến 13V.

Nối chân giữa MSP430 Launchpad và module TB6612 như sau:

MSP430 Launchpad  -------------------- TB6612 Module 
Pin 9  ------------------------------- PWMA
Pin 5  ------------------------------- AIN1
Pin 6  ------------------------------- AIN2
Pin 10 ------------------------------- PWMB
Pin 7  ------------------------------- BIN1
Pin 8  ------------------------------- BIN2
PIN 3 ------------------------------- STBY

Như đã nói, chúng ta có thể lập trình MSP430 bằng IDE Energia, với cú pháp khá giống Arduino IDE. Đoạn code sau đây làm xe chạy tới rồi lại chạy lui:

//motor A connected between A01 and A02
//motor B connected between B01 and B02

int STBY = 3; //standby

//Motor A
int PWMA = 9; //Speed control 
int AIN1 = 5; //Direction
int AIN2 = 6; //Direction

//Motor B
int PWMB = 10; //Speed control
int BIN1 = 7; //Direction
int BIN2 = 8; //Direction

void setup(){
  pinMode(STBY, OUTPUT);

  pinMode(PWMA, OUTPUT);
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);

  pinMode(PWMB, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);
}

void loop(){
  move(1, 255, 1); //motor 1, full speed, left
  move(2, 255, 1); //motor 2, full speed, left

  delay(1000); //go for 1 second
  stop(); //stop
  delay(250); //hold for 250ms until move again

  move(1, 128, 0); //motor 1, half speed, right
  move(2, 128, 0); //motor 2, half speed, right

  delay(1000);
  stop();
  delay(250);
}


void move(int motor, int speed, int direction){
//Move specific motor at speed and direction
//motor: 0 for B 1 for A
//speed: 0 is off, and 255 is full speed
//direction: 0 clockwise, 1 counter-clockwise

  digitalWrite(STBY, HIGH); //disable standby

  boolean inPin1 = LOW;
  boolean inPin2 = HIGH;

  if(direction == 1){
    inPin1 = HIGH;
    inPin2 = LOW;
  }

  if(motor == 1){
    digitalWrite(AIN1, inPin1);
    digitalWrite(AIN2, inPin2);
    analogWrite(PWMA, speed);
  }else{
    digitalWrite(BIN1, inPin1);
    digitalWrite(BIN2, inPin2);
    analogWrite(PWMB, speed);
  }
}

void stop(){
//enable standby  
  digitalWrite(STBY, LOW); 
}

Demo

Video minh họa (xe đi không được thẳng lắm do 2 bánh xe chưa được cân chỉnh cẩn thận):

https://youtu.be/R9J51uWVq1o

Tham khảo

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

viethnguyen

12 bài viết.
29 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
14 4
Giới thiệu về Arduino Có thể bạn đã quen lập trình trên PC, với những ngôn ngữ như C, C++, C, Java, Python, Ruby... Nhưng bạn có biết là phần mềm...
viethnguyen viết 3 năm trước
14 4
White
8 0
Trong bài viết này, tôi sẽ trình bày về một đặc tính của Haskell khá khác biệt so với các ngôn ngữ lập trình khác, đó là laziness (dịch tiếng việt ...
viethnguyen viết hơn 3 năm trước
8 0
White
6 0
Giới thiệu Quy hoạch động là một trong những kĩ thuật lập trình cơ bản được sử dụng khá nhiều trong các cuộc thi lập trình. Ý tưởng về cơ bản rất ...
viethnguyen viết 3 năm trước
6 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
12 bài viết.
29 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!