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)

可得動畫如下

沒有留言: