顯示具有 齒輪分析 標籤的文章。 顯示所有文章
顯示具有 齒輪分析 標籤的文章。 顯示所有文章

2007年6月7日 星期四

Homework 13

Homework 13
b94611001 歐陽太閒

6/7全程上課

一、複式齒輪之設計


實際運用齒輪時,必須建立一齒列(train),才能夠發揮齒輪的加減速,以及調整扭矩的功能,而且在較複雜的機構如行星齒輪系或者是差速器等,齒列分析是不可避免的.

本次作業題目為設計一轉速比125的複式齒輪齒列.
首先我們利用課本所教導的方法,將VR=125開根號

>>sqrt(125)

ans =

  11.1803

顯然大於10,會使齒輪負荷過大且製造不便因此不適於以兩個齒輪組成的齒列,
因此我們嘗試開三次方根

>>125^(1/3)

ans =
    5

可以得到一個漂亮的整數比,因此我們可以得到

ω1/ω2=5
ω2/ω3=5
ω3/ω4=5

因此VR=ω1/ω4=125

由此也可以得到齒數比:

N2/N1=5
N3/N2=5
N4/N3=5

1.因此考慮複式齒輪組


同樣的,齒輪的徑節(Dp),周節(Pc)和壓力角必須相同才能正常旋轉

也限制最小齒數為14齒,徑節=8,壓力角=25
得到

N1=14
N2=14*5=70
N3=14
N4=14*5=70

以contact_ratio(徑節,齒數1,齒數2,[壓力角])程式來計算接觸比,其中N2,N3共軸(coaxial)

>>[c_ratio,c_length,ad,pc,pb,r2,r3,ag]=contact_ratio(8,14,70,25)

c_ratio =接觸比
   1.4565
c_length =接觸長度
   0.5184
ad =齒冠
   0.1250
pc =周節
   0.3927
pb =基周節
   0.3559
r2 =齒輪2節圓直徑
   1.7500
r3 =齒輪3節圓直徑
   8.7500
ag =
  20.1547   17.2971   37.4518齒輪2的接近角/遠退角/作用角
   4.0309   3.4594    7.4904 齒輪3的接近角/遠退角/作用角


因此我們可以得到c_ratio=1.4565大於1不會過載,且齒輪G1直徑1.7500,G2直徑8.7500,G3直徑1.7500,G4直徑8.7500
就算水平排列也可以得到

>>1.75+(8.75/2)+(1.75/2)+(8.75/2)+(1.75/2)+8.75
ans =
   21

遠小於簡單齒列的最終端齒輪節圓直徑218.75,大幅度節省空間,也可以大幅節省成本,

另外
徑節(Dp)=8
周節(Pc)=0.3927
壓力角=25
齒冠=0.1250

也都合乎標準,不至於造成損壞.
然而,複式齒輪組較特殊的是由於有共軸,因此在撰寫程式時要較為小心.


故我們可以得到如下


只顯示節圓與基圓時



所以我們可以寫出以下結果

程式結構
1.清除畫面及程式資訊
2.參數引入draw_gear.m
3.建立基本物件
a.利用bushing畫基座
b.建立齒輪
c.利用bushing畫節圓和基圓
4.利用while進行動畫繪製
a.轉角
b.畫出新位置

