如果您对建造机器人感兴趣,那么您肯定需要学习如何控制直流电机的速度和方向,而在我们之前的一个教程中,我们使用流行的L293D 电机驱动器 IC 和 ESP32做到了这一点。但还有另一种名为 DRV8833 的 IC 也提供双驱动电机驱动器解决方案,它比 L293D IC 便宜。因此,在这个项目中,我们将DRV8833 电机驱动器 IC与Arduino连接起来,同时我们将了解有关该 IC 的所有详细信息。这里我们使用了Arduino Pro Mini,但是任何 Arduino 模型都可以用来构建这个项目。
用微控制器控制直流电机为了完全控制电机,我们需要控制电机的速度和方向,为此我们需要使用脉冲宽度调制或 PWM 技术来控制速度,我们将使用内部H -桥控制电机的方向。
PWM - 电机速度控制
当我们谈论直流电机以改变直流电机的速度时,我们需要改变施加到电机的输入电压的幅值。一种常见的技术是 PWM(脉冲宽度调制)。在 PWM 中,施加的电压通过发送一系列脉冲来调节,因此输出电压与微控制器生成的脉冲宽度成比例,也称为占空比。
占空比越高,施加到直流电机的平均电压就越高(导致速度越高),占空比越短,施加到直流电机的平均电压就越低(导致速度越低)。
H桥电机方向控制
要改变直流电机的旋转方向,您需要改变电源的极性。一种常用的技术是使用 H 桥电机驱动器。H桥电机驱动器由四个开关(通常是 MOSFET)组成,以一定的形式排列,电机连接到排列的中心,形成类 H 结构通过关闭/启用两个相反的开关,我们可以改变流动电流的方向,从而改变旋转方向。
DRV8833 电机驱动器 ICDRV8833 是一款双通道电机驱动 IC,能够驱动两个双向电机或一个单步进电机。每个 H 桥的输出驱动器块由配置为 H 桥的 N 沟道功率 MOSFET 组成,以驱动电机绕组。每个 H 桥包括调节或限制绕组电流的电路。该 IC 还设计用于驱动感性负载,例如继电器、螺线管、直流和双极步进电机。
DRV8833 电机驱动 IC 的内部结构如上所示,它取自 设备的DRV8833 数据集。该器件集成了两个 NMOS H 桥和电流调节电路。DRV8833 可采用 2.7V 至 10.8V 的电源电压供电,并可提供高达 1.5A RMS 的输出电流。该器件还包括低功耗睡眠模式,可让系统在不驱动电机时节省电能。
DRV8833 电机驱动器模块引脚排列DRV8833 电机驱动器模块的引脚分配如下所示。DRV8833 模块共有 12 个引脚,可连接到微控制器和电机。
EEP这是模块的睡眠引脚。逻辑高启用设备,逻辑低进入低功耗睡眠模式并重置所有
OUT(1-2)内部 H 桥 A 的 Outpu1 和 Output2。
OUT(3-4)内部 H 桥 B 的 Outpu1 和 Output2。
IN(1-2)内部 H 桥 A 的 Input1 和 Input2。
IN(3-4)内部 H 桥 B 的 Input3 和 Input4。
ULT IC的故障引脚。处于故障状态(过温、过流)时为逻辑低电平
VCCIC 的电源引脚。最大工作电压 11.8V。
GNDIC 的接地引脚将其连接到电源地。
DRV8833 电机驱动器 IC 模块零件DRV8823 IC 的零件标记如下所示,该模块由通用组件制成,如下所示。
正如您在上图中看到的,在模块中间有我们的 DRV8833 IC,电路板上主要有三个旁路电容器,一个 10uF 钽电容器用于输入电源。一个用于 VINT 引脚的 2.2uF 电容器和一个用于 VCP 引脚的 0.1uF 电容器。最后,我们有板载电源指示灯及其 4.7K 限流电阻。
DRB8833模块原理图DRV8833模块的内部原理图如下所示,模块电路图非常简单,PCB上的元器件很少。
正如您在原理图中看到的那样,显示了所有旁路电容器与 IC 的连接,我们还显示了排针的连接,在排针旁边,您可以看到 PCB 中针脚的名称。PCB上还有一个带限流电阻的LED作为指示灯。
有关 DRV8833 电机驱动器 IC 的常见问题解答L293D 和 DRV8833 有什么区别?L293D和DRV8833都是电机驱动IC,但也有区别。这两款 IC 的最大电流均为 1.5A,但 DRV8833 IC 的工作电压为 11.8V,而 L293D 的工作电压为 40V。
我可以用 DRV8833 运行步进电机吗?是的,DRV8833 IC 可以驱动步进电机。但是此 IC 无法进行微步进,因为您需要专用的驱动器 IC。
我可以将 4 个电机连接到 DRV8833 吗?DRV8833 设计用于驱动两个直流电机。如果要驱动4个电机,牺牲方向控制或许还是可行的。
简单电路图:DRV8833 与 Arduino 接口DRV8833 模块与 Arduino 接口的示意图如下所示。
在示意图中,我们将 DRV8833 与 Arduino Pro Mini 连接起来,根据示意图,我们将引脚 9、6、5、3 连接到模块的 IN1、IN2、IN3、IN4 引脚,输出引脚连接到电机。一个开关连接到 Arduino Pro Mini 的引脚 10;此开关用于改变旋转方向。为了控制电机的速度,我们有两个电位器,我们用 8.4V 电池为电路供电。最后,还有一个开关来控制电机的方向。模块的硬件设置如下所示。
用于将 DRV8833 电机驱动器 IC 与 Arduino 接口的 Arduino 代码下面给出了使用 PWM 进行 Arduino 直流电机速度控制的完整代码 ,这里我们将详细解释代码。
现在我们已经清楚地了解 DRV8833 模块的工作原理,我们可以编写一些代码来控制电机的速度和方向。
我们通过定义电机驱动器和开关的所有引脚来开始我们的代码。
#define mode_pin 10 #define IN1_PIN 9 #define IN4_PIN 6 #define IN3_PIN 5 #define IN4_PIN 3接下来,我们有设置功能,在设置功能中,我们将 PWM 引脚设置为输出,将开关引脚设置为输入,并将所有引脚设置为低电平。
void setup() { pinMode(IN1_PIN, OUTPUT); pinMode(IN4_PIN, OUTPUT); pinMode(IN3_PIN, OUTPUT); pinMode(IN4_PIN, OUTPUT); pinMode(mode_pin, INPUT); digitalWrite(IN1_PIN, LOW); digitalWrite(IN4_PIN, LOW); digitalWrite(IN3_PIN, LOW); digitalWrite(IN4_PIN, LOW); }接下来,我们有循环功能。在循环功能中,我们检查开关位置,如果开关处于高状态,我们顺时针旋转电机,如果开关状态为低,我们逆时针旋转电机。
void loop() { int sensorValue = analogRead(A0); int sensorValue1 = analogRead(A1); if (digitalRead(mode_pin) == LOW) { digitalWrite(IN3_PIN, LOW); analogWrite(IN4_PIN, sensorValue); digitalWrite(IN1_PIN, LOW); analogWrite(IN4_PIN, sensorValue1); } if (digitalRead(mode_pin) == HIGH) { digitalWrite(IN4_PIN, LOW); analogWrite(IN3_PIN, sensorValue); digitalWrite(IN4_PIN, LOW); analogWrite(IN1_PIN, sensorValue1); } }我们还使用 analogRead() 和 analogWrite() 函数读取 ADC 值并将该值写入 PWM 信号。
本文来源IC先生网www.mrchip.cn,请勿转载。
作者: 080103218, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3924187.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论