Matlab学习——曲柄滑块的运动仿真

1、图解法

①机构位置分析的图解法

选取适当的长度比例尺
μ l = 0.6 : 1 {\mu _l} = 0.6:1 μl=0.6:1
选取曲柄l1的铰链中心A 点的位置,

按主动杆
r = 60 m m {\rm{r}} = 60mm r=60mm
连杆
l = 300 m m l = 300mm l=300mm
初始位置
θ 1 = 0 {\theta _1} = 0 θ1=0
依次作图确定出滑块的导路位置线 x x xx xx和铰链中心B和C的位置,然后画出连杆2和滑块3的位置BC及C和两处的位置参数 θ 2 \theta_2 θ2 s s s的位置。
Matlab学习——曲柄滑块的运动仿真_第1张图片

②速度分析的图解法(瞬心法)

Matlab学习——曲柄滑块的运动仿真_第2张图片

如上图所示,有构件数目为4,则瞬心数目为 C 4 2 = 6 C_4^2 = 6 C42=6。构件1和构件2、构件2和构件3、构件1和构件4的瞬心分别是转动副 p 12 {p_{12}} p12 p 23 {p_{23}} p23 p 14 {p_{14}} p14。构件3和构件4为移动副所以瞬心 p 34 {p_{34}} p34在垂直导路的方向无穷远处。根据瞬心多边形法分别求出 p 13 {p_{13}} p13 p 24 {p_{24}} p24

Matlab学习——曲柄滑块的运动仿真_第3张图片

根据速度瞬心定理得
v p 13 → = ω 1 ( p 14 p 13 ‾ μ l ) \overrightarrow {{v_{{p_{13}}}}} = {\omega _1}(\overline {{p_{14}}{p_{13}}} {\mu _l}) vp13 =ω1(p14p13μl)
则滑块的速度
v 3 → = v p 13 → \overrightarrow {{v_3}} = \overrightarrow {{v_{{p_{13}}}}} v3 =vp13

③加速度分析的图解法

Matlab学习——曲柄滑块的运动仿真_第4张图片

所以
a C → = a B → + a C B n → + a C B τ → \overrightarrow {{a_C}} = \overrightarrow {{a_B}} + \overrightarrow {a_{CB}^n} + \overrightarrow {a_{CB}^\tau } aC =aB +aCBn +aCBτ
根据速度分析 ω 2 ω 1 = p 12 p 14 ‾ p 12 p 24 ‾ \frac{{{\omega _2}}}{{{\omega _1}}} = \frac{{\overline {{p_{12}}{p_{14}}} }}{{\overline {{p_{12}}{p_{24}}} }} ω1ω2=p12p24p12p14,可求出 ω 2 {\omega _2} ω2

a B = ω 1 2 l 1 ( 已 知 ) , a C B n = ω 2 2 l 2 ( 已 知 ) , a C B τ = α 2 l 2 ( 大 小 未 知 ) {a_B} = {\omega _1}^2{l_1}(已知),a_{CB}^n = {\omega _2}^2{l_2}(已知),a_{CB}^\tau = {\alpha _2}{l_2}(大小未知) aB=ω12l1()aCBn=ω22l2()aCBτ=α2l2()

Matlab学习——曲柄滑块的运动仿真_第5张图片

滑块加速度为
a C = μ a p c ‾ {a_C} = {\mu _a}\overline {pc} aC=μapc

2、solidworks分析法

①滑块线位移曲线

Matlab学习——曲柄滑块的运动仿真_第6张图片

②滑块线速度曲线

Matlab学习——曲柄滑块的运动仿真_第7张图片

③滑块线加速度曲线

Matlab学习——曲柄滑块的运动仿真_第8张图片

④连杆角位移曲线

Matlab学习——曲柄滑块的运动仿真_第9张图片

⑤连杆角速度曲线

Matlab学习——曲柄滑块的运动仿真_第10张图片

⑥连杆角加速度曲线

Matlab学习——曲柄滑块的运动仿真_第11张图片

3、解析法

