步进电机是一种无刷直流电机,可以分步旋转,是许多精密运动控制应用的最佳选择。此外,步进电机适用于定位、速度控制和低速需要大扭矩的应用。

在之前的MATLAB教程中,我们已经介绍了如何使用MATLAB来控制直流电机、伺服电机和家用电器。今天我们将学习如何使用MATALB和Arduino开发板控制步进电机。如果您是MATLAB的新手,那么建议您先学习使用MATLAB开始简单的LED闪烁程序。

步进电机的工作模式

在开始步进电机的相关代码之前,您应该了解步进电机的工作或旋转概念。由于步进模式的定子由不同的线圈对构成,因此每个线圈对可以以许多不同的方法激励,这使得模式能够以许多不同的模式驱动。以下是相对宽泛的分类:

●全步模式(Full Step)

在全步激励模式下,我们可以以最小的匝数(步长)实现完整的360°旋转。但这会导致惯性减小,旋转也不会平滑。在全步激励中还有两个分类,它们是一个相位接通方波步进和两个相位接通方波步进模式。

STEPPER-MOTOR-28BYJ-48-Pinout.jpg (52.97 KB, 下载次数: 116)

2018-10-10 09:24 上传

1.    一个相位步进或波形步进:在此模式下,只有电机的一个端子(相位)将在任何给定时间通电。这具有较少的步数,因此可以实现完整的360°旋转。由于步数较少,因此该方法消耗的电流也非常低。下表显示了4相步进电机的波形步进顺序

步数相位1(蓝色)相位2(粉红色)相位3(黄色)相位4(橙色)

11000

20100

30010

40001

2.   两相步进:正如该方法中的名称所示,两个相位将是一个步数。它具有与波形步进相同的步数,但由于一次有两个线圈通电,因此与先前的方法相比可以提供更好的扭矩和速度。但是一个缺点是这种方法也消耗更多的功耗。

步数相位1(蓝色)相位2(粉红色)相位3(黄色)相位4(橙色)

11000

20100

30010

40001

●  半步模式

半步模式是一个相位接通模式和两个相位接通模式的组合。这种组合将帮助我们克服两种模式的上述缺点。

正如您可能已经猜到的那样,因为我们将两种方法结合起来,我们将在此方法中执行8步以获得完整的旋转。下面显示的4相步进电机的切换顺序:

步数相位1(蓝色)相位2(粉红色)相位3(黄色)相位4(橙色)

11000

20100

30100

40110

50010

60011

70001

81001

因此,您可以选择在任何模式下对步进电机进行编程,但我更喜欢两相步进步进模式。因为这种方法比单相方法提供更快的速度,并且与半模式相比,由于两相方法中的步骤数量较少,所以代码量较少。

创建用于控制步进电机的MATLAB图形用户界面

然后我们必须构建GUI(图形用户界面)来控制步进电机。要启动GUI,请在命令窗口中键入以下命令

guide复制代码

将打开一个弹出窗口,然后选择新的空白GUI,如下图所示,

Creating-GUI-in-MATLAB.png (20.25 KB, 下载次数: 96)

2018-10-10 09:24 上传

现在选择两个切换按钮,用于顺时针旋转步进电机和逆时针旋转,如下图所示,

Toggle-Button-in-MATLAB-GUI.png (8.28 KB, 下载次数: 120)

2018-10-10 09:24 上传

要调整大小或更改按钮的形状,只需单击它,您就可以拖动按钮的边角。通过双击切换按钮,您可以更改该特定按钮的颜色、字符串和标记。我们定制了两个按钮,如下图所示。

GUI-Inspector-for-Changing-Tag-strings-and-color.png (29.07 KB, 下载次数: 113)

2018-10-10 09:24 上传

MATLAB-GUI-for-Stepper-Motor-Control.png (5.26 KB, 下载次数: 106)

2018-10-10 09:24 上传

您可以根据自己的选择自定义按钮。现在当你保存它时,在MATLAB的Editor窗口中生成一个代码。要对Arduino进行代码以执行与项目相关的任何任务,您始终必须编辑此生成的代码。所以下面我们编辑了MATLAB代码。您可以在MATLAB入门教程中了解有关命令窗口、编辑器窗口等的更多信息。

