Showing posts with label 四連桿. Show all posts
Showing posts with label 四連桿. Show all posts

2/4/07

第六章 四連桿機構基本解析

前面章節中,雖然已針對部份四連桿作不同的分析,但大部份純介紹性質,使初學者對MATLAB之應用有一個基本的認識,但對於同一組連桿中之整體分析仍必須考慮到其運動間之限制,使其運動特性均能在分析的過程中一一顯現。本節開始將針對不同的機構作完整的探討,並與程式的運用結合。

為與其他型式有區別,四桿固定長度應屬基本型,這是最常見的型式,故值得先提出討論,茲分別依位置、速度及加速度等項目進行分析。

6-1位置分析


為取得一致性,四連桿之機構中各連桿之長度及水平夾角須有統一的命名,本節中對四連桿之長度及對應角度均以r1、r2、r3及r4與θ1、θ2、θ3、θ4表示,而輸出、入之矩陣參數則以r或θ向量表示,即r=[ r1 r2 r3 r4],θ=[θ1 θ2 θ3 θ4]。其序號代表1為固定桿、2為曲柄桿(crank)、3為結合桿(coupler)、4為搖桿(rocker)。這些定義及標示依問題的特性而變,尤其在以電腦程式進行分析時,其認定更為重要。

傳統的四連桿分析以點之運動特性為主,只要求得某一特定點的速度或加速度即可,這是受限於圖解法之不便與費時。目前的分析工作傾向用電腦計算,其所需耗費時間較短,亦可在一般電腦程式之分析同時獲得整體性的數值,甚至瞭解某一點之運動軌跡;因此各點間之相關運動及相互影響也有必要進一步解讀。

圖6.1所示為一個典型的四連桿的結構,就其中點P之位置而言,可令O點為參考點,此時計算P點之位置可有OQP及ORP兩個途徑。以向量表示如下:

rp = r2 +r3 = r1 + r4



圖6.1 四連桿之關係位置及各桿名稱

以複數表示,可為:

r2ejθ2+r3ejθ3=r1ejθ1+r4ejθ4


以尤拉式表示:

r2(cosθ2+jsinθ2)+r3(cosθ3+jsinθ3)=
r1(cosθ1+jsinθ1)+r4(cosθ4+jsinθ4) (6.1)

將實數部份與虛數分開,並歸納之:

r2cosθ2+r3cosθ3= r1cosθ1+r4cosθ4
r2sinθ2+r3sinθ3= r1sinθ1+r4sinθ4 (6.2)

此二公式又稱為閉合方程式(closure equation),所有的解析過程均由此式先建立,然後再往後延伸。由於閉合公式以點O為起點,點P為終點,故其對應角度應如圖6.1所示,各角均以水平正方向為準。除此而外,原則上這兩式並未有限制因子,但實際情況,仍可依分析的內容設定其需求條件。在本節之分析中,與前面第四章之分析略為不同之處在於將第一桿之角度θ1也納入公式內一併考慮,這對四連桿之各種狀況之分析應有幫助。圖6.1所示之四桿長度均為固定,故各桿上之點間不會有連線上之相對速度或加速度,且桿1原則上設為固定,故其速度與加速度均為零。

除桿1固定外,四連桿中應有一桿為主動桿,由該桿輸入運動力源使整組四連桿可以活動。以本例而言,桿2為曲柄,故動力應由此桿傳入,其餘兩桿(桿3與桿4)均為被動桿。在應用上,桿2與桿3均可被選為輸入桿,並以桿4輸出。

在本例中,r1、r2、 r3、 r4及θ1均為定值,θ2為輸入,其餘θ3、θ4均為輸出。且因而分析中之r'、r"等項亦應為零。

6-1.1情況一:曲桿為主動桿,θ2為輸入


改寫公式(6.2),得:


r3cosθ3= r1cosθ1+r4cosθ4-r2cosθ2
r3sinθ3= r1sinθ1+r4sinθ4-r2sinθ2 (6.3)


兩邊平方相加,消去θ3:

r3²=r1²+r2²+r4²+2r1r4(cosθ1cosθ4+sinθ1sinθ4)
-2r1r2(cosθ1cosθ2+sinθ1sinθ2)
-2r1r4(cosθ2cosθ4+sinθ2sinθ4) (6.4)


消去θ3之後其變數僅剩θ4,其係數雖多,但可以改寫成下面的型式:

A cosθ4+B sinθ4 + C=0     (6.5)

其對應之係數ABC表示如下:

A=2r1r4cosθ1-2r2r4cosθ2
B=2r1r4sinθ1-2r2r4sinθ2
C=r1²+r2²+r4²-r3²-2r1r2(cosθ1cosθ2+sinθ1sinθ2) (6.6)


為求得 A cosθ4+B sinθ4 + C=0 之解θ4,通常利用半角公式,令

β=tan(θ4/2)

代入三角函數:

