1 前言

这几天有同学在做课设,对步进电机控制原理不理解,来寻求学长解答,这里专门写一篇文章进行解答!

单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052

2 电机工作原理

步进电机使用带齿的轮和电磁体来使轮一次“一步”旋转。

发送的每个HIGH脉冲都会使线圈通电,吸引齿轮的最近齿,并一步步驱动电动机。

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

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

3 DRV8825步进电机驱动器芯片

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

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

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

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

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 控制DRV8825步进电机驱动器

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

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

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

控制代码

void setup()
{// Declare pins as OutputspinMode(stepPin, OUTPUT);pinMode(dirPin, OUTPUT);
}
void loop()
{// Set motor direction clockwisedigitalWrite(dirPin, HIGH);// Spin motor slowlyfor(int x = 0; x < stepsPerRevolution; x++){digitalWrite(stepPin, HIGH);delayMicroseconds(2000);digitalWrite(stepPin, LOW);delayMicroseconds(2000);}delay(1000); // Wait a second// Set motor direction counterclockwisedigitalWrite(dirPin, LOW);// Spin motor quicklyfor(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 <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 positionmyStepper.setMaxSpeed(1000);myStepper.setAcceleration(50);myStepper.setSpeed(200);myStepper.moveTo(200);
}void loop() {// Change direction once the motor reaches target positionif (myStepper.distanceToGo() == 0) myStepper.moveTo(-myStepper.currentPosition());// Move the motor one stepmyStepper.run();
}

单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052

7 最后

【毕设教学】单片机控制步进电机相关推荐

  1. 用单片机控制步进电机

    2006-05-07 17:11:19 学单片机 | 站长的书 | 学C语言 | 教学资料 | 销售中心 | 产品资料 | McuBBS | 下载中心 | 版主原创 | 关于我们 学 单 片 机 从 ...

  2. 51单片机控制步进电机-电路连接

    51单片机控制步进电机-电路连接 概要:本案例讲解的内容是51单片机控制步进电机硬件连接部分.后续会分别讲解单片机程序,S曲线加减速方法,上位机等相关内容 硬件清单: 1.51单片机控制板一个 2.二 ...

  3. Arduino单片机控制步进电机,关于步进电机的细分

    关于步进电机的细分 查询的资料说:增加细分数并不能增加力矩.但是,细分后会运行更平稳,减少低频振动和噪声.驱动器输出的工作电流越大,力矩越大.转速越快,工作电流会减小越快,力矩也会减小越快.建议步进电 ...

  4. 单片机控制步进电机正反转

    单片机控制步进电机正反转 硬件连接: 程序: #include <reg52.h> #define uint unsigned int #define uchar unsigned cha ...

  5. 单片机控制步进电机T型加速实现原理

     单片机控制步进电机是通过时钟计数器计算次数产生脉冲 T型加速转换到数学计算 计数器每秒钟计数c=1000000次 脉冲频率从 v0 = 4K 到v = 40K次  v0时每个脉冲需要计数 m0 ...

  6. 51单片机控制步进电机启停,正反转速度——入门

    实验器件 STC89C52RC的学习板子一个 DC 5V 4相5线步进电机 28YBJ-48 减速步进电机一个 元器件连接: 51单片机开发板 电气原理图 实验现象:下载程序后: 当按下KEY1键可调 ...

  7. 基于stc89c52单片机控制步进电机正反转、加减速、测温(蜂鸣器报警)、LCD读取温度

    51单片机是许多单片机初学者的入门开发板,今天给大家做一个基于51内核的stc89c52板子来控制步进电机,可以实现步进电机的正反转.加减速.另外,使用板子自带的Ds18b20模块进行环境测温,并将测 ...

  8. Arduino单片机控制步进电机

    步进电机是一种将电脉冲转化为角位移的执行机构.当步进电机的驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步长).通过控制脉冲个数来控制角位移量,达到准确定位的目的:通过控 ...

  9. 51单片机控制步进电机Protues仿真设计

    一.概述 1.1步进电机简介 步进电机(Stepper Motor)是一种将电信号转换为机械运动的电动机,是一种专用于精密控制的电机.一般步进电机运行稳定,并且精度较高,因此常用于精密仪器.自动化设备 ...

  10. stc8a8k64s4单片机控制步进电机(四相八拍)实现顺时针转一圈和逆时针转一圈

    步进电机28BYJ48型四相八拍电机,电压为DC5V-DC12V.当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动.每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就 ...

最新文章

  1. 洛奇6里很喜欢的一段话!洛奇6经典台词!而是你能挨多重,并且坚持向前,你能承受多少并且坚持向前,这样才叫胜利!
  2. Android--EditText控件属性汇总
  3. CentOS 5.3 下快速安装配置 PPTP ××× 服务器
  4. 调试的时候step into,step out,step over有什么区别?各有什么作用?分别在什么情况下使用?
  5. java float f1=0.5_Java Math类静态float copySign(float f1,float f2)与示例
  6. c js php比较字符串,Php 比较字符串相像度
  7. torch.nn.Module()
  8. python代码导出_代码生成 – Python生成Python
  9. ZH奶酪:Ionic中(弹出式窗口)的$ionicModal使用方法
  10. 使用PowerShell监视您的Azure计算机
  11. 判断点在多边形内部的方法(Java版)
  12. java怎么同时实现鼠标监听和键盘监听_JavaScript如何实现监听键盘输入和鼠标监点击...
  13. c语言上机ex11答案,全国计算机等级考试C语言南开100题(上机必考).doc
  14. matlab聚类ppt,基于matlab的模糊聚类分析.ppt
  15. java毕业设计花漾网在线商城mybatis+源码+调试部署+系统+数据库+lw
  16. 陈艾盐:春燕百集访谈节目第二十五集
  17. Paul Graham:未来的互联网创业(下)
  18. java实现图片搜索_图片搜索(java实现)
  19. 课程设计---飞机订票系统
  20. 大学迷茫时,不妨来看看(励志)

热门文章

  1. 单片机C语言程序设计实训100例:基于AVR+proteus仿真pdf
  2. python mmap_python标准库基础之mmap:内存映射文件
  3. 芯片PM该知道的IC术语(二)封装的一些细节
  4. Chrome 92 版本新特性 92 版本发行说明
  5. android测试云模拟器,基于Android模拟器的调研
  6. python安装包————————百度网盘
  7. 洛谷OJ1162 填涂颜色 DFS填色法
  8. 微信打开网址后自动调用手机自带默认浏览器或提示选择浏览器打开如何实现
  9. NFC模拟门禁卡,不用电脑,将门禁卡等各种卡模拟进手机里,无需root
  10. 刘意-Java基础视频(基础部分)笔记(一)