2/4/07

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看得出來。