拿到Adafruit TB6612,第一件事就是焊排针。
两边的还比较好说,原厂附带2.54的,焊上就行。电源那两个纠结了一下,考虑到电机功率和电流,还是用了普通排针。
然后就是验证了,得看看驱动板好使不好使。手边最方便的工具是arduino,连线时参考了一下手册:TB6612FNG_datasheet_zh_cn_20141001.pdf
于是连成了这样:
| TB6612 | Arduino |
| STBY | D7 (快速关闭,,常为高,拉低时禁用) |
| BIN1 | D8 (控制方向) |
| BIN2 | D9 (控制方向) |
| PWMB | D10 (控制速度,PWM) |
| GND | GND |
| VCC | 5V |
另外还把模拟输入A0,连到了摇杆上,用来读取摇杆的旋转电阻分压。最后效果是这样:

验证的方案分2部分——
a.初始化完成后,电机全速正转1秒、停止1秒、半速反转2秒、停止1秒。
b.然后持续从摇杆的旋转电位器输入值,换算后控制电机的速度和方向。
以下是代码:
const int PinAnalogIn = A0; //摇杆
const int Pin_PWM_Out = 10; //pwmB
const int Pin_BIN1_Out = 8; //pwmB
const int Pin_BIN2_Out = 9; //pwmB
const int Pin_STBY_Out = 7; //pwmB
int sensorValue = 0;
int outputPwm = 0;
int led_flag = 0;
void setup() {
//输出
pinMode(Pin_BIN1_Out, OUTPUT);
pinMode(Pin_BIN2_Out, OUTPUT);
pinMode(Pin_STBY_Out, OUTPUT);
digitalWrite(Pin_STBY_Out, HIGH);
pinMode(LED_BUILTIN, OUTPUT); //led
led_flag = 1;
Serial.begin(9600);
}
//a.电机启停与方向控制:通过程序实现电机的启动、停止、正转和反转。
void loop() {
//正转
Serial.println("+250+");
analogWrite(Pin_PWM_Out, 250);
digitalWrite(Pin_BIN1_Out, HIGH);
digitalWrite(Pin_BIN2_Out, LOW);
digitalWrite(Pin_STBY_Out, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
//停止
Serial.println("_STOP_");
analogWrite(Pin_PWM_Out, 0);
digitalWrite(Pin_BIN1_Out, LOW);
digitalWrite(Pin_BIN2_Out, LOW);
digitalWrite(Pin_STBY_Out, LOW);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
//反转
Serial.println("-100-");
analogWrite(Pin_PWM_Out, 100);
digitalWrite(Pin_BIN1_Out, LOW);
digitalWrite(Pin_BIN2_Out, HIGH);
digitalWrite(Pin_STBY_Out, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
delay(2000);
//停止
Serial.println("_STOP_");
analogWrite(Pin_PWM_Out, 0);
digitalWrite(Pin_BIN1_Out, LOW);
digitalWrite(Pin_BIN2_Out, LOW);
digitalWrite(Pin_STBY_Out, LOW);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
//摇杆控制速度
while (1) {
sensorValue = analogRead(PinAnalogIn);
outputPwm = map(abs(sensorValue - 512), 0, 1023, 0, 255);
if (sensorValue >= (512 + 100)) {
analogWrite(Pin_PWM_Out, outputPwm);
digitalWrite(Pin_BIN1_Out, HIGH);
digitalWrite(Pin_BIN2_Out, LOW);
digitalWrite(Pin_STBY_Out, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
} else if (sensorValue <= (512 - 100)) {
analogWrite(Pin_PWM_Out, outputPwm);
digitalWrite(Pin_BIN1_Out, LOW);
digitalWrite(Pin_BIN2_Out, HIGH);
digitalWrite(Pin_STBY_Out, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
} else {
analogWrite(Pin_PWM_Out, 0);
digitalWrite(Pin_BIN1_Out, LOW);
digitalWrite(Pin_BIN2_Out, LOW);
digitalWrite(Pin_STBY_Out, LOW);
digitalWrite(LED_BUILTIN, LOW);
}
}
}