步进电机是一种无刷直流电机,它可以以不连续的步骤旋转,是许多精密运动控制应用的最佳选择。同样,步进电机也适用于定位,速度控制以及需要低速高转矩的应用。
在以前的MATLAB教程中,我们已经说明了如何使用MATLAB控制直流电动机,伺服电动机和家用电器。今天,我们将学习如何使用MATALB和Arduino控制步进电机。如果您不熟悉MATLAB,建议您使用MATLAB的简单LED闪烁程序开始使用。
步进电机的操作模式
在开始为步进电机编码之前,您应该了解步进电机的工作或旋转概念。由于步进模式的定子由不同的线圈对构成,因此可以用许多不同的方法来激励每个线圈对,从而使模式可以以许多不同的模式进行驱动。以下是广泛的分类
全步模式
在全步励磁模式下,我们可以用最少的匝数(步)实现360°的完整旋转。但这会导致惯性减小,并且旋转也将不平滑。全步励磁又有两种分类, 一种是相波步进,另一种是相波模式。
1.一相步进或波形步进: 在此模式下,在任何给定时间仅向电动机的一个端子(相)供电。这具有较少的步骤数,因此可以实现完整的360°旋转。由于步骤数较少,因此该方法消耗的电流也非常低。下表显示了4相步进电机的波动顺序
步 | 第一阶段(蓝色) | 第二阶段(粉红色) | 第三阶段(黄色) | 阶段4(橙色) |
1个 | 1个 | 0 | 0 | 0 |
2 | 0 | 1个 | 0 | 0 |
3 | 0 | 0 | 1个 | 0 |
4 | 0 | 0 | 0 | 1个 |
2.两步式步进: 顾名思义,此方法分为两个阶段。它具有与波形步进相同的步数,但是由于同时给两个线圈通电,与以前的方法相比,它可以提供更好的转矩和速度。尽管不利的一面是这种方法还消耗更多的功率。
步 |
第一阶段(蓝色) |
第二阶段(粉红色) |
第三阶段(黄色) |
阶段4(橙色) |
1个 |
1个 |
1个 |
0 |
0 |
2 |
0 |
1个 |
1个 |
0 |
3 |
0 |
0 |
1个 |
1个 |
4 |
1个 |
0 |
0 |
1个 |
半步模式
半步模式是单相和两相导通模式的组合。这种组合将帮助我们克服两种模式的上述缺点。
您可能已经猜到了,因为我们将两种方法结合在一起,因此必须 在此方法中执行 8步才能获得完整的旋转。如下所示的4相步进电机的开关顺序
步 |
第一阶段(蓝色) |
第二阶段(粉红色) |
第三阶段(黄色) |
阶段4(橙色) |
1个 |
1个 |
0 |
0 |
0 |
2 |
1个 |
1个 |
0 |
0 |
3 |
0 |
1个 |
0 |
0 |
4 |
0 |
1个 |
1个 |
0 |
5 |
0 |
0 |
1个 |
1个 |
6 |
0 |
0 |
0 |
1个 |
7 |
1个 |
0 |
0 |
1个 |
8 |
1个 |
0 |
0 |
0 |
因此,您可以选择在任何模式下对步进电机进行编程,但是我更喜欢“两相步进”全步模式。因为此方法比单相方法具有更快的速度,并且与半模方式相比,由于两相方法的步数较少,所以编码部分较少。
在此处了解有关步进电机及其模式的更多信息
创建用于控制步进电机的MATLAB图形用户界面
然后,我们必须构建GUI(图形用户界面)来控制步进电机。要启动GUI,请在 命令窗口中 键入以下命令
指南
将会打开一个弹出窗口,然后选择新的 空白GUI ,如下图所示,
现在,选择两个切换按钮,以使步进电机顺时针和逆时针旋转,如下所示,
要调整大小或更改按钮的形状,只需单击它,就可以拖动按钮的各个角。通过双击切换按钮,您可以更改该特定按钮的颜色,字符串和标签。我们自定义了两个按钮,如下图所示。
您可以根据需要自定义按钮。现在,当您保存此代码时,将在MATLAB的“ 编辑器”窗口 中生成一个代码。要为您的Arduino编写代码以执行与项目相关的任何任务,必须始终编辑此生成的代码。因此,下面我们编辑了MATLAB代码。您可以在MATLAB入门教程中了解有关命令窗口,编辑器窗口等的更多信息。
使用Arduino控制步进电机的MATLAB代码
在项目结束时,给出了用于控制步进电机的完整MATLAB代码。此外,我们在此处包括要下载的GUI文件(.fig)和代码文件(.m)(右键单击链接,然后选择“将链接另存为…”)),您可以使用它们根据需要自定义按钮。 。以下是我们使用两个切换按钮顺时针和逆时针旋转步进电机所做的一些调整。
将以下代码复制并粘贴到行号。74,以确保每次运行m文件时Arduino都在与MATLAB通讯。
清除所有 全球 a = arduino ();
向下滚动时,您将看到在GUI中为两个按钮创建了两个功能。现在,根据要在单击时执行的任务,在两个函数中编写代码。
在“ 顺时针” 按钮的功能中,将以下代码复制并粘贴到功能结束之前,以使电动机沿顺时针方向旋转。为了使步进电机沿顺时针方向连续旋转,我们使用 while循环 在顺时针方向上重复两个相继步进全模式步骤。
而get(hObject,'Value') 全局a; writeDigitalPin(a,'D8',1); writeDigitalPin(a,'D9',0); writeDigitalPin(a,'D10',0); writeDigitalPin(a,'D11',1); 暂停(0.0002); writeDigitalPin(a,'D8',0); writeDigitalPin(a,'D9',0); writeDigitalPin(a,'D10',1); writeDigitalPin(a,'D11',1); 暂停(0.0002); writeDigitalPin(a,'D8',0); writeDigitalPin(a,'D9',1); writeDigitalPin(a,'D10',1); writeDigitalPin(a,'D11',0); 暂停(0.0002); writeDigitalPin(a,'D8',1); writeDigitalPin(a,'D9',1); writeDigitalPin(a,'D10',0); writeDigitalPin(a,'D11',0); 暂停(0.0002); 结束
现在,在“ 逆时针” 按钮的功能中,将以下代码粘贴到该功能的处,以使电动机沿逆时针方向旋转。为了使步进电机沿逆时针方向连续旋转,我们使用 while循环 在逆时针方向上重复两个相继步进全模式步骤。
而get(hObject,'Value') 全局a; writeDigitalPin(a,'D8',1); writeDigitalPin(a,'D9',1); writeDigitalPin(a,'D10',0); writeDigitalPin(a,'D11',0); 暂停(0.0002); writeDigitalPin(a,'D8',0); writeDigitalPin(a,'D9',1); writeDigitalPin(a,'D10',1); writeDigitalPin(a,'D11',0); 暂停(0.0002); writeDigitalPin(a,'D8',0); writeDigitalPin(a,'D9',0); writeDigitalPin(a,'D10',1); writeDigitalPin(a,'D11',1); 暂停(0.0002); writeDigitalPin(a,'D8',1); writeDigitalPin(a,'D9',0); writeDigitalPin(a,'D10',0); writeDigitalPin(a,'D11',1); 暂停(0.0002); 结束
所需材料
- MATLAB安装的笔记本电脑(首选:R2016a或更高版本)
- Arduino UNO
- 步进马达(28BYJ-48,5VDC)
- ULN2003-步进电机驱动器
电路原理图
用MATLAB控制步进电机
根据电路图设置硬件后,只需单击运行按钮即可运行.m文件中的已编辑代码
MATLAB可能需要几秒钟的时间进行响应,请不要单击任何GUI按钮,直到MATLAB在左下角的下方显示忙碌消息为止,如下所示,
当一切准备就绪时,单击顺时针或逆时针按钮以旋转电动机。当我们使用切换按钮时,步进电机将继续沿顺时针方向移动,直到再次按下按钮。同样,通过按下逆时针切换按钮,电动机将开始沿逆时针方向旋转,直到我们再次按下该按钮。