基于模型的设计——MCU篇Word文档下载推荐.docx
《基于模型的设计——MCU篇Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于模型的设计——MCU篇Word文档下载推荐.docx(63页珍藏版)》请在冰点文库上搜索。
端口与子系统模块(ports&
subsystems)
信号属性模块(signalattributes)
信号路由模块(signalrouting)
接收器模块(sinks)
源模块(sources)
用户自定义模块(user-definedfunctions)
附加操作模块(additionalmath&
discrete)
下面将详细介绍几种使用频率较高的模块库。
1.常用模块库(commonlyusedblock)
常用模块库中的模块是simulink所有模块库中使用频率最高模块的合集,主要是为了方便用户以最快的速度建立模型。
常用模块包含如图2.1.3所示的成员,模块功能如表2.1.2所示:
图2.1.3常用模块库
表2.1.2常用模块库列表
名称
功能
BusCreator
生成总线
BusSelector
分离总线
Constant
常量信号
DataTypeConversion
转换数据类型
Demux
抽取向量信号中的元素并输出
Discrete-TimeIntegrator
时间离散积分
Gain
放大器
Ground
接地
Inport
产生输入口
Integrator,IntegratorLimited
信号积分
LogicalOperator
逻辑运算
Mux
将输入信号合成为向量
Outport
产生输出口
Product
标量和非标量乘除或矩阵乘法和转置
RealationalOperator
对输入做关系运算
Saturation
饱和
ScopeandFloatingScope
显示仿真信号
Subsystem,AtomicSubsystem,NonvitualSubsystem,CodeReuseSubsystem
以子系统表示其他系统
Sum,Add,Subtract,SumofElements
加或减
Switch
通过第二个输入值来输出第一或第二个输入。
Terminator
终止未连接的输出口
UnitDelay
延迟一个采样周期
2.连续模块库(continuous)
连续模块库中的模块如2.1.4图所示,它包含了搭建连续系统所涉及到的绝大部分模块,这些模块的功能如2.1.3表所示:
图2.1.4连续模块库
表2.1.3连续模块库列表
Derivative
微分
Integrator
积分
IntegratorLimited
有限积分
Integrator2nd-order
二阶积分
Integrator2nd-orderLimited
二阶有限积分
PIDController
比例微积分控制器
PIDController(2DOF)
双自由度比例微积分控制器
State-Space
状态空间
TransferFcn
传递函数
TransportDelay
时间延迟
VariableTimeDelay
可变时间延迟
VariableTransportDelay
Zero-Pole
零极点
结合本书是讲述基于模型设计的思想开发MCU器件,本章将以Simulink在控制电机中的应用为例,介绍Simulink的建模与调试技术。
这里值得一提的是PID控制模块。
PID控制器就是根据系统的误差,利用比例、积分、微分计算出控制量进行控制的。
它是在较新版本的Simulink中才新增并逐步完善的一个模块,R2010b版已经具备自动调节功能。
具体原理和使用将在后面分析。
3.离散模块库(discontinuous)
离散模块在涉及数字信号系统中被广泛使用,基于这种考虑,mathworks公司单独列出了离散系统模块库。
离散模块库中的模块和其功能如2.1.5图所列:
图2.1.5离散模块库
其中常用模块的功能如表2.1.4所示:
表2.1.4离散模块库列表
Difference
差分
DiscreteDerivative
离散微分方程
DiscreteFIRFilter
离散FIR滤波器
DiscreteFilter
离散滤波器
DiscretePIDController
离散PID控制器
DiscretePIDController(2DOF)
离散双自由度PID控制器
DiscreteState-Space
离散状态空间
DiscreteTransferFcn
离散传递函数
DiscreteZero-Pole
离散零极点
DiscreteTimeIntegrator
离散时间积分
1st-orderHold
一阶保持器
IntegerDelay
采样保持
Memory
记忆
TappedDelay
采样周期延迟
TransferFcn1st-order
一阶传递函数
TransferFcnLeadorLag
传递函数(超前或延迟)
TransferFcnRealZero
传递函数(有零点无极点)
UnitDelay
单位延迟
Zero-OrderHold
零阶保持器
4.数学运算模块库(mathoperations)
数学运算模块将很多数学运算封装成模块的形式,使数学运算操作大大简化,减少了很多程序设计上的繁琐过程。
此模块库所包含的模块如图2.1.6所示:
图2.1.6数学运算模块库
其中常用模块的功能如表2.1.5所示:
表2.1.5数学运算模块库列表
Sum
对输入求代数和
RoundingFunction
取整
常量增益
MinMax
求最值
SliderGain
可用滑动条改变的增益
TrigonometricFunction
三角函数
Product
对输入求积或商
AlgebraicConstraint
强制驶入信号为0
DotProduct
点积
ComplextoMagnitude-Angle
复数的幅值相角
Sign
取输入的正负符号
Magnitude-AngletoComplex
根据幅值相角得到复数
Abs
绝对值(模)
ComplextoReal-Imag
复数的实部虚部
MathFunction
数学运算函数
Real-Imagtocomplex
由实部虚部求复数
5.信号源模块库(signalattributes)
信号源模块库如2.1.7图所示:
图2.1.7信号源模块库
其中常用模块的功能如表2.1.6所示:
表2.1.6信号源模块库列表
Band-LimitedWhiteNoise
限带白噪声
ChirpSignal
频率变化的正弦信号
Clock
时钟信号
常数
CounterLimited
受限计数器
DigitalClock
数字时钟
EnumeratedConstant
枚举常数
FromFile
从文件读数据
FromWorkSpace
从工作空间读数据
输入接口
PulseGenerator
脉冲发生器
Ramp
线性增或减的信号
RandomNumber
随机数
RepeatingSequence
重复系列
RepeatingSequenceInterpolated
重复序列插值
RepeatingSequenceStair
阶梯状重复序列
SignalBuilder
产生分段线性的可交替信号
SignalGenerator
信号发生器
SineWave
正弦信号
Step
阶跃信号
UniformRandomNumber
平均分布的随机信号
6.信号接收模块库(sinks)
信号接收模块库如图2.1.8所示:
图2.1.8信号接收模块库
其中常用模块的功能如表2.1.7所示:
表2.1.7信号接收模块库列表
Display
显示输入值
Output
输出端口
StopSimulation
非零时停止仿真
Terminator
终止输出信号
ToFile
输出到文件
ToWorkSpace
输出到工作空间
XYGragh
作图
7.用户自定义模块库(user-definedfunctions)
用户自定义模块库如图2.1.9所示:
图2.1.9用户自定义模块库
其中常用模块的功能如表2.1.8所示:
表2.1.8用户自定义模块库列表
EmbeddedMATLABFunction
嵌入式MATLAB函数
Fcn
各种函数组合
Level-2M-FileS-Function
二级M文件S函数
MATLABFcn
使用MATLAB函数作为输入
S
-Function
S函数
S-FunctionBuilder
S函数构造器
2.1.3模块的基本操作
1.模块的查找
在模块库页面的左侧以树形结构显示了一系列的子库,如连续模块库,离散模块库,数学运算模块库,当用户对这些模块比较熟悉以后,可以非常方便、快捷的找到自己需要的模块。
如果是刚刚接触Simulink的用户,这里还提供了查找功能,方便不熟悉它的人使用。
如图2.1.10所示:
图2.1.10模块查找
当用户找到自己所需要的模块后,就要把它复制到模型编辑窗口中以便进行下一步的操作。
这里可以直接把模块拖拽到编辑窗口中完成复制,也可以右键单击,在弹出菜单中选择“Addtonewmodel”,如图2.1.11所示。
图2.1.11添加模块
2.模块的选定
模块被加入到编辑窗口以后,要通过选定模块才能对其进行操作。
选定单个模块可以直接用鼠标左键单击目标模块;
也可以按下鼠标任意键拖动,此时会出现一个虚线框,当虚线框包围了目标模块时放开鼠标,即可选中模块。
若是要选中多个模块就需要用上述的虚线框法来操作,如图2.1.12所示。
选择编辑窗口中所有对象的方法是单击菜单Edit→SelectAll。
图2.1.12选定一组对象
3.模块的连接和调整
l模块的调整
为了使模型更加美观和符合逻辑,有时需要对模块的大小、方向等做适当的修改。
模块大小的调整。
选中模块,用鼠标选中模块周围4个黑色方块中的任意一个开始拖动,这时会出现一个虚线框表示的新模块大小示意,调整至需要的大小后释放鼠标即可,如图2.1.13所示。
图2.1.13调整模块大小
模块的旋转。
选中模块想要旋转的模块,在菜单中选择Format,在次级目录中选择FlipBlock可以使模块180°
旋转;
选择RotateBlock使模块旋转90°
。
如图2.1.14所示:
图2.1.14模块翻转
l模块的连接
模型中的信号是从模块经连线传输到下一个模块的,因此模块间的连线被称为信号线,当模块设置好以后,只有将它们按一定的顺序连接起来才能完成一个正确的模型。
自动连线:
Simulink系统具备自动连线的功能,步骤如下:
选择一个具有信号输出的模块,按下“ctrl”键,然后用鼠标左键单击要连接到的模块。
如图2.1.15所示:
图2.1.15自动连线
手动连线。
用户也可以选择自己手动连线。
把鼠标指针移动到第一个模块的输出端口,这时指针的形状会变为一个十字,如图2.1.16所示。
图2.1.16手动连线
按下并拖动鼠标至目标模块的输入端口处,这时鼠标指针会变成一个双十字,释放鼠标后两个模块就连接起来了。
如图2.1.17所示:
图2.1.17手动连线
提示:
用手动方法连接模块时是可以从输出到输入口划连接线的。
分支连线:
是指从一条已经存在的连线上另外再拉出一条线用来连接一个模块的输入口。
这时,原连线和分支连线上传输的是同一个信号。
把鼠标指针移动到原有连线上,按下“ctrl”键,拖动鼠标左键到目标模块的端口,释放鼠标,完成连线。
如图2.1.18所示:
图2.1.18分支连线
移动连线:
把鼠标移动到想要移动的连线处,按下左键并拖动到目标位置,释放按键,完成移动。
如图2.1.19所示:
图2.1.19移动连线
连线的折曲:
选择要折曲的线段,将鼠标移动到要折曲的点上,按下“shift”键,并按下鼠标左键,这时指针会变成一个圆圈状,拖动折曲点至目标位置后释放鼠标,完成折曲。
如图2.1.20所示:
图2.1.20曲折连线
连线中插入模块:
如果模块只有一个输入口和输出口,那么可以将该模块直接插入到一天连线中。
如图2.1.21所示:
图2.1.21连线中插入模块
连线的注释:
有时为了增加模型的可读性,常常会给信号线加上注释。
在要添加注释的连线附近双击鼠标左键会出现一个文本输入框,用户可以根据需要添加适当的注释,注释的位置是可以通过鼠标拖拽更改位置的。
如图2.1.22所示:
图2.1.22连线的注释
2.2搭建直流电机模型
直流电机是控制系统中的常用组件,它给系统提供旋转动力或者和其他组件配合进行传动。
下面将通过一个直流电机模型(DCMotor)来介绍如何在Simulink中建立LTI(LTILineartime-invariant)系统并实现对其转速的控制。
2.2.1数学模型分析
电机可分为电气部件和机械部件两部分,电机模型如图2.2.1所示。
图2.2.1电机模型
电机的电气部分和机械部分是通过转子联系起来的,转子即为电能与机械能转化的枢纽。
这两部分的方程都要受到转子感应电动势的影响。
对于左边的电气部分,由电磁感应定律可知,转子会产生一个反向的感应电动势来阻止转子的运转,外界电源Vin要克服反向感应电动势做功,才能使转子转动。
我们可以先把其他元件抽象为电阻和电感,把精力集中到主要矛盾上来:
电机如何平稳运转。
当电机正常运转时,先分析电气部分回路:
外部电源Vin、电阻和电感上的电压降VR和VL、转子上的反向感应电动势Vemf在同一个回路中。
由电路分析的基础知识KVL定律(基尔霍夫电压定律)可以得到:
Vin=VR+VL+Vemf①
对于右边的机械部分,稍复杂一些。
当电动机带着负载匀速旋转时,其输出转矩必定与负载转矩相等。
在非理想电机模型中(即不忽略机械、电磁损耗),轴承的摩擦、电刷和换向器的摩擦、转子铁心中的涡流、磁滞损耗都要引起阻转矩。
此阻转矩用Tf表示。
这样,电动机的输出转矩便等于电磁转矩T减去电机本身的阻转矩Tf。
所以,当电机克服负载阻转矩TL匀速旋转时,则有:
TL=TO=T-Tf②
实际上,电机经常运行在转速变化的情况下,例如启动、停转或反转等,因此必须讨论转速改变时的转矩平衡关系。
当电机的转速改变时,由于电机及负载具有转动惯量,将产生惯性转矩Tj,则有:
Tj=J*dωdt。
其中J是负载和电动机的转动惯量,ω是电动机的角速度,dωdt是其角加速度。
为了使模型能覆盖这种更一般的情况,可根据牛顿力学定律对式②做一些微调:
TO-TL=Tj=J*dωdt③
得到表示电机基本原理的方程后,需要设置一些参数以备建模使用。
如:
电阻R,电感L,转动惯量J,转矩Tm,旋转角度θ,转矩常量Km,感应电动势常量Kemf,粘滞摩擦系数Kf。
因为ωt=θ,Vemf=Kemf*ω(t),式①可化为:
Ldidt+Ri=Vin-Vemf④
又因为θ=dωdt,式③可化为:
J*θ+Kfθ=Tm⑤
将④,⑤两式子用电压Vin和转子角速度ω表示出来可写为:
didt=Vint-Rit-Kemfω(t)L⑥
dωdt=Kmit-Kfω(t)J⑦
为了表示方便,我们对上式做Laplace变换,转换到S域。
根据拉氏变换的规则,在0初始条件下,一阶导数→S;
二阶导数→S2,则可得到:
Is=Vins-RIs-Kemfω(s)L⑧
ωs=KmIs-Kfω(s)J⑨
合并化简后得到系统传输函数:
ω(s)Vin(s)=KmJLS2+KfL+JRS+(KfR+KemfKm)⑩
至此,分析了直流电机的传递函数,下面将利用Simulink建立直流电机模型。
2.2.2模型搭建与参数设置
模型搭建
直流电机的模型需要用到source库中的“step”模块,sinks库中的“scope”模块,mathoperations库中的“add”、“gain”,和continuous库中的“integrator”。
1.添加source库中的“step”模块到模型中。
如图2.2.2所示:
图2.2.2step模块
默认情况下,信号从第一秒处产生跃变。
2.添加sinks库中的“scope”模块到模型中,如图2.2.3所示。
图2.2.3scope模块
示波器模块是可以同时显示多个输入信号的。
例如,双击打开示波器模块,单击“”按钮,在numberofaxes中输入参数3即可使示波器变为3个输入口,如图2.2.4。
图2.2.4设置scope模块
3.添加mathoperations库中的“add”模块到模型中,如图2.2.5所示。
图2.2.5add模块
为了正确表达电机模型的系统方程,需要两个“Add”模块,其符号参数Listofsigns需要分别设置为“+--”和“+-”,这样“Add”模块会分别含有2个和3个输入接口。
如图2.2.6所示:
图2.2.6设置add模块
4.添加mathoperations库中的“gain”模块到模型中,如图2.2.7所示。
图2.2.7gain模块
“gain”模块的参数需要修改。
该模型需要6个“gain”模块,参数分别设置为:
1/L、Km、1/J、R、Kf、Kemf。
可以通过双击放大器模块打开其参数设置页面,然后输入参数。
如图2.2.8所示:
图2.2.8设置gain模块
5.添加continuous库中的“integrator”模块到模型中,如图2.2.9所示。
图2.2.9integrator模块
模型中需要两个“Integrator”模块,参数可采用默认值。
6.按照式⑩表达的逻辑,在第一个积分器之前算子为S2,其系数为JL;
第一个和第二个积分器之间算子为S,其系数为KfL+JR;
第二个积分器之后算子为1,其系数为(KfR+KemfKm)。
由此可以连接其中的各个模块,得到如图2.2.10所示的模型。
图2.2.10Simulink电机模型
左侧的模块对应于公式⑧,其输出为转矩Torque;
右侧的模块对应于公式⑨,其输出为转速ω(t)。
此模型实现了系统传输函数所描述的由输入电压控制直流电机转速的功能。
当输入信号为“Step”阶跃信号时,输出为其阶跃响应;
当输入为外部实际控制信号时,电机转速ω(t)即由输入信号所控制。
为了后面更好的分析电机模型,在仿真时同时输出其转动控制信号和输出转速、角度和转矩。
实现原理如下:
Ø
控制信号与输出转速比较在添加SignalRouting库中的“Mxx”模块到模型中,如图2.2.11所示。
图2.2.11mux模块
修改模型如图2.2.12所示:
图2.2.12Simulink电机模型
扭矩信号输出如图2.2.10所示,左边框图模块组的输出既是转矩信号。
角度信号输出由电机数学模型公式
ω(s)Vin(s)=KmJLS2+KfL+JRs+(KfR+KemfKm)⑩
可知该模型的输出为ω(t),即旋转角速度,且θ=0tw(τ)dτ,因此,模型的输出经过一个积分器即转化为角度,修改模型如图2.2.13:
图2.2.13Simulink电机模型
参数设置
最后,在仿真之前一定要设置模