2/2/07

第五章 四連桿之運動關係

5.1 傳力角


傳力角為四連桿中,桿三與桿四間之夾角,此角與動力由曲桿傳至搖桿時之變化有關,在力的傳導上,此角度愈接近九十度愈佳。利用MATLAB程式,設計一個計算在不同曲柄桿角度下之對應傳力角。

圖4.11

四連桿位置分析


上面之圖4.11除文字另加外,是使用下列程式(four_link3)繪出而成。這是一個四連桿位置繪製程式,其後呼叫一副程式fourlinksxy,此分析程式主要針對參考書中第4-25頁之位置分析而寫。在這個程式中,基本上四連桿之長度均為已知(以r之陣列表示)。由於四連桿機構原則上有一個可動度,故只要一桿(固定桿除外)有確定的位置(即對應之角度theta為已知)時,應可求得其他兩桿之相對位置。故fourlinksxy函數之功能是依據參考書之分析步驟,求得其他兩桿之對應角度或三桿之結的座標,即可定出四連桿機構之整個位置。

在此函數中,輸入參數有:

  • theta2:桿2之對應角度,可能為陣列型式,其單位為度數。
  • r:各桿之長度,如:[r1,r2,r3,r4],係以列陣列之型式,其第一桿為固定桿,對應角度設為零。
  • mode:組合模式,由於運算中開方根有正負兩組答案,故利用mode=+1或-1加以區別。

fourlinksxy程式內容與參考書中之four_link1函數略有不同,同學可以分辦為什麼要如此做嗎?又,在處理這個程式的時候,若第一桿之固定桿不在水平時怎麼辨?程式要怎麼改才能符合實際狀況?

function four_link3(theta2,r,mode)
% Program to draw a 4 bar linkage(fig 4.11)
%Inputs:
% theata2:angle of link 2, degrees
% r:row matrix for link lengths={r1 r2 r3 r4]
% mode:+1/-1 for toggling position
% Example:
% four_link3([60],[4 2 4.2 2.6],1)
% Author: DSFon, BIME, NTU, Date:Feb 4,2007.
%
clf;if nargin<3,mode=1;end
[x,y]=fourlinksxy(0,r,mode);
line(x,y,'marker','o','color','b');
c1=atan2(y(3),x(3)-r(1));
[x,y]=fourlinksxy(180,r,mode);
line(x,y,'marker','o','color','r');
c2=atan2(y(3),x(3)-r(1));
[x,y]=fourlinksxy(theta2(1),r,mode);
line(x,y,'linewidth',3,'color','k','marker','o');
nn=length(theta2);
if nn>1,
for i=2:nn,
[x,y]=fourlinksxy(theta2(i),r,mode);
line(x,y,'marker','o');
end
end
th=linspace(0,2*pi,60);
line(r(2)*cos(th),r(2)*sin(th),'color',...
'r','linestyle',':');
% theta4=atan2(y,Cx-r(1));
c4=linspace(c1,c2,30);
line(r(1)+r(4)*cos(c4),r(4)*sin(c4),...
'color','k','linestyle','-.');
axis equal;
%%%%%%%%%%%%%%%%%%%%%%%
function [x,y,th]=fourlinksxy(theta2,r,mode)
%
%P4.4 function [theta]=four_link(theta2,r)
% Find coordinates of four links
% Example:
% [x,y]=fourlinksxy(80,[4 2 4.2 2.6],1)
% Author: D.S.Fon, BIME, NTU, Date:Feb. 4,2007
%
if nargin<3,mode=1;end
rr=r.*r;d2g=pi/180;
theta=theta2*d2g;
Bx=r(2)*cos(theta);By=r(2)*sin(theta);
if abs(Bx-r(1))>0.01
m=(rr(4)-rr(3)-rr(1)+rr(2))./(Bx-r(1))/2;
mm=(m-r(1)).^2;
p=By./(Bx-r(1));pp=p.*p;
rootin=mm.*pp-(pp+1).*(mm-rr(4));
arg=sqrt(rootin);
Cy=((m-r(1)).*p+mode*arg)./(pp+1);
Cx=m-p.*Cy;
else
if abs(By)>0.01
Cy=(rr(4)-rr(3)-rr(1)+rr(2))/(2*By);
else
Cy=0;
end
Cx=r(1)+mode*sqrt(rr(4)-Cy^2);
end
if ~isreal(Cy)|~isreal(Cx),
x=[];y=[];th=0;
else
x=[0 r(2)*cos(theta) Cx r(1) 0]';
y=[0 r(2)*sin(theta) Cy 0 0]';
th=atan2(Cy,Cx-r(1));
end

執行程式:

>> four_link3([60],[4 2 4.2 2.6],1)
  • 上述執行結果應與圖4.11相同,注意執行時必須兩個副程式同時放置在同一檔中或同一目錄下。
  • 你能改變當中的數據,求出不同的結果嗎?
  • 若第一個參數是陣列,例如:[0:10:360],則結果會如何呢?能否依你的意見進行討論呢?



傳力角程式內容


其內容如程式4.2,呼叫函數transmission_angle()如下:

function [beta,betamax,betamin]=transmission_angle(r,theta2)

輸入參數:
r:行矩陣,代表各桿之長度,如[r1 r2 r3 r4]。
theta2:桿2之輸入角度,單位為度,可為矩陣參數。

輸出參數:
beta:對應於桿2之輸入角之傳力角,單位為角度。
betamax、betamin:最大與最小傳力角值,不因輸入角度變化。


程式5.2

function [beta,betamax,betamin]=transmission_angle(r,theta2)
% P4.2 [beta]=transmission_angle(r,theta2)
%
% Find the transmission angle from existing linkages
% Examples:
% [beta,betamax,betamin]=transmission_angle([4 2 4.2 2.6],30)
% [beta,betamax,betamin]=transmission_angle([4 2 4.2 2.6],
%  [0:10:360])
%
% Designed by D.S. Fon, BIME, NTU, Date:October 14,2002.
rr=r.*r;
d2g=pi/180;
theta=theta2*d2g;
beta=acos((-rr(1)-rr(2)+rr(3)+rr(4)+2*r(1)*r(2)*…
cos(theta))/(2*r(3)*r(4)));
betamax=acos((rr(3)+rr(4)-(r(1)+r(2))^2)/(2*r(3)*r(4)));
betamin=acos((rr(3)+rr(4)-(r(1)-r(2))^2)/(2*r(3)*r(4)));
beta=beta/d2g;
betamax=betamax/d2g;
betamin=betamin/d2g;


範例5.2


設連桿組之四桿長度分別為4.0 cm,2.0 cm,4.2 cm,2.6 cm,求輸入角度θ2=30度時之對應傳力角及最大與最小傳力角。

[解]:

>> [beta,betamax,betamin]=transmission_angle([4 2 4.2 2.6],30)
beta = 33.2887
betamax = 122.0822
betamin = 20.9222


圖4.11(續前)


範例5.3


同前四連桿組,但輸入角度θ2=20, 40, 60, 80,100度時之對應傳力角如何?

[解]:

>> [beta]=transmission_angle([4 2 4.2 2.6],[20:20:100])

beta = 27.1412 40.2999 55.4054 70.8113 85.7418


註:MATLAB程式中,[20:20:100]表示一矩陣,其元素以級數表示。初值為20,級階為20,最大值為100。其意義等於[20 40 60 80 100]。