function geartrain2(Dpitch,nn1,nn2,nn3,nn4,nn5,nn6,phi,ww)
%13.1 歐陽太閒b94611001 本程式改寫自老師的 move2_rack.m
%本程式改寫自老師的move2_rack %Dpitch=節矩,nn1=R2齒數,nn2=R3齒數,nn3=R3齒數,phi=壓力角,ww=nn1角速度
clf;
%清除畫面
d2r=pi/180;
%角徑轉換
unit1=0.01;
%動畫單位
phir=phi*d2r; pc=pi/Dpitch;
%計算pc
title('作業13 作者:歐陽太閒b94611001');
%資訊
xlabel('x-axis cm'); ylabel('y-axis cm');
hold on;
[coord,rp,rb]=draw_gear(Dpitch,nn1,phi,360,0,0);%將參數引入draw_gear.m,畫第一齒輪
[coord2,rp2,rb2]=draw_gear(Dpitch,nn2,phi,360,0,0);
%將參數引入draw_gear.m,畫第二齒輪
[coord3,rp3,rb3]=draw_gear(Dpitch,nn3,phi,360,0,0);
%將參數引入draw_gear.m,畫第三齒輪
[coord4,rp4,rb4]=draw_gear(Dpitch,nn4,phi,360,0,0);
%將參數引入draw_gear.m,畫第四齒輪
[coord5,rp5,rb5]=draw_gear(Dpitch,nn5,phi,360,0,0);
%將參數引入draw_gear.m,畫第五齒輪
[coord6,rp6,rb6]=draw_gear(Dpitch,nn6,phi,360,0,0);
%將參數引入draw_gear.m,畫第六齒輪
del=2.5;
coord2=rotate2D([coord2(:,1),coord2(:,2)],+del,0,0);
coord3=rotate2D([coord3(:,1),coord3(:,2)],+del,0,0);
coord4=rotate2D([coord4(:,1),coord4(:,2)],+del,0,0);
coord5=rotate2D([coord5(:,1),coord5(:,2)],+del,0,0);
coord6=rotate2D([coord6(:,1),coord6(:,2)],+del,0,0);
xc1=coord(:,1);yc1=coord(:,2);%將計算結果引出
xc2=coord2(:,1);yc2=coord2(:,2);%將計算結果引出
xc3=coord3(:,1);yc3=coord3(:,2);%將計算結果引出
xc4=coord4(:,1);yc4=coord4(:,2);%將計算結果引出
xc5=coord5(:,1);yc5=coord5(:,2);%將計算結果引出
xc6=coord6(:,1);yc6=coord6(:,2);%將計算結果引出
coord=bushing(rp/6,0,0);%利用bushing畫基座
coord2=bushing(rp2/6,rp+rp2,0);
coord4=bushing(rp4/6,rp+rp2+rp3+rp4,0);
coord5=bushing(rp4/6,rp+rp2+rp3+rp4+rp5+rp6,0);
xb1=coord(:,1);yb1=coord(:,2);
xb2=coord2(:,1);yb2=coord2(:,2);
xb4=coord4(:,1);yb4=coord4(:,2);
xb5=coord5(:,1);yb5=coord5(:,2);
plot(xb1,yb1,'r-');%畫出大小齒輪基座
plot(xb2,yb2,'r-');
plot(xb4,yb4,'r-');
plot(xb5,yb5,'r-');
pini=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','r');
%建立handler
gear=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
gear2=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
gear3=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','g');
gear4=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','g');
gear5=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','r');
[coord4]=bushing(-rp2,rp+rp2,0.2);%利用bushing畫節圓和基圓
plot(coord4(:,1),coord4(:,2),'b:');
[coord5]=bushing(-rb2,rp+rp2,0.2);
plot(coord5(:,1),coord5(:,2),'k:');
[coord6]=bushing(-rp,0,0);
%利用bushing畫節圓和基圓
plot(coord6(:,1),coord6(:,2),'b:');
[coord7]=bushing(-rb,0,0);
plot(coord7(:,1),coord7(:,2),'k:');
[coord8]=bushing(-rp3,rp+rp2,0); plot(coord8(:,1),coord8(:,2),'b:');
[coord9]=bushing(-rb3,rp+rp2,0); plot(coord9(:,1),coord9(:,2),'k:');
[coord10]=bushing(-rp4,rp+rp2+rp3+rp4,0); plot(coord10(:,1),coord10(:,2),'b:');
[coord11]=bushing(-rb4,rp+rp2+rp3+rp4,0); plot(coord11(:,1),coord11(:,2),'k:');
axis equal;
ang=0;
angp=ww*unit1;
while 1%利用while進行動畫繪製
rot1=rotate2D([xc1,yc1],ang,0,0);%進行轉角,產生新座標
rot2=rotate2D([xc2,yc2],-ang*(nn1/nn2),rp+rp2,0);
rot3=rotate2D([xc3,yc3],-ang*(nn1/nn2),rp+rp2,0);
rot4=rotate2D([xc4,yc4],ang*((nn1/nn2)^2),rp+rp2+rp3+rp4,0);
rot5=rotate2D([xc5,yc5],ang*((nn1/nn2)^2),rp+rp2+rp3+rp4,0);
rot6=rotate2D([xc6,yc6],-ang*((nn1/nn2)^3),rp+rp2+rp3+rp4+rp5+rp6,0);
set(pini,'xdata',rot1(:,1),'ydata',rot1(:,2));%分別畫出大小齒輪
set(gear,'xdata',rot2(:,1),'ydata',rot2(:,2));
set(gear2,'xdata',rot3(:,1),'ydata',rot3(:,2));
set(gear3,'xdata',rot4(:,1),'ydata',rot4(:,2));
set(gear4,'xdata',rot5(:,1),'ydata',rot5(:,2));
set(gear5,'xdata',rot6(:,1),'ydata',rot6(:,2));
drawnow; %繪製
pause(1/ww);
ang=ang+angp;
end %程式結束



代入以下指令,其中驅動齒輪角速度=300rad/s
>>geartrain2(8,14,70,14,70,14,70,25,300)

可得到以下影片


影片


而角速度達到600rad/s時
>>geartrain2(8,14,70,14,70,14,70,25,600)

可以得到以下影片:



另外,齒輪有一大優勢便是可以改變動力輸出位置,因此改寫程式如下

