原创 将DRV8833双电机驱动器模块与Arduino连接电路

2023-2-22 11:44 3739 8 8 分类: MCU/ 嵌入式

如果您对建造机器人感兴趣,那么您肯定需要学习如何控制直流电机的速度和方向,而在我们之前的一个教程中,我们使用流行的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 电机驱动器 IC

DRV8833 是一款双通道电机驱动 IC,能够驱动两个双向电机或一个单步进电机。每个 H 桥的输出驱动器块由配置为 H 桥的 N 沟道功率 MOSFET 组成,以驱动电机绕组。每个 H 桥包括调节或限制绕组电流的电路。该 IC 还设计用于驱动感性负载,例如继电器、螺线管、直流和双极步进电机。

DRV8833 电机驱动器 IC

DRV8833 电机驱动 IC 的内部结构如上所示,它取自 设备的DRV8833 数据集。该器件集成了两个 NMOS H 桥和电流调节电路。DRV8833 可采用 2.7V 至 10.8V 的电源电压供电,并可提供高达 1.5A RMS 的输出电流。该器件还包括低功耗睡眠模式,可让系统在不驱动电机时节省电能。

DRV8833 电机驱动器模块引脚排列

DRV8833 电机驱动器模块的引脚分配如下所示。DRV8833 模块共有 12 个引脚,可连接到微控制器和电机。

DRV8833 模块引出线

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 电机驱动器

正如您在上图中看到的,在模块中间有我们的 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 接口的示意图如下所示。

带 Arduino 的 DRV8833 双电机驱动器模块的电路图

在示意图中,我们将 DRV8833 与 Arduino Pro Mini 连接起来,根据示意图,我们将引脚 9、6、5、3 连接到模块的 IN1、IN2、IN3、IN4 引脚,输出引脚连接到电机。一个开关连接到 Arduino Pro Mini 的引脚 10;此开关用于改变旋转方向。为了控制电机的速度,我们有两个电位器,我们用 8.4V 电池为电路供电。最后,还有一个开关来控制电机的方向。模块的硬件设置如下所示。

带 Arduino 的 DRV8833 模块

用于将 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

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条