在製作四輪小車時,有想過要做兩輪平衡車,但因為白天要上班,下班時間有限,進度會比較慢。今天就先從我手邊有的機電控制板 TB6612FNG 瞭解開始,學習如何將控制馬達的前進、後退及轉速等功能。
TB6612FNG 電機控制模組可以在1.2A(3.2A峰值)的電流下控制兩個 DC 馬達或 1個雙極步進馬達,兩個輸入信號(IN1和IN2)可用控制馬達四種模式:正轉、反轉、短制動(Short Brake)和停止(Stop)。兩個馬達輸出可以單獨控制,且其速度可透過 PWM 輸入信號控制,頻率高達100kHz。其中 STBY 引腳高電位時以使馬達退出待機模式。
TB6612FNG 電機控制模組商品規格如下:
◾ Motor(int In1pin, int In2pin, int PWMpin, int offset, int STBYpin);
建立馬達物件,In1pin 及 In2pin為控制的
◾ drive(int speed, int duration)
驅動馬達。speed 是介於 -255 至 255 的整數值,數字越大,轉速越高,負值代表反轉。duration 設定轉動的時間,為選擇性參數,不輸入代表一直轉動。
◾ standby()
設定成待機模式。開始執行drive、forward、back、left 及 right 指令,待機模式會停止。
◾ forward(Motor motor1, Motor motor2, int speed)
驅動兩個馬達前進。speed 是介於 -255 至 255 的整數值,若為負值代表反轉,若不輸入 speed值,以預設的速度值 255 轉動。
◾ back(Motor motor1, Motor motor2, int speed)
驅動兩個馬達後退。
◾ left(Motor motor1, Motor motor2, int speed)
讓左、右馬達分別反轉和正轉,方向向左轉動。
◾ right(Motor motor1, Motor motor2, int speed)
讓左、右馬達分別正轉和反轉,方向向右轉動。
◾ brake(Motor motor1, Motor motor2)
煞車。將兩個馬達驅動設成高電位讓馬達停止。
這是電路板背面的照片:
TB6612FNG 電機控制模組可以在1.2A(3.2A峰值)的電流下控制兩個 DC 馬達或 1個雙極步進馬達,兩個輸入信號(IN1和IN2)可用控制馬達四種模式:正轉、反轉、短制動(Short Brake)和停止(Stop)。兩個馬達輸出可以單獨控制,且其速度可透過 PWM 輸入信號控制,頻率高達100kHz。其中 STBY 引腳高電位時以使馬達退出待機模式。
來源:SparkFun
TB6612FNG 電機控制模組商品規格如下:
- 晶片型號:TB6612FNG
- 晶片工作電壓:2.7V-5.5V
- 馬達工作電壓:2.5V-13.5V
- 輸出電流:1.2A-3.2A
- H橋式電路:MOSFET
- 運行模式:順時針、時針、剎車、停鈍
| 旋轉方向 | AIN1 或 BIN1 | AIN2 或 BIN2 |
|---|---|---|
| 正轉(順時針) | 高電位 | 低電位 |
| 反轉(逆時針) | 低電位 | 高電位 |
| 停止 | 高電位 | 高電位 |
| 停止 | 低電位 | 低電位 |
[SparkFun_TB6612FNG 程式庫]
SparkFun_TB6612FNG 程式庫對馬達物件的方法如下:◾ Motor(int In1pin, int In2pin, int PWMpin, int offset, int STBYpin);
建立馬達物件,In1pin 及 In2pin為控制的
◾ drive(int speed, int duration)
驅動馬達。speed 是介於 -255 至 255 的整數值,數字越大,轉速越高,負值代表反轉。duration 設定轉動的時間,為選擇性參數,不輸入代表一直轉動。
◾ standby()
設定成待機模式。開始執行drive、forward、back、left 及 right 指令,待機模式會停止。
◾ forward(Motor motor1, Motor motor2, int speed)
驅動兩個馬達前進。speed 是介於 -255 至 255 的整數值,若為負值代表反轉,若不輸入 speed值,以預設的速度值 255 轉動。
◾ back(Motor motor1, Motor motor2, int speed)
驅動兩個馬達後退。
◾ left(Motor motor1, Motor motor2, int speed)
讓左、右馬達分別反轉和正轉,方向向左轉動。
◾ right(Motor motor1, Motor motor2, int speed)
讓左、右馬達分別正轉和反轉,方向向右轉動。
◾ brake(Motor motor1, Motor motor2)
煞車。將兩個馬達驅動設成高電位讓馬達停止。
[材料]
- Arduino UNO
- TB6612FNG
- N20 差速馬達 x2
- PCB板
- 18650電池 x2 (含電池座)
- 排線 n 條
[接線圖]
| TB6612FNG | Arduino Uno | 其他 |
|---|---|---|
| PWMA | D5 | - |
| AIN2 | D4 | - |
| AIN1 | D2 | - |
| STBY | D9 | - |
| BIN1 | D7 | - |
| BIN2 | D8 | - |
| PWMB | D6 | - |
| GND | GND | - |
| VM | - | 接18650電池正極 |
| VCC | 5V | - |
| GND | - | 接18650電池負極 |
| A01 | - | 馬達A一端 |
| A02 | - | 馬達A另一端 |
| B01 | - | 馬達B一端 |
| B02 | - | 馬達B另一端 |
這是電路板背面的照片:
[程式]
#include <SparkFun_TB6612.h>
// 設定所有腳位對應 Arduino 的Pins
#define AIN1 2 // 控制輸入A1
#define AIN2 4 // 控制輸入A2
#define BIN1 7 // 控制輸入B1
#define BIN2 8 // 控制輸入B2
#define PWMA 5
#define PWMB 6
#define STBY 9
// 設定Offset,可以是 1 或 -1,1表示正轉,-1表示反轉
const int offsetA = 1;
const int offsetB = 1;
// 初始化馬達,設定控制板引腳
Motor motor1 = Motor(AIN1, AIN2, PWMA, offsetA, STBY);
Motor motor2 = Motor(BIN1, BIN2, PWMB, offsetB, STBY);
void setup()
{
// 沒有程式內容
}
void loop() {
// 速度可設定 -255 到 255.
motor1.drive(255,3000); // 馬達1全速正轉3秒
motor1.drive(-255,3000); // 馬達1全速反轉3秒
motor1.brake(); // 馬達1停止
delay(1000);
motor2.drive(255,3000); // 馬達2全速正轉3秒
motor2.drive(-255,3000); // 馬達2全速反轉3秒
motor2.brake(); // 馬達2停止
delay(1000);
forward(motor1, motor2, 150); // 兩個馬達以150的速度前進
delay(3000); // 持續3秒
back(motor1, motor2, -150); // 兩個馬達以150的速度後退
delay(3000); // 持續3秒
brake(motor1, motor2); // 兩個馬達停止
delay(1000);
left(motor1, motor2, 100); // 左轉
delay(3000);
right(motor1, motor2, 100); // 右轉
delay(3000);
brake(motor1, motor2); // 停止兩個馬達
delay(3000);
}


請問左彎、右彎怎麼寫?
回覆刪除如:motor1/150,motor2/200不等速左右彎?
張貼留言