此示例演示如何使用MATLAB®和符号数学工具箱™对汽车活塞的运动进行建模。
定义一个汽车活塞的运动,并创建动画的活塞运动模型。
下图显示了一种汽车活塞的模型。活塞的移动部件由一连接杆(红线),活塞曲柄(绿线),和活塞气缸盖(灰色矩形)的。
通过定义参数描述了活塞的属性:
气缸行程长度
活塞内径
所述连接杆的长度
曲柄半径
曲柄角度
在曲轴位置定义坐标系的原点O。标记活塞头和曲轴位置为下止点(BDC)之间的最近距离。BDC的高度 。标记活塞头和曲轴位置为上止点(TDC)之间的最远距离。TDC的高度 。
下图是曲柄和连杆的示意图。
相对于活塞的原点的高度为
方法将活塞高度定义为符号函数<一个href="//www.tatmou.com/help/symbolic/syms.html" class="a">SYMS
函数。
SYMSpistHeight (L,θ)pistHeight(L,a,) = a*cos() +√(L^2-a^2*sin()^2)
设连杆长度为
曲柄半径是
。绘制活塞高度作为曲柄角的函数的间隔内的一个旋转[0 2 * PI]
。
fplot(pistHeight(150,50,θ-),[0 2 *π)xlabel(“曲柄角(弧度)”)ylabel ('高度(mm)')
活塞头是最高当活塞处于TDC并且曲柄角是0
或2 * PI
。活塞头是最低当活塞处于BDC和曲柄角是π
。
你也可以画出不同值的活塞高度
和
。创建一个表面标绘的活塞高度使用<一个href="//www.tatmou.com/help/symbolic/fsurf.html" class="a">fsurf
函数。显示活塞高度在区间内
和
。
fsurf(pistHeight(150,a,theta),[30 60 0 2*pi]) xlabel(曲柄半径(mm)的)ylabel (“曲柄角(弧度)”)zlabel('高度(mm)')
燃烧室的长度等于所述TDC位置和活塞高度之间的差值。活塞缸的体积可表示为 。
将活塞体积定义为符号函数,用表达式代替
同pistHeight
。
SYMSpistVol (L,θ,B)pistVol(L,一个,θ,B)= PI *(B / 2)^ 2 *(L +α-pistHeight)
pistVol(L,一个,θ,B)=
接下来,定义以下参数的值:
所述连接杆的长度
曲柄半径
孔直径
绘制活塞卷作为曲柄角的函数的间隔内的一个旋转[0 2 * PI]
。
fplot(pistVol(150,50,θ,86),[0 2 *π)xlabel(“曲柄角(弧度)”)ylabel (“体积(mm ^ 3)”)
活塞体积最小当活塞处于TDC并且曲柄角是0
或2 * PI
。活塞体积是最大的,当活塞处于BDC和曲柄角是π
。
假设前3秒曲柄转速为30转/分,然后在接下来的4秒内从30转/分稳步增加到80转/分,然后保持在80转/分。
通过使用定义的角速度作为时间的函数<一个href="//www.tatmou.com/help/symbolic/piecewise.html" class="a">分段
函数。角速度乘以
将转速从rpm转换为rad/sec。
SYMST0ŤrpmConv = 2 * PI / 60;angVel(T0)=分段(T0 <= 3,30,T0> 3&T0 <= 7,30 +四分之五十*(t0-3),T0> 7,80)* rpmConv
angVel(T0)=
通过积分角速度计算曲柄角度<一个href="//www.tatmou.com/help/symbolic/int.html" class="a">int
函数。假设初始曲柄角度为
。计算的角速度从积分0
至Ť
。
angPos (t) = int (angVel t0 0, t);
通过取代表达式找到活塞高度作为时间的函数angPos
对于曲柄角度。
H(T)= pistHeight(150,50,angPos)
H(T)=
绘制活塞高度作为时间的函数。注意,活塞高度的振荡变成3秒和7秒之间更快。
fplot(H(t)的,[0 10])xlabel(的时间(秒))ylabel ('高度(mm)')
创建给定变化的角速度移动的活塞的动画。
首先,创建一个新图形。绘制有固定位置的气缸壁。设置X设在和ÿ- 轴以相等的长度。
数字;情节([ - 43 -43],[50 210],“k”,'行宽'3)保持在;情节([43 43],[210],“k”,'行宽',3) plot([-43 43],[210 210],“k”,'行宽',3)轴等于;
然后,使用。创建活塞头的定格动画对象<一个href="//www.tatmou.com/help/symbolic/fanimator.html" class="a">fanimator
函数。默认情况下,fanimator
通过的范围内产生每单位时间的10帧创建动画对象Ť
从0到10型号活塞头作为具有厚度为10毫米,可变高度的矩形H (t)
。使用。绘制活塞头<一个href="//www.tatmou.com/help/matlab/ref/rectangle.html" class="a">矩形
函数。
fanimator(@rectangle,“位置”,[ - 43 H(t)的86 10],'FaceColor'(0.8 0.8 0.8))
添加连接杆和活塞曲柄的动画对象。添加一段文字来算经过的时间。
fanimator(@(t)的曲线图([0 50 * SIN(angPos(T))],[H(t)的50 * COS(angPos(T))]'R-','行宽'3))fanimator (@ (t)情节([0 50 *罪(angPos (t)], [0 50 * cos (angPos (t))),'G-','行宽',3))fanimator(@(t)的文本(-25,225,计时器:“+ num2str (t, 2)));持有从;
使用命令<一个href="//www.tatmou.com/help/symbolic/playanimation.html" class="a">那里
发挥移动活塞的动画。