Matlab学习——曲柄滑块的运动仿真_第12张图片

①位置分析

对封闭图形ABCA可知,封闭矢量方程式 (3-1)
l 1 → + l 2 → = s \overrightarrow {l1} + \overrightarrow {l2} = s l1 +l2 =s
转化为复数的形式(3-2)

l 1 e i θ 1 + l 2 e i θ 2 = s l1{e^{i{\theta _1}}} + l2{e^{i{\theta _2}}} = s l1eiθ1+l2eiθ2=s
根据欧拉公式(3-3)
e i θ = cos ⁡ ( θ ) + sin ⁡ ( θ ) i {e^{^{i\theta }}} = \cos (\theta ) + \sin (\theta )i eiθ=cos(θ)+sin(θ)i

将实部与虚部分离得 (3-4)
l 1 cos ⁡ θ 1 + l 2 cos ⁡ θ 2 = s l 1 sin ⁡ θ 1 + l 2 sin ⁡ θ 2 = 0 \begin{array}{l} l1\cos {\theta _1} + l2\cos {\theta _2} = s\\ l1\sin {\theta _1} + l2\sin {\theta _2} = 0 \end{array} l1cosθ1+l2cosθ2=sl1sinθ1+l2sinθ2=0

由上式得(3-5)
θ 2 = arcsin ⁡ ( − l 1 sin ⁡ θ 1 l 2 ) s = l 1 cos ⁡ θ 1 + l 2 cos ⁡ θ 2 \begin{array}{l} {\theta _2} = \arcsin (\frac{{ - l1\sin {\theta _1}}}{{l2}})\\ s = l1\cos {\theta _1} + l2\cos {\theta _2} \end{array} θ2=arcsin(l2l1sinθ1)s=l1cosθ1+l2cosθ2

代码相关部分

theta2=asin((e-l1 * sin(theta1))/l2);  

s=l1 * cos(theta1) + l2 * cos(theta2); 

②速度分析

由(3-2)式对时间求一次导得速度关系(3-6)
i l 1 ω 1 e i θ 1 + i l 2 ω 2 e i θ 2 = v il1{\omega _1}{e^{i{\theta _1}}} + il2{\omega _2}{e^{i{\theta _2}}} = v il1ω1eiθ1+il2ω2eiθ2=v
将虚部与实部分离得(3-7)
l 1 ω 1 cos ⁡ θ 1 + l 2 ω 2 cos ⁡ θ 2 = 0 − l 1 ω 1 sin ⁡ θ 1 − l 2 ω 2 sin ⁡ θ 2 = v \begin{array}{l} l1{\omega _1}\cos {\theta _1} + l2{\omega _2}\cos {\theta _2} = 0\\ -l1{\omega _1}\sin {\theta _1} - l2{\omega _2}\sin {\theta _2} = v \end{array} l1ω1cosθ1+l2ω2cosθ2=0l1ω1sinθ1l2ω2sinθ2=v
用矩阵可表示为(3-8)
( l 2 sin ⁡ θ 2 1 − l 2 cos ⁡ θ 2 0 ) ( ω 2 v ) = ω 1 ( − l 1 sin ⁡ θ 1 l 1 cos ⁡ θ 1 ) {\begin{pmatrix} {l2\sin {\theta _2}}&1\\ { -l2\cos {\theta _2}}&0 \end{pmatrix}} \begin{pmatrix} {\omega _2}\\ v \end{pmatrix}= {\omega _1} \begin{pmatrix} -l1\sin {\theta _1}\\ l1\cos {\theta _1} \end{pmatrix} (l2sinθ2l2cosθ210)(ω2v)=ω1(l1sinθ1l1cosθ1)
可根据上式求出角速度 ω 2 {\omega _2} ω2和滑块速度v 。

代码相关部分

A=[l2*sin(theta2), 1; -l2*cos(theta2), 0]; 
B=[-l1*sin(theta1); l1*cos(theta1)];  
% ‘\’求解关于 x 的线性方程组 Ax = B 
%  eg: x=A\B 
omega=A \ (omega1*B);         
omega2=omega(1); 
v=omega(2); 

