Arduino 您所在的位置:网站首页 直流减速电机频率 Arduino

Arduino

2024-07-12 13:11| 来源: 网络整理| 查看: 265

写在前面:要驱动电机首先需要通过单片机输入控制信号到TB6612电机驱动板再通过TB6612驱动直流电机,所以先了解这仨兄弟再进行程序编写。有任何不清楚的地方可以在评论区提出哦!!如果你所使用的型号有所不同,理论上只需在代码稍微修改下即可。

目录

1.如何让直流电机转动

1.1 如何实现电机调速:

 1.2 PWM介绍:

 2.TB6612电机驱动板的作用

3.mage2560控制电机

 3.1:TB6612跟mage2560接线

3.2:程序编写

4.电机测速

        4.1:测速原理

 4.2:mage2560接收转速信号

              4.2.1:接线

        4.3:程序编写

1.如何让直流电机转动 说起来简单,只需要将电机线正负极接上12V的电压就行咯! 1.1 如何实现电机调速:

        1.如果我们可以调节施加在电机上面的电压大小, 即可实现直流电机调速。当然,由于Arduino可以输出PWM信号,在此我们使用PWM来控制电压大小;

        2.改变施加电机上面电压的极性,即可实现电机正反转。

1.2 PWM介绍:

PWM中文叫做脉冲宽度调制,通过调节脉冲宽度改变占空比以改变平均输出电压

占空比:是一个脉冲周期内,高电平的时间与整个周期时间的比例

模拟出相应电压  2.TB6612电机驱动器的作用

 电机驱动器的作用主要有仨:

精确控制:驱动器可以精确地控制电机的速度、位置和扭矩,以满足各种复杂的应用需求。保护电机:驱动器可以监测电机的运行状态,如电流、电压和温度等,当检测到异常情况时,可以及时切断电源,以保护电机免受损坏。提供多种控制方式:驱动器可以提供多种控制方式,如模拟量控制、脉冲控制、现场总线控制等,以满足不同应用场景的需求。增强系统灵活性:通过驱动器,可以将电机与上位机或其他控制系统进行连接,实现更高级别的自动化控制和远程监控。

TB6612能通过额外的12V电源,来保证电机有充足电压驱动。

TB6612带稳压模块

2.1.理论上TB6612接上电机 同时 电源输入接口接上12V电源后,即可通过单片机输入PWM信号来驱动电机并控制速度,但是由于TB6612限制需要STBY引脚置1后,才会有PWM信号输入(才能驱动电机),由此列出真值表↓

TB6612真值表

2.3.而从上述 真值表 我们可以知道,TB6612的IN引脚的 高低电平决定了电机转动状态,IN1高电平正转 IN2高电平反转,IN为同值时制动停止 所以我们需要通过单片机输入相应的信号控制电机,如图所示,TB6612上面正好有两对IN引脚:

        AIN1AIN2 和BIN1 BIN2 分别连接 AO1AO2 BO1BO2 也就是俩电机正负极 ,来输入控制信号。此时就该考虑如何使用单片机输入控制信号。↓

3.mage2560控制电机

The first: TB6612的IN引脚 PWM引脚 需要信号输入,以及STBY置1。所以,需要在mage2650找到一个PWM输出口以及数字信号输出口。

Arduino_mage2560  3.1:TB6612跟mage2560接线

             ps:在此之前 请先准备一些公对母杜邦线,同时TB6612需要外接12V电源给电机供电

TB6612---mage2560接线 TB6612丝印标识mage2560主板引脚PWMA3(PWM)AIN24AIN15STBY7BIN18BIN29PWMB10(PWM)GNDGND5V(稳压版可向2560供电)5V 3.2:程序编写

     在此请先下载相关的IDE并确保接线准确无误后就可以根据接线编写程序了,思路如下:

定义相关接线引脚初始化各个引脚用PWM俩引脚控制电机转速 使用IN引脚控制电机正反转                              

        实现:(烧录成功后两个电机会以最大速度正转)

//定义引脚名称 #define PWMA 3 //3为模拟引脚,用于PWM控制 #define AIN1 5 #define AIN2 4 #define PWMB 10 //10为模拟引脚,用于PWM控制 #define BIN1 8 #define BIN2 9 #define STBY 7 //2、4、8、12、7为数字引脚,用于开关量控制 #define Voltage A0 //使用模拟引脚 int PwmA, PwmB; double V; void setup() { //TB6612电机驱动模块控制信号初始化 pinMode(AIN1, OUTPUT);//控制电机A的方向,(AIN1, AIN2)=(1, 0)为正转,(AIN1, AIN2)=(0, 1)为反转 pinMode(AIN2, OUTPUT); pinMode(BIN1, OUTPUT);//控制电机B的方向,(BIN1, BIN2)=(0, 1)为正转,(BIN1, BIN2)=(1, 0)为反转 pinMode(BIN2, OUTPUT); pinMode(PWMA, OUTPUT);//A电机PWM pinMode(PWMB, OUTPUT);//B电机PWM pinMode(STBY, OUTPUT);//TB6612FNG使能, 置0则所有电机停止, 置1才允许控制电机 //初始化TB6612电机驱动模块 digitalWrite(AIN1, 1); digitalWrite(AIN2, 0); digitalWrite(BIN1, 1); digitalWrite(BIN2, 0); digitalWrite(STBY, 1); analogWrite(PWMA, 0); analogWrite(PWMB, 0); //初始化串口,用于输出电池电压 Serial.begin(9600); pinMode(Voltage,INPUT); //初始化作为输入端 } /************************************************************************** 函数功能:设置指定电机转速 入口参数:指定电机motor,motor=1(2)代表电机A(B); 指定转速pwm,大小范围为0~255,代表停转和满速 返回 值:无 **************************************************************************/ void SetPWM(int motor, int pwm) { if(motor==1&&pwm>=0)//motor=1代表控制电机A,pwm>=0则(AIN1, AIN2)=(1, 0)为正转 { digitalWrite(AIN1, 1); digitalWrite(AIN2, 0); analogWrite(PWMA, pwm); } else if(motor==1&&pwm=0则(BIN1, BIN2)=(0, 1)为正转 { digitalWrite(BIN1, 0); digitalWrite(BIN2, 1); analogWrite(PWMB, pwm); } else if(motor==2&&pwm


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有