Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Xe tự chạy đơn giản với MSP430
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:
- MSP430G2553 Launchpad
- Adafruit TB6612 1.2A DC/Stepper Motor Driver Breakout Board
- Nguồn 3.3V cho MSP Launchpad
- Nguồn cho DC motor
- Mini Robot Rover Chassis Kit - 2WD with DC Motors
- Solderless breadboard.
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):
Tham khảo




