控制/MCU
在本教程中,我们将向您展示如何使用MATLB 和 Arduino 控制直流电机。
创建用于控制直流电机的 MATLAB 图形用户界面
完成 Arduino for MATLAB 的设置后,我们必须构建 GUI(图形用户界面)来控制直流电机。要启动 GUI,请在命令窗口中键入以下命令
guide
将打开一个弹出窗口,然后选择新的空白GUI,如下图所示,
现在选择三个按钮用于顺时针旋转、逆时针旋转和停止,如下所示,
要调整按钮的大小或更改按钮的形状,只需单击它,您就可以拖动按钮的角。通过双击按钮,您可以更改该特定按钮的颜色,字符串和标签。我们自定义了三个按钮,如下图所示。
您可以根据自己的选择自定义按钮。现在,当您保存此代码时,将在 MATLAB 的编辑器窗口中生成一个代码。要编写Arduino代码以执行与项目相关的任何任务,您必须始终编辑此生成的代码。所以下面我们编辑了 MATLAB 代码。
MATLAB 代码,用于使用 Arduino 控制直流电机
完整的 MATLAB 代码,在针对直流电机控制进行编辑后,在本项目结束时给出。此外,我们在此处包含GUI文件(.fig)和代码文件(.m)以供下载,您可以使用它们根据您的要求自定义按钮。以下是我们对顺时针、逆时针旋转直流电机并使用三个按钮停止所做的一些调整。
将以下代码复制并粘贴到第 74 行,以确保每次运行 m 文件时 Arduino 都在与 MATLAB 通信。
clear all;
global a;
a = arduino();
向下滚动时,您将看到 GUI 中的每个按钮都有三个功能。现在,根据您要在单击时执行的任务在每个函数中编写代码。
在顺时针按钮的函数中,将以下代码复制并粘贴到函数的结束大括号之前,以顺时针方向旋转电机。在这里,我们在引脚 6 处给出 HIGH 和引脚 5 处的 LOW,以顺时针方向旋转电机。
global a;
writeDigitalPin(a, 'D5', 0);
writeDigitalPin(a, 'D6', 1);
pause(0.5);
现在,在逆时针按钮的功能中,将以下代码粘贴到函数的末尾以逆时针方向旋转电机。在这里,我们在引脚 5 处给出高电平,在引脚 6 处给出 LOW,以逆时针方向旋转电机。
global a;
writeDigitalPin(a, 'D5', 1);
writeDigitalPin(a, 'D6', 0);
pause(0.5);
最后在STOP按钮的功能中,将以下代码粘贴到末尾,以停止电机的旋转。在这里,我们在引脚5和6处给出LOW以停止电机。
global a;
writeDigitalPin(a, 'D5', 0);
writeDigitalPin(a, 'D6', 0);
pause(0.5);
所需材料
MATLAB 安装笔记本电脑(偏好:R2016a 或更高版本)
Arduino UNO
直流电动机
L293D- 电机驱动器
电路图
使用 MATLAB 控制直流电机
根据电路图设置硬件后,只需单击运行按钮即可在.m文件中运行编辑后的代码
MATLAB 可能需要几秒钟才能响应,在 MATLAB 显示 BUSY 指示之前不要单击任何 GUI 按钮,您可以在屏幕的左下角看到,如下所示,
一切准备就绪后,单击顺时针或逆时针按钮以旋转电机。当您按下顺时针按钮时,电流流经引脚 6 到引脚 5,电机将顺时针旋转,而逆时针方向电流流过引脚 5 到引脚 6,电机将顺时针方向旋转将顺时针方向旋转。要停止直流电机的旋转,请按停止按钮。同样的方法可以用来控制使用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);
全部0条评论
快来发表一下你的评论吧 !