风筝
发表于: 2018-10-12 09:42:07 | 显示全部楼层

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


创建用于控制直流电机的MATLAB图形用户界面

在设置Arduino开发板完成后,我们必须在MATLAB种构建GUI(图形用户界面)来控制直流电机。要启动GUI,请在命令窗口中输入以下命令

  1. guide
复制代码

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

Creating-GUI-in-MATLAB.png


现在我们可以选择制作三个按钮,分别用于进行顺时针旋转、逆时针旋转和停止,如下所示,

Pushbutton-in-MATLAB-GUI.png


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

GUI-Inspector-for-Changing-Tag-string-and-color.png


GUI-for-DC-Motor-Control-Using-MATLAB.png


您可以根据自己的选择自定义按钮。现在当保存它时,在MATLAB的Editor窗口中生成一个代码。要对Arduino进行编码以执行与项目相关的任何任务,您需要编辑此生成的代码。所以下面我们编辑了MATLAB代码。


使用Arduino控制直流电机的MATLAB代码

在本文的末尾处,我们给出了完整的MATLAB代码。此外,我们还包括GUI文件(.fig)和代码文件(.m),您可以根据需要自定义按钮。下面是我们使用三个按钮为顺时针、逆时针旋转直流电机以及停止按钮进行的一些调整。


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

  1. clear all;
  2. global a;
  3. a = arduino();
复制代码

Initializing-Arduino-in-MATLAB.png


向下滚动时,您将看到有三个函数,用于GUI中的每个按钮。现在根据您要在点击时执行的任务在每个函数中编写代码。


在顺时针按钮的函数中,在函数的结束括号前复制并粘贴以下代码,以顺时针方向旋转电机。这里我们在引脚6处为高电平,在引脚5处为低电平,以顺时针方向旋转电机。

  1. global a;
  2. writeDigitalPin(a, 'D5', 0);
  3. writeDigitalPin(a, 'D6', 1);
  4. pause(0.5);
复制代码

Command-to-run-DC-motor-clockwise-in-MATLAB.png


现在在逆时针按钮的函数中,将以下代码粘贴在函数的末尾,以逆时针方向旋转电机。在这里,我们在引脚5处为高电平,在引脚6处为低电平,以逆时针方向旋转电机。

  1. global a;
  2. writeDigitalPin(a, 'D5', 0);
  3. writeDigitalPin(a, 'D6', 1);
  4. pause(0.5);
复制代码

Command-to-run-DC-motor-anticlockwise-in-MATLAB.png


最后在STOP按钮的函数中,粘贴下面的代码,以停止电机的旋转。这里我们在引脚5和6都给出低电平以停止电机。

  1. global a;
  2. writeDigitalPin(a, 'D5', 0);
  3. writeDigitalPin(a, 'D6', 0);
  4. pause(0.5);
复制代码

Command-to-stop-DC-motor-in-MATLAB.png


所需的材料

●    安装MATLAB的笔记本电脑

●    Arduino UNO开发板

●    直流电机

●    电机驱动芯片L293D


电路原理图

Circuit-Diagram-for-DC-Motor-Control-Using-MATLAB-and-Arduino.png


DC-Motor-in-action-Using-MATLAB-and-Arduino.jpg


使用MATLAB控制直流电机

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

Run-Program.png


MATLAB可能需要几秒钟的时间来响应,在MATLAB显示BUSY指示之前不要点击任何GUI按钮,你可以在屏幕左下角看到,如下图所示,

Wait-until-MATLAB-is-BUSY.png


一切准备就绪后,顺时针或逆时针方向按钮旋转电机。 按顺时针按钮时,电流从引脚6流向引脚5,电机将顺时针方向旋转,逆时针方向,电流从引脚5流向引脚6,电机顺时针方向旋转,顺时针方向旋转。 要停止直流电机的旋转,请按STOP按钮。 可以使用相同的方法使用MATLAB控制伺服电机,我们只需要相应地编辑代码。

DC-Motor-Control-Using-MATLAB-and-Arduino.jpg


代码

以下是本篇文章使用的完整的代码:

  1. function varargout = DCmotor(varargin)

  2. gui_Singleton = 1;
  3. gui_State = struct('gui_Name',       mfilename, ...
  4.                    'gui_Singleton',  gui_Singleton, ...
  5.                    'gui_OpeningFcn', @DCmotor_OpeningFcn, ...
  6.                    'gui_OutputFcn',  @DCmotor_OutputFcn, ...
  7.                    'gui_LayoutFcn',  [] , ...
  8.                    'gui_Callback',   []);
  9. if nargin && ischar(varargin{1})
  10.     gui_State.gui_Callback = str2func(varargin{1});
  11. end

  12. if nargout
  13.     [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
  14. else
  15.     gui_mainfcn(gui_State, varargin{:});
  16. end
  17. function DCmotor_OpeningFcn(hObject, eventdata, handles, varargin)

  18. guidata(hObject, handles);


  19. function varargout = DCmotor_OutputFcn(hObject, eventdata, handles)

  20. varargout{1} = handles.output;
  21. clear all;
  22. global a;
  23. a = arduino();

  24. function clockwise_Callback(hObject, eventdata, handles)

  25. global a;
  26. writeDigitalPin(a, 'D5', 0);
  27. writeDigitalPin(a, 'D6', 1);
  28. pause(0.5);

  29. function anticlockwise_Callback(hObject, eventdata, handles)

  30. global a;
  31. writeDigitalPin(a, 'D5', 1);
  32. writeDigitalPin(a, 'D6', 0);
  33. pause(0.5);

  34. function stop_Callback(hObject, eventdata, handles)

  35. global a;
  36. writeDigitalPin(a, 'D5', 0);
  37. writeDigitalPin(a, 'D6', 0);
  38. pause(0.5);
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1479



手机版|

GMT+8, 2024-3-29 05:34 , Processed in 0.096856 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表