使用Arduino控制步进电机的MATLAB代码

控制步进电机的完整MATLAB代码在本文末尾处给出。此外,我们在这里包含GUI文件(.fig)和代码文件(.m)供下载(右键单击链接然后选择“将链接保存为...”),使用它可以根据您的要求自定义按钮。下面是我们使用两个切换按钮顺时针和逆时针旋转步进电机所做的一些调整。

复制并粘贴以下代码到74行代码,确保每次运行m文件时Arduino正在与MATLAB通信。

clear all;

global a;

a = arduino();复制代码

IInitializing-Arduino-in-MATLAB.png (3.74 KB, 下载次数: 113)

2018-10-10 09:24 上传

向下滚动时,您将看到为GUI中的两个按钮创建了两个函数。现在根据要单击的任务在两个函数中编写代码。

在顺时针按钮的函数中,在函数末尾处复制并粘贴以下代码,使电机顺时针旋转。为了顺时针方向连续旋转步进电机,我们使用while循环重复顺时针方向的两个相位步进完全模式步骤。

while get(hObject,'Value')

global a;

writeDigitalPin(a, 'D8', 1);

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复制代码

Code-for-rotating-stepper-motor-in-clockwise-direction.png (16.07 KB, 下载次数: 104)

2018-10-10 09:24 上传

现在在逆时针按钮的函数中,将以下代码粘贴到函数的位置,以逆时针方向旋转电机。为了以逆时针方向连续旋转步进电机,我们使用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复制代码

Code-for-rotating-stepper-motor-in-anti-clockwise-direction.png (39.23 KB, 下载次数: 117)

2018-10-10 09:24 上传

所需的材料

●    安装MATLAB笔记本电脑

●    Arduino UNO开发板

●    步进电机(28BYJ-48,5VDC)

●    ULN2003 - 步进电机驱动器

电路原理图

Circuit-Diagram-for-Stepper-motor-control-using-Arduino-and-MATLAB.png (47.54 KB, 下载次数: 117)

2018-10-10 09:24 上传

Stepper-Motor-Control-using-MATLAB-and-Arduino.jpg (93.98 KB, 下载次数: 110)

2018-10-10 09:24 上传

用MATLAB控制步进电机

根据电路图设置硬件后,只需单击运行按钮即可在.m文件中运行编辑后的代码

Run-MATLAB-GUI.png (15.71 KB, 下载次数: 116)

2018-10-10 09:38 上传

MATLAB可能需要几秒钟的时间来响应,不要点击任何GUI按钮,直到MATLAB在左下角显示忙消息,如下所示,

Processing-MATLAB-GUI-Program.png (1.3 KB, 下载次数: 112)

2018-10-10 09:24 上传

一切准备就绪后,顺时针或逆时针方向按钮旋转电机。 当我们使用切换按钮时,步进电机将以顺时针方向连续移动,直到我们再次按下按钮。 同样,按下逆时针切换按钮,电机开始逆时针旋转,直到我们再次按下按钮。

Stepper-Motor-in-action-using-MATLAB-and-Arduino.jpg (79.47 KB, 下载次数: 193)

2018-10-10 09:24 上传

代码

本篇文章的完整代码如下所示:

main.rar

(539 Bytes, 下载次数: 74)

2018-10-10 09:39 上传

点击文件名下载附件

