1-铰链四杆机构仿真分析

铰链四杆机构的 MATLAB 仿真


铰链四杆机构题目&已知数据

题目

matlab 代码

主程序文件:

function main
%输入已知数据
clear;
i1=101.6;
i2=254;
i3=177.8;
i4=304.8;
omega1=250;
alpha1=0; 
hd=pi/180;
%一弧度
du=180/pi;
%2 调用子函数求出铰链的机构位移,角速度,角加速度

for n1=1:361
    theta1=(n1-1)*hd; %0360°
    [theta,omega,alpha]=crank_cocker(theta1,omega1,alpha1,i1,i2,i3,i4);%返回的是一个确定的值的矩阵
    theta2(n1)=theta(1);theta3(n1)=theta(2);
    omega2(n1)=omega(1);omega3(n1)=omega(2);
    alpha2(n1)=alpha(1);alpha3(n1)=alpha(2);
end
%3 角位移,角速度,角加速度的图形输出
figure(1);%figure 是建立图形的意思。系统自动从 1234 来建立图形,数字代表第几幅图形
n1=1:361;%建立一个行向量
subplot(2,2,1);%绘制位移线图
plot(n1,theta2*du,n1,theta3*du,'k');
title('角位移线图')%设置图形标题为。
xlabel('曲柄转角、theta_1\circ')%设置 x 轴标签
ylabel('角位移/\circ')
grid on ;%显示坐标轴网格线,grid off 则关闭坐标轴网格线
hold on;%hold on 是当前轴及图像保持而不被刷新,准备接受此后将绘制的图形,多图共存。hold off(默认)则相反
text(140,170,'\theta_3') %表示在坐标 (140,170) 处添加文本'\theta_3'
text(140,30 ,'\theta_2')
%绘制角速度线图
subplot(2,2,2);
plot(n1,omega2,n1,omega3,'k')
title('角速度线图')
xlabel('曲柄转角、theta_1\circ')
ylabel('角速度/rad\cdots^{-1}')
grid on;hold on;
text(250,130,'\omega_2')
text(130,165,'\omega_3')
%角加速度线图
subplot(2,2,3);
plot(n1,alpha2,n1,alpha3,'k')
title('角加速度线图');
xlabel('曲柄转角、theta_1/\circ')
xlabel('角加速度/rad\cdots^{-2}')
grid on;hold on;
text(230,2e4,'\alpha_2')
text(30,7e4,'\alpha_3')
%铰链四杆机构图形输出
subplot(2,2,4);
x(1)=0;y(1)=0;
x(2)=i1*cos(70*hd);y(2)=i1*sin(70*hd);
x(3)=i4+i3*cos(theta3(71));y(3)=i3*sin(theta3(71));
x(4)=i4;y(4)=0;
x(5)=0;y(5)=0;
grid on;hold on;
plot(x,y)
plot(x(1),y(1),'o')
plot(x(2),y(2),'o')
plot(x(3),y(3),'o')
plot(x(4),y(4),'o')%描点,点的格式是小圆
title('铰链四杆机构')
xlabel('mm');
axis([-50 350 -20 200]);
%gtext(‘sinx’)
%4 铰链四杆机构运动仿真
figure(2)
%创建电影动画的开始
m=moviein(20)%这个函数在 2014 版本之后已经无效了
j=0;
for n1=1:5:360
    j=j+1;
    clf;
    x(1)=0;
    y(1)=0;
    x(2)=i1*cos((n1-1)*hd);
    y(2)=i1*sin((n1-1)*hd);
    x(3)=i4+i3*cos(theta3(n1));
    y(3)=i3*sin(theta3(n1));
    x(4)=i4;
    y(4)=0;
    x(5)=0;
    y(5)=0;
    plot(x,y);
    grid on;
    hold on;
    plot(x(1),y(1),'o');
    plot(x(2),y(2),'o');
    plot(x(3),y(3),'o');
    plot(x(4),y(4),'o');
    axis([-200 350 -150 200]);%axis([xmin xmax ymin   ymax]) [ ] 中分别给出 x 轴和 y 轴的最大值、最小值
    title('铰链四杆机构');
    xlabel('mm');ylabel('mm');
    %以上都是用来生成图形的,画 n1=X 时的图形
    m(j)=getframe;
                    %{该函数格式有:
                    % (1)F=gefframe,从当前图形框中得到动画帧
                    % (2)F=gefframe(h),从图形句柄 h 中得到动画帧
                    % (3)F=getframe(h,rect),从图形句柄 h 的指定区域 rec 中得到动画帧 
end
movie(m,2);
        % 该函数的主要格式有:
        % (1)movie(M),将矩阵 M 中的动画帧播放一次
        % (2)movie(M,n),将矩阵 M 中的动画帧播放 n 次
        % (3)movie(M,n,fps),将矩阵 M 中的动画帧以每秒 fps 帧的速度播放 n 次
    %movie2avi()
end
%创建动画电影的步骤:
%001——》调用 moviein 函数对内存进行初始化(该步骤在 Matlab5.3 以上均可省略),
%         创建一个足够大的矩阵,使之能够容纳基于当前坐标轴大小的一系列指定的图形(此处称为帧)。
%002——》%使用 getframe 调用 getframe 函数生成每个帧。该函数返回一个列矢量,利用这个矢量,
         %就可以创建一个电影动画矩阵.
%003——》调用 movie 函数按照指定的速度和次数运行该电影动画。
%004——》调用 movie2avi 函数可以将矩阵中的一系列动画帧转换成视频文件 avi 文件。
%         这样,即使脱离了 matlab 环境都可以播放动画。

function[theta,omega,alpha]=crank_cocker(theta1,omega1,~,i1,i2,i3,i4)
%1. 计算从动件角位移
L=sqrt(i4*i4+i1*i1-2*i1*i4*cos(theta1));
phi=asin((i1./L)*sin(theta1));
beta=acos((L*L+i3*i3-i2*i2)/(2*i3*L));
if beta<0
    beta=beta+pi;
end
theta3=pi-phi-beta;%theta3 是杆 3 转过的角度
theta2=asin((i3*sin(theta3)-i1*sin(theta1))/i2);%theta2 是杆 2 转过的角度
theta=[theta2;theta3];

%2. 计算从动件的角速度
A=[-i2*sin(theta2),i3*sin(theta3);
    i2*cos(theta2),-i3*cos(theta3)];%机构从动件位置参数矩阵
B=[i1*sin(theta1);-i1*cos(theta1)];  %原动件位置参数矩阵
omega=A\(omega1*B);
omega2=omega(1);omega3=omega(2);
%3. 计算从动件的角加速度
A=[-i2*sin(theta2),i3*sin(theta3);
   i2*cos(theta2),-i3*cos(theta3)];
At=[-omega2*i2*cos(theta2),omega3*i3*cos(theta3);
    -omega2*i2*sin(theta2),omega3*i3*sin(theta3)];
B=[i1*sin(theta1);
    -i1*cos(theta1)];
Bt=[omega1*i1*cos(theta1);
    omega1*i1*sin(theta1)];
alpha=[A\(-At*omega+omega1*Bt)];
end

函数代码文件:

function[theta,omega,alpha]=crank_rocker(theta1,omega1,alpha1,i1,i2,i3,i4)
%1. 计算从动件角位移
L=sqrt(i4*i4+i1*i1-2*i1*i4*cos(theta1));
phi=asin((i1/L)*sin(theta1));
beta=acos((L*L+i3*i3-i2*i2)/(2*i3*L));
if beta<0
    beta=beta+pi;
end
theta3=pi-phi-beta;%theta3 是杆 3 转过的角度
theta2=asin((i3*sin(theta3)-i1*sin(theta1))/i2);%theta2 是杆 2 转过的角度
theta=[theta2,theta3];

%2. 计算从动件的角速度
A=[-i2*sin(theta2),i3*sin(theta3);
    i2*cos(theta2),-i1*cos(theta1)];%机构从动件位置参数矩阵
B=[i1*sin(theta1);-i1*cos(theta1)];  %原动件位置参数矩阵
omega=A\(omega1*B);
omega2=omega(1);omega3=omega(2);

%3. 计算从动件的角加速度
A=[-i2*sin(theta2),i3*sin(theta3);
    i2*cos(theta2),-i3*cos(theta3)];
At=[-omega2*i2*cos(theta2),omega3*i3*cos(theta3);
    -omega2*i2*sin(theta2),omega3*i3*sin(theta3)];
B=[i1*sin(theta1);
    -i1*cos(theta1)];
Bt=[omega1*i1*cos(theta1);
    omega1*i1*sin(theta1)];
alpha=[A\-At*omega+alpha1*B+omega1*Bt];
end
  • 8
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值