functiongeartrain2(Dpitch,nn1,nn2,nn3,nn4,nn5,nn6,phi,ww)
%13.1 歐陽太閒b94611001 本程式改寫自老師的 move2_rack.m
%本程式改寫自老師的move2_rack %Dpitch=節矩,nn1=R2齒數,nn2=R3齒數,nn3=R3齒數,phi=壓力角,ww=nn1角速度 clf;
%清除畫面 d2r=pi/180;%角徑轉換 unit1=0.01;%動畫單位 phir=phi*d2r; pc=pi/Dpitch;
%計算pc title('作業13 作者:歐陽太閒b94611001'); %資訊 xlabel('x-axis cm'); ylabel('y-axis cm'); hold on; [coord,rp,rb]=draw_gear(Dpitch,nn1,phi,360,0,0);%將參數引入draw_gear.m,畫第一齒輪
[coord2,rp2,rb2]=draw_gear(Dpitch,nn2,phi,360,0,0);
%將參數引入draw_gear.m,畫第二齒輪
[coord3,rp3,rb3]=draw_gear(Dpitch,nn3,phi,360,0,0);
%將參數引入draw_gear.m,畫第三齒輪
[coord4,rp4,rb4]=draw_gear(Dpitch,nn4,phi,360,0,0);
%將參數引入draw_gear.m,畫第四齒輪
[coord5,rp5,rb5]=draw_gear(Dpitch,nn5,phi,360,0,0);
%將參數引入draw_gear.m,畫第五齒輪
[coord6,rp6,rb6]=draw_gear(Dpitch,nn6,phi,360,0,0);
%將參數引入draw_gear.m,畫第六齒輪
del=2.5;
coord2=rotate2D([coord2(:,1),coord2(:,2)],+del,0,0);
coord3=rotate2D([coord3(:,1),coord3(:,2)],+del,0,0);
coord4=rotate2D([coord4(:,1),coord4(:,2)],+del,0,0);
coord5=rotate2D([coord5(:,1),coord5(:,2)],+del,0,0);
coord6=rotate2D([coord6(:,1),coord6(:,2)],+del,0,0);
xc1=coord(:,1);yc1=coord(:,2);%將計算結果引出
xc2=coord2(:,1);yc2=coord2(:,2);%將計算結果引出
xc3=coord3(:,1);yc3=coord3(:,2);%將計算結果引出
xc4=coord4(:,1);yc4=coord4(:,2);%將計算結果引出
xc5=coord5(:,1);yc5=coord5(:,2);%將計算結果引出
xc6=coord6(:,1);yc6=coord6(:,2);%將計算結果引出
coord=bushing(rp/6,0,0);%利用bushing畫基座
coord2=bushing(rp2/6,rp+rp2,0);
coord4=bushing(rp4/6,rp+rp2+rp3+rp4,0);
coord5=bushing(rp4/6,rp+rp2+rp3+rp4+rp5+rp6,0);
xb1=coord(:,1);yb1=coord(:,2);
xb2=coord2(:,1);yb2=coord2(:,2);
xb4=coord4(:,1);yb4=coord4(:,2);
xb5=coord5(:,1);yb5=coord5(:,2);
plot(xb1,yb1,'r-');%畫出大小齒輪基座
plot(xb2,yb2,'r-');
plot(xb4,yb4,'r-');
plot(xb5,yb5,'r-');
pini=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','r');
%建立handler gear=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
gear2=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
gear3=line('xdata',[],'ydata'[],'erasemode','xor','linewidth',1,'color','g');
gear4=line('xdata'[],'ydata'[],'erasemode','xor','linewidth',1,'color','g');
gear5=line('xdata',[],'ydata'[],'erasemode','xor','linewidth',1,'color','r');
[coord4]=bushing(-rp2,rp+rp2,0.2);%利用bushing畫節圓和基圓
plot(coord4(:,1),coord4(:,2),'b:');
[coord5]=bushing(-rb2,rp+rp2,0.2);
plot(coord5(:,1),coord5(:,2),'k:');
[coord6]=bushing(-rp,0,0);
%利用bushing畫節圓和基圓
plot(coord6(:,1),coord6(:,2),'b:');
[coord7]=bushing(-rb,0,0);
plot(coord7(:,1),coord7(:,2),'k:');
[coord8]=bushing(-rp3,rp+rp2,0); plot(coord8(:,1),coord8(:,2),'b:');
[coord9]=bushing(-rb3,rp+rp2,0); plot(coord9(:,1),coord9(:,2),'k:');
[coord10]=bushing(-rp4,rp+rp2+rp3+rp4,0); plot(coord10(:,1),coord10(:,2),'b:');
[coord11]=bushing(-rb4,rp+rp2+rp3+rp4,0); plot(coord11(:,1),coord11(:,2),'k:');
axis equal;
ang=0;
angp=ww*unit1;
while 1%利用while進行動畫繪製
rot1=rotate2D([xc1,yc1],ang,0,0);%進行轉角,產生新座標
rot2=rotate2D([xc2,yc2],-ang*(nn1/nn2),rp+rp2,0);
rot3=rotate2D([xc3,yc3],-ang*(nn1/nn2),rp+rp2,0);
rot4=rotate2D([xc4,yc4],ang*((nn1/nn2)^2),rp+rp2+rp3+rp4,0);
rot5=rotate2D([xc5,yc5],ang*((nn1/nn2)^2),rp+rp2+rp3+rp4,0);
rot6=rotate2D([xc6,yc6],-ang*((nn1/nn2)^3),rp+rp2+rp3+rp4+rp5+rp6,0);
set(pini,'xdata',rot1(:,1),'ydata',rot1(:,2));%分別畫出大小齒輪
set(gear,'xdata',rot2(:,1),'ydata',rot2(:,2));
set(gear2,'xdata',rot3(:,1),'ydata',rot3(:,2));
set(gear3,'xdata',rot4(:,1),'ydata',rot4(:,2));
set(gear4,'xdata',rot5(:,1),'ydata',rot5(:,2));
set(gear5,'xdata',rot6(:,1),'ydata',rot6(:,2));
drawnow; %繪製
pause(1/ww);
ang=ang+angp;
end %程式結束