③加速度分析

由(3-6)式求一次导可得加速度关系式,矩阵表示为(3-9)
( l 2 sin ⁡ θ 2 1 − l 2 cos ⁡ θ 2 0 ) ( α 2 a ) + ( ω 2 l 2 cos ⁡ θ 2 0 ω 2 l 2 sin ⁡ θ 2 0 ) ( ω 2 v ) = ω 1 ( − ω 1 l 1 cos ⁡ θ 1 − ω 1 l 1 sin ⁡ θ 1 ) {\begin{pmatrix} {l2\sin {\theta _2}}&1\\ { -l2\cos {\theta _2}}&0 \end{pmatrix}} \begin{pmatrix} {\alpha _2}\\ a \end{pmatrix} + {\begin{pmatrix} {{\omega _2}l2\cos {\theta _2}}&0\\ {{\omega _2}l2\sin {\theta _2}}&0 \end{pmatrix}} \begin{pmatrix} {\omega _2}\\ v \end{pmatrix} = {\omega _1} \begin{pmatrix} -{\omega _1}l1\cos {\theta _1}\\ -{\omega _1}l1\sin {\theta _1} \end{pmatrix} (l2sinθ2l2cosθ210)(α2a)+(ω2l2cosθ2ω2l2sinθ200)(ω2v)=ω1(ω1l1cosθ1ω1l1sinθ1)
代码相关部分

Aa=[omega2*l2*cos(theta2), 0; 
	omega2*l2*sin(theta2), 0];        
Ba= [-omega1*l1*cos(theta1);       
	-omega1*l1*sin(theta1)];      
alpha=A \(-Aa*omega+alpha1*B+omega1*Ba);  
alpha2 = alpha(1); 
a = alpha(2); 

CODE

clear;
r = 60;  % 主动杆杆长
l = 300;  % 连杆杆长
e = 0;  % 偏心距
hd = pi/180;
du = 180/pi;
omega1 = 20; % 主动杆角速度
alpha1 = 0; % 主动杆角加速度

% for循环获取0-4pi构件2角位移、滑块位移、构件2角速度、滑块线速度、构件2角加速度、滑块线加速度
for n1= 1:720
    theta1(n1)=(n1-1)*hd;  % 0-4pi
    [theta2(n1) , s(n1) , omega2(n1), v(n1) , alpha2(n1), a(n1)] = slider_crank(theta1(n1) , omega1, alpha1, r, l, e);
end

figure(1);
n = 1:720;
% 位移曲线图
subplot(2, 2, 1);
yyaxis left;
plot(theta1*du, theta2*du);
ylabel('连杆角位移/(\circ)');
yyaxis right;
plot(theta1*du, s);
ylabel('滑块位移/mm');
xlabel('曲柄转角\theta_1/(\circ))');
title('位移曲线图');
xlim([0, 720]);
x_new = linspace(0, 720, 5);
xticks(x_new)
grid on;

%速度曲线图
subplot(2,2,2);
yyaxis left;
plot(theta1*du, omega2);
ylabel('连杆角速度/(rad/s)');
yyaxis right;
plot(theta1*du, v/1000);
ylabel('滑块速度/(m/s)');
xlabel('曲柄转角\theta_1/(\circ))');
xlim([0, 720]);
x_new = linspace(0, 720, 5);
xticks(x_new)
title('速度曲线图');
grid on;

%加速度曲线图
subplot(2,2,3);
yyaxis left;
plot(theta1*du, alpha2);
ylabel('连杆角加速度/rad\cdots^{-2}');
yyaxis right;
plot(theta1*du, a/10^6);
ylabel('滑块加速度/m\cdots^{-1}');
xlabel('曲柄转角\theta_1/(\circ))');
xlim([0, 720]);
x_new = linspace(0, 720, 5);
xticks(x_new)
title('加速度曲线图');
grid on;