sinθ4 = 2tan(θ4/2)/[1+tan²(θ4/2) = 2β/[1+β²]
cosθ4 = [1-tan²(θ4/2)/[1+tan²(θ4/2)
= [1-β²]/[1+β²] (6.7)


將此二式代入基本公式(6.5),則

A{[1-β²]/[1+β²]} +B{2β/[1+β²]} + C = 0


展開之,得:

 A(1-β²)+2Bβ+C(1+β²)=0
或
(C-A)β²+2Bβ+ (A+C)=0 (6.8)

解此二次方程式,得

β=[-B ± (B²-C²+A²)1/2]/(C-A)     (6.9)

此處β應有二根,代表兩個位置解,有時稱為兩個模式。至於採取正值或負值,則應依實際之情況加以判斷。

獲得β值之後,即可求由β=tan(θ4/2) 求得θ4,亦即:

θ4 = 2tan-1β         (6.10)

由於-π/2≤tan-1β≤π/2,故 -π≤θ4≤π。
值得注意的是,B²- C²+A²≥0,亦即B²+A²≥ C²才能獲得實數的根,若無法達滿足這個條件,表示所給的桿長無法構成四連桿。因此這一個不等式可作為測試四連桿是否成立的一個準則。

有了θ4之後,仍需要求θ3,此時可以回到原來之閉合方程式(6.3),先行移項,得:

r3sinθ3= r1sinθ1+r4sinθ4-r2sinθ2
r3cosθ3= r1cosθ1+r4cosθ4-r2cosθ2 (6.11)

兩式左右相除,可得:

tanθ3=[r1sinθ1+r4sinθ4-r2sinθ2]/[r1cosθ1+r4cosθ4-r2cosθ2]


由原來公式(6.3)亦可改寫如下:

r4sinθ4=r3sinθ3+r2sinθ2-r1sinθ1
r4cosθ4=r3cosθ3+r2cosθ2-r1cosθ1 (6.12)

如此亦可先消去θ4,解θ3,然後重複前面的程序,再解θ4。這種技巧,在後面的速度及加速度分析上均可運用。因為有些情況利用前一方式可能產生無解,反而可以利用後一方程式得到所需要的解,其結果亦相同。

6-1.2情況二:聯結桿為主動桿,θ3為輸入


上面之分析結果均以第二桿為主動,輸出為第四或第三桿。但在應用上,若第三桿為主動桿,而第二與第四為輸出桿時,其情況將會不同。而這種情況在傳統之圖解法更不容易求得其解。但利用數值法,則仍可根據公式(6.1)稍作改變,再加以分析,即:

r2sinθ2=r1sinθ1+r4sinθ4-r3sinθ3
r2cosθ2=r1cosθ1+r4cosθ4-r3cosθ3 (6.13)

與公式(6.3)比較,兩式之格式完全相同,僅在2與3之位置掉換而已。故在分析上,所用之解法應相同。在f4bar()這個函數當中,有設一個driver的控制參數,作為區分驅動桿,然後應用相同的程式解法。這項技術亦應用於上項之程式中。

有了上述之θ1、θ2、θ3及θ4之後,配合各桿之長度即可求得點P、Q、R等之位置向量:

Rq=r2ejθ2=r2(cosθ2+jsinθ2) (6.14)
Rp=r2ejθ2+r3ejθ3
=r2(cosθ2+jsinθ2)+r3(cosθ3+jsinθ3) (6.15)

或者

Rp=r1ejθ1+r4ejθ4
=r1(cosθ1+jsinθ1)+r4(cosθ4+jsinθ4) (6.16)
Rr=r4ejθ4=r4(cosθ4+jsinθ4) (6.17)

6.2 四連桿速度分析

四連桿之速度解析仍需以前面之位置分析資料為基礎,因為在速度分析過程中,仍然需要各點位置之分析結果,如θ3與θ4等,進而在速度上求出各桿之角速度ω3及ω4。


圖6.1 四連桿之關係位置及各桿名稱(續)

為得到速度,必須先對點P之向量或原式(1)對時間t作一次微分,即

d/dt[r2ejθ2)+d/dt[r3ejθ3)=d/dt[r1ejθ1)+d/dt[r4ejθ4)
[r2'+jr2ω2]ejθ2+[r3'+jr3ω3]ejθ3=
[r1'+jr1ω1]ejθ1+[r4'+jr4ω4]ejθ4 (6.18)

由於本四連桿中,r1'、r2'、r3'、r4'及ω1均為零,故上式可簡化如下:

jr2ω2ejθ2+jr3ω3ejθ3=jr4ω4ejθ4 (6.19)
jr2ω2(cosθ2+jsinθ2)+jr3ω3(cosθ3+jsinθ3)
=jr4ω4(cosθ4+jsinθ4) (6.20)

分開實數與虛數部份,得:

r2ω2cosθ2+r3ω3cosθ3 =r4ω4cosθ4
r2ω2sinθ2+r3ω3sinθ3 =r4ω4sinθ4 (6.21)

由於ω2為己知,故可安排成聯立方程式以求得ω3及ω4。

-r3ω3cosθ3 +r4ω4cosθ4 =r2ω2cosθ2
-r3ω3sinθ3 +r4ω4sinθ4 =r2ω2sinθ2 (6.22)

寫成矩陣型式:

[-r3cosθ3 r4cosθ4 [ω3 = [r2ω2cosθ2
-r3sinθ3 r4sinθ4] ω4] r2ω2sinθ2] (6.23)

公式(6.22)式等於[2 x 2]乘[2 x 1]等於[2 x 1]之矩陣,以符號表示,令


[RM]=
-r3cosθ3 r4cosθ4
-r3sinθ3 r4sinθ4

[AM]=
ω3
ω4

[CM]=
r2ω2cosθ2
r2ω2sinθ2

關係式變為:

[RM] [AM] = [CM] (6.24)

若欲由MATLAB求解,則採用[AM] = [RM] \ [CM]之指令即可。

求得各桿之角速度ω1、ω3、ω4及ω2之後,配合各桿之長度即可求得點P、Q、R等之速度向量,即:

Vq=[r2'+jr2ω2]ejθ2=jr2ω2(cosθ2+jsinθ2) (6.25)

Vp=[r2'+jr2ω2]ejθ2+[r3'+jr3ω3]ejθ3
=jr2ω2(cosθ2+jsinθ2)+jr3ω3(cosθ3+jsinθ3)       (6.26)

或者

Vp=[r1'+jr1ω1]ejθ1+[r4'+jr4ω4]ejθ4
=jr1ω1(cosθ1+jsinθ1)+jr1ω1(cosθ1+jsinθ1)       (6.27)

6.3 四連桿加速度分析

同樣的方式,同樣的故事。在求四連桿之加速度時,仍必需借助前面位置與速度分析之資訊,其中包括θ3、θ3及ω3、ω4。接續速度方向的解析過程,且注意r1"、r2"、r3"、r4"及角加速度α1之值均為零。


圖6.1 四連桿之關係位置及各桿名稱(續)

將速度項下演變之方程式對時間再次微分:

d/dt(jr2ω2ejθ2)+d/dt(jr3ω3ejθ3)=d/dt(jr4ω4ejθ4) (6.28)

此過程會變成相當繁複,但不入虎山焉得虎子,先考慮任意項k之微分結果:

d/dt(jrkθkejθk) =jrk'ωkejθk +jrk'αkejθk -jrkωk²ejθk
=jrkαkejθk-jrkωk²ejθk
=[jrkαk-rkωk²]ejθk (6.29)

上式中因為第一項桿長不伸長,亦無軸向加速度,故rk'=0 。將(6.28)式之結果應於用於上面之等式,則

[jr2α2-r2ω2²]ejθ2 + [jr3α3-r3ω3²]ejθ3
=[jr4α4-r4ω4²]ejθ4

或為尤拉式:

[jr2α2-r2ω2²](cosθ2+jsinθ2) + [jr3α3-r3ω3²](cosθ3+jsinθ3)
=[jr4α4-r4ω4²](cosθ4+jsinθ4) (6.30)


將虛數與實數分離之,得:

r2ω2²cosθ2+r2α2sinθ2 +r3ω3²cosθ3+r3α3sinθ3
=r4ω4²cosθ4+r4α4sinθ4)
-r2ω2²sinθ2+r2α2cosθ2 -r3ω3²sinθ3+r3α3cosθ3
=-r4ω4²sinθ4+r4α4cosθ4) (6.31)

整理上二式,得

-r3α3cosθ3+r4α4cosθ4 =
r4ω4²sinθ4-r2ω2²sinθ2+r2α2cosθ2 -r3ω3²sinθ3

-r3α3sinθ3+r4α4sinθ4 =
-r4ω4²cosθ4+r2ω2²cosθ2+r2α2sinθ2 +r3ω3²cosθ3

方程式之右側均為已知,有些可以由前面之方程式得解,故右側值可以簡化,設

f1(α2)=r4ω4²sinθ4-r2ω2²sinθ2+r2α2cosθ2 -r3ω3²sinθ3
f2(α2)=-r4ω4²cosθ4+r2ω2²cosθ2+r2α2sinθ2 +r3ω3²cosθ3


則上式可整理為:

-r3α3cosθ3+r4α4cosθ4 = f1(α2)
-r3α3sinθ3+r4α4sinθ4 = f2(α2) (6.32)

整理後,以矩陣表示:

   [-r3cosθ3 r4cosθ4 [α3 = [f1(α2)
  -r3sinθ3 r4sinθ4] α4] f2(α2)] (6.33)

由公式(6.32)式可以看出,無論求速度或加速度,前面之[RM]矩陣內容均相同,其解法也與速度相同。至此,應可完全得到四連桿之解析結果。令:

DM =
α3
α4

FM=
f1(α2)
f2(α2)

因此,

 [DM]=[RM]\[FM]


同速度之分析,在求得各桿之α2、α3、α4之後,配合各桿之長度及角速度,即可求得點P、Q、R等之加速度向量,即:

Aq=[jr2α2-r2ω2²]ejθ2=[jr2α2-r2ω2²](cosθ2+jsinθ2) (6.34)
Ap=[jr2α2-r2ω2²]ejθ2 + [jr3α3-r3ω3²]ejθ3
=[jr2α2-r2ω2²](cosθ2+jsinθ2) + [jr3α3-r3ω3²](cosθ3+jsinθ3)
(6.35)

或者,

  Ap=[jr4α4-r4ω4²]ejθ4
=[jr4α4-r4ω4²](cosθ4+jsinθ4) (6.36)

6.4 四連桿分析程式f4bar

6.4程式介紹


程式參數


以MATLAB寫作,可以獲得以上所述之解法,下面為f4bar()函數之內容,係根據上面的分析過程撰寫而成。其呼叫之型式如下,其中輸入有七項,分別說明如下:

  [data,form] = f4bar(r,theta1,theta2,td2,tdd2,mode,linkdrive)

輸入參數:

  • r(1:4) = 各桿之長度,r(1)為固定桿,其餘分別為曲桿、結合桿及被動桿,即r=[r1 r2 r3 r4]。
  • theta1 = 第一桿之水平角,或為四連桿之架構角,以角度表示。
  • theta2 = 驅動桿之水平夾角,以角度表示。一般為曲桿角,但若為結合桿驅動,則為結合桿之水平夾角。
  • td2 = 驅動桿(第二桿或第三桿)之角速度(rad/sec)。
  • tdd2 = 驅動桿(第二桿或第三桿)之角加速度(rad/sec^2)。
  • mode = +1 or -1. 組合模數,負值表示閉合型,正值為分支型,但有時需視實際情況而定。
  • linkdrive = 0 (驅動桿為第二桿); 1 (驅動桿為第三桿) 。

輸出變數:

form = 組合狀態, 0 :表示無法組合; 1:可以正確組合
data = 輸出矩陣,其大小為 4 X 7,各行之資料分配如下:

    1   2(deg) 3(rad/s) 4(rad/s2) 5 6   7
I   桿1位置  θ1   ω1    α1    VQ  |VQ|  ∠VQ
II  桿2位置   θ2   ω2    α2    VP  |VP|  ∠VP
III 桿3位置  θ3   ω3    α3    AQ  |AQ|  ∠AQ
IV  桿4位置   θ4   ω4    α4    AP  |AP|  ∠AP

其中第一行之連桿位置向量,屬於單桿的位置向量,以格式以複數表示。第二行為各桿之水平夾角,以度表示;第三及第四行為各桿之角度速度及角加速度,以單位時間之弧度表示。第五至七行則為P點與Q點之速度與加速度量,第五行為向量,第六行為絕對量,第七行為夾角,以度數表示。

值得一提的是第一行之向量表示法屬於複數之型式,故若要得到其絕對值僅需在MATLAB指令檔中,以abs()這一個函數指令即可求得,而以函數angle()則可求得其夾角,雖然第二行與第七行之輸出亦有相對應之夾角。

其中第一行之連桿位置是比較爭議性的問題,目前有不同版本,有些是單桿的位置向量。但第五至七行之速度與加速度量則為絕對量值。

程式內容



function [data,form] = f4bar(r,theta1,theta2,td2,tdd2,mode,linkdrive)
%
%function [data,form] = f4bar(r,theta1,theta2,td2,tdd2,mode,linkdrive)
% This function analyzes a four-bar linkage when the driving link is
% crank or coupler. The input data are:
% theta1,theta2 are angles in degrees
% r=[r1 r2 r3 r4]= lengths of links(1=frame)
%td2 = crank or coupler angular velocity (rad/sec)
%tdd2 = crank or coupler angular acceleration (rad/sec^2)
%mode = +1 or -1. Identifies assembly mode
%linkdrive = 0 for crank as driver; 1 for coupler as driver
%data (1:4,1) = link positions for 4 links
%data (1:4,2) = link angles in degrees
%data (1:4,3) = link angular velocities
%data (1:4,4) = link angular accelerations
%data (1,5) = velocity of point Q
%data (2,5) = velocity of point P
%data (3,5) = acceleration of point Q
%data (4,5) = acceleration of point P
%data (1,6) = position of Q
%data (2,6) = position of P
%form = assembly status. form = 0, mechanism fails to
% assemble.
% program revised from Waldron's Textbook
% Revised:DSFON, BIME, NTU. Date: Feb. 7, 2007
if nargin<7,linkdrive=0;end
if nargin<6,mode=1;end
data=zeros(4,6);
% if coupler is the driver, interchange the vetor 3 & 2
if linkdrive==1,r=[r(1) r(3) r(2) r(4)];end
rr=r.*r;d2g=pi/180;
[theta,td,tdd]=deal(zeros(4,1));
theta(1:2)=[theta1 theta2]*d2g;
t1=theta(1);tx=theta(2);
s1=sin(t1);c1=cos(t1);
sx=sin(tx);cx=cos(tx);
% position calculations
A=2*r(1)*r(4)*c1-2*r(2)*r(4)*cx;
C=rr(1)+rr(2)+rr(4)-rr(3)-2*r(1)*r(2)*(c1*cx+s1*sx);
B=2*r(1)*r(4)*s1-2*r(2)*r(4)*sx;
pos=B*B-C*C+A*A;
if pos>=0,
form=1;
% Check for the denominator equal to zero
if abs(C-A)>=1e-5
t4=2*atan((-B+mode*sqrt(pos))/(C-A));
s4=sin(t4);c4=cos(t4);
t3=atan2((r(1)*s1+r(4)*s4-r(2)*sx),(r(1)*c1+r(4)*c4-r(2)*cx));
s3=sin(t3);c3=cos(t3);
else
% If the denominator is zero, compute theta(3) first
A=-2*r(1)*r(3)*c1+2*r(2)*r(3)*cx;
B=-2*r(1)*r(3)*s1+2*r(2)*r(3)*sx;
C=rr(1)+rr(2)+rr(3)-rr(4)-2*r(1)*r(2)*(c1*cx+s1*sx);
pos=B*B-C*C+A*A;
if pos>=0,
t3=2*atan((-B-mode*sqrt(pos))/(C-A));
s3=sin(t3); c3=cos(t3);
t4=atan2((-r(1)*s1+r(3)*s3+r(2)*sx),...
(-r(1)*c1+r(3)*c3+r(2)*cx));
s4=sin(t4);c4=cos(t4);
end
end
theta(3)=t3;theta(4)=t4;
%velocity calculation
td(2)=td2;
AM=[-r(3)*s3, r(4)*s4; -r(3)*c3, r(4)*c4];
BM=[r(2)*td(2)*sx;r(2)*td(2)*cx];
CM=AM\BM;
td(3)=CM(1);td(4)=CM(2);

%acceleration calculation

tdd(2)=tdd2;
BM=[r(2)*tdd(2)*sx+r(2)*td(2)*td(2)*cx+r(3)*td(3)*td(3)*c3-...
r(4)*td(4)*td(4)*c4;r(2)*tdd(2)*cx-r(2)*td(2)*td(2)*sx-...
r(3)*td(3)*td(3)*s3+r(4)*td(4)*td(4)*s4];
CM=AM\BM;
tdd(3)=CM(1);tdd(4)=CM(2);
%store results in array data
% coordinates of P and Q
if linkdrive==1,
c2=c3;c3=cx;s2=s3;s3=sx;
r(2:3)=[r(3) r(2)];theta(2:3)=[theta(3) theta(2)];
td(2:3)=[td(3) td(2)];tdd(2:3)=[tdd(3) tdd(2)];
else
c2=cx;s2=sx;
end
for j=1:4,
data(j,1:4)=[r(j)*exp(i*theta(j)) theta(j)/d2g td(j) tdd(j)] ;
end % position vectors
data(1,5)=r(2)*td(2)*exp(i*theta(2));%velocity for point Q
data(2,5)=r(4)*td(4)*exp(i*theta(4));%velocity for point P
data(3,5)=r(2)*(i*tdd(2)-td(2)*td(2))*exp(i*theta(2));%acc of Q
data(4,5)=r(4)*(i*tdd(4)-td(4)*td(4))*exp(i*theta(4));%acc of P
data(1,6)=data(2,1);%position of Q, again
data(2,6)=data(1,1)+data(4,1);% position of P

%find the accelerations
else
form=0;
if linkdrive==1,
r=[r(1) r(3) r(2) r(4)];
for j=1:4, data(j,1)=r(j).*exp(i*theta(j));end % positions
end
end



執行範例


(1)桿2驅動:
桿2驅動,r=[3 2 4 2],固定桿角度theta1=0度; 桿2角度theta2=60度;角速度 td2=10rad/s; 角加速度tdd2=0rad/s^2; 組合模數mode=-1; driver=0(crank)

>> [val,form]=f4bar([3 2 4 2],0,60,10,0,-1,0)

val =
Columns 1 through 3
3 0 0
1 + 1.7321i 60 10
3.8682 - 1.0182i -14.746 5.4078
1.8682 + 0.71389i 20.913 16.549
Columns 4 through 6
0 10 + 17.321i 1 + 1.7321i
0 30.919 + 11.815i 4.8682 + 0.71389i
-127.58 -100 - 173.21i 0
-236.27 -343.02 - 636.93i 0
form =
1


上述之結果,form = 1表示可以構成四連桿。特別注意第一行資料雖為位置向量,但仍以複數型式表示,以期能得到每一桿之向量值,以供其他程式呼叫使用。其絕對值仍應為[3 2 4 2]。如:

>> abs(val(:,1))'
ans = 3 2 4 2

四連桿之角度為:

>> abs(val(:,2))'
ans = 0 60 14.746 20.913

桿1之角度為零,桿2為60度,符合已知之資料。
各桿之速度則為

>> abs(val(:,3))'
ans = 0 10 5.4078 16.549

同樣桿1之角速度為零,而桿2為10rad/s,與原已知相同。

各桿之加速度為:

>> abs(val(:,4))'
ans = 0 0 127.58 236.27

桿1及桿2之加速度為零,而桿3為127.58 rad/s^2,桿4為236.27rad/s^2。

(1)桿3驅動:
第三桿(coupler)為驅動桿,r=[3 2 4 2],固定桿角度theta1=0度; 桿3角度theta2=30度; 桿3角速度td2=10rad/s;桿3角加速度 tdd2=0rad/s^2;模數 mode=-1; 驅動桿driver=1(coupler)。

>> [val,form]=f4bar([3 2 4 2],0,60,10,0,-1,1)
val =
Columns 1 through 3
3 0 0
1.3321 - 1.4919i -48.239 -8.9487
2 + 3.4641i 60 10
0.33205 + 1.9722i 80.443 24.333
Columns 4 through 6
0 -11.92 + 13.35i 1.3321 - 1.4919i
-582.55 8.0799 + 47.991i 3.3321 + 1.9722i
0 -975.76 - 656.52i 0
496.46 -1175.8 - 1002.9i 0
form =
1

同樣,各桿之值為:

>> abs(val(:,1))'
ans =
3 2 4 2

各桿相對應之角度如下:

>> abs(val(:,2))'
ans = 0 48.239 60 80.443

其中桿3之角度為60度,因為該桿為輸入值。

四連桿之角速度分別為:

>> abs(val(:,3))'
ans = 0 8.9487 10 24.333

桿3之角速度為10rad/s,與輸入相同,此時桿2之角速度則為8.9487 rad/s。

各桿之角加速度分別為:

>> abs(val(:,4))'
ans = 0 582.55 0 496.46

桿3之角加速度為零,因為是輸入值。

6.5 繪製簡易四連桿

6.5 drawlinks函數介紹


第四章中,已介紹draw4links函數,可以繪出具有厚度之四連桿。本節則介紹另一函數drawlinks,可以將主動軸及被動軸加分別標出,並用顏色加以區分。本函數係利用plot的功能,分別將各桿之特性繪出。此函數係利用f4bar函數計算各軸之位置及速度、加速度。但連桿組之位置則僅須要各桿之輸出座標即可。在f4bar指令中,其輸出項有一項可以測試該連桿組可以組立的指標(即form = 1)。只要此值為一,即表示此組合桿可以成立,其對應連桿的角度均可獲得,因而可以進行繪出其相關位置。

程式drawlinks之目的即是利用MATLAB繪製四連桿之相關位置。故此程式本身會呼叫f4bar.m函數以計算四連桿之向量位置,然後繪圖。在其呼叫f4bar.m函數時,其角速度及角加速度均設為零。其呼叫格式如下:

function drawlinks(r,th1,th2,mode,linkdrive)

其輸入各式與f4bar.m大體相同,茲說明如下:
  • r(1:4) = 各桿之長度,r(1)為固定桿,其餘分別為曲桿、結合桿及被動桿。
  • theta1 = 第一桿之水平角,或為四連桿之架構角,以角度表示。
  • theta2 = 驅動桿之水平夾角,以角度表示。一般為曲桿角,但若為結合桿驅動,則為結合桿之水平夾角。
  • mode = +1 or -1. 組合模式,負值表示閉合型,正值為分支型,但有時需視實際情況而定。
  • linkdrive = 0 (驅動桿為第二桿); 1 (驅動桿為第三桿)

程式中,在呼叫f4bar.m過後,僅取其values中第一欄中之數據,即r1、r2、r3及r4等之複數型式資料。構成基本的O、R、P、Q等四點。O為原點,R及Q為r2與r4的向量點,直接使用即可,而P點則為兩桿組合點,即為r1+r4或r2+r3的向量和,本程式取其前者。

drawlinks程式內容



function [values]=drawlinks(r,th1,th2,mode,linkdrive)
%function drawlinks(r,th1,th2,mode,linkdrive)
%draw the positions of four-bar links
%call f4bar funcion
%r: row vector for four links
%th1: frame angle
%th2: crank angle or couple angle
%mode: assembly mode
%linkdrive: 0 for crank, 1 for coupler
%clf;
if nargin<5,linkdrive=0;end
if nargin<4,mode=1;end
[values b]=f4bar(r,th1,th2,0,0,mode,linkdrive);
rr=values(:,1);
rr(3,1)=rr(1,1)+rr(4,1);
rx=real(rr(:,1));rx(4)=0;
ry=imag(rr(:,1));ry(4)=0;
if b==1
plot([0 rx(1)],[0 ry(1)],'k-','LineWidth',4);
hold on;
if linkdrive==0
plot([0 rx(2)],[0 ry(2)],'b-','LineWidth',1.5);
plot([rx(2) rx(3)],[ry(2) ry(3)],'r-','LineWidth',2);
else
plot([0 rx(2)],[0 ry(2)],'r-','LineWidth',2);
plot([rx(2) rx(3)],[ry(2) ry(3)],'b-','LineWidth',1.5);
end
plot([rx(1) rx(3)],[ry(1) ry(3)],'g-','LineWidth',1.5);
plot(rx,ry,'bo');
text(0,0,' O');text(rx(1),ry(1),' R');
text(rx(2),ry(2),' P');text(rx(3),ry(3),' Q');
else
fprintf('Combination of links fail at degrees %6.1f\n',th2);
end
axis equal
grid on


執行範例


*第二桿為驅動桿時:

>> drawlinks([3 2 4 2],0,60,-1,0);


圖6.3drawlinks([3 2 4 2],0,60,-1,0)

其繪出之四連桿如圖6.3。黑色為第一桿,藍色為第二桿,紅色為第三桿,綠色為第四桿。
*第三桿結合桿(coupler)為驅動桿:




圖2.4 以結合桿為驅動桿(r =[3 2 4 2])

圖6.4即為所得之答案,此時四連桿為分支型(branch),因為目前之情況無法轉為閉合型,即使將mode值變號,仍為分支型,下面為其例。


>> clf;drawlinks([3 2 4 2],0,60,1,1)


圖6.5 當mode=1時並以結合桿為驅動桿(r =[3 2 4 2])

利用drawlinks亦可繪出各種角度之圖型,可以作為四連桿運動過程之觀察,相當方便,例如:將theta2改以每20度繪一次,由繪至360度。此時必須使用迴圈的繪製方式來達成:


>> clf; for i=10:20:360,drawlinks([1 3 3 4],0,i,-1,0); end

圖6.6 多重位置之四連桿運動情形(r =[1 3 3 4])

其結果如圖6.6,當然若以第三桿(聯結桿)為驅動桿時,亦可獲得同樣的結果,此時其他數值暫不改變,僅就參數最後一項改為1,例如:

>>clf;for i=10:20:360,drawlinks([1 3 3 4],0,i,-1,1);end


圖6.7 以第三桿為驅動桿之情形(r =[1 3 3 4])

圖6.6與圖6.7不同之處在於第二桿(曲桿)的角度分佈。前者係由曲桿作均勻分佈,故可以看出360度的均勻分佈;而圖6.6則為不均均的分佈情況,但第三桿的角度變化則應為均勻的,雖然無法立即由圖6.6看得出來。

6.6 四連桿轉動的限制

迴轉的條件



四連桿之迴轉過程,能完全迴轉的情況仍然很少,有些時候無法獲得完整一圈的迴轉。亦即依葛列夫定理四連桿之第一或第二類類型決定,前者為完整迴轉型,後者則有迴轉角度之限制,這些限制因四連桿長度決定之。

在數學上,要可以迴轉,此兩不等式之條件必須能滿足:


 r1 + r2 < r3 +r4 (6.43)
|r1 -r2|>|r3 - r4| (6.43)


四連桿迴轉過程中,有可能其中兩桿會連成一線,或重疊成一線,前者若成立時,即變成三角形,後者若重疊時,亦會構成另一個三角形。理論上連桿構成三角形應不會有相對運動,故可稱為四連桿之運動極限。由這兩個極端位置,可以知道四連桿之最終運動限制。


圖6.8

第二桿為驅動桿時


第二桿為驅動桿時,由其不等式之方向,可以構成四種狀況,並進而求得該狀況之角度。下面為第二桿為驅動桿時之四種情況:

(1)當r1+r2≤r3+r4,|r1-r2|≥|r3-r4| 時:θmin=0,θmax=2π (6.44)


圖6.9 無限制旋轉(雙曲桿)
  
(2)當r1+r2≥r3+r4,|r1-r2|≥|r3-r4| 時:

θmin=-cos-1{[r1²+r2²-(r3+r4)²]/[2r1r2]}
θmax= cos-1{[r1²+r2²-(r3+r4)²]/[2r1r2]} (6.45)


圖6.10 上限對稱限制(雙搖桿)

(3)當r1+r2≥r3+r4,|r1-r2|≤|r3-r4| 時:

θmin=cos-1{[r1²+r2²-(r3-r4)²]/[2r1r2]}
θmax= cos-1{[r1²+r2²-(r3+r4)²]/[2r1r2]} (6.46)


圖6.11 上限限制

(4)當r1+r2≤r3+r4,|r1-r2|≤|r3-r4| 時:

θmin=cos-1{[r1²+r2²-(r3-r4)²]/[2r1r2]}
θmax=2π-cos-1{[r1²+r2²-(r3-r4)²]/[2r1r2]} (6.47)


圖6.12 下限限制


第三桿為驅動桿時


第三桿結合桿為驅動桿時,則仍然取決於四連桿屬於葛列夫(Grashof)一型或二型。若屬一型連桿,則當第三桿r3為最短桿時,第三桿可以作360度迴轉。其餘之限制條件雖不如以第二桿為驅動桿者,但其極;限狀況是當第二桿與第四桿相平行時,變成無法繼續迴轉,除非它是處於平行四邊形。將四種情況依下列二不等式之情況加以分類,在這些分類中,若兩式均為等號時,則應歸屬於第五類:

  r1 + r3 < r3 + r4 (6.42)
|r1 - r2|>|r2 - r4| (6.49)



(5)當r1+r3≤r2+r4,|r1-r3|≥|r2-r4| 時:θmin=0,θmax=2π (6.50)


圖6.13 聯結桿驅動無限制


(6)當r1+r3≥r2+r4,|r1-r3|≥|r2-r4| 時:

θmin=-cos-1{[r1²+r3²-(r2+r4)²]/[2r1r3]}
θmax= cos-1{[r1²+r3²-(r2+r4)²]/[2r1r3]} (6.51)


圖6.14 上下限制

(7)當r1+r3≥r2+r4,|r1-r3|≤|r2-r4| 時:

θmin=-cos-1{[r1²+r3²-(r2-r4)²]/[2r1r3]}
θmax= cos-1{[r1²+r3²-(r2+r4)²]/[2r1r3]} (6.52)


圖6.15 上方限制

(8)當r1+r3≤r2+r4,|r1-r3|≥|r2-r4| 時:

θmin=cos-1{[r1²+r3²-(r2-r4)²]/[2r1r3]}
θmax=2π-cos-1{[r1²+r3²-(r2-r4)²]/[2r1r3]} (6.53)


圖6.16 對稱限制

極限函數fb_angle_limits



觀察上面討論之四個極限角度,可以寫一組程式。由於以第三桿驅動與第二桿驅動,在計算上僅是將其中之r2與r3之位置對調即可。為尋找上述極限角度θmin、θmax,可用函數fb_angle_limits()進行尋找,其對應之角度為Ang1, Ang2,格式如下:

function [Ang1, Ang2]=fb_angle_limits(r,theta1,linkdrive)

其中輸入項目有:

r = 四連桿之長度向量,其定義與前函數相同。
theta1 = 第一桿之夾角,角度表示(deg)。
linkdrive = 驅動模式(=0 第二桿驅動; =1 第三桿驅動)。

輸出項為兩個角度,前者較小,後者較大:

Ang1 = 驅動桿(第二桿或第三桿)之最低限角度 (deg)
Ang2 = 驅動桿(第二桿或第三桿)之最高限角度 (deg)

繪製極限位置之drawlimits函數則是呼叫fb_angle_limits函數,求出其驅動桿之極限角,然後將其對應之極限位置繪出。其輸入項目與drawlinks函數相同。

程式內容



function [Ang1, Ang2]=fb_angle_limits(r,theta1,linkdrive)
%
%function [Ang1, Ang2]=fb_angle_limits(r,theta1,linkdrive)
% Find initital & final angles for the driving link
% linkdrive= (0 for crank; 1 for coupler as the driver).
% Variables:
% r=linkage row vector (cm)
% theta1=frame angle(degree);
% Ang1,Ang2=initial & final angles of the driving link(deg)
%Program
if nargin<3,linkdrive=0;end
if nargin<2,theta1=0;end
if linkdrive==1, r=[r(1) r(3) r(2) r(4)];end
r1=r(1);r2=r(2);r3=r(3);r4=r(4);
rmin=min(r);rmax=max(r);rtotal=sum(r);
Ang1=0; Ang2=2*pi;
if (r1+r2)>(r3+r4)& abs(r1-r2)<abs(r3-r4)
Ang1=acos((-(r4-r3)^2+r2^2+r1^2)/(2*r1*r2));
Ang2=acos((r2^2-(r4+r3)^2+r1^2)/(2*r1*r2));
end
if (r1+r2)>(r3+r4)& abs(r1-r2)>=abs(r3-r4)
Ang1=acos((r2^2-(r4+r3)^2+r1^2)/(2*r1*r2));
Ang2=-Ang1;
end
% if (r1+r2)<=(r3+r4)&abs(r1-r2)>=abs(r3-r4)
% Ang1=0;
% Ang2=2*pi;
% end
if (r1+r2)<=(r3+r4)&abs(r1-r2)<abs(r3-r4)
Ang1=acos((r2^2-(r4-r3)^2+r1^2)/(2*r1*r2));
Ang2=2*pi-Ang1;
end
adjst = (Ang2-Ang1)*1e-8;
Ang1=theta1+(Ang1+adjst)*180/pi;
Ang2=theta1+(Ang2-adjst)*180/pi;
if Ang2<Ang1,TT=Ang1;Ang1=Ang2;Ang2=TT;end


上述函數之應用,請參考下節的內容。

6.7 繪出連桿之極限位置

drawlinks函數


有了f4bar.m之計算,只要連桿組可以組立(form = 1),即表示每一個相對應連桿的角度均可獲得,因而可以進行繪出其相關位置。程式drawlinks之目的即是利用MATLAB繪製四連桿之相關位置。故此程式本身會呼叫f4bar.m函數以計算四連桿之向量位置,然後繪圖。在其呼叫f4bar.m函數時,其角速度及角加速度均設為零。其呼叫格式如下:

function drawlinks(r,th1,th2,sigma,driver)

其輸入各式與f4bar.m大體相同,茲說明如下:
  • r(1:4) = 各桿之長度,r(1)為固定桿,其餘分別為曲桿、結合桿及被動桿。
  • theta1 = 第一桿之水平角,或為四連桿之架構角,以角度表示。
  • theta2 = 驅動桿之水平夾角,以角度表示。一般為曲桿角,但若為結合桿驅動,則為結合桿之水平夾角。
  • sigma = +1 or -1. 組合模式,負值表示閉合型,正值為分支型,但有時需視實際情況而定。
  • driver = 0 (驅動桿為第二桿); 1 (驅動桿為第三桿)


程式中,在呼叫f4bar.m過後,僅取其values中第一欄中之數據,即r1、r2、r3及r4等之複數型式資料。構成基本的O、R、P、Q等四點。O為原點,R及Q為r2與r4的向量點,直接使用即可,而P點則為兩桿組合點,即為r1+r4或r2+r3的向量和,本程式取其前者。

程式內容



function drawlimits(r,th1,sigma,driver)
%function drawlmits(r,th1,sigma,driver)
%draw the positions of four-bar links
%call f4bar funcion
%r: row vector for four links
%th1: frame angle
%sigma: assembly mode
%driver: 0 for crank, 1 for coupler
[Qstart, Qstop]=fb_angle_limits(r,th1,driver)
clf;
[values b]=f4bar(r,th1,Qstart,0,0,sigma,driver);
rr=values(:,1);
rr(3)=rr(1)+rr(4);
rx=real(rr);rx(4)=0;
ry=imag(rr);ry(4)=0;
if b==1
plot([0 rx(1)],[0 ry(1)],'k-','LineWidth',4);
hold on;
if driver==0
plot([0 rx(2)],[0 ry(2)],'b-','LineWidth',1.5);
plot([rx(2) rx(3)],[ry(2) ry(3)],'r-','LineWidth',2);
else
plot([0 rx(2)],[0 ry(2)],'r-','LineWidth',2);
plot([rx(2) rx(3)],[ry(2) ry(3)],'b-','LineWidth',1.5);
end
plot([rx(1) rx(3)],[ry(1) ry(3)],'-g');
plot(rx,ry,'bo');
text(0,0,' O');text(rx(1),ry(1),' R');
text(rx(2),ry(2),' P');text(rx(3),ry(3),' Q');
text(rx(2)/2,ry(2)/2,['s1=' num2str(Qstart,'%6.1f')]);
else
fprintf('Combination of links fails at degrees %6.1f\n',Qstart);
end
[values b]=f4bar(r,th1,Qstop,0,0,sigma,driver);
rr=values(:,1);
rr(3)=rr(1)+rr(4);
rx=real(rr);rx(4)=0;
ry=imag(rr);ry(4)=0;
if b==1
if driver==0
plot([0 rx(2)],[0 ry(2)],'b-','LineWidth',1);
plot([rx(2) rx(3)],[ry(2) ry(3)],'r-','LineWidth',1.5);
else
plot([0 rx(2)],[0 ry(2)],'r-','LineWidth',1.5);
plot([rx(2) rx(3)],[ry(2) ry(3)],'b-','LineWidth',1);
end
plot([rx(1) rx(3)],[ry(1) ry(3)],'g-');
plot(rx,ry,'bo');
text(rx(2),ry(2),' p');text(rx(3),ry(3),' q');
text(rx(2)/2,ry(2)/2,[' s2=' num2str(Qstop,'%6.1f')]);
else
fprintf('Combination of links fail at degrees %6.1f\n',Qstop);
end
axis equal
grid on



執行範例


第二桿為驅動桿:



(1) r = [1 2 3 4]

drawlimits([1 2 3 4],0,-1,0)

Qstart = 3.6e-005
Qstop = 360


圖6.17 第二桿驅動,屬全迴轉之情形(r = [1 2 3 4])


本例中,無論第二桿或第四桿,均可完全迴轉。


(2)r =[3 5 2 1]

drawlimits([3 5 2 1],0,1,0)

Qstart = -33.557
Qstop = 33.557


圖6.18 第二類型,右邊有限制,左邊無限(r =[3 5 2 1])


圖6.18則因 3+5≧2+1,|3-5|≧|2-1|,故屬前述之第二型限制角度。


(3)r =[5 4 1 3]

drawlimits([5 4 1 3],0,1,0)

Qstart = 22.332
Qstop = 51.318


圖6.19 第三類型,前後角度限制(r =[5 4 1 3])


本例中,因為各桿長度符合第三類型,即5+4≧1+3,|5-4|≦|1-3|,故其角度限制如圖6.19。


(4)r =[4 3 3 5]

drawlimits([4 3 3 5],0,1,0)

Qstart = 28.955
Qstop = 331.04


圖6.20 第四類型(r2驅動) (r =[4 3 3 5])


此類型與第一類型類似,但角度限制在右邊,因為各桿之長度符合該項條件:4+3≦3+5,|4-3|≦|3-5|。如圖6.21。


第三桿為驅動桿時:



(5) r =[4 5 3 5]

drawlimits([4 5 3 5],0,-1,1)
Qstart = 3.6e-005
Qstop = 360

圖6.21 第三桿與第一桿平行,但可完全迴轉(r =[4 5 3 5])



(6)r =[4 3 3 3 ]

drawlimits([4 3 3 3],0,-1,1)

Qstart = -117.28
Qstop = 117.28


圖6.22 第三桿之限制角度相反,屬第六情況(r =[4 3 3 3 ])



(7)r =[4 4 6 1]

drawlimits([4 4 6 1],0,-1,1)

Qstart = 26.384
Qstop = 55.771


圖6.23 不同角度但同一象限內之限制,屬第七狀況(r =[4 4 6 1])


(8)r =[3 4 4 6 ]

 drawlimits([3 4 4 6],0,-1,1)

Qstart = 28.955
Qstop = 331.04


圖6.24 上下象限之限制角度,兩者和為360度(r =[3 4 4 6 ])

6.8 桿上任意點之動態分析

桿上任意點之位置


四連桿之運動,其各連接點之路徑及運動狀態均可利用f4bar.m程式解析。但在桿上或桿外延伸點之分析則必須就該剛體之對應關係進行探討。就某一連桿而言,由於屬剛體性質,故只要知道其中兩點之運動狀態,即可就剛體本身之角速度及角加速度分析得其結果。下圖是以一個連接於第三桿上之點A位置為例:


圖6.2 四連桿之關係位置及各桿名稱

四連桿機構之運動已可以從f4bar.m函數求得其相關位置、速度及加速度,這些值可以在計算各桿之延伸點時引用。但這些點僅是桿間之連結點,如PQR等三點,至於桿上其他點或由各桿延伸到任意點之特性則必須以另外方法求證。理論上,各桿上之點如PQR為已知,則在任意桿上之位置之運動狀況應可求得。

在剛體中,由於點間無相對運動,故剛體上之任何點除位置不同外,其角速度及角加速度應相同。基於此原理,我們應可據以運算任一桿上之點或該桿所帶動之各點。圖6.2中,設A點為第三桿上之點,且其與桿QP間之夾角為γ(圖中為α),A點之位置向量可表示如下:

ra = r2 + r6 (6.37)
θ6= θ3 + γ (6.38)

以複數表示,點A之位置向量rA為:

ra=r2+r6ejθ6=r2+r6ej(θ3+γ)
=r2+r6ejθ3ejγ
=r2+r6[cos(θ3+γ)+jsin(θ3+γ)] (6.39)

桿上任意點之速度與加速度


A點之速度及加速度分別表示如下:

ra'=r2'+jr6ω3ejθ3ejγ
=r2'+r6ω3[-sin(θ3+γ)+jcos(θ3+γ)] (6.40)

ra"=r2"+r6(jα3-ω3²)ej(θ3+γ)
=r2"+r6(jα3-ω3²)[cos(θ3+γ)+jsin(θ3+γ)] (6.41)

函數body之程式參數


上面公式6.37-6.41計算任意桿上之延伸點之位置、速度及加速度等,可以利用MATLAB程式body函數計算,其呼叫型式如下:

  [val]=body(r6,alpha,values,link)

輸入參數:
  • r6:桿r6之長度
  • alpha: 與QP間之夾角,以度表示,亦可有正負值。
  • values:四連桿參數,如同f4bar.m之輸出。
  • link: 增加點之所屬桿序
  • val: 共五點,屬複數型式,代表最初點、點A及最終點之位置向量、點A之速度及加速度向量,以桿3為例,則為:[Q A P A' A"]。


body程式內容(之一)



function [val]=body(r6,alph,values,link)
%
%function [val]=body(r,alph,values,link)
%Find kinematics of an arbitrary point in a linkage
%Inputs:
% r6 = length of point from link's origin,Q
%alph= angle in deg. between the base link and r
%values= vetor output from the call of f4bar.m
%link =the link that the point lays on, 1-4
%outputs:(in complex form)
%val(1):initial position,(say Q, for link 2)
%val(3):middle position,(say P, for link 2)
%val(2):final position,or position of A
%val(4):velocity of A
%val(5):acceleration of A
%
r2=values(link,1);
d2g=pi/180;
switch link
case 2 % on the crank
val(1)=0;v0=0; a0=0;
val(3)=values(2,1);
case 3 % on the coupler
val(1)=values(2,1);
val(3)=values(1,1)+values(4,1);
v0=values(1,5);
a0=values(3,5);
case 4 % on the rocker
val(1)=values(1,1);
val(3)=values(1,1)+values(4,1);
v0=0; a0=0;
case 1 % on the frame
val(1)=0; v0=0; a0=0;
val(3)=values(1,1);
end
th6=(values(link,2)+alph)*d2g;
efact=exp(j*th6);
w6=values(link,3);
a6=values(link,4);
val(2)=val(1)+r6*efact;
val(4)=v0+j*r6*w6*efact;
val(5)=a0+(j*r6*a6-r6*w6*w6)*efact;



draw4link程式內容(之二)


本程式以線繪四連桿之連接之情形,主動桿使用藍色表示,搖桿為綠色,地桿為黑色,另一桿為藍色。本程式使用f4bar.m執行後之資料作為輸入,並設定其主動桿。

function h=draw4link(values,linkdrive)
%function draw4link(values,b,linkdrive)
%draw the positions of four-bar links
% values are data from f4bar.m
%linkdrive: 0 for crank, 1 for coupler
%clf;
if nargin<2, linkdrive=0;end
rr=values(:,1);
rr(3,1)=rr(1,1)+rr(4,1);
rx=real(rr(:,1));rx(4)=0;
ry=imag(rr(:,1));ry(4)=0;
h(1)=line([0 rx(1)],[0 ry(1)],'color','k','LineWidth',4);
h(4)=line([rx(1) rx(3)],[ry(1) ry(3)],'color','g','LineWidth',1.5);
if linkdrive==0
h(2)=line([0 rx(2)],[0 ry(2)],'color','b','LineWidth',2);
h(3)=line([rx(2) rx(3)],[ry(2) ry(3)],'color','r',...
'LineWidth',1.5,'marker','o');
else
h(2)=line([0 rx(2)],[0 ry(2)],'color','r','LineWidth',1.5);
h(3)=line([rx(2) rx(3)],[ry(2) ry(3)],'color','b',...
'LineWidth',2,'marker','o');
end
text(0,0,' O');text(rx(1),ry(1),' R');
text(rx(2),ry(2),' P');text(rx(3),ry(3),' Q');
axis equal
grid on


linkplate程式內容(之三)


如前所介紹,linkplate可以繪出桿之延伸部份,故利用body所得到第延長桿之座標可以利用此函數繪出。其輸入為對應點之座標及接點處之圓直徑dd,後者若為負值則會直接在圖形模式下繪出其外形。

function [x,y]=linkplate(x0,y0,dd)
% Drawing for multiple links
% Inputs:
% x0,y0:coordinates of points,the points
% must be specified in counterclockwise.
% dd:dia. of circle
% Example
% [x,y]=linkplate([0.5 2 3 2],[1 3 2 0.5],-1);
nn=length(x0);d=abs(dd)/2;x0=x0(:);y0=y0(:);
T=[x0 y0];T=sortrows(T,[-2,1]);
x2=[T(2:end,1);T(1,1)];
y2=[T(2:end,2);T(1,2)];
V=(x2-x0)+(y2-y0)*i;
D=abs(V);th=angle(V);
t=linspace(pi/2,2.5*pi,20);
Cout=max(d,0.2)*exp(j*t');Cin=Cout/2;
M=[];
for k=1:nn,
P=[Cin;Cout(1:10);D(k)+[Cout(11:20);Cin;Cout(20)]];
xx=real(P);yy=imag(P);tx=th(k);
x=xx*cos(tx)-yy*sin(tx)+x0(k);
y=xx*sin(tx)+yy*cos(tx)+y0(k);
if dd<0, line(x,y);end
end


執行例



>> [val,form]=f4bar([5 2 4 3],0,60,10,0,-1,0)
val =
Columns 1 through 3
5 0 0
1 + 1.7321i 60 10
3.796 + 1.261i 18.376 -2.8801
-0.20397 + 2.9931i 93.899 4.5735
Columns 4 through 6
0 10 + 17.321i 1 + 1.7321i
0 -0.93284 + 13.689i 4.796 + 2.9931i
28.802 -100 - 173.21i 0
57.491 -167.81 - 74.331i 0
form =
1

>> draw4link(val,0) %繪出四連桿之結構
ans =
168 170 171 169

>> [vals]=body(3,30,val,3);%接於第三桿,其長度為3與第三桿夾角為30度。
>> [x,y]=linkplate(real(vals(1:3)),imag(vals(1:3)),-1);

執行結果:

利用linkplate函數繪出之複雜外形

上述呼叫linkplate函數若不合意,亦可使用patch這個指令,這是內建指令,其型式為:

  patch(x,y,'r')

後一項輸入為顏色,可以更換為其他顏色,如'b','k','g'等。故linkplate 若改為patch,即:

patch(real(vals(1:3))',imag(vals(1:3))','r')



利用patch指令繪製之三角形

同理,若設定在桿二,長度為6,夾角為30,其結果為:

>> [vals]=body(6,30,val,2);% 落點在桿2
>> abs(vals)
ans =
0 6 2 60 600

上述介紹之函數,未來均可以在四連桿中使用,讀多熟悉其功能及運作。

6.9 四連桿軌跡繪製

四連桿中各點的軌跡可以依其可能的運動範圍繪出其運動軌跡。在四桿之中,除第一桿固定外,其餘均有相對運動,而第二桿與第四桿因其運動係以固定點為圓心,故其運動軌跡均為圓形或弧形。其最大不同或不可預測者則屬聯結桿或聯結桿延伸後其上某點之運動路徑。其路徑之複雜度常以圖形層次(degree)表示。複雜的圖其表現之層次愈高,甚至有許多交叉的情況發生,變成方程式的根。簡單梢接的四連桿,其軌跡層次可達第六級;而滑塊連桿則有四級。其桿數增加級數也會增加,依據翁德利基(Wunderlich)的計算,其公式如下:

m = 2 * (3)(n/2-1)

因此四連桿、六連桿及八連桿分別為6、18及54級。在聯結桿上的點也有些可以產生簡單層級的路徑,如一般的圓形軌跡等。而平行四邊形的四連桿則可以產生完全是圓的軌跡。聯結桿上某一特定點的軌跡稱為聯結桿圖。利用這種圖形可以產生許多機械設計時所需的運動路徑,這些包括部份直徑行進及以某一點為圓心之迴轉運動。因此可以利用聯結圖的特性作為設計特定路徑的參考,成為路徑合成的重要工具。

除產生不同的路徑外,有時尚需要瞭解產生該路徑點之速度與加速度。這些可以經由f4bar.m之函數程式進行計算。這部份功能在前一節均已詳細討論過,不在此地賛述。

在進行繪製軌跡時,必須考慮到前面所介紹的各項函數,其中包括:
  • 1. 角度限制函數fb_angle_limits.m,以求得連桿組成後,其可能之運動角度範圍。
  • 2. f4bar.m 函數以進行計算各點之位置、速度與加速度。
  • 3. body.m函數以計算在聯結桿上特定點之位置、速度與加速度。
  • 4. drawlinks.m函數以繪出各組連桿之相關位置。


四連桿軌跡程式draw4paths


將四連桿之座標及特定點之軌跡繪出並繪出特定點速度與加速度變化,這是draw_4barpaths()之功能。第一及第二程式為四連桿但不同畫法,最後一項為滑塊四連桿之畫法,其特定點僅能應用於聯結桿上,故不能選擇其他桿上的點,其型式及參數如下:

draw_4barpaths(r6,th6,r,th1,theta,td2,tdd2,sigma,npts,driver,mode)

輸入參數:


  • r : 四連桿之長度,一列向量表示。
  • th1: 第一桿的水平角度(通常為零)。
  • th2: 驅動桿或聯結桿的水平角度。
  • td2, tdd2:驅動桿之角速度及角加速度。
  • Sigma:連桿之組合模式選擇(需為+1或-1)
  • Driver:驅動桿之設定( 0 表示苗桿驅動,1 表示由聯結桿驅動)。
  • Npts: 設定分割的點數或位置。
  • r6,rh6,nlink:桿上特定點之位置,包括桿長,與桿之夾角及附於何桿。
  • Mode:mode=0,畫簡單位置圖;=1 畫所有圖表;=2畫簡單位置圖+速度圖;=3 畫所有圖表,但用簡單位置圖。


程式內容



function draw_4paths(r6,th6,nlink,r,th1,theta,td2,tdd2,sigma,npts,driver,mode)
%
%function draw_4paths(r6,th6,nlink,r,th1,theta,td2,tdd2,sigma,npts,driver)
%Designed by D. S. Fon, BIME, NTU. Dated April 11, 2003
%draw the positions of four-bar links
%call f4bar.m,drawlinks.m,fb_angle_limits.m, body.m
%
%Inputs:
% r: row vector for four links
% th1,theta: frame and driving-link angles, deg.
% td2,tdd2:angular velocity and acceleration of the driving link.
% sigma: assembly mode
% driver: 0 for crank, 1 for coupler
% npts: number of points divided
% r6,rh6,nlink:extension pt to the nlink link.
% mode=0 simple position graph only.
% =1 all graphs.
%example:
% draw_4paths(2,-30,3,[4 2 3 4],0,45,10,10,1,100,0,0)
%
%clf;
figure(1);
r(abs(r)<eps)=eps;npts=npts+10;
[Qstart, Qstop]=fb_angle_limits(r,th1,driver);
npoint=abs(npts);
th2=linspace(Qstart,Qstop,npoint);
val=zeros(7,npoint);
for i=1:npoint,
[vr b]=f4bar(r,th1,th2(i),td2,tdd2,sigma,driver);
[pa]=body(r6,th6,vr,nlink);
val(1:4,i)=[pa(3);pa(1);pa(2);vr(4,2)];
val(5:7,i)=[pa(4);pa(5);vr(4,3)];
%3-Pa;4-theta-p;5-Va;6-Aa;7-Wp
end
x=real(val);y=imag(val);
range=1.2*([min(min(x)) max(max(x)) min(min(y)) max(max(y))]);
axis(range);axis equal;
h=f4limits(r,th1,sigma,driver);
line(x(1,:)',y(1,:)','color','r','linestyle',':','linewidth',1.5);
line(x(2,:)',y(2,:)','color','b','linestyle','-.','linewidth',1.5);
line(x(3,:)',y(3,:)','color','k','linestyle',':','linewidth',1.5);
nn=length(theta);
for k=1:nn,
[vr b]=f4bar(r,th1,theta(k),td2,tdd2,sigma,driver);
h=draw4link(vr,driver);
%x=real(vr(:,1));y=imag(vr(:,1));
[pa]=body(r6,th6,vr,nlink);
patch('xdata',real(pa(1:3)), 'ydata',imag(pa(1:3)),...
'facecolor','r','facealpha',0.6,'marker','o');
text(real(pa(2)),imag(pa(2)),' A');
end
axis equal
grid on;
if mode==0, return; end;
figure(2);
valz=abs(val);
th2=th2(3:end-3);valz=valz(:,3:end-3);
%3-Pa;4-theta-p;5-Va;6-Aa;7-Wp
subplot(2,2,1);plot(th2,valz(4,:),'r-');grid on;
ylabel('Rocker Angles');xlabel('Crank Angle');
subplot(2,2,2);plot(th2,valz(5,:),'k-');grid on;
ylabel('Velocity at A');xlabel('Crank Angle');
subplot(2,2,3);plot(th2,valz(6,:),'b-');grid on;
ylabel('Acceleration at A');xlabel('Crank Angle');
subplot(2,2,4);
plot(th2,valz(7,:),'b-');grid on;
xlabel('Crank Angle');ylabel('Omega at P');

執行例



>> draw_4paths(2,-30,3,[4 2 3 2],0,45,10,10,0,100,0,0)
Qstart =
-108.21
Qstop =
108.21





>> draw_4paths(2,-30,3,[4 2 3 4],0,45,10,10,1,100,0,3)
Qstart =
3.6e-006
Qstop =
360











>> draw_4paths(1.33,10,3,[2.22 0.86 1.85 0.86],0,-30,2,5,1,100,0,1)
Qstart =
-116.04
Qstop =
116.04



6.10 四連桿之動態模擬

MATLAB 指令中,可以使用擦拭重畫法以產生動畫。產生動畫之原理是將某一物體之座標改變之後,擦去前面所繪的圖像,重新依新座標繪製一次,如此連續不斷,產生一系列的動作畫面。 典型的畫法是畫出該物體後,然後在迴圈中,不斷地些微改變其位置座標,然後繼續畫出整個畫面。其座標分別以xyz表示。在指令中亦可用參數改變其擦拭的模式。總共有三種模式可供選用:

  • none - MATLAB 會在繪出新圖案前不將舊圖清除。
  • background - MATLAB 會用背景顏色將舊圖重新繪製一次。故此種模式除將舊圖清除外,其底下原有的繪製物如格線等亦被清除。
  • xor – 此模式僅擦拭物體部份,故最常用於動畫。

這三種模式是MATLAB繪圖指令中之執行速度最快者,但仍然視圖像的細節及運算的時間而定。有時仍然需要使用延遲的功能才能看到它的變化。由於它是一個較為簡易的方式,故本機動學二將以此功能配合各項分析結果產生動畫,使學者可以瞭解其中之變化過程。

程式解說


基本上,程式之結構與前述繪製程式之軌跡的方式相同 ,只是在表現為繪圖時,其時序略有不同。此時必須先將各圖,如曲桿、連結桿及搖桿等三個均為可動狀態,而且其對應之位置隨時不同,因此必須針對每桿之狀態建立一個圖群,並給予不同的握把。且將其對應的握把設定為擦拭模式,如:

  for i=2:4,set(h(i),'erasemode','xor');end

在此程式中,除主程式外,共呼叫四個副程式,即f4bar.m、 f4limits.m、 fb_angle_limits.m及 body.m。其功能分別說明如下:

fb_angle_limits函數是計算輸入之連桿組迴轉時之限制,這個限制角度包括曲柄及搖臂之迴轉角,利用這兩個角度繪製均分角度下之各桿方位。呼叫此函數時,除各桿長度外,必須有固定桿之角度及驅動桿之屬性,驅動桿為曲桿或連結桿,其結果會有不同。

有了限制角度後,才在限制角度之範圍內進行細分。其細分度依輸入項之npts而定,其預設值為100點。在驅動桿不同角度下,呼叫f4bar函數以計算各桿之對應角度。此時其輸出之b值應均會等於1。表示可以組合成四連桿之實際位置。其後再呼叫body函數。這個函數旨在確定特定桿上之延伸點之動作。為方便起見,此處之body為決定附屬之桿號及角度,其三角形下之頂點A即為所要檢視之點,並以三角形表示之。

在程式中,也呼叫f4limits這個函數。這個函數是將 fb_angle_limits計算出之角度限制位置之四連桿繪出。由此可以看到真正連桿之活動界限。

程式內容



function move_4paths(r,r6,th6,nlink,th1,td2,tdd2,sigma,driver,ntimes,npts)
%
%function move_4paths(r,r6,th6,nlink,th1,td2,tdd2,sigma,driver,ntimes,npts)
%
%draw the positions of four-bar links
%call f4bar.m funcion, f4limits.m, fb_angle_limits.m, body.m
%
%Inputs:
% r: row vector for four links
% th1: frame angle
% th2: crank angle or couple angle
% td2,tdd2:angular velocity and acceleration of the driving link.
% sigma: assembly mode
% driver: 0 for crank, 1 for coupler
% ntimes: no. of cycles
% npts: number of points divided
% r6,rh6,nlink:additional length and angle for nlink link.
%example:
% move_4paths([4 2 3 4],2,-30,3,0,10,0,1,0,4,100)
%
%clf;
if nargin<10, ntimes=3;npts=100;end;
figure(1);
[Qstart, Qstop]=fb_angle_limits(r,th1,driver);
npoint=abs(npts);
th2=linspace(Qstart,Qstop,npoint);
val=zeros(6,npoint);
for i=1:npoint,
[vr b]=f4bar(r,th1,th2(i),td2,tdd2,sigma,driver);
[para]=body(r6,th6,vr,nlink);
val(1:3,i)=[vr(1,1);vr(2,1);vr(1,1)+vr(4,1)];
val(4:6,i)=[para(1);para(3);para(2)];
end
x=real(val);y=imag(val);
h=f4limits(r,th1,sigma,driver);
line(x(5,:)',y(5,:)','color','r','linestyle',':');
line(x(4,:)',y(4,:)','color','b','linestyle','-.');
line(x(6,:)',y(6,:)','color','k','linestyle',':');
range=1.2*([min(min(x)) max(max(x)) min(min(y)) max(max(y))]);
axis(range);axis equal;grid off;
for i=2:4,set(h(i),'erasemode','xor');end
h0=patch('xdata',[],'ydata',[],'erasemode','xor','facecolor','r',...
'marker','o');
i=0;s=-1;axis off;
for m=1:ntimes
s=-s;
if abs(Qstop-Qstart-360)<1,i=0;s=1;end;
while 1,
i=i+s;
if i>npoint|i==0,break;end;
set(h(2),'xdata',[0 x(2,i)], 'ydata',[0 y(2,i)]);%crank
set(h(3),'xdata',[x(2,i) x(3,i)], 'ydata',[y(2,i) y(3,i)]);%coupler
set(h(4),'xdata',[x(1,i) x(3,i)], 'ydata',[y(1,i) y(3,i)]);%Rocker
set(h0,'xdata',[x(4:6,i)], 'ydata',[y(4:6,i)]);
drawnow; %flush the draw buffer
pause(0.1);
end
end % for m loop

%
function h=f4limits(r,th1,sigma,driver)
%function f4lmits(r,th1,sigma,driver)
%draw the positions of four-bar links
%call f4bar funcion
%r: row vector for four links
%th1: frame angle
%sigma: assembly mode
%driver: 0 for crank, 1 for coupler
% Example:h=f4limits([4 2 3 4],0,1,0)
[Qstart, Qstop]=fb_angle_limits(r,th1,driver)
[values b]=f4bar(r,th1,Qstart,0,0,sigma,driver);
if b==1,
h=draw4link(values,driver);
else
fprintf('Combination of links fails at degrees %6.1f\n',Qstart);
end
[values b]=f4bar(r,th1,Qstop,0,0,sigma,driver);
if b==1,
h=draw4link(values,driver);
else
fprintf('Combination of links fails at degrees %6.1f\n',Qstart);
end
axis equal
grid on


執行結果



2/2/07

5.3 葛拉索變點機構

葛拉索第三型為最短桿與最長桿之和等於其餘兩桿之和時之情況。這種情況包括平行機構、菱形機構等。

菱形機構


指令:

>> four_link3([60 0:30:360],[4 4 6 6],1)



平行機構


指令:

>> four_link3([30 0:5:360],[6 2 6 2],1)

5.4 非葛拉型機構

非葛拉型機構與其他葛拉型機構相同的解法,亦可利用four_link3函數可以觀察其他不同的連桿機構動作的情形。同學可以參考書中第4-2.4節中相關的敘述,也可以提供課堂中討論的題材。

1/26/07

4.4 四連桿之組成

參考書第四章中已經開始討論到四連桿機構的問題。你能列舉一些週遭事物中有那些使用四連桿機構的嗎?既然討論到機動問題,就必須看到它的運動狀態。而要有 運動更必須有參考座標,或參考桿,如此才能看出其相對運動間之關係。故在討論一個物件是否屬於機構,最大的考慮是必須有參考桿。

在四連桿中,其參考桿為第一桿,或稱地桿。這點在書中已經詳明,請同學自行參考。四連桿組顧名思義是由四支連桿相連而成,其中一桿為固定桿,另一桿(第二桿)為動桿。下面之程式是輸入已知之四桿長度及第二桿與水平面之夾角。實際上下述之程式仍然以很簡單的型式表示,而且必須藉助Matlab繪圖界面中之格點指示出第三桿與第四桿連結點之方位。才能進行繪圖。

第三桿與第四桿連結點通常有兩個位置,一為交叉型、一為閉合型。


function z=draw4links(L1,L2,L3,L4,theta)
%clf;
th=theta*pi/180;
r2x=L2*cos(th);r2y=L2*sin(th);
linkxy([0 0],[L1,0],-2);
linkxy([0 0],[r2x r2y],-2);
t=linspace(0,2*pi,100)';
r3x=L3*cos(t)+r2x;r3y=L3*sin(t)+r2y;
r4x=L4*cos(t)+L1;r4y=L4*sin(t);
line(r3x,r3y,'color','b','linestyle',':');
line(r4x,r4y,'color','r','linestyle',':');
line([r2x 118.5],[r2y 43.25],'linewidth',3);
line([L1 118.5],[0 43.25],'linewidth',3);
line([r2x 38.22],[r2y -56.61],'linewidth',3,'linestyle',':');
line([L1 38.22],[0 -56.61],'linewidth',3,'linestyle',':');





四連桿之位置分析將在另一章中敘述,本節僅能就簡單的方式繪出其相關位置。

4.6 四連桿之解(1)

四連桿位置解


有關四連桿位置使用幾何代數解法請參照馮丁樹著之參考書四章三節。此例所考慮之四連桿是較簡單的型式,其前提是將第一桿置於水平位置,因此其角度為零,在公式計算上可以簡化。由於各桿之尺寸為已知,第二桿作為曲桿,其水平角度為已知,因此只要求得第四點的位置及第三與第四桿之水平角度即可。



程式內容


以MATLAB應用程式解四連桿之相關位置實際上有多種用法,可參考機動學之位置分析。本程式函數four_link1之呼叫法如下:

function [theta3,theta4,Cx,Cy]=four_link1(theta2,r,mode)

其中輸入參數:

  theta2: 桿2之輸入角度,可為矩陣資料,其單位為度數。
  r: 列矩陣,各桿之長度,如:[r1 r2 r3 r4]。
  mode:+1或-1,選擇連桿組上下之方位。

輸出參數:

theta3,theta4:桿3及桿4之輸出角度。
Cx,Cy:第四桿C結之座標,若為虛數值表示該位置不存在,其輸出角度不能採用,是否為虛數,則可使用isreal函數進行測試。



程式4.5
function [theta3,theta4,Cx,Cy]=four_link1(theta2,r,mode)
% P4.4 function [theta]=four_link1(theta2,r)
% Find the angles of link 3 and link, given theta2 and [r]
% Example:
% [theta3,theta4, Cx, Cy]=four_link1(80,[4 2 4.2 2.6],1)
% Designed by D.S. Fon, BIME, NTU, Date:February 8,2003.
%
rr=r.*r;
d2g=pi/180;
theta=theta2*d2g;
Bx=r(2)*cos(theta);By=r(2)*sin(theta);
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;
theta3=atan2(Cy-By,Cx-Bx)/d2g;
theta4=atan2(Cy,Cx-r(1))/d2g;


範例4.6


如圖4.1之連桿長度分別為70、50、110、65mm,桿2之角度為80度,求其對應之θ3與θ4。

[解]:

設theta2=80,r=[70 50 110 65],mode=+1,代入four_link1執行。

>> [theta3,theta4,Cx,Cy]=four_link1(80,[70 50 110 65],1)

theta3 = -3.1199
theta4 = 41.7160
Cx = 118.5194
Cy = 43.2536


範例4.7


有一組四連桿,其尺寸分別為[4 2 4.2 2.6]cm,桿1接地,並與地平行。試(A)以45度為區隔,令桿2迴轉一周,求其對應之θ3與θ4及C結座標。(B)另以MATLAB撰寫一程式,繪出以桿2迴轉間隔為10度之所有四連桿之軌跡。

[解]:

設theta2=[0:60:360] ,總計應有6個角度。r=[4 2 4.2 2.6]cm ,mode=+1,代入four_link1執行。其結果如下:

>> [theta3,theta4,Cx,Cy]=four_link1([0:60:360],[4 2 4.2 2.6],1)
theta3 =
27.6604 8.1593 9.8818 21.5404 48.0950 68.1593 27.6604
theta4 =
48.5827 63.5647 109.3695 143.6226 147.5827 123.5647 48.5827
Cx =
5.7200 5.1575 3.1377 1.9067 1.8052 2.5625 5.7200
Cy =
1.9498 2.3281 2.4528 1.5421 1.3938 2.1665 1.9498


由上面所得的結果可知,桿2可以完全迴轉。而最前與最後一項之結果相同,因為0度與360度是同樣的角度。

4.7 四連桿之解(2)

第二種解(B)


MATLAB的指令中,有一簡單的指令可以繪圖,即line(x,y)指令。只要利用four_link1()計算對應於桿2迴轉角之四點座標(即點B及C,A與B固定),將座標值餵入line(x,y)指令中之座標參數(x,y)內,即可進行繪圖。注意每一個位置之四連桿座標繪完後,必須回到原點,才能繪出閉路的連桿型式,例如A-B-C-D-A的程序。故原點A在座標輸入參數項內需輸入兩次。

程式內容


利用MATLAB撰寫的程式four_link2內容如下:

程式範例4.7
function four_link2(theta2,r,mode)
% Program 4.5.2 to draw sets of 4-bar linkage
%Inputs:
% theata2:angles of link 2, in degrees
% r:row matrix for link lengths={r1 r2 r3 r4]
% mode:+1/-1 for toggling position
% Example:
% four_link2(0:5:360,[4 2 4.2 2.6],1)
% Author:D.S. Fon, BIME, NTU, Date:March 8,2006.
%
rr=r.*r;
d2g=pi/180;
theta=theta2'*d2g;
nn=length(theta);
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
%theta3=atan2(Cy-By,Cx-Bx)/d2g;
%theta4=atan2(Cy,Cx-r(1))/d2g;
Bx=r(2)*cos(theta);By=r(2)*sin(theta);
for i=1:nn,
if isreal(Cy(i))
line([0 Bx(i) Cx(i) r(1) 0]',[0 By(i) Cy(i) 0 0]',...
'marker','o');
end
end
axis equal;


執行結果:

>>four_link2(0:10:360,[4 2 4.2 2.6],1)

圖4.15 執行four_link2(0:10:360,[4 2 4.2 2.6],1)之結果

由圖4.15可知,左側桿可以迴轉360度,右側桿則僅能作往返運動,故為曲柄搖桿機構。若使用grashof2函數進行測試,其結果如下:

>> [ans,b]=grashof2([4 2 4.2 2.6])
ans =
Crank-Rocker linkage with rotating crank.
b =
6

其結果與實際繪圖的情況一致。故通常在繪圖之前,可以利用grashop2這個函數進行測試。立即能收到事半功倍之效。

設利用上述之draw4links2指令,設桿二之水平角度為80度,則可執行得到如下之結果:

>> draw4links2(4,2,4.2,2.6,80);

1/22/07

2.5 利用linkshape繪製連桿組

前節提出之linkshape函數可以依輸入之兩端點繪出具有厚度之單一連桿,本節則試利用這個函數繪出不定數目之連桿組,所得之連桿必須每桿頭尾相連,下面為輸入端點座標後連成之程式,稱為link_plot,這個函數必須呼叫linkshape,此函數已在本章第2.3節中討論過:

桿座標輸入



function link_plot(x,y,w)
%link_plot.m will call links.m
%draw connecting linkshape function
%Input:(x,y)are serial coordinates
% w:width of links
%Example: link_plot([0 3 5 1],[0 3 2 1],3)
%Author:DSFon, BIME,NTU. Date:Jan. 25, 2007
clf;
if nargin==2,w=1;end
for i=1:length(x)-1
linkshape([x(i) y(i)],[x(i+1) y(i+1)],w);
end


這個程式雖短,但只要有一組座標輸入即可繪出其連桿組外型。例如:連續四桿之座標分別為(0,0), (3,3), (5,2), (5,5)等四點,其輸入型式為:

>> link_plot([0 3 5 4],[0 3 2 5])


執行結果如下圖:



桿長度與角度輸入

前面程式link_plot之輸入為各桿端點之座標。但有些時候,一組連桿常僅知道桿長及桿與前桿所夾之角度。這種表示法普見於機器手臂之討論。本節提出之link_angle程式,就是實現這個想法。此時之輸入參數為各桿之長度(lens),對應水平角度(angle)及起點(start)與桿寬(w)等。

function link_angle(lens,angle,start,w)
%link_plot.m will call links.m
%draw connecting links
%Input:lens:lengths of links
% angle:link angles w/t the former link, degs
% w:width of links
% start:starting point(x0,y0)
%Example: link_angle([5 3 4 6],[30 60 90 145])
%Author:DSFon, BIME,NTU. Date:Jan. 25, 2007
if nargin<4,w=1;end;
if nargin<3,start=[0 0];end
lens=lens(:);angle=angle(:);
th=angle*pi/180;
x=cumsum([start(1);lens.*cos(th)]);
y=cumsum([start(2);lens.*sin(th)]);
for i=1:length(x)-1
linkshape([x(i) y(i)],[x(i+1) y(i+1)],w);
end



若使用桿長及水平角度輸入,則可使用下面之plot_angle程式進行,設桿長為5,3,4,6個單位,其對應水平角分別為30, 60, 90, 145度,則可執行如下:

>>link_angle([3 4 6],[60 90 145],[4.2,2.5])

執行結果如下圖:

1/27/06

第0章 連桿之位置分析

分析四連桿分析方式有圖解法及閉路型分析法,故其可能得到的解常是相當直接的,而且容易得到一對一的答案。這對於電腦軟體之使用,有時也會造成相當大的困擾,因為不同型式之機構存在有不同的解法,因此也需要建立不同的程式。所以許多以疊代法的技巧建立的軟體開始被使用。疊代法是利用電腦反覆運算的能力,使其答案能趨近於固定的值。故計算的次數到底需要多少次,並無法預知,甚至是否能得到正確答案,也難有定論。這也是利用電腦疊代運算時必須特別留意的。

代數分析法


要瞭解四連桿組之位置,有多種解析法可以應用,諸如三角函數法、複數法、向量法或矩陣法等等,大部份需依賴電腦程式輔助分析。茲就三角函數解析法之過程作一介紹。

圖3.1所示為一四連桿之各項參數,設四桿之度長度為r1、r2、r3、r4,其中r1與地平行,且為固定桿,而其餘各桿與水平x軸之夾角分別為θ2、θ3、θ4。第一桿之夾角θ1為零,為簡化起見故不在此表示。另D點為插植爪的端點,BCD為插稙植機構之活動部位,是一個整體的元件。



1-6.3.1 相關公式
由座標的關係,B結之座標可以表示如下:
(1.50)


圖1.16 四連桿各結構參數

由B與C結之座標與桿3及桿4長度間具有如下之關係:
(1.51)
(1.52)
將公式1.51與1.52相減,可以得到C結之座標值,即:
(1.53)
設前項中之值為m,後面屬於Cy之係數為p,即:
(1.54)
則公式1.53可化簡為:
(1.55)
將式1.55代入式1.51,可以得到Cy之一元二次方程式,解之得:
(1.56)
由Cy可以經由式1.55求得Cx,並得到桿3及桿4之夾角θ3與θ4。
(1.57)
1-6.3.2 MATLAB函數的計算
上述過程中為直接解出各角度,須注意公式1.56中應有兩值,而且應確定根號內須為正實數,若為負值表示所提供的連桿長度無法組成四連桿。利用MATLAB求解上述過程下面之程式。其呼叫函式為four_link1():
function [theta3,theta4,Cx,Cy]=four_link1(theta2,r,mode)

其中輸入參數:
theta2: 桿2之輸入角度,可為矩陣資料。
r: 列矩陣,各桿之長度,如:[r1 r2 r3 r4]。
mode:+1或-1,選擇連桿組上下之方位。
輸出參數:
theta3,theta4:桿3及桿4之輸出角度。
Cx,Cy:第四桿C結之座標,若為虛數值表示該位置不存在,其輸出角度不能採用。
程式4.5
function [theta3,theta4,Cx,Cy]=four_link1(theta2,r,mode)
%
%P4.4 function [theta]=four_link1(theta2,r)
% Find the angles of link 3 and link, given theta2 and [r]
% Example:
% [theta3,theta4, Cx, Cy]=four_link1(80,[4 2 4.2 2.6],1)
% Designed by D.S. Fon, BIME, NTU, Date:February 8,2003.
%
rr=r.*r;
d2g=pi/180;
theta=theta2'*d2g;
Bx=r(2)*cos(theta);By=r(2)*sin(theta);
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;
theta3=atan2(Cy-By,Cx-Bx)/d2g;
theta4=atan2(Cy,Cx-r(1))/d2g;
figure(1);
axis equal;
grid on;
for i=1:length(theta)
x=[0 r(2)*cos(theta(i)) Cx(i) r(1) 0];
y=[0 r(2)*sin(theta(i)) Cy(i) 0 0];
line(x,y);
end

執行例:
>> [theta3,theta4, Cx, Cy]=four_link1([0:30:360],[4 2 4.2 2.6],1)
theta3 = 27.66 11.357 8.1593 8.1473 9.8818 13.856 21.54 33.648 48.095 61.277 68.159 58.945 27.66
theta4 = 48.583 44.646 63.565 86.525 109.37 129.51 143.62 149.31 147.58 139.65 123.56 92.234 48.583
Cx = 5.72 5.8498 5.1575 4.1576 3.1377 2.3457 1.9067 1.7643 1.8052 2.0184 2.5625 3.8987 5.72
Cy = 1.9498 1.8271 2.3281 2.5952 2.4528 2.0058 1.5421 1.3272 1.3938 1.6832 2.1665 2.598 1.9498


圖17 代數法求得四連桿之軌跡



3.7.1向量迴路法


利用解析法解位置關係有許多方法,如三角幾何法、複數法、向量法或矩陣法等。在機構解析過程中,尤其連桿機構,常用向量迴路法。這種方法可應用於簡單機構,亦可應用於複雜機構,但實際之解題過程中,仍然必須依照向量的法則及相關的數學運算。利用向量迴路法可以配合數值分析法或電腦程式進行計算,因此可以分析位置、速度及加速度等機構上常見到的問題。除平面機構外,向量迴路法亦可應用於空間機構,但由於計算過程複雜,有時需配合矩陣法。
向量迴路法係依機構之方位及座標系,若給予適當的向量,使之成為一個迴路,則每一迴路可以產生對應之迴路方程式,以進行求解。對於簡單機構而言,僅能形成一個獨立向量迴路方程式,但對於複合機構則需要更多組聯立方程式才得以求解。通常依尤拉定理(Euler)可以判斷所需之迴路數,即:

L=J-N+1    (3.1)

其中J為連結度為1之接頭數;N為連桿數。當L大於一時,即需要等數之聯立方程式才能求解。

3.7.2任意向量的表示法


連桿之結構因連接之桿數及活動結之位置條件不同,其活動範圍亦異。開放式的連桿系,其運動的自由度較高。兩桿加一活動結又稱為dyad結構。任何幾何的機構均可利用位移向量、速度及加速之封閉方程式說明。


圖3.1任意向量之分析


位置向量的表示法常用者有向量法,將其分成三個方向之座標。如Rop,可以用下次表示:

rp = r1 + r2 + r3
r1 = r1 ( cosθ1 i + sinθ1 j )
r2 = r2 ( cosθ2 i + sinθ2 j )
r3 = r3 ( cosθ3 i + sinθ3 j )
----------------------------------(3.2)

或以通式表示,位置向量可以改寫如下:

rk = rk ( cosθk i + sinθk j ) k = 1, 2, 3
-----------------------------------(3.3)



以往分析速度及加速度等有圖解法及一般閉路型分析法,故其可能得到的解常是相當直接的,而且也可以得到一對一的答案。這對於電腦軟體之使用,有時也會造成相當大的困擾,因為不同型式之機構存在有不同的解法,因此也需要建立不同的程式。所以許多以疊代法的技巧建立的軟體開始被使用。疊代法是利用電腦反覆運算的能力,使其答案能趨近於固定的值。故計算的次數到底需要多少次,並無法預知,甚至是否能得到正確答案,也難有定論。這也是利用電腦疊代運算時必須特別留意的。

四連桿之結構

首先以四連桿之機構為例。通常第一連桿為固定,第二連桿作為驅動桿,則依幾何關係可以作如下的陳述:

圖1. 四連桿之位置分析


就垂直座標之x與y分向量,四連桿形成一個閉路,由△OQR及△PQR之餘弦函數可得下列兩式:

Z² = r1² + r2² – 2 r1 r2 cosθ2
Z² = r3² + r4² – 2 r3 r4 cosγ

合併上兩式,

Z² = r1²+r2²–2r1r2 cosθ2
   = r3²+r4²–2r3r4 cosγ


由此等式可以獲得傳遞角(Transmission angle),γ為

γ = cos-1{ [r1²+r2²-r3²-r4²-2r1 r2cosθ2]/[-2r3r4] }
=cos-1{[Z2-r3²-r4²]/[–2r3r4]}
= f(θ2)


此處Z值可由第一式得知,只要θ2為已知即可,故γ值可以由以上兩式求得。因此,實際上,Z值應為θ2之函數。由於反餘弦應有兩個對應角度,故在實際運作上,四連桿亦應因角度大於或小於90度而有兩種安排,其情如下圖所示,或為密合型(Closure)或分支型(Branch)。


圖2. 密合型與分支型之變化比較


在正常的四連桿運作範圍,連桿3與連桿4間之夾角,或為傳遞角γ,其最佳的角度應趨近於直角,若運轉中傳遞角偏離90度或-90度超過45度時,則會因摩擦力增加,容易造成連桿打結。
四連桿之輸出桿與輸入桿角度之變化關係則仍可由圖1獲得。根據餘弦定理得知:

α = cos-1[ (Z² +r4² –r3² ) / (2 Z r4) ]
β = cos-1[ (Z² +r1² –r2² ) / (2 Z r1) ]

而第四連桿之輸出角θ4與上述之二角度α與β則如下之關係:

θ4 = 180 – (α + β )

在這裡因為α與β之角度可能為負值。以閉合型而言,上述兩角度均為正值,但分支型之角度β仍然維持正值,而α為負值,因為方向已經與閉合型相反。為取得符號一致性,通常是當 0° ≦θ2<180°時,β之值應在0° ≦β<180°之區間;而當 180°≦θ2<360°時,β之值應選在180°≦β<360°之間,而讓α值分成正負來調適θ4實際之需要情況。

這種由輸入角求輸出角的過程,通常稱為位置分析。本例中僅舉實際三角函數法作為分析的基本,其亦有向量法或極座標法可以做同樣的分析工作。而連桿若超過四個時,其分析的過程將更為複雜。

例2.1 一四連桿組如圖1所示,各桿之尺寸分別為r1=21cm、r2=9cm、r3=24cm、r4=18cm。當輸入角θ2為60°時,試求其傳遞角γ及輸出角θ4。

解:以MATLAB程式撰寫如下:

r=[21 9 24 18]’;
tograd=pi/180;
theta2=60*tograd;
zz=rr(1)+rr(2) – 2*r(1)*r(2)*cos(theta2);
z=sqrt(zz);
rr=r*.r;
gama=arcos((rr(1)+rr(2)-rr(3)-rr(4)-2*r(1)*r(2)*cos(theta2))/(-2*r(3)*r(4)));
alpha=arcos((zz + rr(4) – rr(3))/(2*z*r(4))
beta=arcos((zz+rr(1)-rr(2))/(2*z*r(1))
theta4=(pi-gama-alpha)/tograd;


疊代法之應用


前面所用的方法為閉合型之運算法,這種方法是直接以理論的公式計算其答案。在簡單的結構中,通常這種運算可以輕易進行,雖然也可以藉助電腦程式之運算,但仍然不容易以相同的軟體結構應付所有的狀況。這也是疊代法仍然在電腦程式中廣被應用的原因。疊代法是重覆作同樣的運算,使其能收斂在答案的附近,而獲得所有其他角度之數值(包括桿3之夾角θ3)。由於電腦運作速度相當快,對於一般之解題並不需要多少時間,而且答案的準確性亦能符合實際的需要。
我們同樣以圖1所示之四連桿機構為討論之基礎,則其在水平與垂直座標方向之分向量亦會形成一個閉路,即所有連桿之位置向量在各座標上之投影和應為零:

X-方向: r1cos 0 +r4cos(θ4)–r2 cos(θ2)–r3 cos(θ3) = 0
Y-方向: r1sin 0 +r4sin(θ4)–r2 sin(θ2)–r3 sin(θ3) = 0

在本例中,連桿一設為水平,故其夾角為零,且連桿之各長度及輸入角度θ2為已知,故未知變為θ3及θ4。理論上兩個方程式有兩個未知數應可以得解,但由於上述二方程式之未知數屬於三角函數,故不能立即解其聯立方程式,因此必須引入疊代的觀念。

將上兩式方程式改寫成函數形式:

r1 +r4 cos(θ4)–r3cos(θ3)–r2cos(θ2)
= f1(θ3, θ4) =f1(θ)
r4 sin(θ4)–r3sin(θ3)–r2sin(θ2)
= f2(θ3, θ4) =f2(θ)

函數f1(θ)、f2(θ)所代表為兩方程式計算後之值,亦即設法找到使此兩函數值均為零之解即為最終答案,故此兩函數僅屬暫時性之代表值。而因變數所代表者θ=[θ3, θ4]。疊代法在此之主要目的是求得θ3, θ4之兩個根,以符合f1(θ)=f2(θ)=0的條件。

開始時,我們可以先任意假設θ3, θ4之值作為上述函數之初根,通常第一次假設絕對不會有那麼幸運,與實際根一定會有誤差,設其誤差分別為△θ3, △θ4,則兩函數可以表示如下:

  fi(θ3+△θ3, θ4+△θ4)
    = fi (θ+△θ) =0 i =1,2

利用泰勃展開式將上式展開,並僅取其前兩項:

  fi(θ+△θ)
= fi(θ)+dfi/d(θ3)△θ3+dfi/d(θ4) △θ4 =0
i =1,2

換言之,我們可以將上兩次讓它等於零,然後進行趨近法疊代的方式:

[df1/d(θ3) △θ3] + [df1/d(θ4) △θ4] = - f1(θ)
[df2/d(θ3) △θ3] + [df2/d(θ4) △θ4] = - f2(θ)

利用原來座標公式,將偏微分部分各取代之,即:

(df1/d(θ3) = r3 sinθ3
(df1/d(θ4) = - r4 sinθ4
(df2/d(θ3) = - r3 cosθ3
(df2/d(θ4) = r4 cosθ4

將此四式分別代入上述兩式,即可獲得以△θ3及△θ4為未知數之線性之聯立方程式,由於f1(θ)及f2(θ)均為已知,故可立即得解。

[ r3sin(θ3)] △θ3– [ r4 sin(θ4)] △θ4 = -f1(θ3,θ4)
[-r3cos(θ3)] △θ3 + [ r4 cos(θ4)] △θ4 = -f1(θ3,θ4)

設[A]、[△θ]、[F]分別代表上述方程式之元素,其內容如下:

[A] =
r3 sinθ3 - r4 sin θ4
-r3 cosθ3 r4 cos θ4

[△θ] =
△θ3
△θ4

[F] =
-f1(θ3, θ4)
-f1(θ3, θ4)

配合這些矩陣,可以將上式簡化為矩陣方程式,並得到矩陣解[△θ]:

[ A ] [△θ] = [ F]

[△θ] = [ A ] \ [ F]

得到[△θ]後,即可求得△θ3與 △θ4
新的θ3及θ4值則可如下計算作為下次計算時之初值。

θ3(新) =θ3(舊) +△θ3
θ4(新) =θ4(舊) +△θ4

其流程如下所示:


例2:同例1之四連桿,試進行位置分析