双摇杆机构运动分析
2. 分析过程
双摇杆机构其实还是属于铰链四杆机构,所以运动分析的MATLAB代码和铰链四杆机构大同小异。只要修改一下杆的数据即可。
blog:铰链四杆机构运动分析
双摇杆机构存在的条件
- 最长杆长度+最短杆长度 ≤ 其他两杆长度之和,此条件称为杆长条件。
- 如果铰链四杆机构各杆的长度不满足杆长条件,则无周转副,此时不论以何杆为机架,均为双摇杆机构。
- 在满足杆长条件的四杆机构中,如果以最短杆为连杆(即图中的AB杆,CD杆为机架),则该机构为双摇杆机构。

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是建立图形的意思。系统自动从1,2,3,4来建立图形,数字代表第几幅图形
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.分析结果