%曲柄滑块简图
subplot(2, 2, 4);
x(1) = 0;
y(1) = 0;
x(2) = r * cos(70*hd);
y(2) = r * sin(70*hd);
x(3) = s(70);
y(3) = e;
x(4) = a(70);
y(4) = 0;
x(5) = 0;
y(5) = 0;
x(6) = x(3) - 40;
y(6) = y(3) + 10;
x(7) = x(3) + 40;
y(7) = y(3) + 10;
x(8) = x(3) + 40;
y(8) = y(3) - 10;
x(9) = x(3) - 40;
y(9) = y(3) - 10;
x(10) = x(3) - 40;
y(10) = y(3) + 10;

% 绘制主动杆和连杆
i = 1:3;
plot(x(i), y(i));
grid on;
hold on;
% 绘制机架
i=4:5;
plot(-x(i), y(i));
% 绘制滑块
i= 6:10;
plot(x(i), y(i));
grid on;
hold on;
xlabel('mm');
ylabel('mm');
axis([-50, 400, -20, 130]);
title('曲柄滑块简图');
% 绘制转动副
plot(x(1),y(1),'o');
plot(x(2),y(2),'o');
plot(x(3),y(3),'o');

figure(2);
% 新建avi视频文件
writerObj = VideoWriter('slider');
open(writerObj);
m=moviein(20);
j=0;
for n=1:5:360
    j=j+1;

    clf;
    x(1) = 0;
    y(1) = 0;
    x(2) = r * cos(n*hd);
    y(2) = r * sin(n*hd);
    x(3) = s(n);
    y(3) = e;
    x(4) = (r+l+50);
    y(4) = 0;
    x(5) = 0;
    y(5) = 0;
    x(6) = x(3) - 40;
    y(6) = y(3) + 10;
    x(7) = x(3) + 40;
    y(7) = y(3) + 10;
    x(8) = x(3) + 40;
    y(8) = y(3) - 10;
    x(9) = x(3) - 40;
    y(9) = y(3) - 10;
    x(10) = x(3) - 40;
    y(10) = y(3) + 10;
    % 绘制主动杆和连杆
    i=1:3;
    plot(x(i),y(i));
    grid on;
    hold on;
    % 绘制机架
    i=4:5;
    plot(x(i),y(i));
    % 绘制滑块
    i=6:10;
    plot(x(i),y(i));
    % 绘制转动副
    plot(x(1),y(1),'o');
    plot(x(2),y(2),'o');
    plot(x(3),y(3),'o');
    title('曲柄滑块机构');
    xlabel('mm');
    ylabel('mm');
    axis([-150, 450, -150, 150]);
    m(j)=getframe;
    % 写入视频
    writeVideo(writerObj,m(j));

end
movie(m, 10);
close(writerObj);

function [theta2,s,omega2,v,alpha2,a]=slider_crank(theta1,omega1,alpha1,r,l,e)
    % 计算连杆的角位移和滑块位移
    theta2=asin((e-r * sin(theta1))/l); 
    s=r * cos(theta1) + l * cos(theta2);
    % 计算连杆的角速度和滑块的线速度
    A=[l*sin(theta2), 1; -l*cos(theta2), 0];  % 连杆的位置参数矩阵
    B=[-r*sin(theta1); r*cos(theta1)];    % 主动杆的位置参数矩阵
    
    omega=A \ (omega1*B);   % 连杆的速度矩阵
    omega2=omega(1);
    v=omega(2);
    
    % 计算连杆的角加速度和滑块的线加速度
    Aa=[omega2*l*cos(theta2), 0;
        omega2*l*sin(theta2), 0];  % Aa=dA/dt
    Ba= [-omega1*r*cos(theta1);           
        -omega1*r*sin(theta1)];    % Ba=dB/dt           
    alpha=A \(-Aa*omega+alpha1*B+omega1*Ba);  % 机构从动件的加速度矩阵
    alpha2 = alpha(1);
    a = alpha(2);
end

Matlab学习——曲柄滑块的运动仿真_第13张图片

演示:

基于matlab的曲柄滑块仿真运动

你可能感兴趣的:(matlab,学习,线性代数)