电子网首页 > 开源与设计

【Let'sdo2025年第4期任务】02-过程帖:验证Adafrui

2026-02-07 01:10 | 来源:电子世界报

拿到Adafruit TB6612,第一件事就是焊排针。

两边的还比较好说,原厂附带2.54的,焊上就行。电源那两个纠结了一下,考虑到电机功率和电流,还是用了普通排针。

然后就是验证了,得看看驱动板好使不好使。手边最方便的工具是arduino,连线时参考了一下手册:TB6612FNG_datasheet_zh_cn_20141001.pdf

于是连成了这样:

TB6612Arduino  
STBYD7   (快速关闭,,常为高,拉低时禁用)
BIN1D8   (控制方向)
BIN2D9   (控制方向)
PWMB D10  (控制速度,PWM)
GND 
GND
VCC5V

另外还把模拟输入A0,连到了摇杆上,用来读取摇杆的旋转电阻分压。最后效果是这样:

1770301135469939.jpg

验证的方案分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);
    }
  }
}



推荐技术

返回顶部