锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【毕设教程】如何使用单片机控制步进电机

时间:2023-12-19 07:07:08 系列微调电位器

文章目录

  • 1 前言
  • 2 电机工作原理
  • 3 DRV步进式电机驱动器芯片
  • 4 DRV8825电机驱动器引脚
    • 4.1 选择微步引脚
    • 4.2 控制输入引脚
    • 4.3 限流
  • 5 Arduino 控制DRV步进式电机驱动器
  • 6 AccelStepper库

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库

在没有库的情况下控制步进器非常适合简单的单电机应用。但是,如果要控制多个步进器,则需要一个库。

AccelStepper 高级步进电机库,它支持:

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

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

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

// Include the AccelStepper Library
#include 

// 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

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章