5-双摇杆机构运动分析

双摇杆机构运动分析

2. 分析过程

双摇杆机构其实还是属于铰链四杆机构,所以运动分析的MATLAB代码和铰链四杆机构大同小异。只要修改一下杆的数据即可。
blog:铰链四杆机构运动分析

双摇杆机构存在的条件

  • 最长杆长度+最短杆长度 ≤ 其他两杆长度之和,此条件称为杆长条件。
  • 如果铰链四杆机构各杆的长度不满足杆长条件,则无周转副,此时不论以何杆为机架,均为双摇杆机构。
  • 在满足杆长条件的四杆机构中,如果以最短杆为连杆(即图中的AB杆,CD杆为机架),则该机构为双摇杆机构。
RW42p.jpg

3. matlab 代码


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

theta_1=acos((840*840+400*400-500*500)/(2*840*400));  %单位:rad  0.4126
theta_2=acos((600*600+400*400-740*740)/(2*600*400));  %单位:rad  1.6283
% theta_2_2=rad2deg(theta_2);

for n1=1:100
    theta1(n1)=theta_1+((theta_2-theta_1)/100)*n1; %theta_1到theta_2  单位是rad
    [theta,omega,alpha]=crank_cocker(theta1(n1),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

for n1=101:200
    theta1(n1)=theta_2-((theta_2-theta_1)/100)*(n1-100); %theta_1到theta_2  单位是rad
    [theta,omega,alpha]=crank_cocker(theta1(n1),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:200;%建立一个行向量
subplot(2,2,1);%绘制位移线图
plot(n1,theta2(n1),n1,theta3(n1),'k');
% set(get(gcf,'CurrentAxes'),'xtick',theta_1:(theta_2-theta_1)/10:theta_2);
% axis([theta_1 theta_2 -1 3])
title('角位移线图')%设置图形标题为。。。
xlabel('曲柄转角\theta_1/rad')%设置x轴标签
ylabel('角位移/rad')
grid on ;%显示坐标轴网格线,grid off则关闭坐标轴网格线
hold on;%hold on是当前轴及图像保持而不被刷新,准备接受此后将绘制的图形,多图共存。hold off(默认)则相反

%绘制角速度线图
subplot(2,2,2);
H2=plot(n1,omega2(n1),n1,omega3(n1),'k');
% set(get(H2,'xlabel'),'xtick',theta_1:(theta_2-theta_1)/10:theta_2);
title('角速度线图')
xlabel('曲柄转角\theta_1/cicr')
ylabel('角速度/rad\cdots^{-1}')
grid on;hold on;

%角加速度线图
subplot(2,2,3);
H3=plot(n1,theta2(n1),n1,alpha3(n1),'k')
% set(get(H3,'xlabel'),'xtick',theta_1:(theta_2-theta_1)/10:theta_2);
title('角加速度线图');
xlabel('曲柄转角\theta_1/\circ')
xlabel('角加速度/rad\cdots^{-2}')
grid on;hold on;
% text(230,244,'\alpha_2')
% set(gca,'xtick',[theta_1:0.1:theta_2]);  %设置x轴的刻度为0:15:100
% text(30,734,'\alpha_3')

%铰链四杆机构图形输出
subplot(2,2,4);
x(1)=0;y(1)=0;
x(2)=i1*cos(theta1(50));y(2)=i1*sin(theta1(50));
x(3)=i4+i3*cos(theta3(50));y(3)=i3*sin(theta3(50));
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('m');
xlabel('m');
axis([0 1 0 1]);
gtext('杆1');
gtext('杆2');
gtext('杆3');
gtext('杆4');

%4 铰链四杆机构运动仿真
figure(2)
%创建电影动画的开始
m=moviein(20)%这个函数在2014版本之后已经无效了
j=0;
for n1=1:5:200
    j=j+1;
    clf;
    x(1)=0;
    y(1)=0;
    x(2)=i1*cos(theta1(n1));
    y(2)=i1*sin(theta1(n1));
    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([-1 1 -1 1]);%axis([xmin xmax ymin ymax]) [ ]中分别给出x轴和y轴的最大值、最小值
    title('铰链四杆机构');
    xlabel('m');ylabel('m');
    %以上都是用来生成图形的,画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


4.分析结果

分析结果
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值