我是靠谱客的博主 眯眯眼耳机,最近开发中收集的这篇文章主要介绍l298n电机驱动模块_带DRV8825驱动器模块和Arduino的控制步进电机,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

3faa3e982aa59daf23fc44749d8aef42.png

如果您打算建造自己的3D打印机或CNC机器,则需要控制一堆步进电机。而且,由一个arduino控制所有这些,可能会占用大量的处理时间,并且不会给它留下很多做其他事情的空间。除非您使用独立的专用步进电机驱动器– DRV8825
它只需两个引脚即可控制NEMA 17等双极步进电机的速度和旋转方向。多么酷啊!

您知道步进电机如何工作吗?


步进电机使用带齿的轮和电磁体来使轮一次“一步”旋转。
发送的每个HIGH脉冲都会使线圈通电,吸引齿轮的最近齿,并一步步驱动电动机。

31e873a37273cfdda97ddd2ef20d82ba.png


脉冲这些线圈的方式会极大地影响电动机的性能。

  • 脉冲序列确定电动机的旋转方向。
  • 脉冲的频率决定了电动机的速度。
  • 脉冲数确定电动机将旋转多远(多少步)。

DRV8825步进电机驱动器芯片


该模块的核心是德州仪器(TI)的微步进驱动器芯片– DRV8825。它的体积很小(只有0.8英寸×0.6英寸),但仍然有力气。

2cc748b9e77b3340d6f7bd0ec95e8913.png


DRV8825步进电动机驱动器具有高达45V的输出驱动能力,可让您控制一个双极步进电动机,每个线圈的最大输出电流为2.2A。


该驱动程序具有内置转换器,易于操作。这样可以将控制销的数量减少到仅2个,一个用于控制步进,另一个用于控制旋转方向。


驱动程序提供6种不同的步进分辨率。全步,半步,四分之一步,八,十六和三十二分之一步。


DRV8825电机驱动器引脚排列


DRV8825驱动程序共有16个引脚,可将其与外界连接。连接如下:

7948f9b650c7d592f9171e153b3bc662.png


让我们一一熟悉所有的引脚。


电源连接引脚


与其他典型的步进电机驱动器不同,DRV8825仅具有一个电源连接。

1c132fb52ce532dbb599e3b71392e191.png

vmot GND MOT 为电动机提供电源,该电源可以为8.2V至45V。
该模块没有任何逻辑电源引脚,因为DRV8825从内部3V3稳压器获取电源。

但是,您应该将微控制器(如:arduino)的ground与接9号引脚,既GND LOGIC

根据参考资料的数据表,电动机电源需要在靠近电路板的地方使用适当的去耦电容器,以维持4A的电流。

警告:
该驱动器板上装有低ESR陶瓷电容器,因此容易受到电压尖峰的影响。
在某些情况下,这些尖峰会超过45V(DRV8825的最大额定电压),可能会永久损坏电路板甚至电动机。
保护驱动器免受此类尖峰影响的一种方法是在电动机电源引脚之间放置一个大的100µF(至少47µF)电
解电容器。

微步选择引脚

DRV8825驱动程序通过允许中间步进位置来允许微步进。这是通过以中等电流水平向线圈通电来实现的。 例如,如果您选择以四分之一步模式驱动每转1.8°或200步的NEMA 17,则电动机每转将给出800微步。

90c0e2b3d953a8e2fe9bb7730979af03.png


DRV8825驱动器具有三个步长(分辨率)选择器输入,即: M0,M1和M2。通过为这些引脚设置适当的逻辑电平,我们可以将电动机设置为六个步进分辨率之一。

M0M1M2微步分辨率
全步
半步
1/4步
1/8步
1/16步
1/32步
1/32步
1/32步


这三个微步选择引脚被内部下拉电阻拉至低电平,因此,如果我们将其断开,电动机将以全步模式运行。


控制输入​​引脚