可以得到不同方向的動力輸出:
>> geartrain2(8,14,70,14,70,14,70,25,300)




利用此方法對動力進行轉向,不但設計方便,動力損失少,結構穩定,且節省空間,因此應用得非常普遍,而若中間的齒列進行調整,甚至可做成共軸機構,更加方便
共軸結構

function geartrain3(Dpitch,nn1,nn2,nn3,nn4,nn5,nn6,phi,ww)
%13.1 歐陽太閒b94611001 本程式改寫自老師的 move2_rack.m
%本程式改寫自老師的move2_rack %Dpitch=節矩,nn1=R2齒數,nn2=R3齒數,nn3=R3齒數,phi=壓力角,ww=nn1角速度
clf;
%清除畫面
d2r=pi/180;
%角徑轉換
unit1=0.01;
%動畫單位
phir=phi*d2r; pc=pi/Dpitch;
%計算pc
title('作業13 作者:歐陽太閒b94611001');
%資訊
xlabel('x-axis cm'); ylabel('y-axis cm');
hold on;
[coord,rp,rb]=draw_gear(Dpitch,nn1,phi,360,0,0);%將參數引入draw_gear.m,畫第一齒輪
[coord2,rp2,rb2]=draw_gear(Dpitch,nn2,phi,360,0,0);
%將參數引入draw_gear.m,畫第二齒輪
[coord3,rp3,rb3]=draw_gear(Dpitch,nn3,phi,360,0,0);
%將參數引入draw_gear.m,畫第三齒輪
[coord4,rp4,rb4]=draw_gear(Dpitch,nn4,phi,360,0,0);
%將參數引入draw_gear.m,畫第四齒輪
[coord5,rp5,rb5]=draw_gear(Dpitch,nn5,phi,360,0,0);
%將參數引入draw_gear.m,畫第五齒輪
[coord6,rp6,rb6]=draw_gear(Dpitch,nn6,phi,360,0,0);
%將參數引入draw_gear.m,畫第六齒輪
del=2.5;
coord2=rotate2D([coord2(:,1),coord2(:,2)],+del,0,0);
coord3=rotate2D([coord3(:,1),coord3(:,2)],+del,0,0);
coord4=rotate2D([coord4(:,1),coord4(:,2)],+del,0,0);
coord5=rotate2D([coord5(:,1),coord5(:,2)],+del,0,0);
coord6=rotate2D([coord6(:,1),coord6(:,2)],+del,0,0);
xc1=coord(:,1);yc1=coord(:,2);%將計算結果引出
xc2=coord2(:,1);yc2=coord2(:,2);%將計算結果引出
xc3=coord3(:,1);yc3=coord3(:,2);%將計算結果引出
xc4=coord4(:,1);yc4=coord4(:,2);%將計算結果引出
xc5=coord5(:,1);yc5=coord5(:,2);%將計算結果引出
xc6=coord6(:,1);yc6=coord6(:,2);%將計算結果引出
coord=bushing(rp/6,0,0);%利用bushing畫基座
coord2=bushing(rp2/6,rp+rp2,0);
coord4=bushing(rp4/6,rp+1.7,rp3+rp4-0.6);
xb1=coord(:,1);yb1=coord(:,2);
xb2=coord2(:,1);yb2=coord2(:,2);
xb4=coord4(:,1);yb4=coord4(:,2);
xb5=coord5(:,1);yb5=coord5(:,2);
plot(xb1,yb1,'r-');%畫出大小齒輪基座
plot(xb2,yb2,'r-');
plot(xb4,yb4,'r-');
plot(xb5,yb5,'r-');
pini=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','r');
%建立handler
gear=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
gear2=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
gear3=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','g');
gear4=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','g');
gear5=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','r');
[coord4]=bushing(-rp2,rp+rp2,0.2);%利用bushing畫節圓和基圓
plot(coord4(:,1),coord4(:,2),'b:');
[coord5]=bushing(-rb2,rp+rp2,0.2);
plot(coord5(:,1),coord5(:,2),'k:');
[coord6]=bushing(-rp,0,0);
%利用bushing畫節圓和基圓
plot(coord6(:,1),coord6(:,2),'b:');
[coord7]=bushing(-rb,0,0);
plot(coord7(:,1),coord7(:,2),'k:');
[coord8]=bushing(-rp3,rp+rp2,0); plot(coord8(:,1),coord8(:,2),'b:');
[coord9]=bushing(-rb3,rp+rp2,0); plot(coord9(:,1),coord9(:,2),'k:');

