自学内容网 自学内容网

使用arduino从零做一辆ROS2Jazzy的阿克曼小车---电机驱动篇

        本项目采用 Arduino Mega2560 Pro 作为主控开发板,电机驱动器选用 TB6612FNG,并配备了 12V 电源两个直流减速电机和一个舵机。未来计划通过嘉立创将各模块集成到一个 PCB 板上,提升系统的集成度和稳定性。

本文将聚焦于电机驱动部分,详细讲解 TB6612FNG 的接线和代码实现。

TB6612FNG 简介

        TB6612FNG 是一款高效、双通道的直流电机驱动芯片,能够驱动两个直流电机,每个通道最大电流为 1.2A,具有 PWM 控制功能,并支持正转、反转和刹车等多种模式。它因其简单易用和较高的性价比被广泛应用于各类机器人项目中。

电路接线说明

下表列出了 TB6612FNG 的主要引脚连接:

TB6612FNG 引脚Arduino 引脚功能
AIN15电机 A 的方向控制引脚 1
AIN210电机 A 的方向控制引脚 2
BIN16电机 B 的方向控制引脚 1
BIN211电机 B 的方向控制引脚 2
PWMA9电机 A 的 PWM 输入
PWMB3电机 B 的 PWM 输入
STBY8驱动芯片使能引脚

12V 电源为 TB6612FNG 提供主电源,Arduino Mega2560 Pro 通过 USB 或外部电源供电。

/ PWM 和控制引脚定义 /
#define AIN1 5       // 电机 A 的方向控制引脚 1
#define AIN2 10      // 电机 A 的方向控制引脚 2
#define BIN1 6       // 电机 B 的方向控制引脚 1
#define BIN2 11      // 电机 B 的方向控制引脚 2
#define PWMA 9       // 电机 A 的 PWM 引脚
#define PWMB 3       // 电机 B 的 PWM 引脚
#define STBY 8       // TB6612 的使能引脚

/ 电机 PWM 固定值 /
const int fixedPWM = -50;  // 设置为正值,表示正转

void setup() {
  // 初始化控制引脚为输出模式
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);
  pinMode(PWMA, OUTPUT);
  pinMode(PWMB, OUTPUT);
  pinMode(STBY, OUTPUT);

  // 激活 TB6612 (STBY 引脚拉高)
  digitalWrite(STBY, HIGH);

  // 设置电机转速和方向
  Set_PWMA(fixedPWM); // 设置电机 A 的 PWM
  Set_PWMB(fixedPWM); // 设置电机 B 的 PWM
}

void loop() {
  Set_PWMA(fixedPWM);    // 改变电机 A 的方向
  Set_PWMB(fixedPWM);    // 改变电机 B 的方向
}

/ 控制电机 A 的 PWM 和方向 /
void Set_PWMA(int pwm) {
  if (pwm > 0) {
    digitalWrite(AIN1, HIGH);  // 正转
    digitalWrite(AIN2, LOW);
    analogWrite(PWMA, pwm);    // 设置速度
  } else if (pwm < 0) {
    digitalWrite(AIN1, LOW);   // 反转
    digitalWrite(AIN2, HIGH);
    analogWrite(PWMA, -pwm);   // 设置速度(取绝对值)
  } else {
    digitalWrite(AIN1, LOW);   // 停止
    digitalWrite(AIN2, LOW);
    analogWrite(PWMA, 0);
  }
}

/ 控制电机 B 的 PWM 和方向 /
void Set_PWMB(int pwm) {
  if (pwm > 0) {
    digitalWrite(BIN1, HIGH);  // 正转
    digitalWrite(BIN2, LOW);
    analogWrite(PWMB, pwm);    // 设置速度
  } else if (pwm < 0) {
    digitalWrite(BIN1, LOW);   // 反转
    digitalWrite(BIN2, HIGH);
    analogWrite(PWMB, -pwm);   // 设置速度(取绝对值)
  } else {
    digitalWrite(BIN1, LOW);   // 停止
    digitalWrite(BIN2, LOW);
    analogWrite(PWMB, 0);
  }
}
  1. 所有控制引脚和 PWM 引脚都被设置为输出模式,并通过 digitalWrite(STBY, HIGH) 激活驱动芯片。

  2. 使用 analogWrite() 设置 PWM 占空比来调整电机转速,并通过 digitalWrite() 控制方向引脚,决定电机正转、反转或停止。

  3. fixedPWM 设置为 50,表示电机以中等速度运行。可以根据自己需要调整该值实现不同转速。

  4. Set_PWMA()Set_PWMB() 函数为控制电机的核心,支持正转、反转及停止状态。


原文地址:https://blog.csdn.net/weixin_64037619/article/details/144805307

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!