DRV8825具有两个控制输入,即。STEP和DIR。

cde82c9f0c2cf0cecc9cb22b193cb2de.png

STEP控制电机的微步。发送到该引脚的每个HIGH脉冲都会通过微步选择引脚设置的微步数来步进电动机。脉冲越快,电动机旋转得越快。

DIR控制电动机的旋转方向。将其拉高,将驱动电机顺时针旋转,将其拉低,将驱动电机逆时针旋转。


如果仅希望电动机沿单个方向旋转,则可以将DIR相应地直接连接到VCCGND

控制电源状态的引脚


DRV8825具有三个不同的输入,用于控制其电源状态。ENRSTSLP

5c5659577e6bb6c559fe462cb4cffb74.png

EN引脚为低电平有效输入,当拉低(逻辑0)时,DRV8825驱动器使能。默认情况下,此引脚被拉低,因此驱动器始终处于使能状态,除非您将其拉高。

SLP/SLEEP引脚为低电平有效输入。这意味着将该引脚拉至低电平可使驱动器进入睡眠模式,从而将功耗降至最低。特别是在不使用电动机以节省功率时,可以调用此方法。

RST也是低电平有效输入。将其拉低时,将忽略所有STEP输入,直到将其拉高。它还通过将内部转换器设置为预定义的Home状态来重置驱动程序。原始状态基本上是电动机启动的初始位置,并且它取决于微步分辨率。


故障检测引脚


DRV8825还具有一个FAULT 由于过电流保护或热关断,每当禁用H桥FET时,该输出就会驱动为低电平。

331b24efeda8966e2581e177bf39edf0.png


实际上,故障引脚与SLEEP引脚短路,因此,每当故障引脚驱动为LOW时,整个芯片就会被禁用。并保持禁用状态,直到移除或重新施加RESET或Motor Voltage VMOT。

输出引脚


DRV8825电机驱动器的输出通道通过以下方式分解到模块的边缘: B2,B1,A1A2 针脚。

4407b9e2f3b3b7f4c8c27e9cf099e4f0.png


您可以将电压在8.2V至45V之间的任何双极步进电机连接到这些引脚。
模块上的每个输出引脚均可为电机提供高达2.2A的电流。但是,提供给电动机的电流量取决于系统的电源,冷却系统和电流限制设置。

冷却系统–散热器


DRV8825驱动器IC的过多功耗会导致温度升高,该温度升高可能超出IC的容量,可能会损坏自身。


即使DRV8825驱动器IC的每个线圈的最大额定电流为2.2A,该芯片也只能为每个线圈提供约1.5A的电流而不会过热。


为了实现每个线圈超过1.5A的电流,需要使用散热器或其他冷却方法。

dca6a8f6690e6e1099e7b5389e45a9b4.png


DRV8825驱动器通常带有散热器。建议您在使用驱动程序之前先安装它。

限流


在使用电动机之前,我们需要进行一些小的调整。我们需要限制流经步进线圈的最大电流,并防止其超过电机的额定电流。

2b88ee28988ad250c21f86ec3896fcdf.png


DRV8825驱动器上有一个微调电位器,可用于设置电流限制。您应将电流限制设置为等于或小于电动机的额定电流。


要进行此调整,有两种方法:

方法1:


在这种方法中,我们将通过测量“ ref”引脚上的电压(Vref)来设置电流限制。

  1. 查看您的步进电机的数据表。记下它的额定电流。在我们的实验设置情况下,我们使用NEMA 17 200steps / rev,12V 350mA。
  2. 断开三个微步选择引脚,使驱动器进入全步模式。
  3. 不给STEP输入计时,将电动机固定在固定位置。
  4. 调整时,测量金属微调电位器本身的电压(Vref)。
  5. 使用公式调整Vref电压电流限制= Vref x 2
    例如,如果电动机的额定电流为350mA,则可以将参考电压调整为0.175V。