axis equal;
ang=0;
angp=ww*unit1;
while 1%利用while進行動畫繪製
rot1=rotate2D([xc1,yc1],ang,0,0);%進行轉角,產生新座標
rot2=rotate2D([xc2,yc2],-ang*(nn1/nn2),rp+rp2,0);
rot3=rotate2D([xc3,yc3],-ang*(nn1/nn2),rp+rp2,0);
rot4=rotate2D([xc4,yc4],ang*((nn1/nn2)^2),rp+1.7,rp3+rp4-0.6);
rot5=rotate2D([xc5,yc5],ang*((nn1/nn2)^2),rp+1.7,rp3+rp4-0.6);
rot6=rotate2D([xc6,yc6],-ang*((nn1/nn2)^3),0,0);
set(pini,'xdata',rot1(:,1),'ydata',rot1(:,2));%分別畫出大小齒輪
set(gear,'xdata',rot2(:,1),'ydata',rot2(:,2));
set(gear2,'xdata',rot3(:,1),'ydata',rot3(:,2));
set(gear3,'xdata',rot4(:,1),'ydata',rot4(:,2));
set(gear4,'xdata',rot5(:,1),'ydata',rot5(:,2));
set(gear5,'xdata',rot6(:,1),'ydata',rot6(:,2));
drawnow; %繪製
pause(1/ww);
ang=ang+angp;
end %程式結束

>>geartrain3(8,14,70,14,70,14,70,25,300)





2.簡單齒輪組時:


各齒輪的徑節(Dp),周節(Pc)和壓力角必須相同才能正常旋轉

若限制最小齒數為14齒(壓力角25度防止內切的最小齒數),並且限制徑節=8,壓力角=25
可以得到

N1=14
N2=14*5=70
N3=N2*5=350
N4=N3*5=1750

因此以contact_ratio(徑節,齒數1,齒數2,[壓力角])程式來計算接觸比


>>[c_ratio,c_length,ad,pc,pb,r2,r3,ag]=contact_ratio(8,14,70,25)

c_ratio =接觸比
   1.4565
c_length =接觸長度
   0.5184
ad =齒冠
   0.1250
pc =周節
   0.3927
pb =基周節
   0.3559
r2 =齒輪2節圓直徑
   1.7500
r3 =齒輪3節圓直徑
   8.7500
ag =
  20.1547  17.2971   37.4518 齒輪2的接近角/遠退角/作用角
   4.0309   3.4594    7.4904 齒輪3的接近角/遠退角/作用角

因此我們可以得知接觸比c_ratio=1.4565大於1,不會有過載危險,
且齒輪G1節圓直徑=1.75,齒輪G2節圓直徑=8.75.

>>[c_ratio,c_length,ad,pc,pb,r2,r3,ag]=contact_ratio(8,70,350,25)
以下摘錄比較重要的部份
c_ratio =接觸比
   1.6043
c_length =接觸長度
   0.5710
pc =周節
   0.3927
pb =基周節
   0.3559
r2 =齒輪2節圓直徑
   8.7500
r3 =齒輪3節圓直徑
  43.7500
因此我們可以得知接觸比c_ratio=1.6043大於1,不會有過載危險,
且齒輪G3節圓直徑=43,75.

>>[c_ratio,c_length,ad,pc,pb,r2,r3,ag]=contact_ratio(8,350,1750,25)
c_ratio =接觸比
   1.6493
r2 =齒輪2節圓直徑
  43.7500
r3 =齒輪3節圓直徑
  218.7500

因此我們可以得知接觸比c_ratio=1.6493大於1,不會有過載危險,
且齒輪G4節圓直徑=218.75.

另外本組簡單齒列中的

徑節(Dp)=8
周節(Pc)=0.3927
壓力角=25
齒冠=0.1250

皆合乎標準,可減速VR=125

然而簡單齒列算出的結果令人不甚滿意的地方在於,佔用空間極大(終端齒輪G4節圓直徑高達218.75),且製造成本相當高,另外

,課本中未提到的是,如此大直徑的齒輪在旋轉時,轉動慣量I相當的巨大,難以啟動和煞車,而且材料本身將承受極大的負荷,雖

然理論上可行,但卻難以利用.

而計算結果繪製成圖則如下圖:


單純只有節/基圓時


而此齒列之模擬,可撰寫一程式如下:

程式結構
1.清除畫面及程式資訊
2.參數引入draw_gear.m
3.建立基本物件
a.利用bushing畫基座
b.建立齒輪
c.利用bushing畫節圓和基圓
4.利用while進行動畫繪製
a.轉角
b.畫出新位置

functiongeartrain1(Dpitch,nn1,nn2,nn3,nn4,phi,ww)
%13.1 歐陽太閒b94611001 本程式改寫自老師的 move2_rack.m
%本程式改寫自老師的move2_rack
%Dpitch=節矩,nn1=R2齒數,nn2=R3齒數,nn3=R3齒數,phi=壓力角,ww=nn1角速度

clf; %清除畫面

