|
在本篇文章中,我们将主要介绍如何使用MATLB和Arduino开发板控制直流电机。如果您是初次使用MATLAB软件,建议您先学习如何使用MATLAB实现简单的LED闪烁。
创建用于控制直流电机的MATLAB图形用户界面 在设置Arduino开发板完成后,我们必须在MATLAB种构建GUI(图形用户界面)来控制直流电机。要启动GUI,请在命令窗口中输入以下命令 然后弹出一个窗口,选择创建一个新的空白GUI,如下图所示,
现在我们可以选择制作三个按钮,分别用于进行顺时针旋转、逆时针旋转和停止,如下所示,
要调整大小或更改按钮的形状,只需在它上面单击,您就可以拖动按钮的角落。通过双击按钮,您可以更改该特定按钮的颜色、文字和标记。我们定制了三个按钮,如下图所示。
您可以根据自己的选择自定义按钮。现在当保存它时,在MATLAB的Editor窗口中生成一个代码。要对Arduino进行编码以执行与项目相关的任何任务,您需要编辑此生成的代码。所以下面我们编辑了MATLAB代码。
使用Arduino控制直流电机的MATLAB代码 在本文的末尾处,我们给出了完整的MATLAB代码。此外,我们还包括GUI文件(.fig)和代码文件(.m),您可以根据需要自定义按钮。下面是我们使用三个按钮为顺时针、逆时针旋转直流电机以及停止按钮进行的一些调整。
复制并粘贴以下代码到第74行,每次运行m文件时确保Arduino正在与MATLAB通讯。 - clear all;
- global a;
- a = arduino();
复制代码
向下滚动时,您将看到有三个函数,用于GUI中的每个按钮。现在根据您要在点击时执行的任务在每个函数中编写代码。
在顺时针按钮的函数中,在函数的结束括号前复制并粘贴以下代码,以顺时针方向旋转电机。这里我们在引脚6处为高电平,在引脚5处为低电平,以顺时针方向旋转电机。 - global a;
- writeDigitalPin(a, 'D5', 0);
- writeDigitalPin(a, 'D6', 1);
- pause(0.5);
复制代码
现在在逆时针按钮的函数中,将以下代码粘贴在函数的末尾,以逆时针方向旋转电机。在这里,我们在引脚5处为高电平,在引脚6处为低电平,以逆时针方向旋转电机。 - global a;
- writeDigitalPin(a, 'D5', 0);
- writeDigitalPin(a, 'D6', 1);
- pause(0.5);
复制代码
最后在STOP按钮的函数中,粘贴下面的代码,以停止电机的旋转。这里我们在引脚5和6都给出低电平以停止电机。 - global a;
- writeDigitalPin(a, 'D5', 0);
- writeDigitalPin(a, 'D6', 0);
- pause(0.5);
复制代码
所需的材料
● 安装MATLAB的笔记本电脑 ● Arduino UNO开发板 ● 直流电机 ● 电机驱动芯片L293D
电路原理图
使用MATLAB控制直流电机 根据电路图设置硬件后,只需单击运行按钮即可在.m文件中运行编辑后的代码
MATLAB可能需要几秒钟的时间来响应,在MATLAB显示BUSY指示之前不要点击任何GUI按钮,你可以在屏幕左下角看到,如下图所示,
一切准备就绪后,顺时针或逆时针方向按钮旋转电机。 按顺时针按钮时,电流从引脚6流向引脚5,电机将顺时针方向旋转,逆时针方向,电流从引脚5流向引脚6,电机顺时针方向旋转,顺时针方向旋转。 要停止直流电机的旋转,请按STOP按钮。 可以使用相同的方法使用MATLAB控制伺服电机,我们只需要相应地编辑代码。
代码 以下是本篇文章使用的完整的代码: - function varargout = DCmotor(varargin)
- gui_Singleton = 1;
- gui_State = struct('gui_Name', mfilename, ...
- 'gui_Singleton', gui_Singleton, ...
- 'gui_OpeningFcn', @DCmotor_OpeningFcn, ...
- 'gui_OutputFcn', @DCmotor_OutputFcn, ...
- 'gui_LayoutFcn', [] , ...
- 'gui_Callback', []);
- if nargin && ischar(varargin{1})
- gui_State.gui_Callback = str2func(varargin{1});
- end
- if nargout
- [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
- else
- gui_mainfcn(gui_State, varargin{:});
- end
- function DCmotor_OpeningFcn(hObject, eventdata, handles, varargin)
- guidata(hObject, handles);
- function varargout = DCmotor_OutputFcn(hObject, eventdata, handles)
- varargout{1} = handles.output;
- clear all;
- global a;
- a = arduino();
- function clockwise_Callback(hObject, eventdata, handles)
- global a;
- writeDigitalPin(a, 'D5', 0);
- writeDigitalPin(a, 'D6', 1);
- pause(0.5);
- function anticlockwise_Callback(hObject, eventdata, handles)
- global a;
- writeDigitalPin(a, 'D5', 1);
- writeDigitalPin(a, 'D6', 0);
- pause(0.5);
- function stop_Callback(hObject, eventdata, handles)
- global a;
- writeDigitalPin(a, 'D5', 0);
- writeDigitalPin(a, 'D6', 0);
- pause(0.5);
复制代码
|