• 首页

  • 动态

  • 随笔

  • 学习

  • 留言板

  • 文章归档

  • 友情链接

  • 关于页面
S w e e t 的 笔 记
S w e e t 的 笔 记

SuSweet

这个人有点懒,他是个学生,他只会摸鱼,并且从来不写个性签名。

04月
22
默认分类
电控
机械
算法
学习感悟

使用MATLAB的simulink进行无刷电机仿真

发表于 2022-04-22 • 字数统计 1810 • 被 1,340 人看爆

先开个坑,后面再填。
这个坑我会填的,因为这就是我的研究生方向。

不得不说,MATLAB真的是个神器啊。功能强大,只要想做的,基本都能做到。可惜我自己本科的时候,专业并不是控制,而是机械,因此很少用到MATLAB,除了有一节视觉识别的课程上稍微写了一点点东西之外,对这个软件一无所知。我实际开始接触这个软件并使用,是在大四跨专业保研成功后,进实验室搬砖开始。
在MATLAB上进行电机控制仿真,我们主要使用的是Simulink的功能,配合S-Function,用C语言编写控制代码来实现。这样的好处是,在C语言通用性的支持下,把控制代码移植到其他平台上实际应用会很方便。
在MATLAB中配置S-function的CPP编译器会有点坑,需要去安装对应MATLAB版本的编译器,并配置好系统变量。

配置完成后,可以在matlab中运行如下代码,会自动生成对应的C++ block模块。

%本文件用于模块的初始化设置 

%legacy_code('help');%打开help文档

setenv('MW_MINGW64_LOC','C:\mingw-w64\x86_64-6.3.0-win32-seh-rt_v5-rev2\mingw64');
mex -setup C++;

def = legacy_code('initialize');         %定义参数集变量

def.SFunctionName = 'bldc_ctl';  %定义s-function名称

def.SourceFiles = {'motor_ctrl.cpp','Tool_Filter.cpp','Tool_PID.cpp'};          %定义源文件
def.HeaderFiles = {'motor_ctrl.hpp','Tool_Filter.hpp','Tool_PID.hpp'};          %定义头文件
def.HostLibFiles = {''};                   %定义库文件
def.TargetLibFiles = {''};

def.IncPaths = {'..\Function'};     %定义头文件路径  若在目录下则不需设置
def.SrcPaths = {'..\Function'};      %定义源文件路径
def.LibPaths = {''};     %定义库文件路径

def.InitializeConditionsFcnSpec = 'void Motor_init(void)';     %初始化函数定义
def.StartFcnSpec = '';                                   %启动函数定义
def.OutputFcnSpec = 'void Motor_ctrl(double u1[3], int8 u2[1], double u3[1], double u4[2], double u5[1], double y1[3], double y2[13])'   %输出函数定义
def.TerminateFcnSpec = '';                               %停止函数定义

def.Options.language = 'C++';
def.SampleTime = [1e-6];   %定义采样时间   若不设置则与输入的采样时间相同

cd('generate');

%legacy_code('sfcn_cmex_generate', def);         %生成文件
%legacy_code('compile', def);                    %编译文件
%legacy_code('slblock_generate', def);           %封装为模块

% legacy_code('sfcn_tlc_generate', def);           %生成tlc文件
legacy_code('generate_for_sim', def);       %完成s-function文件的生成,编译,模块封装
% legacy_code('rtwmakecfg_generate', def);   %生成m文件
cd('../')

如果一切顺利,那么生成对应的模块大概会像这个样子:
image
也可能会不太像,跟上面的代码配置相关。

待续。

分享到:
通过MATLAB进行系统辨识
指针式CPU与内存占用表DIY
  • 文章目录
  • 站点概览
SuSweet

可爱的 SuSweet

你能抓到我么?

QQ Email RSS
看爆 Top5
  • 代码里中文注释变成锟斤拷啦 6,223次看爆
  • Code Composer Studio (CCS)报错program will not fit into available memory (280049C)(#10099-D) 3,886次看爆
  • 解决python中cv2无法自动补全的方法 3,680次看爆
  • CCS中IQmath库报错(_IQ24div(long, long)没有定义) 3,487次看爆
  • 使用GM6020电机参数的Simulink电机控制仿真记录 3,407次看爆

很高兴在这里遇到您!如果您遇到什么问题,或者想留下您的链接,欢迎->网站问题反馈

当然,您也可以通过电子邮件联系我。

Copyright © 2025 SuSweet 粤ICP备2022045669号

由 Halo 强力驱动 · Theme by Sagiri · 站点地图