3-曲柄滑块机构分析

曲柄滑块机构分享

1. 机构简图

2. 实例

3. matlab code

function main
%输入已知数据
clear;
i1=100;
i2=300;
e=0;
hd = pi/180; %一度对应的弧度
du=180/pi;  %一弧度对应的度数
omega1=10;  %主动件角速度
alpha1=0;   %主动件角加速度

%使用子函数计算出曲柄滑块的位置,速度,加速度。
for n1=1:721
    theta1(n1)=(n1-1)*hd;          %
    %调用函数。。。先设计出来吧]
    [theta2(n1),xc(n1),omega2(n1),vc(n1),alpha2(n1),ac(n1)]=sli_crank(theta1(n1),omega1,alpha1,i1,i2,e);
end
%图形输出开始。。。
figure(1);
n1=1:720;

%绘制位移的图
subplot(2,2,1);
[ax,h1,h2]=plotyy(theta1*du,theta2*du,theta1*du,xc);
set(get(ax(1), 'ylabel'), 'String', '连杆角位移/\circ');
set(get(ax(2), 'ylabel'), 'String', '滑块位移/mm');
title('位移图');
xlabel('曲柄转角\theta_1/\circ');
grid on;
hold on;

% set(get(gca, 'PropertyName'), 'PropertyName', PropertyValue);

%速度
subplot(2,2,2);
[ax,h1,h2]=plotyy(theta1*du,omega2,theta1*du,vc)
title('速度图');
xlabel('曲柄转角\theta_1/\circ')
ylabel('连杆角速度/rad\cdots^{-1}')
set(get(ax(2), 'ylabel'), 'String', '滑块速度/mm\cdots^{-1}')
grid on;
hold on;

%加速度
subplot(2,2,3);
[ax,h1,h2]=plotyy(theta1*du,alpha2,theta1*du,ac)
title('加速度图');
xlabel('曲柄转角\theta_1/\circ')
ylabel('连杆角加速度/rad\cdots^{-2}')
set(get(ax(2), 'ylabel'), 'String', '滑块加速度/mm\cdots^{-2}')

grid on;
%绘制位置图
subplot(2,2,4)
    x(1)=0;
    y(1)=0;
    x(2)=i1*cos(70*hd);
    y(2)=i1*sin(70*hd);
    x(3)=xc(70);
    y(3)=e;
    x(4)=i1+i2+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:5;
plot(x(i), y(i))
grid on;
hold on;
i=6:10;
plot(x(i), y(i))
title('曲柄滑块机构');
grid on;
hold on;
xlabel('mm');
ylabel('mm');
axis([-50 400 -20 130]);
plot(x(1), y(1),'o')
plot(x(2), y(2),'o')
plot(x(3), y(3),'o')
    text(-10,-10,'A')
    text(x(2)-15,y(2)+10,'B')
    text(x(3),y(3)+20,'C')
    gtext('曲柄')
    gtext('连杆')
    gtext('滑块')
grid on;
hold on;

%运动仿真,电影制作
figure(2);
j=0;
for n1 = 1:5:360
    j=j+1;
    clf;
    x(1)=0;
    y(1)=0;
    x(2)=i1*cos(n1*hd);
    y(2)=i1*sin(n1*hd);
    x(3)=xc(n1);
    y(3)=e;
    x(4)=i1+i2+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')
    text(-10,-10,'A')
    text(x(2)-15,y(2)+10,'B')
    text(x(3),y(3)-20,'C')
    title('曲柄滑块机构');
    xlabel('mm');
    ylabel('mm');
    axis([-150 450 -150 150]);
    m(j)=getframe;
end
movie(m,2);
end

%返回连杆和滑块的参数
function[theta2,xc,omega2,vc,alpha2,ac]=sli_crank(theta1,omega1,alpha1,i1,i2,e)

    %计算连杆的角位移theta2和xc
    theta2=asin((e-i1*sin(theta1))/i2);
    xc=i1*cos(theta1)+i2*cos(theta2);

    %计算连杆和滑块的参数。。。lazy
    A=[ i2*sin(theta2),1;
        -i2*cos(theta2),0
        ];
    B=[-i1*sin(theta1);
    i1*cos(theta1)];
    omega=A\(omega1*B);
    omega2=omega(1);
    vc=omega(2);
    
    %计算连杆和滑块的加速度
    AT=[
        omega2*i2*cos(theta2),0;
        omega2*i2*sin(theta2),0
        ];
    BT=[
        -omega1*i1*cos(theta1);
        -omega1*i1*sin(theta1)
    ];
    alpha=A\(-AT*omega+alpha1*B+omega1*BT);%反应好慢。。。
    alpha2=alpha(1);
    ac=alpha(2);
end
%计算用的函数写完了,后面在调一下。

%初步写完,调试一下。

4. 结果

你可能感兴趣的:(MATLAB,学习)