文章目录
1 前言
?? Hi,大家好,这是丹成学长的毕设系列文章!
?? 任何问题都可以问学长哦!
近两年来,各学校对毕业设置的要求越来越高,难度也越来越大… 毕业设计需要时间和精力。即使是一些问题,即使是专业教师或硕士学生也需要很长时间。因此,一旦发现问题,必须提前做好准备,以免措手不及。
为了分享一个教程,让大家通过毕业顺利,精力最少。
??
这几天有同学在做课设,不懂步进电机的控制原理,来找学长解答,这里专门写一篇文章解答!
??
https://gitee.com/kaaxuu/warehouse-seven-warehouse/blob/master/iot/README.md
2 电机工作原理
步进电机使用带齿的轮子和电磁体一次旋转轮子。
发送的每个HIGH脉冲使线圈通电,吸引齿轮的最近齿,并逐步驱动电机。
脉冲对这些线圈的影响很大。
- 确定电机的旋转方向。
- 脉冲的频率决定了电机的速度。
- 确定电机将旋转多远(多少步)的脉冲数。
3 DRV步进式电机驱动器芯片
该模块的核心是德州仪器(TI)微步进驱动芯片– DRV8825.它的体积很小(只有0.8英寸×0.6寸),但还是挺厉害的。 的。
DRV8825步进电机驱动器高达45V每个线圈的最大输出电流为2.2A。
该驱动程序具有内置转换器,操作方便。这可以将控制销的数量减少到只有两个,一个用于控制步进,另一个用于控制旋转方向。
驱动程序提供六种不同的步进分辨率。全步、半步、四分之一步、八、十六、三十二分之一步。
4 DRV8825电机驱动器引脚
DRV8825驱动程序有16个引脚,可与外界连接。连接如下:
4.1 选择微步引脚
DRV8825驱动程序允许微步进,允许中间步进。这是通过中等电流水平通电到线圈来实现的。 例如,如果我们选择以四分之一步模式驱动每转1.8°或200步的NEMA 17.电机每转800微步。
DRV8825驱动器有三个步长(分辨率)选择器输入,即: M0,M1和M2.通过为这些引脚设置适当的逻辑电平,我们可以将电机设置为六步分辨率之一。
这三个微步选择引脚被内部下拉电阻拉到低电平。因此,如果断开,电机将全步运行。
4.2 控制输入引脚
DRV8825有两个控制输入,即。STEP和DIR。
STEP控制电机的微步。发送到引脚的每一个HIGH脉冲通过微步选择引脚设置的微步数步进电机。脉冲越快,电机旋转越快。
DIR控制电机的旋转方向。将其拉顺时针旋转驱动电机,拉低,逆时针旋转驱动电机。
如果你只想让电机向单个方向旋转,你可以DIR直接相应连接VCC或GND。
4.3 限流
在使用电机之前,我们需要做一些小的调整。限制流经步进线圈的最大电流,防止其超过电机的额定电流。
DRV8825驱动器上有一个微调电位器,可限制的微调电位器。您应该将电流限制设置为等于或小于电机的额定电流。
将通过测量测量 ref引脚上的电压(Vref)设置电流限制。
查看您的步进电机数据表。写下它的额定电流。在我们的实验设置验设置NEMA 17 200steps / rev,12V 350mA。 断开三个微步选择引脚,使驱动器进入全步模式。 不给STEP输入计时,将电机固定在固定位置。 调整时,测量金属微调电位器本身的电压(Vref)。 调整公式Vref电压电流限制= Vref x 2 例如,如果电机的额定电流是350mA,可将参考电压调整为0.175V。
5 Arduino 控制DRV步进式电机驱动器
连接非常简单。首先将是。RST引脚与相邻的相连SLP / SLEEP并将两者都连接起来Arduino的5V,保持驱动器启用。
将GND LOGIC引脚连接到Arduino接地引脚。DIR和STEP输入引脚分别连接Arduino#2和#3数字输出引脚。
连接步进电机B2,B1,A1和A二引脚。实际上,DRV8825的布局非常方便,可以与多个双极电机上的4针连接器相匹配,所以这不是问题。
控制代码
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
}
6 AccelStepper库
在没有库的情况下控制步进器非常适合简单的单电机应用。但是,如果要控制多个步进器,则需要一个库。
- 加减速。
- 多个同时步进器,每个步进器具有独立的并发步进。
该库未包含在Arduino IDE中,因此您需要首先安装它。
使用实例,这是一个简单的程序,它使步进电机沿一个方向加速,然后减速以使其静止。电动机旋转一圈后,它将改变旋转方向。而且它不断地重复做。
// 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();
}
🧿
https://gitee.com/kaaxuu/warehouse-seven-warehouse/blob/master/iot/README.md