d2r=pi/180;%角徑轉換
unit1=0.01;%動畫單位
phir=phi*d2r;
pc=pi/Dpitch; %計算pc
title('作業13 作者:歐陽太閒b94611001'); %資訊
xlabel('x-axis cm');
ylabel('y-axis cm');
hold on;
[coord,rp,rb]=draw_gear(Dpitch,nn1,phi,360,0,0);%將參數引入draw_gear.m,畫第一齒輪
[coord2,rp2,rb2]=draw_gear(Dpitch,nn2,phi,360,0,0);%將參數引入draw_gear.m,畫第二齒輪
[coord3,rp3,rb3]=draw_gear(Dpitch,nn3,phi,360,0,0);%將參數引入draw_gear.m,畫第三齒輪
[coord4,rp4,rb4]=draw_gear(Dpitch,nn4,phi,360,0,0);%將參數引入draw_gear.m,畫第四齒輪
del=2.5
coord2=rotate2D([coord2(:,1),coord2(:,2)],+del,0,0);
coord3=rotate2D([coord3(:,1),coord3(:,2)],+del,0,0);
coord4=rotate2D([coord4(:,1),coord4(:,2)],+del,0,0);
xc1=coord(:,1);yc1=coord(:,2);%將計算結果引出
xc2=coord2(:,1);yc2=coord2(:,2);%將計算結果引出
xc3=coord3(:,1);yc3=coord3(:,2);%將計算結果引出
xc4=coord4(:,1);yc4=coord4(:,2);%將計算結果引出
coord=bushing(rp/6,0,0);%利用bushing畫基座
coord2=bushing(rp2/6,rp+rp2,0);
coord3=bushing(rp3/6,rp+(2*rp2)+rp3,0);
coord4=bushing(rp4/6,rp+(2*rp2)+(rp3*2)+rp4,0);
xb1=coord(:,1);yb1=coord(:,2);
xb2=coord2(:,1);yb2=coord2(:,2);
xb3=coord3(:,1);yb3=coord3(:,2);
xb4=coord4(:,1);yb4=coord4(:,2);
plot(xb1,yb1,'r-');%畫出大小齒輪基座
plot(xb2,yb2,'r-');
plot(xb3,yb3,'r-');
plot(xb4,yb4,'r-');
pini=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','r');%建立handler
gear=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
gear2=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','G');
gear3=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');
[coord4]=bushing(-rp2,rp+rp2,0.2);%利用bushing畫節圓和基圓
plot(coord4(:,1),coord4(:,2),'b:');
[coord5]=bushing(-rb2,rp+rp2,0.2);
plot(coord5(:,1),coord5(:,2),'k:');
[coord6]=bushing(-rp,0,0);%利用bushing畫節圓和基圓
plot(coord6(:,1),coord6(:,2),'b:');
[coord7]=bushing(-rb,0,0);
plot(coord7(:,1),coord7(:,2),'k:');
[coord8]=bushing(-rp3,rp+(2*rp2)+rp3,0);
plot(coord8(:,1),coord8(:,2),'b:');
[coord9]=bushing(-rb3,rp+(2*rp2)+rp3,0);
plot(coord9(:,1),coord9(:,2),'k:');
[coord10]=bushing(-rp4,rp+(2*rp2)+(2*rp3)+rp4,0);
plot(coord10(:,1),coord10(:,2),'b:');
[coord11]=bushing(-rb4,rp+(2*rp2)+(2*rp3)+rp4,0);
plot(coord11(:,1),coord11(:,2),'k:');
axis equal;
ang=0;
angp=ww*unit1;
while 1%利用while進行動畫繪製
rot1=rotate2D([xc1,yc1],ang,0,0);%進行轉角,產生新座標
rot2=rotate2D([xc2,yc2],-ang*(nn1/nn2),rp+rp2,0);
rot3=rotate2D([xc3,yc3],ang*(nn2/nn3),rp+(2*rp2)+rp3,0);
rot4=rotate2D([xc4,yc4],-ang*(nn2/nn3),rp+(2*rp2)+(2*rp3)+rp4,0);
set(pini,'xdata',rot1(:,1),'ydata',rot1(:,2));%分別畫出大小齒輪
set(gear,'xdata',rot2(:,1),'ydata',rot2(:,2));
set(gear2,'xdata',rot3(:,1),'ydata',rot3(:,2));
set(gear3,'xdata',rot4(:,1),'ydata',rot4(:,2));
drawnow; %繪製
pause(1/ww);
ang=ang+angp;
end
%程式結束

因此代入geartrain1(8,14,70,350,1750,25,400)可得影片如下

>>geartrain1(8,14,70,350,1750,25,400)

影片

令人驚訝的是,由於最後的兩個齒輪過於巨大,電腦無法承受如此巨大的運算量,因此顯示出斷斷續續的影片,並非影像擷取軟體所造成,由此可知簡單齒輪組之效益甚低,因此還是選擇複式齒輪組為優,而更複雜如行星,共軸,差速等齒輪系皆是從複式齒輪發展而來.


二、最得意的作業


在本學期中,我最感到得意的作業為第9次作業,由於在做第九次作業的過程當中,花費了大量的時間研究程式的內容,例如深刻

體會到老師在程式中的Euler化可以大幅簡化計算,節省電腦的運算資源,另外就是在解讀程式的過程中發現了sldlink有部分

程式碼問題即f=@(num,ndg),round(num*10^ndg)/10^ndg;等,也了解到就算只是微小的錯誤也會造成整個程式運作上出現嚴重

問題,另外便是在第9次作業中,滑塊分析牽涉到路徑,偏移量等等,因此做了很多不同的嘗試(例如不同驅動桿情況下的分析)
當然另外就是本次作業利用了許多介面專業的形式例如下圖


其中的第二個表格是在我們的目前的作業當中很少利用的,但是這種表示形式卻在論文等未來我們會面臨的報告形式非常常見,如果要製作必須使用其他軟體,但MATLAB卻可以讓我們直接顯示出來.也因此學習得了同時顯示多資訊的方法,在程式執行時,真有一種滿足的成就感.當然在分析的過程中,老師所教導的數學化的座標分析法,利用微分求得速度,加速度等資訊,也是整合了前幾次作業中的四連桿,端桿,動畫等等的內容,因此我對於此次作業最感得意.
另外,第5次作業中對於棒球投手手部運動學資訊的論文搜尋,也是由於突發奇想,想更進一步的探討,因此想辦法找到相關的資

訊,不過仍不如第9次作業中那麼完整.

心得:
學期快要結束,在本學期的課程中,十三次作業讓我們學到了非常多的內容,不僅僅是機動學,而MATLAB的應用也將會對未來有

極大的正面幫助(學長和其他科系的朋友也是如此認為),這種能夠親自動手做的經驗,雖然不是用機具實際製造,也已經可以初

步了解機械結構的奧秘,感謝老師這學期的指導!

2007年5月31日 星期四

Homework 12

第12次作業
b94611001 歐陽太閒

5/31日曾全程來上課。

齒輪是機構中最重要的一種元件,可以在很少損失的情況(worm除外)下傳遞動力至任意方向,本次作業要分析的是一組標準全齒輪齒輪之徑節=8,齒數為30T與48T,工作壓力角20度(也分析14.5及25度)


1.接觸線長度,與接觸比



接觸比(Contact ratio)即同時有幾對齒相互嚙合。數值越大力量分散較平均,接觸比最好大於1
以免出現未嚙合等現象

接觸比 mc = 接觸路徑長度/基周節

或者課本的


因此我們可以利用講義中程式:
[c_ratio, c_length,ad,pc,pb,r2,r3,ag]=contact_ratio(徑節,齒數1,齒數2,[壓力角]')

[c_ratio, c_length,ad,pc,pb,r2,r3,ag]=contact_ratio(8,30,48,14.5)
c_ratio = 接觸比
2.0308
c_length = 接觸長度
0.7721
ad = 齒冠
0.1250
pc = 周節
0.3927
pb = 基周節
0.3802
r2 = 齒輪2節圓直徑
3.7500
r3 = 齒輪3節圓直徑
6
ag =
12.6898 11.6797 24.3695 齒輪2的接近角/遠退角/作用角
7.9311 7.2998 15.2309 齒輪3的接近角/遠退角/作用角

[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 = 齒輪2節圓直徑
3.7500
r3 = 齒輪3節圓直徑
6
ag =
10.4850 9.9211 20.4061 齒輪2的接近角/遠退角/作用角
6.5532 6.2007 12.7538 齒輪3的接近角/遠退角/作用角


[c_ratio, c_length,ad,pc,pb,r2,r3,ag]=contact_ratio(8,30,48,25)
c_ratio = 接觸比
1.5028
c_length = 接觸長度
0.5349
ad = 齒冠
0.1250
pc = 周節
0.3927
pb = 基周節
0.3559
r2 = 齒輪2節圓直徑
3.7500
r3 = 齒輪3節圓直徑
6
ag =
9.1921 8.8419 18.0340 齒輪2的接近角/遠退角/作用角
5.7450 5.5262 11.2712 齒輪3的接近角/遠退角/作用角


2.節圓、基圓直徑



根據圖片

節圓(Pitch Circle)節面之正剖面,為代表齒輪的虛擬圓
R=齒數/(徑節)
基圓(Base Circle)用以產生漸開線的虛擬圓
Rb=R*cos(壓力角)


a.首先,節圓的計算
徑節=8,齒數=30,48

R2=30/8=3.7500
R3=48/8=6

b.基圓之計算(稍小於節圓)
1.壓力角=14.5

因此:

Rb2=3.7500*cos(14.5*pi/180)=3.6306
Rb3=6*cos(14.5*pi/180)=5.8089

draw_gear(8,30,14.5,360,0,0)




2.壓力角=20

Rb2=3.7500*cos(20*pi/180)=3.5238
Rb3=6*cos(20*pi/180)=5.6382




3.壓力角=25

Rb2=3.7500*cos(25*pi/180)=3.3987
Rb3=6*cos(25*pi/180)=5.4378



或者根據Gears Encyclopedia
(Pd/cos(helix angle))*cos(atan(tan(正壓力角)/cos(helix angle)))

Gears Encyclopedia

3.齒輪的干涉


根據老師的講義,兩齒輪關係如圖

利用MP>AP,可獲得幾何關係:

因此:



故根據講義/課本中所提供的公式

(N22+2N2 x N3)sin2>= 4 + 4N3

302 + 2(30)(48)sin2(20)> 4 + 4(48)

1236.89>196
不會發生干涉

若利用講義中的[x]=isinterf(phi,N1,N2)

>>[x]=isinterf(20,30,48)
x =
0

function [x]=isinterf(phi,N1,N2)
%% Test if the gear set exists an interference% phi:pressure angle, in degrees
% N1,N2:teeth of both gears
% x=0:no interference; x=1 interence existsx=0;
sinx=sin(phi*pi/180); %先計算好角度
if N2<N1,nn=N1; %判定大小決定是大齒輪或小齒輪
N1=N2;N2=nn;
end
if N1*(N1+2*N2)*sinx*sinx<4*(1+N2), %帶入公式
x=1;
end



4.draw_gear.m與動畫



繪製一齒輪需要極繁雜的程式,在ProE或者AutoCAD中都有plug-ins代勞,但我們這次為了了解程式的應用,故嘗試利用老師的draw_gear.m來繪製


另外,發現一個相當有趣的現象,即在漸開線齒輪繪製時,由於程式的360度重疊的關係(可能由於無法整除),故在轉動時會缺齒,重疊越多缺齒越多,而del(第二齒輪初始偏移量)似乎與徑節有關

function [coords]=draw_gear(Dp,N,phi,range,x0,y0)
Dp=節矩
N=齒數
phi=壓力角
range=繪出之部份
x0,y0=齒輪中心座標

此為一利用漸開線繪製齒輪的程式,因此我們可以暫時註解其plot,輸出其運算值,並寫成另一程式來進行本題目齒數30與齒數48T壓力角20之雙正齒輪運動動畫

因此利用
draw_gear.m
bushing.m
rotate2D.m


我們可以寫出程式如下:

程式結構
1.清除畫面及程式資訊
2.參數引入draw_gear.m
3.建立基本物件
a.利用bushing畫基座
b.建立齒輪
c.利用bushing畫節圓和基圓
4.利用while進行動畫繪製
a.轉角
b.畫出新位置


function move_gear(Dpitch,nn1,nn2,phi,ww)
%12.4 歐陽太閒 b94611001 本程式改寫自老師的 move2_rack.m
%本程式改寫自老師的move2_rack
%Dpitch=節矩,nn1=R2齒數,nn2=R3齒數,phi=壓力角,ww=nn1角速度

clf; %清除畫面

d2r=pi/180;%角徑轉換
unit1=0.01;%動畫單位
phir=phi*d2r;
pc=pi/Dpitch; %計算pc
title('作業12 作者:歐陽太閒 b94611001'); %資訊
xlabel('x-axis cm');
ylabel('y-axis cm');
hold on;
[coord,rp,rb]=draw_gear(Dpitch,nn1,phi,360,0,0); %將參數引入draw_gear.m,畫第一齒輪
[coord2,rp2,rb2]=draw_gear(Dpitch,nn2,phi,360,0,0); %將參數引入draw_gear.m,畫第二齒輪
xc1=coord(:,1);yc1=coord(:,2); %將計算結果引出
xc2=coord2(:,1);yc2=coord2(:,2);%將計算結果引出
del=3
coord2=rotate2D([coord2(:,1),coord2(:,2)],+del,0,0);
coord=bushing(rp/6,0,0); %利用bushing畫基座
coord2=bushing(rp2/6,rp+rp2,0);
xb1=coord(:,1);yb1=coord(:,2);
xb2=coord2(:,1);yb2=coord2(:,2);
plot(xb1,yb1,'r-'); %畫出大小齒輪基座
plot(xb2,yb2,'r-');
pini=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','r'); %建立handler
gear=line('xdata',[],'ydata',[],'erasemode','xor','linewidth',1,'color','b');

[coord3]=bushing(-rp2,rp+rp2,0.2); %利用bushing畫節圓和基圓
plot(coord3(:,1),coord3(:,2),'b:');
[coord4]=bushing(-rb2,rp+rp2,0.2);
plot(coord4(:,1),coord4(:,2),'k:');

[coord5]=bushing(-rp,0,0); %利用bushing畫節圓和基圓
plot(coord5(:,1),coord5(:,2),'b:');
[coord6]=bushing(-rb,0,0);
plot(coord6(:,1),coord6(:,2),'k:');



axis equal;
ang=0;
angp=ww*unit1;
while 1 %利用while進行動畫繪製
rot1=rotate2D([xc1,yc1],ang,0,0); %進行轉角,產生新座標
rot2=rotate2D([xc2,yc2],-ang*(nn1/nn2),rp+rp2,0);
set(pini,'xdata',rot1(:,1),'ydata',rot1(:,2)); %分別畫出大小齒輪
set(gear,'xdata',rot2(:,1),'ydata',rot2(:,2));
drawnow; %繪製
pause(1/ww);
ang=ang+angp;
end
%程式結束


因此我們代入

move_gear(8,30,48,20,100)

可得到
圖片

影片
影片


move_gear(8,30,48,14.5,100)

可得到
圖片

影片
影片



move_gear(8,30,48,25,100)


可得到
圖片

影片

影片