2007年5月30日 星期三

作業十一

1.本人5/24有來上課,謝謝老師。

2.某凸輪開始時先在0-100∘區間滯留,然後提升後在200至260∘區間滯留,其高度(衝程)為5公分,其餘l由260∘至360∘則為返程。升程採用等加速度運動,返程之運動型式自定。設刻度區間為10∘,試繪出其高度、速度及加速度與凸輪迴轉角度間之關係。


在老師課程網站上第十章凸輪運動有對凸輪詳細的剖析以及介紹,這題我們使用老師的給的function plot_dwell

程式碼如下
function plot_dwell(ctheta,s,pattern,range)
figure(1);clf;
[y,yy,yyy]=dwell(ctheta,range,pattern)
%[y,yy,yyy]=dwell(ctheta,range,pattern)亦取自老師的課程網頁

h1=plot(ctheta,y*s,'b-',ctheta,yy*s,'k-',ctheta,yyy*s,'r-')
legend('Displacement','Velocity','Acceleration',3)
xlabel('Elapsed Angle, degrees')
grid

而所需輸入的參數如下:
*ctheta = 需要計算之凸輪角度,單位為度數。(可以使用矩陣輸入之型式)
*s=衝程,極為所上升之高度。
*pattern = 運動的型式,二元素之列矩陣,其代碼如下:
1:等速運動uniform
2:抛物線parabolic
3:簡諧simple harmonic
4:擺線cycloidal 
5:多項式polynomial motion
*range =升程及返程之範圍,以矩陣表示

我們分析此程式中[y,yy,yyy]=dwell(ctheta,range,pattern) function中,我們知道所輸出的値表示下列意思:
*y:位移
*yy:對於凸輪角ctheta之第一導數;
* yyy :對於凸輪角ctheta之第二導數。

因此,有了這些function,我們只要在螢幕上輸入

plot_dwell(0:10:360,5,[2,5],[100 200 260 360])

*0:10:360 凸輪從0到360度每隔十度來計算
*5 衝程
* [2 5] 2表示升程維等加速度拋物線運動
5表示回程自定的多項式運動
* [100 200 260 360]
標示升程與回程的角度

即可以得到位置速度加速度與角度之關係圖。





3.設凸輪之半徑為15公分,以順時針方向旋轉,其從動件為梢型,垂直接觸,長為10公分,從動件之運動係依照第二項之運動型式。試繪出此凸輪之工作曲線。

若要描繪凸輪的工作曲線,可以從老師的網頁中參考
function [x,y]=pincam(cth,r0,s,e,L,range,pattern,cw)
其中
*cth:凸輪角度,度數
*r0:凸輪基圓半徑
*e:偏置量
*s:從動件衝程
*L:從動件長度
*cw:凸輪轉動方向(反時鐘為正,順時鐘為負)
*pattern 運動的型式motion
*range 升程及返程之範圍

因此,依照題意,
在螢幕上輸入

[x,y]=pincam([0:10:360],15,5,0,10,[100 200 260 360],[2 3],-1)

可得到凸輪之工作曲線。



4. 你能讓此凸輪迴轉嗎?

要讓凸輪旋轉其實不難,只要將for迴圈妥善利用即可。我寫ㄧ個function pincam2,運用第三題老師所給的pincamrotate funtion,再加一些旋轉的程式碼分析其轉動情形。
我的程式碼如下:

