电机驱动的学习笔记

电机驱动的学习笔记常见双 H 桥电机驱动模块 H 桥电路通常包含四个独立控制的开关元件 通常用于驱动电流较大的负载 比如电机 如图 这里有四个开关元件 Q1 Q2 Q3 Q4 另外还有一个直流电机 M 我们可以通过 对 Q 开关的控制 来驱动直流电机 而其中的正转和反转是人为规定的方向 例如正转

大家好,我是讯享网,很高兴认识大家。

常见双H桥电机驱动模块:

H桥电路通常包含四个独立控制的开关元件,通常用于驱动电流较大的负载,比如电机。如图:


讯享网

这里有四个开关元件Q1,Q2,Q3,Q4,另外还有一个直流电机M。我们可以通过 对Q开关的控制,来驱动直流电机。而其中的正转和反转是人为规定的方向。

例如正转:

  • 打开Q1和Q4
  • 关闭Q2和Q3 

此时假设电机正转,电流依次流过Q1,M,Q4。如下图:

应用:

实际应用时,市面上常用的电机驱动的型号,通常接上电源,电机,通过控制信号就可以驱动电机了。

由于网上找到的资料为L298N模块为以下,我们以此作为了解:

其属于H桥集成电路,其输出电流为2A,最高为4A。最高工作电压为50V.其输入端可以与带单片机直接相连,从而通过单片机对其进行控制。实现电机的驱动。

这是网上找到的模块介绍图:

  •  OutputA\B:用于连接两个电机
  • 5V enable:如果使用的输入电源为大于12v的电源,要将跳帽线移除,反之,短接其可以提供5v的电源输出
  • +5V power:如果输入电源小于12V且短接,可以输出5V的电源
  • 连接电机电源,最大为35V.输入电源大于12V时,为了安全,要将5V enble针脚上的跳帽线移除。
  • A/B enble:可以用于输入PWM脉宽调制信号对电机进行调速控制:

PWM频率:

指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期);

也就是说一秒钟PWM有多少个周期

单位:HZ

PWM周期:

周期=1/频率

例如:59HZ就相当于20ms,也就是说,一秒有50次周期

占空比:

指一个脉冲周期中,高电平的时间与整个周期时间比例。

在单片机中,我们知道IO口输出的是数字信号,IO口只能输出高电平和低电平

假设高电平为5V,低电平为0V.那么通过改变IO口输出的方波的占空比,(即通过对断开和连接时间的控制)理论上可以输出0-5V之间的任意大的电压值。

比方说,占空比为50%,即高电平时间的一半,低电平时间的一半。在此频率下,就可以得到2.5v的输出电压。

  • 控制: 控制电机全速运动:

电机对应的两个逻辑输入口,全速则不用拔掉跳线帽。此时使能端为5V的电机满占空比驱动,全速运行

 

 上图为本次小车使用的电机驱动:

 对于逻辑输入口:

  • ENA接5V,使能电机A
  • ENA接地,电机A不转
  • IN1接5V ,IN2接地 电机A正转
  • IN1接地 IN2接5V 电机反转
  • (对于电机B,则是对于相应的IN3 ,IN4)

下面通过网上找到的一段关于电机驱动代码进行分析学习:

Arduino智能小车——测试篇_不懂音乐的欣赏者的博客-CSDN博客_arduino小车代码

//定义五中运动状态 #define STOP 0 #define FORWARD 1 #define BACKWARD 2 #define TURNLEFT 3 #define TURNRIGHT 4 //定义需要用到的引脚 int leftMotor1 = 4; int leftMotor2 = 5; int rightMotor1 = 6; int rightMotor2 = 7; void setup() { // put your setup code here, to run once: //设置控制电机的引脚为输出状态 pinMode(leftMotor1, OUTPUT); pinMode(leftMotor2, OUTPUT); pinMode(rightMotor1, OUTPUT); pinMode(rightMotor2, OUTPUT); } void loop() { // put your main code here, to run repeatedly: int cmd; for(cmd=0;cmd<5;cmd++)//依次执行向前、向后、向左、想有、停止四个运动状态 { motorRun(cmd); delay(2000);//每个命令执行2s } } //运动控制函数 void motorRun(int cmd) { switch(cmd){ case FORWARD: digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, HIGH); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, HIGH); break; case BACKWARD: digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); break; case TURNLEFT: digitalWrite(leftMotor1, HIGH); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, HIGH); break; case TURNRIGHT: digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, HIGH); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); break; default: digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, LOW); digitalWrite(rightMotor1, LOW); digitalWrite(rightMotor2, LOW); } }

讯享网

分析:

  • 代码开头通过宏定义,对状态有数字代替,让代码更简便。
  • 此代码不管电机的转速,所以ENA,ENB两组引脚默认输出高电平。只需要控制IN1,IN2,IN3,IN4两组引脚
  • 当电机的两个输入端的电压差满足一定条件时电机才会转动。控制小车运动时,只需将同一边两个引脚设置成不同的电压即可。
  • 为了提高函数的使用性,其代码将控制小车运动状态的语句封装在函数里,方便调用。

小讯
上一篇 2025-03-16 20:37
下一篇 2025-03-08 17:33

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/116366.html