用MATLAB程序控制伺服电机,使用MATLAB和Arduino开发板进行步进电机控制相关推荐

  1. 直流电机 matlab,使用MATLAB和Arduino开发板进行直流电机控制

    在本篇文章中,我们将主要介绍如何使用MATLB和Arduino开发板控制直流电机.如果您是初次使用MATLAB软件,建议您先学习如何使用MATLAB实现简单的LED闪烁. 创建用于控制直流电机的MAT ...

  2. 基于Arduino开发板使用HC-12远程无线通信模块

    在本篇文章中,我们将学习如何使用HC-12无线串行通信模块,该模块能够在多个Arduino开发板之间进行远程无线通信,距离可达1.8km.其中,我列举了两个基本的例子,来解释了如何连接HC-12模块并 ...

  3. matlab连接板,怎样用Matlab连接控制Arduino开发板

    在本篇文章中,我们将新建一个简单的MATLAB m文件来与Arduino开发板进行通信. MATLAB用于Arduino硬件的支持包允许您使用MATLAB通过USB电缆与该开发板通信.支持包适用于32 ...

  4. stm32代码生成,基于模型的设计(MBD) 无刷直流电机MATLAB开发板建模代码生成控制 MBD电机控制资料

    stm32代码生成,基于模型的设计(MBD) 无刷直流电机MATLAB开发板建模代码生成控制 MBD电机控制资料 控制算法采用MATLAB建模并生成代码的方式 配套电机 开发板 模型 源代码和视频 P ...

  5. arduino串口监视器显示nan_使用Arduino开发板制作摩尔斯电码生成器

    摩尔斯电码是一种通信系统,用于在两个不同持续时间的信号中编码任何字符,称为点和虚线.摩尔斯电码由Samuel F.B开发.并进一步用于电报传输秘密信息.它在第二次世界大战时最常用.摩尔斯电码可以通过点 ...

  6. Arduino开发板制作

    Arduino UNO 介绍 ,Arduino开发板制作 教程: Arduino制作 Arduino UNO 图 Arduino是什么 Arduino是一款便捷灵活.方便上手的开源电子原型平台.包含硬 ...

  7. 四针角oled屏连接arduino_使用Arduino开发板连接OLED显示屏制作一款智能手表

    我们大多数人都比较熟悉1602点阵液晶显示屏,它在许多项目中用于向用户显示一些信息.但是这些LCD显示器在他们能做的事情上有很多限制.在本篇文章中,我们将使用OLED显示Android智能手机的一些基 ...

  8. arduino编程时加{}报错_使用Arduino开发板时最常见的10个错误

    作为Arduino开发板的初学者,对于没有电子背景的人来说非常具有挑战性,你会遇到很多错误,其中一些可能有简单的解决方案,但可能需要几天的时间来解决.因此,为了使事情变得更容易,我制作了一个包含10个 ...

  9. arduino loar_如何使用Arduino开发板制作函数生成器(波形发生器)

    对于喜欢偶尔鼓捣电子产品的工程师来说,他们都希望能有自己的实验室.万用表.钳形表.示波器.LCR表.函数发生器.双模电源和自动变压器都是实验室的基本配置.虽然所有这些都可以购买,但我们也可以轻松地自行 ...

最新文章

  1. 字符串操作--宽窄字符转换
  2. Dubbo 2.7三大特性详解
  3. requirejs使用笔记
  4. UML用例图总结(转)
  5. 如何提高你的工作效率?
  6. vue2.0 组件和v-model
  7. 20200202每日一句
  8. stream().sorted 排序
  9. 自定义View之仿虾米音乐TabLayout
  10. 琵琶行用计算机弹,琵琶行三次弹
  11. python三级菜单
  12. DDSM+RetinaNet数据处理进展
  13. 寒武纪cnstream模型加速的python环境搭建笔记
  14. three、vue中使用three、three怎么加载obj模型和mtl文件、three自定义800*800大小怎么拾取/点击
  15. tf.keras.layers.BatchNormalization、tf.keras.layer.LayerNormalization函数
  16. ALM(application lifecycle management)应用程序生命周期管理
  17. 505 新国王游戏 思维 [代码源][namomo spring camp]每日一题div2
  18. [CVPR‘22 SLPT] Sparse Local Patch Transformer for Robust Face Alignment and Landmarks Inherent Relat
  19. 揭秘5G+AI时代的机器人世界!【附报告下载】
  20. 【十三】景区人流量统计:python日志生成+logstash+kafka+storm+mysql+springBoot+高德地图

热门文章

  1. 小呀嘛小二郎 背着那书包上学堂
  2. 遭遇Trojan DL Multi wfg sss exe SCVHOST EXE autorun inf 等
  3. 安卓开发----错误汇总贴
  4. 开发你自己的Android 授权管理器
  5. Java实现小型酒店管理系统。
  6. ubuntu14.04+cuda6.5+opencv2.4.9+cuda-convnet2配置
  7. 宝藏网站系列:浏览器书签共享平台
  8. [PTA] 7-2 I Love GPLT
  9. 当你的才华还撑不起你的野心的时候,那就静下心来学习吧!
  10. 大数据工程师是不是青春饭,程序员30岁以后的路怎么走