function [x,y]=pincamrotate(cth,r0,s,e,L,range,pattern,cw)
%Find the pin type cam with an offsect e
%Inputs:
% cth:angle of cam, degrees
% r0:radius of base circle
% e:offset
% s:stroke
% L:length of pin
% cw:rotation direction of cam(-counterclockwise,+clockwise
%pattern = denote the type of motion used(a 3 element-row matrix)
% 1:uniform 2:parabolic 3:simple harmonic 4: cycloidal
% 5:polynomial motion
% example [4 3]
%range =the degrees the specific motion starts, eg.[90 180 240]
% Example: [x y]=pincam([10 60],5,2,1,10,[90 180 240],[4 3],-1)
clf;
th=cth*pi/180;
s0=sqrt(r0*r0-e*e);
for i=1:length(cth)
t=th(i)*cw;
A=[cos(t) -sin(t);sin(t) cos(t)];
[ym,yy,yyy]=dwell(cth(i),range,pattern);
x0=s0+ym*s;
Sx=[0 x0 x0+L;e e e];
X=A\Sx;
x(i)=X(1,2);y(i)=X(2,2);
end

%以下是我多加的,和第三題程式不同的地方

%寫一個for迴圈,從第一次跑到第36次
for n=1:36
%以旋轉公式寫出各點經旋轉後的座標

a=x+r0*cosd(10*n);
b=y+r0*sind(10*n);

%描畫各點,再將它們的軌跡以紅色o表達
plot([0 a],[0 b],'ro',a,b,'k-');

%設定座標範圍
axis ([-50 50 -50 50]);

%每次動作停留0.1秒
pause(0.1);
clf
end

依照題意,在螢幕上輸入

pincam2([0:10:360],15,5,0,10,[100 200 260],[2 1],-1)

可得動畫如下

2007年5月26日 星期六

作業十

1.本人5/17有來上課,謝謝老師。
2.
*請思考速度與加速度的問題,當一桿以某特定點M等角速度迴轉時,其端點P之速度方向如何?
其加速度方向如何?




設角速度為w,桿長r
P點的速度則為 w x r
方向為桿運動之切線方向

其加速度為w x w x r
其方向由P指回M點

*若該特定點M復以等速水平運動,則同一端點P之速度與加速度方向會變為如何?

此時的P點速度為 VM + w x r (其中V代表M以V速度在移動)
而加速度仍是為w x w x r(方向由P指回M點)
注意:這些加減並非純向量加減,必須考慮方向

*若M點同時也有加速度,則點P會有何變化?



M點有加速度,所以P點不再只有法線加速度而已,還有一個切線加速度。和M有水平速度不一樣的地方在於,M有加速度只有影響速度和加速度的大小而已。
AP=AM+ωx(ωxr)


*若以此推理四連桿的運動,則點P與Q之速度與加速度方向會與桿一(固定桿)之兩端點之關係如何?與我們前面的作業分析結果有無共通之處?



固定桿兩端為O點和R點著地,所以其速度與加速度皆為0,
若以第二桿為驅動桿,
則P點速度為
VP=Wop x Rp/o  方向與桿二垂直

AP=[αx Rp/o]+[Wop x (Wop x Rp/o)] 
前項為切線加速度與桿2垂直,後項為法線加速度指向O點


Q點的速度與加速度
由於P點有速度
所以Q點的速度為
Vq = Vp + Wpq x Rq/p
但是由於Vq 是硍R點連接 而R點為接地點
所以Q點的速度也為 Wq r x Rq/r  方向與桿四垂直

同樣加速度也是
Aq = Ap+α x Rq/p + Wpq x (Wpq x Rq/p)
也等於 α x Rq/r + Wqr x (Wqr x Rq/r) 
切線加速度與桿四垂直,法線加速度指向R點



3.設有一運動之曲柄滑塊連桿組合,設滑塊之偏置量為零,且在水平方向移動,試以此機構之曲桿長度及角度,以及連結桿之長度為輸入項,利用matlab寫出一程式計算在不同曲柄角度時,六點瞬心之對應位置。可順便探討六點瞬心與曲柄角間之關係。
關於這題,我想連桿部份就和第九次的作業大致相同,其重點部份在於瞬心的運用。我們知道有4桿,所以依照公式我們能得到有6個瞬心,(N*(N-1)/2),瞬心的定位法在課本5-20都有詳細敘述,為了標示這些點,我寫了個function slider_4,程式碼如下:


function slider_4(R,L,e)
%先假設從水平方向開始
th1=0;
if R>L
%算出th2
th2=asind(L/R);
else
%th2極限值到90度就不能再畫瞬心
th2=90;
end

th=linspace(th1,th2,200 )
%設定角度間隔,角度範圍分成200等份
[d,th3]=slider_solve(th,R,L,e,1)
%呼叫slider_solve 以求出d

x=R*cosd(th),
y=R*sind(th)
%利用th求出B點座標(x,y)

for n=1:200
%建立一個for迴圈

hold on;
%設定座標範圍
line([0,x(n),d(n)],[0,y(n),e]);
%將A B C三點聯成直線
line([d(n)-3,d(n)+3,d(n)+3,d(n)-3,d(n)-3],[e-2,e-2,e+2,e+2,e-2]);
%畫出滑塊
ground(0,0,2,0)
anchor(-2,0,0,0)
%畫底座

%用plot描繪出運動的各點
plot(0,0,'ro');
plot(x(n),y(n),'ro');
plot(d(n),e,'ro');
plot([0,0],[0,e-d(n)*(y(n)-e)/(x(n)-d(n))],'ro:');
plot([x(n),0],[y(n),e-d(n)*(y(n)-e)/(x(n)-d(n))],'ro:');
plot([x(n),d(n)],[y(n),y(n)*d(n)/x(n)],'ro:');
plot([d(n),d(n)],[0,y(n)*d(n)/x(n)],'ro:');

axis equal;
%設定座標範圍
axis ([-10 30 -10 100]);

pause(0.001);
%每個0.5秒停格一次
clf;
%清除動畫前一次畫面

end
在視窗中輸入slider_4(15,8,0)
其可得到下列動畫
動畫

2007年5月18日 星期五

作業九

A:本人5月3日有來上課,謝謝老師。

B:本人於5月10日下午兩點鐘有參加meeting

C:

請將偏置機構作另類分析,分析過程可採你所知的方式(包括講義中所列的方法)。運動中分以曲桿驅動及滑塊驅動的方式,並說明運動的界限或範圍。設此機構之曲桿長Rcm , 連桿Lcm,滑塊之偏置量為10cm等數據作分析。其中,R=10+(學號末二碼),L=R+5 。

ANS

所謂滑塊偏置機構,即是滑塊滑動方向和水平方向距離e(偏置量)。




我們若要分析此機構,我們首先必須求出偏移量對角度限制的影響。上圖中,我們若要讓此偏置機構動作,必須藉由其中的關係式,求出B點與C點的標。而在課本第四章中,我們參考其function[s,theta21,theta22]=slider_limit(R,L,e)的程式,可求出B點座標。但是我們可以將其函數稍微整理一下,用sind(),cosd()代替多出來角度的轉換,可使程式更為簡易。以下是我的function:

function [s,th1,th2]=slider_limit(R,L,e)
th1=asind(e./(R+L));
th2=180+asind((L-e)/R);
s=(R+L).*cosd(th1)-abs(R-L).*cosd(th2);

(其中s是滑塊的衝量(移動量),th1,th2是AB曲桿和水平夾角度的極限值)

在這裡我們必須注意的是th2的運算,課本所給的是R大於L的時候,所以輸出的値不會出現複數,但是老師給的値是L>R,故我們必須修改一下th2=180+asind((L-e)/R)。

爲了求出滑塊(C點)的座標,我們可以課本上的

function [d,theta3]=slider_solve(theta2,R,L,e,mode)
其程式如下:

function [d,theta3]=slider_solve(theta2,R,L,e,mode)
if nargin<5, mode="0;end" theta="theta2*d2g;" cc="(e-R.*sind(theta))./L;">=0,
theta3=asind(cc);
else
theta3=asind(-cc)+pi;
end
d=L.*cosd(theta3)+R.*cosd(theta);


*驅桿驅動

建立一個function slider_analysis(R,L,e)的函數,其程式碼如下:

function slider_analysis(R,L,e)
[s,th1,th2]=slider_limit(R,L,e)
%先呼叫slider_limit,以求出角度極限值
th=linspace(th1,th2,200 )
%設定角度間隔,角度範圍分成200等份
[d,th3]=slider_solve(th,R,L,e,1)
%呼叫slider_solve 以求出d

x=R*cosd(th),
y=R*sind(th)
%利用th求出B點座標(x,y)

for n=1:200
%建立一個for迴圈
axis ([-40 50 -30 40]);
axis equal;
%設定座標範圍
line([0,x(n),d(n)],[0,y(n),e]);
%將A B C三點聯成直線
line([d(n)-3,d(n)+3,d(n)+3,d(n)-3,d(n)-3],[e-2,e-2,e+2,e+2,e-2]);
%畫出滑塊
ground(0,0,2,0)
anchor(-2,0,0,0)
%畫底座
pause(0.05);
%每個0.5秒停格一次
clf;
%清除動畫前一次畫面

end


*滑塊驅動

若是滑塊驅動,則會比區柄驅動多一部份程式。
我建立了slider_analysis2,其程式碼如下:
function slider_analysis2(R,L,e)

[s,th1,th2]=slider_limit(R,L,e)
th=linspace( th1, th2,200 )
[d,th3]=slider_solve(th,R,L,e,1)
x=R*cosd(th),
y=R*sind(th)

for n=1:200
line([0,x(n),d(n)],[0,y(n),e]);
line([d(n)-3,d(n)+3,d(n)+3,d(n)-3,d(n)-3],[e-2,e-2,e+2,e+2,e-2]);
ground(0,0,2,0)
anchor(-2,0,0,0)
pause(0.01);
clf;
axis ([-100 100 -100 100]);
end
%多加的部份
th=linspace( th2,180-th1,200 )
[d,theta3]=slider_solve(th,R,L,e,-1)
%若mode輸入為-1,則輸出角度會和mode值為1時互補,這是滑塊驅動必須考慮的部份。
%這次角度的範圍要從th2到180-th1

x=R*cosd(th),
y=R*sind(th)

for n=1:200


line([0,x(n),d(n)],[0,y(n),e]);
line([d(n)-4,d(n)+4,d(n)+4,d(n)-4,d(n)-4],[e-3,e-3,e+3,e+3,e-3]);
ground(0,0,2,0)
anchor(-2,0,0,0)
pause(0.01);
clf;
axis ([-100 100 -100 100]);
end


在螢幕上輸入
slider_analysis(20,25,10)

slider_analysis2(20,25,10)

即可得到曲桿驅動以及滑塊驅動的圖形

曲桿驅動


滑塊驅動

2007年5月11日 星期五

作業八

A:本人4月26日曾來上課,謝謝老師。
B:
有一組四連桿,其桿長分別為r=[4 3 3 5],由桿2驅動,設第一固定桿角度theta1=0度; 角速度 td2=10rad/s; 角加速度tdd2=0 rad/s^2。

1. 設桿2角度theta2=45度時,求各點之位置、速度與加速度為何?

我們可以參考老師網頁的第六章,使用function f4bar,其中,function的輸入原則為f4bar(r,theta1,theta2,td2,tdd2,mode,linkdrive) r是各桿長度,theta1:第一桿之水平角,theta2:驅動桿之水平夾角,td2:驅動桿之角速度(rad/sec),tdd2:驅動桿之角加速度(rad/sec^2),mode:+1 or -1. 組合模數,負值表示閉合型,正值為分支型,linkdrive :0 (驅動桿為第二桿); 1 (驅動桿為第三桿),所以依照題目的意思,我們輸入
[val,form]=f4bar([4 3 3 5],0,45,10,0,-1,0)
得到
val =
1.0e+003 *
0.0040 0 0 0 0.0212 + 0.0212i 0.0021 + 0.0021i
0.0021 + 0.0021i 0.0450 0.0100 0 0.0041 - 0.0245i 0.0032 + 0.0049i
0.0011 + 0.0028i 0.0695 -0.0163 0.4914 -0.2121 - 0.2121i 0
-0.0008 + 0.0049i 0.0995 -0.0050 0.3836 -1.8712 - 0.4391i 0
form =
1
此處form=1表示可連成四連桿

*各點位置:
O(0,0)
P(2.12,2.12)
Q(2.12+1.05,2.12+2.81)=(3.17,4.93)
(即為value中第一欄第三行的向量值加上P點座標)
R(4,0)

*各桿跟水平線的夾角
在螢幕上輸入
>> abs(val(:,2))'
ans =

0 45.0000 69.4856 99.5246
即為各桿跟水平線的夾角
*各桿的角速度
>> abs(val(:,3))'

ans =

0 10.0000 16.2681 4.9677
即為各桿的角速度
*各桿的角加速度
>> abs(val(:,4))'

ans =

0 0 491.4428 383.6120
即為各桿的角加速度

2. 繪出此四連桿之相關位置及標明各點之速度方向及大小(以程式為之)。

首先,我們可以在老師第六張講義中找到function drawlinks,存取後在螢幕上輸入drawlinks([4 3 3 5],0,45,-1,0),及可得到下圖。



3. 當桿2迴轉時,求出此組四連桿之限制角度,並繪出其位置(以程式為之)。

我們可以清楚地從老師第六張講義了解function drawlimits在角度限制上的運用。另外,這程式亦結合了fb_angle_limits,因此我們必須先存取此檔案。
在螢附上輸入:
drawlimits([4 3 3 5],0,1,0)
可得
Qstart =

28.9550


Qstop =

331.0450

此類型角度限制在右邊,如圖所示。



4. 設theta2=[0:20:360],試繪出此組四連桿之重疊影像,解釋為何有些沒有值。
依照題意,我們輸入
clf;
for i=0:20:360
drawlinks([4 3 3 5],0,i,1,0);
end
可以得到一個圖,但是會出現:
Combination of links fail at degrees 0.0
Combination of links fail at degrees 20.0
Combination of links fail at degrees 340.0
Combination of links fail at degrees 360.0

這是因為我們剛剛已經藉由function drawlimits得知此四連桿由第二桿驅動時的角度限制(28.95度~331.04度),故在此範圍外的角度沒有值,也就是說,當旋轉到這些角度時,無法構成四連桿。

5. 若將問題三考慮在內,只在可迴轉的範圍內迴轉,請問你能讓此組四連桿作成動畫方式迴轉嗎?
我們首先必須找出角度的範圍,所以設一個迴圈從29~331每隔五度跑一次,其次是要注意標示pause的時間,為了讓畫面美觀,更可以設定座標範圍。
AXIS([-5 5 -5 5])

for i=29:5:331
drawlinks([4 3 3 5],0,i,1,0);
pause(0.2)
clf;

end
或者使用move_4paths的function,並輸入move_4paths([4 3 3 5 ],2,-30,3,0,10,0,1,0,4,100)及可得到動畫及其軌跡的移動。
動畫