在製作四輪小車時,有想過要做兩輪平衡車,但因為白天要上班,下班時間有限,進度會比較慢。今天就先從我手邊有的機電控制板 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不等速左右彎?
張貼留言