目录
一、软件课程报告综述 2
(一)软件简介 2
(二)学习内容 2
(三)学习目标 2
二、Matlab基本操作运用 3
1、命令文件的建立、运行、格式 3
2、绘图功能(二维、三维、极坐标) 3
三、Simulink部分 6
1、simulink操作
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
说明 8
2、电池恒流充放电模型搭建情况 12
3、车辆动力学模型 8
四、System function(s函数)部分 15
(一)S-函数的基本概念 9
(二)S-函数的使用流程 15
(三)M文件S-函数的编写 10
(四)使用S-函数实现系统:y=2*u 10
(五) 使用S-函数构造分段函数 10
五、学习收获感想 12
一、软件课程报告综述:
汽车
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
软件(自学)---基于Matlab的电动车控制系统
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
及
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
Matlab软件简介:Matlab是高性能的数值计算和可视化软件,它集数值分析、矩阵计算、信号处理和图形显示于一体,构成了一个方便、界面友好的用户环境。Matlab的出现给控制系统的分析提供了极大方便。
一般控制系统的分析包含以下几个步骤:
(1)画出系统的功能方框图;
(2)建立系统的数学模型;
(3)对系统进行稳定性分析,确定相关的比例参数;
(4)利用Matlab中的Simulink所提供的功能对系统进行仿真。
本课程主要学习内容:
应用工程软件Matlab以及Simulink,对电动车驱动系统中涉及的电机、电池、超级电容及DCDC等主要功率器件进行分析,在此基础上,对各个功率器件的控制系统进行控制器设计及控制效果测试分析。从而实现对电动车驱动、制动、电机能耗及电池寿命的优化控制。
学习目标:
1. 掌握Matlab的使用方法,以及Simulink基本模块的仿真工作原理;
2. 分别建立基于Matlab/Simulink的电池恒流放电模型;
3. 建立简单车辆动力学模型,熟悉Simulink基本模块功能;
4. 实现简单函数、分段函数的s-function函数编写。
例1 以上是对数学公式搭建情况的举例说明:
例2 以下是对软件中画图功能的举例应用:
电压变化
波形图显示内容
电流变化(恒流1A)
3、车辆动力学模型
车辆纵向动力学系统模型是一个复杂的非线性模型,此处直接引用Thomas D. Gillespie的分析结果[15],得到其动力学微分方程为:
式中:
为电机转矩(
);
i0为主传动比;
ηT为机械传动效率;
r为轮胎半径(m);
m为车辆的质量(kg);
g为重力加速度(
)
f为滚动阻力系数;
为空气阻力系数,
;
A为车辆迎风面积(m2);
为空气密度,一般
;
为车辆行驶速度(
);
为道路坡度角(
);
为车辆的旋转质量的换算系数,取
;
为车辆行驶的加速度(
)。
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
1 小型电动车参数表
质量m/kg
200
车辆迎风面积A/m2
0.25
驱动电机额定功率Pe/kW
0.6
最高车速vmax/km·h-1
15
滚动阻力系数f
0.02
机械传动效率ηT
0.9
轮胎半径r/m
0.14
主传动比i0
6
模型搭建情况如下:
运行情况如下图
2
4、System function(s-函数)部分
(一)s-函数的基本概念
S-函数是System function系统函数的简称,是指采用非图形化(即计算机语言,而非Simulink系统模块)的方式描述的功能模块。在MATLAB中,用户除了可以使用MATLAB代码编写S-函数以外,可以使用C、C++、FORTRAN或Ada语言编写S-函数,只不过用这些语言编写程序时需要用编译器生成动态连接库(DLL)文件,然后在Simulink中直接调用。 S-函数是由一种特殊的语法构成的,用来描述并实现动态系统的。它采用一种特殊的调用语法,使函数和Simulink求解器进行交互。这种交互与求解器和Simulink仿真模型间的交互相类似:S-函数接受来Simulink求解器的相关信息,并对求解器发出的命令做出适当的响应。 S-函数作为与其它语言结合的接口,可以使用这个语言所提供的强大功能。例如,使用MATLAB语言编写的S-函数称为M文件S-函数,它可以充分利用MATLAB所提供的丰富资源,方便地调用各种工具箱函数和图形函数。另外,S-函数可以使用其他多种语言编写,因此可以实现代码的移植,即将已有的代码结合进来,而不需在Simulink中重新实现算法。 S-函数中采用非图形化的方式描述系统,其内部采用文本方式输入描述系统的公式、方程,这种方式非常适合复杂动态系统的数学描述,且可以在仿真过程中对仿真进行精确的控制。
(2)s-函数使用流程
(1)在系统的Simulink仿真框图中添加S-function模块,并进行正确的设置;
(2)创建S-函数源文件。创建S-函数源文件的方法有多种。Simulink在S-function Examples模型库中为用户提供了针对不同语言的很多S-函数模板和例子,可以根据自己的需要修改相应的模板或例子即可完成S-函数源文件的编写工作;
(3)在系统的Simulink仿真框图中按照定义好的功能连接输入输出端口。 这里需要说明的是,S-function模块中S-函数名称必须和用户建立的S-函数源文件的名称完全相同,S-function模块中的S-函数参数列表必须按照S-函数源文件中的参数顺序赋值,且参数之间需要用逗号隔开。另外,也可以使用子系统封装技术对S-函数进行封装,这样做的好处是可以增强系统模型的可读性。
(3)M文件S-函数的编写
M文件S-函数模板文件的代码解析如下:
%主函数
function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);
case 2,
sys=mdlUpdate(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
case 9,
sys=mdlTerminate(t,x,u);
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end % 主函数结束,下面是各个子函数,即各个仿真例程
% 初始化例程子函数:提供状态、输入、输出、采样时间数目和初始状态的值。
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes; % 生成sizes数据结构
sizes.NumContStates = 0; % 连续状态数,缺省为0
sizes.NumDiscStates = 0; % 离散状态数,缺省为0
sizes.NumOutputs = 0; % 输出量个数,缺省为0
sizes.NumInputs = 0; % 输入量个数,缺省为0
sizes.DirFeedthrough = 1; % 有无直接馈入,有取1,无取0,缺省为1
sizes.NumSampleTimes = 1; % 采样时间个数,至少取1
sys = simsizes(sizes); % 返回sizes数据结构所包含的信息
x0 = []; % 设置初始状态
str = []; % 保留变量,置为空矩阵
ts = [0 0]; % 采样时间:[采样周期 偏移量],采样时间取0表示为连续系统
% 计算导数例程子函数:计算连续状态的导数,用户需在此例程输入连续状态方程。
% 该子函数可以不存在。
function sys=mdlDerivatives(t,x,u)
sys = []; % sys表示连续状态导数
% 状态更新例程子函数:计算离散状态的更新。
% 用户除了需在此输入离散状态方程外,还可以输入其它每个仿真步长都有必要执行的代码。
% 该子函数可以不存在。
function sys=mdlUpdate(t,x,u)
sys = []; % sys表示下一个离散状态,即x(k+1)
% 计算输出例程子函数: 计算模块输出。该子函数必须存在,用户在此输入系统的输出方程。
function sys=mdlOutputs(t,x,u)
sys = []; % sys表示系统输出y
% 计算下一个采样时间, 只有变采样时间系统才调用此仿真例程。
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1; % 设置下一次的采样时间是1s以后
sys = t + sampleTime; % sys 表示下一个采样时间点
% 仿真结束调用的例程函数:用户需在此输入结束仿真所需要的必要工作。
function sys=mdlTerminate(t,x,u)
sys = []; 、M文件S-函数模板文件代码
M文件S-函数模板文件的代码如下:
%主函数
function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);
case 2,
sys=mdlUpdate(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
case 9,
sys=mdlTerminate(t,x,u);