日期: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,用手转动电机,可以看到
说明运行成功了!!!
以上内容为用户投稿,如有侵权请联系我们删除!