编码减速电机|使用Arduino和TB6612驱动编码电机实现测速功能

日期:2023-07-10 16:15:39浏览量:181

深圳市鑫希田机电有限公司(艾德克尔ADDKA)是集工业自动化零部件产品、互联网、供应链服务于一体的综合性工厂直销+电商平台, 2005年创立于粤港澳大湾区四大中心城市之一 、国家物流枢纽、国际性综合交通枢纽 、国际科技产业创新中心 、中国三大全国性金融中心之一 深圳市,以代理销售日本松下、三菱、ABB等工业自动化传动产品,为使产品质量不断提高,引进一批高素质的专业技术人员,引进100台/套 日本哈马仪滚齿机、精密全自动磨床、热处理设备、CNC加工中心等生产设备;日本TIT精密齿轮检测设备、铬氏硬度仪、维氏硬度仪等,至力研发、生产高效、节能、环保型的工业传动产品。 2020年为适应客户需要,满足客户期望一站式采购工业自动化零部件需求,公司转型升级,旨在构建以“工业部件+工厂+互联网+供应链”为主体的全新工业品营销方式,打造工业自动化零部件自主生产、线上线下交易、服务、技术支持一体化平台。具有高性价比,正品保证,快速出货,免费3D下载等特点。我们多样化的产品种类与充足的库存使客户可以安心、便捷地搜寻和购买到合适的产品。、充足的现货储备,所有产品质量保障, 深圳市鑫希田机电有限公司为客户提供专业的采购服务,节省客户的时间和成本。

编码电机是一种常见的电机类型,它可以通过内置的编码器精确地测量电机的转速和位置。在本文中,我们将介绍如何使用Arduino和TB6612驱动编码电机,并实现测速功能。TB6612是一种双路直流电机驱动器,适用于控制小型直流电机。我们将使用Arduino作为主控制器,TB6612作为电机驱动器,并通过编码器获取电机的转速信息。 1.材料清单

Arduino Mega2560开发板

TB6612电机驱动模块

编码电机

杜邦线

电源(根据电机和驱动器的要求选择)

2.硬件连接:

将Arduino与TB6612驱动器和编码电机连接起来。根据驱动器和电机的引脚定义,将其正确连接到Arduino的数字引脚。确保连接正确无误,并检查供电是否稳定。

arduino与编码电机接线图接线图:

编码减速电机

Arduino --------- TB6612 -------- 编码电机

5V ---------------- VCC

GND -------------- GND

D3-------------------PWMA

D10-----------------STBY

D9 ----------------- AIN1

D8 ----------------- AIN2

NONE--------------A01--------------M-

NONE--------------A02--------------M+

D20 ----------------------------------- Channel A

编码减速电机

D21 ----------------------------------- Channel B

5V---------------------------------------5V

GND------------------------------------GND

TB6612模块需要额外的12V电源来外部供电

12V--------------VM

GND------------GND

这只是一个示例接线图,实际的接线可能会根据使用的具体电机和驱动器而有所不同。请根据您的具体硬件和引脚定义来进行正确的连接。

编码电机与普通直流电机的区别就是编码电机带有编码器,可以实时反馈电机运动状态和位置信息,可以实现更精准的控制和定位,普通直流电机没有编码器,只能进行简单的启动和停止。所以编码电机比普通的电机更加精准,能更好的控制电机的运动。

编码电机上的编码器需要额外供电,arduino上恰好有外部输出口,可以直接将编码电机的5v和GND与arduino的5v和GND相连接 接下来我们试一下,控制编码电机正反转

int pwma = 3;
int ain1 = 9;
int ain2 = 8;
int stby = 10;
int pwmb = 5;
int bin1 = 6;
int bin2 = 7;
int led = 13;
void Stop(){
  digitalWrite(ain1,LOW);
  digitalWrite(ain2,LOW);
  digitalWrite(bin1,LOW);
  digitalWrite(bin2,LOW);
}
void up(){
  digitalWrite(ain1,HIGH);
  digitalWrite(ain2,LOW);
  digitalWrite(bin1,HIGH);
  digitalWrite(bin2,LOW);
}
void back(){
  digitalWrite(ain1,LOW);
  digitalWrite(ain2,HIGH);
  digitalWrite(bin1,HIGH);
  digitalWrite(bin2,LOW);
  delay(2000);
}
void setup() {
  // put your setup code here, to run once:
  pinMode(pwma,OUTPUT);
  pinMode(ain1,OUTPUT);
  pinMode(ain2,OUTPUT);
  pinMode(pwmb,OUTPUT);
  pinMode(bin1,OUTPUT);
  pinMode(bin2,OUTPUT);
  pinMode(stby,OUTPUT);
  pinMode(led,OUTPUT);
  digitalWrite(stby,HIGH);
  analogWrite(pwma,255);
  analogWrite(pwmb,255);
  Serial.begin(9600);
}
void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()>0){
    char command = Serial.read();  // 读取蓝牙串口数据
    Serial.println(command);
    switch (command){
      case 'u':
      up();
      delay(2000);
      break;
      case 's':
      Stop();
      break;
      
      case 'b':
      back();
      delay(2000);
      break;
    }

编码减速电机

这里我只接了一个编码电机,因此

int pwmb = 5;

int bin1 = 6;

int bin2 = 7;这部分代码可以不用管。

打开串口监视器,输入’u’,编码电机正转,‘b’,编码电机反转,'s’编码电机停止

完成这部分,我们来试下测速功能

int encoderA = 21;
int encoderB = 20;
volatile int count = 0;
void count_a(){
  if (digitalRead(encoderA)==HIGH){
    if (digitalRead(encoderB)==HIGH){
      count++;
    }
    else{
      count--;
    }
  }
}
void setup() {
  // put your setup code here, to run once:
  Serial.begin(57600);//串口波特率设置为57600
  pinMode(encoderA,INPUT);
  pinMode(encoderB,INPUT);
  attachInterrupt(2,count_a,CHANGE);
  
  
}
void loop() {
  // put your main code here, to run repeatedly:
  delay(2000);
  Serial.println(count);
}

测速方式采用的是单倍频测速,还有双倍频和四倍频可以采用

打开串口监视器,将波特率设为57600,用手转动电机,可以看到

说明运行成功了!!!

以上内容为用户投稿,如有侵权请联系我们删除!