dd3b705eed01ba426343b51b56f91b6e.png
提示:
一种简单的调整方法是在金属螺丝刀的轴上使用一个鳄鱼夹,然后将其固定在万用表上,
以便您可以同时使用螺丝刀测量和调整电压。

方法2:

在这种方法中,我们将通过测量流经线圈的电流来设置电流极限。

  1. 查看您的步进电机的数据表。记下它的额定电流。在我们的情况下,我们使用NEMA 17 200steps / rev,12V 350mA。
  2. 断开三个微步选择引脚,使驱动器进入全步模式。
  3. 不给STEP输入计时,将电动机固定在固定位置。
  4. 将电流表与步进电机上的一个线圈串联,然后测量实际电流。
  5. 拿起一把小螺丝刀,调节电流限制电位器,直到达到额定电流。

3f1d161fa82f3ada8074b52cfa183abe.png
提示:
如果更改逻辑电压(VDD),则需要再次执行此调整


用Arduino UNO接DRV8825步进电机驱动器


我们了解了有关驱动器的所有知识,现在将其连接到我们的Arduino。


连接非常简单。首先将RST引脚连接到相邻的SLP / SLEEP引脚,并将二者都连接到Arduino的5V,以保持驱动器启用。


GND LOGIC引脚连接到Arduino的接地引脚。DIRSTEP输入引脚分别连接到Arduino上的#2#3数字输出引脚。


将步进电机连接到B2,B1,A1和A2引脚。实际上,DRV8825的布局很方便,可以与多个双极电机上的4针连接器匹配,因此这不是问题。

警告:
驱动器通电时连接或断开步进电机会损坏驱动器。
切记断开微步选择引脚,以使电机以全步模式运行。
最后,将电动机电源连接到VMOT和GND MOT引脚。
切记在靠近电路板的电动机电源引脚之间放置一个较大的100pF去耦电解电容。

3e96785707e6d1c8e8dd559936efc332.png

Arduino代码–基本示例


下图将使您对如何使用DRV8825步进电机驱动器控制双极步进电机的速度和旋转方向有完整的了解,并可作为更实际的实验和项目的基础。

void setup()
{
	// Declare pins as Outputs
	pinMode(stepPin, OUTPUT);
	pinMode(dirPin, OUTPUT);
}
void loop()
{
	// Set motor direction clockwise
	digitalWrite(dirPin, HIGH);

	// Spin motor slowly
	for(int x = 0; x < stepsPerRevolution; x++)
	{
		digitalWrite(stepPin, HIGH);
		delayMicroseconds(2000);
		digitalWrite(stepPin, LOW);
		delayMicroseconds(2000);
	}
	delay(1000); // Wait a second
	
	// Set motor direction counterclockwise
	digitalWrite(dirPin, LOW);

	// Spin motor quickly
	for(int x = 0; x < stepsPerRevolution; x++)
	{
		digitalWrite(stepPin, HIGH);
		delayMicroseconds(1000);
		digitalWrite(stepPin, LOW);
		delayMicroseconds(1000);
	}
	delay(1000); // Wait a second
}


代码说明:
草图从定义DRV8825的STEP&DIR引脚连接到的Arduino引脚开始。我们也定义stepsPerRevolution。进行设置以符合您的步进电机规格。

const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;


在代码的设置部分,所有电机控制引脚都声明为数字输出。

pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);

在循环部分中,我们缓慢地顺时针旋转电动机,然后以一秒的间隔快速逆时针旋转电动机。

控制旋转方向:为了控制电动机的旋转方向,我们将DIR引脚设置为HIGH或LOW。高输入将使电动机顺时针旋转,而低输入将使电动机逆时针旋转。

digitalWrite(dirPin, HIGH);

