2007年6月6日 星期三

作業十二

b94202029 物理二 張哲輔
我本週有上課。


徑節Pd (diametral pitch) = 8
齒數N (teeth number) = 30T / 48T
壓力角ψ(pressure angle) = 20o


第一題

(此圖是從老師的講義擷取而得)

要算出接觸線長度,必須先算出兩圓之節圓半徑R1&R2、齒冠a1&a2:
(齒冠的規格有兩種: 。老師程式裡使用的規格是前者,故這邊也沿用此規格。)接觸線長度可由以下公式求得:在計算接觸比之前,必須先算出基周節Pb:接觸比可由以下公式求得:我們也可以用網路講義的contact_ratio.m程式得到接觸線長度與接觸比:
[c_ratio, c_length,ad,pc,pb,r2,r3,ag]=contact_ratio(8,30,48,20)

c_ratio =
1.7005

c_length =

0.6275

ad =
0.1250

pc =
0.3927

pb =
0.3690

r2 =
3.7500

r3 =
6

ag =
10.4850 9.9211 20.4061

6.5532 6.2007 12.7538


第二題
節圓直徑: 基圓直徑:


第三題
(此圖是從老師的講義擷取而得)

若齒輪滿足下列任一不等式則不會發生干涉情形:
將數值帶入後得:
不等式成立,故不會發生干涉現象。

我們也可以用網路講義的isinterf.m程式來分辨會不會有干涉現象(0為沒有,1為有)
[x]=isinterf(20,30,48)
x = 0


第四題

我將老師的draw_gear.m程式稍做修改後,做出第四題要的旋轉動畫。
有三個地方是修改重點:
  1. 修改成兩個齒輪的資料都必須輸入進程式內,以便同時繪出兩個齒輪。
  2. 把做齒輪數據和畫齒輪的那幾行程式碼都修改成兩個齒輪各作一次。
  3. 加入while、rotate和pause,使其變成動畫。
有關程式的解說已經附在裡面。

function draw_gearNew(Dp1,N1,phi1,range1,x01,y01 , Dp2,N2,phi2,range2,x02,y02)
% draw_gearNew(Dp1,N1,phi1,range1,x01,y01,Dp2,N2,phi2,range2,x02,y02)
% To draw a whole gear
% Inputs:
% Dp: Diametrical pitch
% N: no of teeth in a gear
% phi: pressure angle, degrees
% range: the section range to be drawn
% x0,y0: the location of the gear center
% Example draw_gearNew(8,30,20,360,0,0,8,48,20,360,9.75/2,0)

% 做第一個齒輪的數據
[coord1,theta1,rp1,rb1]=tooth(Dp1,N1,phi1);
coords1=[];i=0;
while i coord11=rotate2D(coord1,-i,x01,y01);
coords1=[coords1;coord11];
i=i+theta1;
end

% 做第二個齒輪的數據
[coord2,theta2,rp2,rb2]=tooth(Dp2,N2,phi2);
coords2=[];i=0;
while i coord12=rotate2D(coord2,-i,x02,y02);
coords2=[coords2;coord12];
i=i+theta2;
end

% 將第一個齒輪的繪圖物件通通存成handle,以便待會旋轉。
h11=plot(coords1(:,1),coords1(:,2));hold on;
[coord1]=bushing(rp1/8,x01,y01);
h21=plot(coord1(:,1),coord1(:,2),'b-');
[coord1]=bushing(-rp1,x01,y01);
h31=plot(coord1(:,1),coord1(:,2),'r:');
[coord1]=bushing(-rb1,x01,y01);
h41=plot(coord1(:,1),coord1(:,2),'b:');
axis equal;

% 將第二個齒輪的繪圖物件通通存成handle,以便待會旋轉。
h12=plot(coords2(:,1),coords2(:,2));hold on;
[coord2]=bushing(rp2/8,x02,y02);
h22=plot(coord2(:,1),coord2(:,2),'b-');
[coord2]=bushing(-rp2,x02,y02);
h32=plot(coord2(:,1),coord2(:,2),'r:');
[coord2]=bushing(-rb2,x02,y02);
h42=plot(coord2(:,1),coord2(:,2),'b:');
axis equal;

% 原本的繪圖是tooth對tooth,必須要旋轉成tooth對clearance,這樣咬合才正確
% 把其中一個齒輪做旋轉,旋轉幅度是360/(2*齒數)
rotate(h12,[0 0 1],360/(2*N2),[x02 y02 0]);

% 利用while做出無窮迴圈
while 1
rotate(h11,[0 0 1],1,[x01 y01 0]); % 其中一個齒輪每次轉一度
rotate(h12,[0 0 1],-N1/N2,[x02 y02 0]); % 另一個齒輪每次轉兩齒輪齒數比值的負值
axis equal;
pause(0.05);
end




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [coords,theta,rp,rb]=tooth(Dp,N,phi)
% Example tooth(10,10,20)
nn=10;
d2r=pi/180;
phir=phi*d2r;
rp=N/Dp/2;
pc=pi/Dp;
ra=rp+1/Dp;
rb=rp*cos(phir);
rd=rp-1.25/Dp;
thpb=pc/rp;% angle respect to one pitch
tp=pc/2;
rr=linspace(rb,ra,nn)';
invphi=tan(phir)-phir;
for i=1:nn
beta=acos(rp/rr(i)*cos(phir));
tt(i)=(tp/rp/2+invphi-tan(beta)+beta);
end
coord1=[rr.*cos(tt') rr.*sin(tt')];
coord3=reverse(coord1);
th1=linspace(thpb/2,thpb/2-tt(nn),nn)';
coord0=[cos(th1) sin(th1)]*rd;
th2=linspace(tt(nn),-tt(nn),nn)';
coord2=[cos(th2) sin(th2)]*ra;
coord4=reverse(coord0);
coords=[coord0;coord1;coord2;coord3;coord4];
theta=thpb/d2r;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [B]=reverse(A)
nn=length(A); B=A;
for i=1:nn,B(i,:)=A(nn-i+1,:);end
B=[B(:,1) -B(:,2)];

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [coords] = bushing(rr,x0,y0)
d2r=pi/180;
theta=[360:-10:0]*d2r;
r=abs(rr);
rx=r*cos(theta);ry=r*sin(theta);
if rr<0,
rx=rx+x0;
ry=ry+y0;
coords=[rx' ry'];
return;
end;
rx1=rx/2;rx2=-rx1;
ry1=ry/2;ry2=-ry1;
r4=r+r/4;r3=r/3;
bx=[ 0 0 0 -r -r -r4 -r4 r4 r4 -r r r];
by=[r3 -r3 0 0 -r -r -r4 -r4 -r -r -r 0];
coords(:,1)=[bx rx rx1 rx2]'+x0;
coords(:,2)=[by ry ry1 ry2]'+y0;

%%%%%%%%%%%%%%%%%%%%%%%%

function [coords]=rotate2D(coord,theta,x0,y0)
th=theta*pi/180;
c=cos(th);s=sin(th);fact=[c s;-s c];
coords=coord*fact;
coords(:,1)=coords(:,1)+x0;
coords(:,2)=coords(:,2)+y0;





沒有留言: