步进电机是一种以离散步进旋转的无刷直流电机,是许多精密运动控制应用的最佳选择。此外,步进电机适用于定位、速度控制和需要在低速时需要高扭矩的应用。
在MATLAB之前的教程中,我们已经解释了如何使用MATLAB来控制直流电机,伺服电机和家用电器。今天我们将学习如何使用 MATALB 和 Arduino 控制步进电机。
步进电机的工作模式
在开始对步进电机进行编码之前,您应该了解步进电机的工作或旋转概念。由于步进模式的定子由不同的线圈对构成,因此每个线圈对都可以以许多不同的方法激励,这使得模式可以在许多不同的模式下驱动。以下是广泛的分类
全步模式
在全步激励模式下,我们可以以最少的匝数(步长)实现完整的 360° 旋转。但这会导致惯性减少,并且旋转也不会平稳。全步激励还有另外两种分类,它们是相控波步进和两种相进模式。
1. 单相步进或波步进:在这种模式下,在任何给定时间,电机的一个端子(相位)将通电。这步数较少,因此可以实现完整的 360° 旋转。由于步数较少,因此该方法消耗的电流也非常低。下表显示了 4 相步进电机的波形步进顺序
步 | 阶段 1(蓝色) | 第 2 阶段(粉红色) | 第 3 阶段(黄色) | 第 4 阶段(橙色) |
1 | 1 | 0 | 0 | 0 |
2 | 0 | 1 | 0 | 0 |
3 | 0 | 0 | 1 | 0 |
4 | 0 | 0 | 0 | 1 |
2.两相步进:顾名思义,这种方法中两个相将是一个。它具有与Wave步进相同的步数,但由于一次通电两个线圈,因此与以前的方法相比,它可以提供更好的扭矩和速度。虽然一个缺点是这种方法也会消耗更多的功率。
步 | 阶段 1(蓝色) | 第 2 阶段(粉红色) | 第 3 阶段(黄色) | 第 4 阶段(橙色) |
1 | 1 | 1 | 0 | 0 |
2 | 0 | 1 | 1 | 0 |
3 | 0 | 0 | 1 | 1 |
4 | 1 | 0 | 0 | 1 |
半步模式
半步模式是单相开启和两相开启模式的组合。这种组合将帮助我们克服上述两种模式的缺点。
正如您可能已经猜到的那样,由于我们正在结合这两种方法,因此我们必须在此方法中执行8 个步骤才能获得完整的旋转。4相步进电机的开关顺序如下所示
步 | 阶段 1(蓝色) | 第 2 阶段(粉红色) | 第 3 阶段(黄色) | 第 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,请在命令窗口中键入以下命令
guide
将打开一个弹出窗口,然后选择新的空白GUI,如下图所示,
现在选择两个用于顺时针和逆时针旋转步进电机的切换按钮,如下所示,
要调整按钮的大小或更改按钮的形状,只需单击它,您就可以拖动按钮的角。通过双击切换按钮,您可以更改该特定按钮的颜色、字符串和标签。我们自定义了两个按钮,如下图所示。
您可以根据自己的选择自定义按钮。
用于控制步进电机的 MATLAB 代码与 Arduino
用于控制步进电机的完整MATLAB 代码在本项目结束时给出。此外,我们在此处包含GUI文件(.fig)和代码文件(.m)以供下载(右键单击链接,然后选择“将链接另存为...”)),您可以使用它们根据您的要求自定义按钮。以下是我们使用两个切换按钮顺时针和逆时针旋转步进电机所做的一些调整。
将以下代码复制并粘贴到第 74 行,以确保每次运行 m 文件时 Arduino 都在与 MATLAB 通信。
clear all;
global a;
a = arduino();
向下滚动时,您将看到为 GUI 中的两个按钮创建了两个函数。现在,根据要在单击时执行的任务在两个函数中编写代码。
在顺时针按钮的函数中,在函数结束之前复制并粘贴以下代码,以顺时针方向旋转电机。为了沿顺时针方向连续旋转步进电机,我们使用while回路重复顺时针方向的两个相位步进全模式步骤。
while get(hObject,'Value')
global a;
writeDigitalPin(a, 'D9', 0);
writeDigitalPin(a, 'D10', 0);
writeDigitalPin(a, 'D11', 1);
pause(0.0002);
writeDigitalPin(a, 'D8', 0);
writeDigitalPin(a, 'D9', 0);
writeDigitalPin(a, 'D10', 1);
writeDigitalPin(a, 'D11', 1);
pause(0.0002);
writeDigitalPin(a, 'D8', 0);
writeDigitalPin(a, 'D9', 1);
writeDigitalPin(a, 'D10', 1);
writeDigitalPin(a, 'D11', 0);
pause(0.0002);
writeDigitalPin(a, 'D8', 1);
writeDigitalPin(a, 'D9', 1);
writeDigitalPin(a, 'D10', 0);
writeDigitalPin(a, 'D11', 0);
pause(0.0002);
end
现在,在逆时针按钮的功能中,将以下代码粘贴到函数的处,以逆时针方向旋转电机。为了沿逆时针方向连续旋转步进电机,我们使用 while 回路重复逆时针方向的两个相位步进全模式步骤。
while get(hObject,'Value')
global a;
writeDigitalPin(a, 'D8', 1);
writeDigitalPin(a, 'D9', 1);
writeDigitalPin(a, 'D10', 0);
writeDigitalPin(a, 'D11', 0);
pause(0.0002);
writeDigitalPin(a, 'D8', 0);
writeDigitalPin(a, 'D9', 1);
writeDigitalPin(a, 'D10', 1);
writeDigitalPin(a, 'D11', 0);
pause(0.0002);
writeDigitalPin(a, 'D8', 0);
writeDigitalPin(a, 'D9', 0);
writeDigitalPin(a, 'D10', 1);
writeDigitalPin(a, 'D11', 1);
pause(0.0002);
writeDigitalPin(a, 'D8', 1);
writeDigitalPin(a, 'D9', 0);
writeDigitalPin(a, 'D10', 0);
writeDigitalPin(a, 'D11', 1);
pause(0.0002);
end
所需材料
MATLAB 安装笔记本电脑(偏好:R2016a 或更高版本)
Arduino UNO
步进电机 (28BYJ-48, 5VDC)
ULN2003 - 步进电机驱动器
电路图
使用 MATLAB 控制步进电机
根据电路图设置硬件后,只需单击运行按钮即可在.m文件中运行编辑后的代码
MATLAB 可能需要几秒钟才能响应,在 MATLAB 在左下角显示忙消息之前不要单击任何 GUI 按钮,如下所示,
一切准备就绪后,单击顺时针或逆时针按钮以旋转电机。当我们使用拨动按钮时,步进电机将不断沿顺时针方向移动,直到我们再次按下按钮。同样,通过按下逆时针切换按钮,电机开始逆时针方向旋转,直到我们再次按下按钮。
评论
查看更多