控制速度:电动机的速度取决于我们发送到STEP引脚的脉冲的频率。脉冲越高,电动机运行得越快。脉冲不过是将输出拉为高电平,等待一会儿,然后将其拉低,然后再次等待。通过更改两个脉冲之间的延迟,可以更改这些脉冲的频率,从而更改电动机的速度。

for(int x = 0; x < stepsPerRevolution; x++) {
	digitalWrite(stepPin, HIGH);
	delayMicroseconds(1000);
	digitalWrite(stepPin, LOW);
	delayMicroseconds(1000);
}


Arduino Code – 使用AccelStepper库


在没有库的情况下控制步进器非常适合简单的单电机应用。但是,如果要控制多个步进器,则需要一个库。
因此,在下一个实验中,我们将使用称为AccelStepper库的高级步进电机库。它支持:

  • 加减速。
  • 多个同时步进器,每个步进器具有独立的并发步进。

该库未包含在Arduino IDE中,因此您需要首先安装它。


库安装


要安装库,请导航至“Sketch”>“Include Library”>“Manage Libraries...”,等待库管理器下载库索引并更新已安装库的列表。

35ec7afbfcc6780681d77c83466566d4.png


输入“ accelstepper”以过滤搜索。单击第一个条目,然后选择“安装”。

4dac107abd8e6b864d0ca1a8226d2705.png


Arduino代码


这是一个简单的程序,它使步进电机沿一个方向加速,然后减速以使其静止。电动机旋转一圈后,它将改变旋转方向。而且它不断地重复做。

// Include the AccelStepper Library
#include <AccelStepper.h>

// Define pin connections
const int dirPin = 2;
const int stepPin = 3;

// Define motor interface type
#define motorInterfaceType 1

// Creates an instance
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

void setup() {
	// set the maximum speed, acceleration factor,
	// initial speed and the target position
	myStepper.setMaxSpeed(1000);
	myStepper.setAcceleration(50);
	myStepper.setSpeed(200);
	myStepper.moveTo(200);
}

void loop() {
	// Change direction once the motor reaches target position
	if (myStepper.distanceToGo() == 0) 
		myStepper.moveTo(-myStepper.currentPosition());

	// Move the motor one step
	myStepper.run();
}

代码说明:
我们首先包括新安装的AccelStepper库。

#include <AccelStepper.h>


我们定义了DRV8825的STEPDIR引脚连接到的Arduino引脚。我们还将设置motorInterfaceType为1。(1表示带有StepDirection引脚的外部步进驱动器)

// Define pin connections
const int dirPin = 2;
const int stepPin = 3;

// Define motor interface type
#define motorInterfaceType 1

接下来,我们创建一个名为 myStepper 的步进器实例。

AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);

在设置功能中,我们首先将电动机的最大速度设置为1000。然后,我们为电动机设置一个加速因子,以将加速度和减速度添加到步进电动机的运动中。

接下来,我们将常规速度设置为200,并将其移动到200(由于NEMA 17每转移动200步)。

void setup() {
	myStepper.setMaxSpeed(1000);
	myStepper.setAcceleration(50);
	myStepper.setSpeed(200);
	myStepper.moveTo(200);
}

在循环功能中,我们使用If语句检查电机distanceToGo到达目标位置(由设置)之前需要行驶多远(通过读取属性moveTo)。一旦distanceToGo达到零,我们将通过将moveTo位置更改为当前位置的负值来沿相反方向移动电动机。

现在,在循环的底部,您会注意到我们已经调用了一个run()函数。这是最重要的功能,因为直到执行此功能,步进器才会运行。

void loop() {
	if (myStepper.distanceToGo() == 0) 
		myStepper.moveTo(-myStepper.currentPosition());

	myStepper.run();
}

最后

以上就是眯眯眼耳机为你收集整理的l298n电机驱动模块_带DRV8825驱动器模块和Arduino的控制步进电机的全部内容,希望文章能够帮你解决l298n电机驱动模块_带DRV8825驱动器模块和Arduino的控制步进电机所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部